diff options
Diffstat (limited to 'src')
181 files changed, 15986 insertions, 14694 deletions
diff --git a/src/common/Makefile.nmake b/src/common/Makefile.nmake index e548273670..0ebeaaaf71 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 3b844f7993..6fc9fb3c47 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 */ /** @@ -1270,14 +1270,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; } diff --git a/src/common/address.h b/src/common/address.h index 0e2bbdcf88..9cbc32ce9b 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 */ /** diff --git a/src/common/aes.c b/src/common/aes.c index d8865d7116..f454a7f7b2 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 */ /** diff --git a/src/common/aes.h b/src/common/aes.h index fadeacc7ad..8ff28a7622 100644 --- a/src/common/aes.h +++ b/src/common/aes.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 */ /* Implements a minimal interface to counter-mode AES. */ diff --git a/src/common/compat.c b/src/common/compat.c index d0e516c2ce..3b15f8ad24 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 */ /** @@ -2758,7 +2758,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); diff --git a/src/common/compat.h b/src/common/compat.h index 9c544fa309..d2944e6f48 100644 --- a/src/common/compat.h +++ b/src/common/compat.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 */ #ifndef TOR_COMPAT_H @@ -53,13 +53,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,6 +74,10 @@ #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 @@ -132,6 +136,17 @@ extern INLINE double U64_TO_DBL(uint64_t x) { #define DBL_TO_U64(x) ((uint64_t) (x)) #endif +#if defined(_MSC_VER) +/* XXXX024 we should instead have a more general check for "Is enum 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)) @@ -538,10 +553,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) diff --git a/src/common/compat_libevent.c b/src/common/compat_libevent.c index 0d06c49c9f..200a7c65fb 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 */ /** @@ -54,7 +54,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 +76,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 +187,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 +261,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_INFO, 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 +359,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 +382,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 +404,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) @@ -511,7 +440,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()); diff --git a/src/common/compat_libevent.h b/src/common/compat_libevent.h index 68da472cfc..2472e2c49e 100644 --- a/src/common/compat_libevent.h +++ b/src/common/compat_libevent.h @@ -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 */ #ifndef TOR_COMPAT_LIBEVENT_H diff --git a/src/common/container.c b/src/common/container.c index d4a2f89c90..eec497a3e6 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 @@ -247,7 +247,7 @@ smartlist_strings_eq(const smartlist_t *sl1, const smartlist_t *sl2) * 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 +257,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 +277,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 diff --git a/src/common/container.h b/src/common/container.h index 0b3a3d1412..e247fb7ea6 100644 --- a/src/common/container.h +++ b/src/common/container.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 */ #ifndef TOR_CONTAINER_H @@ -35,13 +35,13 @@ 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_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); @@ -623,7 +623,7 @@ 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); diff --git a/src/common/crypto.c b/src/common/crypto.c index 39f5a4a642..70bd45299f 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 */ /** @@ -151,10 +151,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); } } } @@ -168,10 +169,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", + log_notice(LD_CRYPTO, "Using OpenSSL engine %s [%s] for %s", name?name:"?", id?id:"?", fn); } else { - log(LOG_INFO, LD_CRYPTO, "Using default implementation for %s", fn); + log_info(LD_CRYPTO, "Using default implementation for %s", fn); } } #endif @@ -1458,7 +1459,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) @@ -1505,7 +1506,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? */ + ENUM_BF(digest_algorithm_t) algorithm : 8; /**< Which algorithm is in use? */ }; /** Allocate and return a new digest object to compute SHA1 digests. @@ -2036,6 +2037,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 @@ -2174,8 +2185,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; @@ -2201,15 +2212,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); @@ -2218,7 +2232,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))); } @@ -2234,6 +2248,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 @@ -2272,22 +2345,16 @@ seed_weak_rng(void) tor_init_weak_random(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 }; @@ -2295,58 +2362,77 @@ 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); 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)); + seed_weak_rng(); + 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. */ @@ -2494,7 +2580,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. @@ -2553,7 +2639,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. @@ -2660,7 +2746,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 @@ -2673,7 +2759,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 @@ -2698,7 +2784,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 @@ -2711,7 +2797,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 diff --git a/src/common/crypto.h b/src/common/crypto.h index 4c5fa6ad97..08efc801d3 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 */ /** @@ -230,6 +230,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, @@ -238,12 +239,20 @@ 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); +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); @@ -257,7 +266,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); diff --git a/src/common/crypto_curve25519.c b/src/common/crypto_curve25519.c new file mode 100644 index 0000000000..3e4004db2e --- /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 + +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, 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 0000000000..652f1883c6 --- /dev/null +++ b/src/common/crypto_curve25519.h @@ -0,0 +1,68 @@ +/* Copyright (c) 2012-2013, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +#ifndef TOR_CRYPTO_CURVE25519_H +#define TOR_CRYPTO_CURVE25519_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 +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 +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 0000000000..93932f839c --- /dev/null +++ b/src/common/crypto_format.c @@ -0,0 +1,46 @@ +/* Copyright (c) 2012-2013, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +/* Formatting and parsing code for crypto-related data structures. */ + +#define CRYPTO_CURVE25519_PRIVATE +#include "orconfig.h" +#ifdef HAVE_SYS_STAT_H +#include <sys/stat.h> +#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 418d6e3dca..14a1443400 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 @@ -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 8f0bb698f9..d93534b69b 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/include.am b/src/common/include.am index 0fdc72057f..b796ebfae8 100644 --- a/src/common/include.am +++ b/src/common/include.am @@ -14,6 +14,28 @@ else libor_extra_source= endif +if BUILD_CURVE25519_DONNA +src_common_libcurve25519_donna_a_SOURCES=\ + src/ext/curve25519_donna/curve25519-donna.c +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 + +src_common_libcurve25519_donna_a_CFLAGS = + +if CURVE25519_ENABLED +libcrypto_extra_source=src/common/crypto_curve25519.c +endif + src_common_libor_a_SOURCES = \ src/common/address.c \ src/common/compat.c \ @@ -30,8 +52,10 @@ src_common_libor_a_SOURCES = \ src_common_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 + src/common/tortls.c \ + $(libcrypto_extra_source) src_common_libor_event_a_SOURCES = src/common/compat_libevent.c @@ -43,6 +67,7 @@ COMMONHEADERS = \ 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/mempool.h \ diff --git a/src/common/log.c b/src/common/log.c index 15df2e02f0..e196a11287 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 */ /** @@ -874,8 +874,10 @@ 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); diff --git a/src/common/memarea.c b/src/common/memarea.c index ef8a8d76bc..0ae0ccca1d 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 diff --git a/src/common/memarea.h b/src/common/memarea.h index 26c3e6dfe3..8b88585d35 100644 --- a/src/common/memarea.h +++ b/src/common/memarea.h @@ -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 */ /* Tor dependencies */ diff --git a/src/common/mempool.c b/src/common/mempool.c index 78d4da6f76..4389888760 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 */ diff --git a/src/common/mempool.h b/src/common/mempool.h index b01277df86..20312fb4c9 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 */ /** diff --git a/src/common/procmon.c b/src/common/procmon.c index 08fcfec49c..0a49689e3a 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 */ /** @@ -321,7 +321,7 @@ 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, + 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"); diff --git a/src/common/procmon.h b/src/common/procmon.h index 88d64d6a15..b9388e2e90 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/torgzip.c b/src/common/torgzip.c index da4136228e..4328c63c8b 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 */ /** diff --git a/src/common/torgzip.h b/src/common/torgzip.h index 921b232b0f..be1016445b 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 */ /** diff --git a/src/common/torint.h b/src/common/torint.h index 0db9cc7e24..a993d7649a 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 */ /** @@ -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 cc1fa64071..8675d7b6e7 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 */ /** @@ -153,7 +153,6 @@ 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_; diff --git a/src/common/tortls.c b/src/common/tortls.c index 1010425e13..94cedba24b 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 */ /** @@ -147,6 +147,12 @@ typedef struct tor_tls_context_t { #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; + /** Holds a SSL object and its associated data. Members are only * accessed from within tortls.c. */ @@ -156,12 +162,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. */ + ENUM_BF(tor_tls_state_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 @@ -331,11 +334,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); } @@ -359,35 +362,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. */ @@ -440,12 +427,12 @@ tor_tls_get_error(tor_tls_t *tls, int r, int extra, if (extra&CATCH_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)); @@ -456,7 +443,7 @@ tor_tls_get_error(tor_tls_t *tls, int r, int extra, 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", + 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; @@ -1237,7 +1224,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; } } @@ -2285,7 +2272,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; } @@ -2335,7 +2322,7 @@ log_cert_lifetime(int severity, const X509 *cert, const char *problem) struct tm tm; 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); @@ -2360,7 +2347,7 @@ log_cert_lifetime(int severity, const X509 *cert, const char *problem) strftime(mytime, 32, "%b %d %H:%M:%S %Y UTC", tor_gmtime_r(&now, &tm)); - log(severity, LD_GENERAL, + tor_log(severity, LD_GENERAL, "(certificate lifetime runs from %s through %s. Your time is %s.)", s1,s2,mytime); @@ -2581,7 +2568,7 @@ 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 df3ab87a17..1ae6344d04 100644 --- a/src/common/tortls.h +++ b/src/common/tortls.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 */ #ifndef TOR_TORTLS_H diff --git a/src/common/util.c b/src/common/util.c index 61d09aa4a8..93e2ba8e14 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,7 +20,6 @@ #define UTIL_PRIVATE #include "util.h" #include "torlog.h" -#undef log #include "crypto.h" #include "torint.h" #include "container.h" @@ -323,8 +322,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) @@ -2375,8 +2374,10 @@ read_file_to_str(const char *filename, int flags, struct stat *stat_out) } #endif - if ((uint64_t)(statbuf.st_size)+1 >= SIZE_T_CEILING) + if ((uint64_t)(statbuf.st_size)+1 >= SIZE_T_CEILING) { + close(fd); return NULL; + } string = tor_malloc((size_t)(statbuf.st_size+1)); @@ -4919,7 +4920,8 @@ tor_check_port_forwarding(const char *filename, status = tor_spawn_background(filename, argv, NULL, &child_handle); #endif - tor_free(argv); + tor_free_((void*)argv); + argv=NULL; if (PROCESS_STATUS_ERROR == status) { log_warn(LD_GENERAL, "Failed to start port forwarding helper %s", diff --git a/src/common/util.h b/src/common/util.h index 005a3f37cd..911b1b5a37 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 */ /** diff --git a/src/config/geoip b/src/config/geoip index 7b7055b2e3..df45034037 100644 --- a/src/config/geoip +++ b/src/config/geoip @@ -1,4 +1,4 @@ -# Last updated based on December 5 2012 Maxmind GeoLite Country +# Last updated based on January 2 2013 Maxmind GeoLite Country # Visit the following URL for details on the conversion: # https://gitweb.torproject.org/tor.git/blob/HEAD:/src/config/README.geoip 16777216,16777471,AU @@ -71,7 +71,9 @@ 30408704,33488895,KR 33488896,33554431,AU 33554432,34603007,FR -34603008,35127295,EU +34603008,34911743,EU +34911744,34911999,AT +34912000,35127295,EU 35127296,35651583,GB 35651584,36700159,IT 36700160,36962303,AE @@ -80,17 +82,13 @@ 37486592,37748735,RU 37748736,38273023,SE 38273024,38797311,KZ -38797312,38802175,PT -38802176,38802431,FR -38802432,39059455,PT +38797312,39059455,PT 39059456,39321599,GR 39321600,39583743,SA 39583744,39845887,RU 39845888,40370175,GB 40370176,40894463,DK -40894464,41005055,IT -41005056,41005311,US -41005312,41418751,IT +40894464,41418751,IT 41418752,41943039,GB 41943040,42205183,DK 42205184,42467327,KZ @@ -109,9 +107,9 @@ 49807360,50331647,SE 50331648,57083940,US 57083941,57083941,BE -57083942,68257567,US -68257568,68257599,CA -68257600,68296775,US +57083942,68259583,US +68259584,68259599,CA +68259600,68296775,US 68296776,68296783,MX 68296784,68298887,US 68298888,68298895,CA @@ -173,9 +171,7 @@ 71667634,71667634,DE 71667635,71667656,US 71667657,71667657,NL -71667658,72303007,US -72303008,72303039,CA -72303040,72348895,US +71667658,72348895,US 72348896,72348927,CA 72348928,83886079,US 83886080,83951615,SY @@ -251,7 +247,8 @@ 85403648,85405695,FR 85405696,85407743,RU 85407744,85409791,FI -85409792,85417983,CH +85409792,85411839,IS +85411840,85417983,CH 85417984,85422079,RU 85422080,85424127,IR 85424128,85426175,TR @@ -347,7 +344,8 @@ 86507520,86573055,ES 86573056,86638591,RO 86638592,86671359,RU -86671360,86673407,GB +86671360,86671871,JE +86671872,86673407,GB 86673408,86675455,DE 86675456,86677503,IT 86677504,86679551,FR @@ -382,7 +380,12 @@ 86812672,86814719,RU 86814720,86816767,SE 86816768,86818815,EE -86818816,86822911,PT +86818816,86819071,SE +86819072,86819327,PT +86819328,86819583,SE +86819584,86821375,PT +86821376,86821887,SE +86821888,86822911,PT 86822912,86824959,AT 86824960,86827007,LV 86827008,86831103,GB @@ -442,7 +445,15 @@ 87638016,87640063,UA 87640064,87642111,RS 87642112,87646207,GB -87646208,87654399,FR +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 87654400,87670783,PL 87670784,87672831,DE 87672832,87674879,CH @@ -660,8 +671,8 @@ 93681664,93683711,UA 93683712,93685759,AT 93685760,93687807,BE -93687808,93690367,RU -93690368,93691903,GB +93687808,93690879,RU +93690880,93691903,GB 93691904,93693951,PL 93693952,93695999,IE 93696000,93700095,FR @@ -745,7 +756,8 @@ 95170560,95174655,GB 95174656,95191039,IT 95191040,95195135,CH -95195136,95197183,PT +95195136,95195391,SE +95195392,95197183,PT 95197184,95203327,GB 95203328,95205375,FR 95205376,95207423,PL @@ -927,7 +939,11 @@ 136239104,136415487,US 136415488,136415743,CA 136415744,167772159,US -184549376,201859071,US +184549376,201620303,US +201620304,201620311,CA +201620312,201674095,US +201674096,201674111,CA +201674112,201859071,US 201859072,201859087,VI 201859088,201897983,US 201897984,201898239,PR @@ -941,19 +957,18 @@ 202621480,202621487,PR 202621488,202621495,US 202621496,202621503,PR -202621504,202621703,US -202621704,202621711,PR -202621712,202625287,US +202621504,202625287,US 202625288,202625295,PR -202625296,202706431,US +202625296,202696783,US +202696784,202696791,PR +202696792,202706431,US 202706432,202706943,PR 202706944,202935551,US 202935552,202935807,PR -202935808,203197063,US -203197064,203197071,CA -203197072,203625391,US +202935808,203625391,US 203625392,203625399,PR -203625400,203658303,US +203625400,203658287,US +203658288,203658303,VI 203658304,203658367,PR 203658368,203658415,US 203658416,203658423,VI @@ -967,9 +982,9 @@ 203658944,203658951,PR 203658952,203658967,US 203658968,203658991,VI -203658992,203659071,US -203659072,203659135,VI -203659136,203850679,US +203658992,203659007,US +203659008,203659263,VI +203659264,203850679,US 203850680,203850687,CA 203850688,204046335,US 204046336,204047103,PR @@ -979,9 +994,7 @@ 204047256,204047263,VI 204047264,204047311,US 204047312,204047335,VI -204047336,204047391,US -204047392,204047423,VI -204047424,204047439,US +204047336,204047439,US 204047440,204047455,VI 204047456,204047463,US 204047464,204047471,VI @@ -1011,7 +1024,11 @@ 205953312,205953319,PR 205953320,205953327,US 205953328,205953351,PR -205953352,209783247,US +205953352,208651559,US +208651560,208651567,PR +208651568,208651639,US +208651640,208651647,PR +208651648,209783247,US 209783248,209783255,CA 209783256,209783679,US 209783680,209783807,CA @@ -1019,7 +1036,11 @@ 209784952,209784959,CA 209784960,209788767,US 209788768,209788783,CA -209788784,209809407,US +209788784,209789959,US +209789960,209789967,FR +209789968,209799007,US +209799008,209799031,CA +209799032,209809407,US 209809408,209809471,CA 209809472,209809599,US 209809600,209809663,CA @@ -1029,11 +1050,7 @@ 209845144,209845151,DE 209845152,209867103,US 209867104,209867111,CA -209867112,209988527,US -209988528,209988535,VI -209988536,210090111,US -210090112,210090119,PR -210090120,210458623,US +209867112,210458623,US 210458624,210458631,PR 210458632,210785791,US 210785792,210786303,BO @@ -1041,19 +1058,23 @@ 211126784,211126911,PR 211126912,211263999,US 211264000,211264255,SA -211264256,211410031,US -211410032,211410039,PR -211410040,211410127,US -211410128,211410135,PR -211410136,211597055,US +211264256,211597055,US 211597056,211597071,VI -211597072,212122039,US +211597072,211597375,US +211597376,211597439,VI +211597440,211597719,US +211597720,211597727,VI +211597728,211597743,PR +211597744,211597759,US +211597760,211597775,PR +211597776,211597791,VI +211597792,212122039,US 212122040,212122047,PR -212122048,212267567,US -212267568,212267575,VI -212267576,212491249,US +212122048,212491249,US 212491250,212491250,US -212491251,212787199,US +212491251,212733527,US +212733528,212733535,PR +212733536,212787199,US 212787200,212788223,PR 212788224,212788479,US 212788480,212788607,VI @@ -1081,7 +1102,10 @@ 212791448,212791455,US 212791456,212791479,VI 212791480,212791807,PR -212791808,212792063,VI +212791808,212791815,US +212791816,212791871,VI +212791872,212791935,US +212791936,212792063,VI 212792064,212792191,US 212792192,212792199,PR 212792200,212792215,VI @@ -1110,19 +1134,13 @@ 212794912,212794943,PR 212794944,212794999,US 212795000,212795007,VI -212795008,212838529,US -212838530,212838531,PR -212838532,213579471,US -213579472,213579479,PR -213579480,213895679,US +212795008,213895679,US 213895680,213895743,VI 213895744,213923839,US 213923840,213924863,PR 213924864,213925631,US 213925632,213925887,PR -213925888,213936895,US -213936896,213936903,PR -213936904,214185215,US +213925888,214185215,US 214185216,214185471,PR 214185472,214185983,US 214185984,214187007,PR @@ -1163,7 +1181,17 @@ 214698656,214698919,PR 214698920,214698927,US 214698928,214699231,PR -214699232,214699519,US +214699232,214699271,US +214699272,214699279,VI +214699280,214699303,US +214699304,214699311,VI +214699312,214699335,PR +214699336,214699367,VI +214699368,214699383,US +214699384,214699455,VI +214699456,214699471,US +214699472,214699487,VI +214699488,214699519,US 214699520,214699647,PR 214699648,214699775,VI 214699776,214699783,PR @@ -1187,13 +1215,19 @@ 215001344,215001599,VI 215001600,215002111,US 215002112,215002127,VI -215002128,216627287,US +215002128,216417663,US +216417664,216417727,PR +216417728,216627287,US 216627288,216627295,PR -216627296,216637639,US -216637640,216637647,PR -216637648,218955263,US -218955264,218955519,CA -218955520,219187465,US +216627296,216996407,US +216996408,216996415,PR +216996416,216996543,US +216996544,216996559,PR +216996560,217046775,US +217046776,217046783,PR +217046784,218955263,US +218955264,218955391,CA +218955392,219187465,US 219187466,219187467,EU 219187468,219249919,US 219249920,219250175,GB @@ -1210,7 +1244,6 @@ 234947584,234950655,JP 234950656,234951679,AU 234951680,234952703,HK -234952704,234954751,JP 234954752,234961663,NZ 234961664,234961919,US 234961920,234971135,NZ @@ -1256,9 +1289,9 @@ 247472128,247479295,JP 247479296,247480319,CN 247480320,247482367,MY -247482368,247482623,PG -247482624,247482879,AU -247482880,247483391,PG +247482368,247482879,PG +247482880,247483135,AU +247483136,247483391,PG 247483392,247484415,CN 247484416,247488511,KR 247488512,247496703,JP @@ -1289,9 +1322,9 @@ 265529600,265529855,AP 265529856,265545983,US 265545984,265546239,CN -265546240,266062079,US -266062080,266062335,IN -266062336,266070271,US +265546240,266059775,US +266059776,266067967,IN +266067968,266070271,US 266070272,266070527,AU 266070528,266578175,US 266578176,266578431,CA @@ -1299,9 +1332,9 @@ 266586368,266586623,CA 266586624,266598655,US 266598656,266598911,BR -266598912,288224255,US -288224256,288224767,CA -288224768,289406975,US +266598912,288195071,US +288195072,288198655,CA +288198656,289406975,US 289406976,289603583,IE 289603584,289628415,GB 289628416,289628671,US @@ -1356,45 +1389,17 @@ 290423808,290424831,SE 290424832,290513663,US 290513664,290513919,MY -290513920,290595839,US -290595840,290596095,SG -290596096,290856959,US -290856960,290865151,AU -290865152,291361279,US -291361280,291361535,CN -291361536,300440575,US -300440576,300440831,GB -300440832,300458751,US -300458752,300459007,GB -300459008,300477951,US -300477952,300478207,AU -300478208,300479743,US -300479744,300479999,GB -300480000,300505599,US -300505600,300505855,GB -300505856,300512255,US -300512256,300513279,CA -300513280,300520447,US -300520448,300520703,GB -300520704,300521215,US -300521216,300521471,DE -300521472,300537599,US -300537600,300537855,CA -300537856,344260607,US +290513920,344260607,US 344260608,344261119,GB 344261120,344261778,US 344261779,344261779,EU 344261780,344262655,US 344262656,344262911,GB -344262912,344264703,US -344264704,344264959,DK -344264960,344268817,US +344262912,344268817,US 344268818,344268818,EU -344268819,344270847,US -344270848,344271103,GB -344271104,344276991,US -344276992,344277247,NL -344277248,344588543,US +344268819,344270860,US +344270861,344270861,GB +344270862,344588543,US 344588544,344589055,GB 344589056,344592895,US 344592896,344592945,GB @@ -1423,7 +1428,9 @@ 344881152,344881407,IN 344881408,344977407,US 344977408,344977663,IN -344977664,386924543,US +344977664,386862079,US +386862080,386862335,JP +386862336,386924543,US 386924544,387055615,CA 387055616,387121151,PR 387121152,387132143,US @@ -1469,6 +1476,7 @@ 406216704,406241279,US 406241280,406257663,PR 406274048,406290431,PR +406290432,406298623,US 406298624,406306815,PR 406306816,406323199,CA 406323200,406388735,US @@ -1503,9 +1511,27 @@ 410174844,410174847,US 410174848,410177735,CA 410177736,410177743,US -410177744,410178463,CA -410178464,410178467,US -410178468,410189823,CA +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 410189824,410648575,US 410648576,410714111,CA 410714112,411164671,US @@ -1521,9 +1547,7 @@ 411664384,411680767,US 411680768,411682391,CA 411682392,411682399,US -411682400,411682975,CA -411682976,411682983,US -411682984,411683863,CA +411682400,411683863,CA 411683864,411683871,US 411683872,411684599,CA 411684600,411684607,US @@ -1724,7 +1748,9 @@ 460279808,460283903,AU 460283904,460292095,KR 460292096,460300287,JP -460300288,460312575,HK +460300288,460300799,HK +460300800,460300927,JP +460300928,460312575,HK 460312576,460320767,SG 460320768,460324863,AU 460324864,460341247,CN @@ -1754,10 +1780,7 @@ 460596224,460597247,AU 460598272,460599295,CN 460599296,460601343,IN -460601344,460601491,US -460601492,460601495,AF -460601496,460601599,US -460601600,460602367,AF +460601344,460602367,AF 460602368,460603391,KH 460603392,460718079,KR 460718080,460722175,JP @@ -1833,8 +1856,7 @@ 461574144,461578239,JP 461578240,461586431,MY 461586432,461602815,AU -461602816,461606911,GB -461606912,461619199,TH +461602816,461619199,TH 461619200,461623295,JP 461623296,461625343,IN 461625344,461626367,AU @@ -1887,7 +1909,17 @@ 520421376,520486911,AT 520486912,520493567,GB 520493568,520494079,GB -520494080,520503295,GB +520494080,520495871,GB +520495872,520496383,DE +520496384,520497151,GB +520497152,520497407,FR +520497408,520497663,GB +520497664,520498175,FR +520498176,520498943,GB +520498944,520499199,FR +520499200,520500479,GB +520500480,520500735,DE +520500736,520503295,GB 520503296,520505343,PL 520505344,520507391,GB 520507392,520511487,TR @@ -1989,7 +2021,10 @@ 521676800,521678847,ES 521678848,521680895,NL 521680896,521682943,EE -521682944,521687039,SE +521682944,521683679,SE +521683680,521683695,FI +521683696,521683711,NO +521683712,521687039,SE 521687040,521689087,GB 521689088,521691135,BY 521691136,521693183,DE @@ -2194,12 +2229,11 @@ 528723968,528726015,ES 528726016,528736255,RU 528736256,528740351,SK -528740352,528742399,IT +528740352,528742143,IT +528742144,528742399,US 528742400,528744447,RU 528744448,528746495,GB -528746496,528748543,RO 528748544,528752639,CZ -528752640,528760831,RO 528760832,528762879,PL 528762880,528764927,RU 528764928,528769023,RO @@ -2233,7 +2267,9 @@ 528941056,528943103,RO 528943104,528945151,RU 528945152,528949247,PL -528949248,528973823,RU +528949248,528967679,RU +528967680,528968703,UA +528968704,528973823,RU 528973824,528982015,UA 528982016,528986111,PL 528986112,528988159,UA @@ -2249,14 +2285,11 @@ 529596416,529661951,TR 529661952,529727487,GE 529727488,529793023,HR -529793024,529797119,RU -529797120,529801215,CZ -529801216,529813503,RU -529813504,529819647,CZ -529819648,529821695,RU +529793024,529821695,RU 529821696,529856511,CZ 529856512,529857535,KZ -529857536,529858559,CZ +529857536,529857791,UA +529857792,529858559,CZ 529858560,529924095,NL 529924096,529989631,DE 529989632,530055167,NL @@ -2264,9 +2297,7 @@ 530120704,530186239,CY 530186240,530251775,IL 530251776,530317311,TR -530317312,530399231,IT -530399232,530407423,US -530407424,530579455,IT +530317312,530579455,IT 530579456,530710527,NL 530710528,530841599,RU 530841600,530972671,CH @@ -2279,7 +2310,9 @@ 531183616,531185663,NL 531185664,531193855,TR 531193856,531194367,IE -531194368,531195903,GB +531194368,531194879,GB +531194880,531195391,IE +531195392,531195903,GB 531195904,531197951,IT 531197952,531199999,GB 531200000,531202047,RU @@ -2320,15 +2353,10 @@ 531402752,531404799,LU 531404800,531406847,FI 531406848,531408895,FR -531408896,531410943,IM -531410944,531412479,PL -531412480,531412735,IM -531412736,531413503,PL -531413504,531415039,IM +531408896,531415039,PL 531415040,531423231,RU 531423232,531425279,NO -531425280,531426303,SE -531426304,531427327,FR +531425280,531427327,FR 531427328,531431423,GB 531431424,531496959,RO 531496960,531628031,PL @@ -2355,8 +2383,7 @@ 532152320,532168703,DE 532168704,532185087,NL 532185088,532201471,IR -532201472,532201727,AZ -532201728,532221951,RU +532201472,532221951,RU 532221952,532223999,IT 532224000,532226047,NO 532226048,532234239,GB @@ -2404,7 +2431,8 @@ 532740096,532742143,KG 532742144,532746239,GB 532746240,532750335,IT -532750336,532752383,SM +532750336,532752127,SM +532752128,532752383,IT 532752384,532754431,BE 532754432,532756479,FR 532756480,532758527,IT @@ -2428,9 +2456,7 @@ 532801536,532803583,DK 532803584,532805631,FR 532805632,532807679,SE -532807680,532957583,IT -532957584,532957599,US -532957600,533200895,IT +532807680,533200895,IT 533200896,533233663,TR 533233664,533250047,IE 533250048,533254143,RU @@ -2462,9 +2488,7 @@ 533725184,533807103,SE 533807104,533811199,LT 533811200,533815295,DE -533815296,533818367,CY -533818368,533818879,GB -533818880,533819391,CY +533815296,533819391,CY 533819392,533823487,DE 533823488,533825535,BE 533825536,533831679,IS @@ -2476,7 +2500,6 @@ 533858304,533859231,HU 533859232,533859263,TR 533859264,533860351,HU -533860352,533862399,DE 533862400,533864447,GB 533864448,533889023,TR 533889024,533891071,GB @@ -2500,9 +2523,7 @@ 533987328,534118399,DE 534118400,534151167,KW 534151168,534183935,DE -534183936,534233599,RO -534233600,534233855,IT -534233856,534249471,RO +534183936,534249471,RO 534249472,534253567,GB 534253568,534257663,FR 534257664,534259711,SE @@ -2560,40 +2581,10 @@ 534767616,534769663,HU 534769664,534773759,IT 534773760,536870911,DE -536870912,539623999,US -539624000,539624031,NL -539624032,539624567,US -539624568,539624575,IE -539624576,539624577,US +536870912,539623423,US +539623424,539624577,NL 539624578,539624578,EU -539624579,539624703,US -539624704,539624735,GB -539624736,539624743,NL -539624744,539624751,GB -539624752,539624767,NL -539624768,539624775,US -539624776,539624799,GB -539624800,539624831,US -539624832,539624959,IE -539624960,539625087,US -539625088,539625119,GB -539625120,539625135,US -539625136,539625151,NL -539625152,539625391,US -539625392,539625407,GB -539625408,539626495,US -539626496,539626543,GB -539626544,539627127,US -539627128,539627135,SE -539627136,539627231,US -539627232,539627247,JP -539627248,539627263,CW -539627264,539627391,US -539627392,539627399,JP -539627400,539627407,IE -539627408,539627423,JP -539627424,539627503,US -539627504,539627519,NL +539624579,539627519,NL 539627520,539656191,US 539656192,539660287,IN 539660288,540687231,US @@ -2602,91 +2593,21 @@ 540737536,540737757,BZ 540737758,540737758,BR 540737759,540737791,BZ -540737792,540738047,BR -540738048,540750175,BZ +540737792,540737919,BR +540737920,540750175,BZ 540750176,540750207,MX 540750208,540750239,BZ 540750240,540750255,MX -540750256,540753919,BZ -540753920,540754175,AR -540754176,540762111,BZ -540762112,540762367,CL -540762368,540778495,BZ -540778496,540786687,BR -540786688,540803071,BZ -540803072,540811791,US -540811792,540811799,JP -540811800,540811871,US -540811872,540811903,GB -540811904,540811935,US -540811936,540811967,DE -540811968,540811983,JP -540811984,540811991,US -540811992,540811999,DE -540812000,540812295,US -540812296,540812303,SG -540812304,540812319,DE -540812320,540812503,US -540812504,540812511,SG -540812512,540812719,US -540812720,540812727,SG -540812728,540812735,US -540812736,540812743,SG -540812744,540812751,NL -540812752,540812767,SG -540812768,540812775,US -540812776,540812783,NL -540812784,540813055,US -540813056,540813063,SG -540813064,540813071,US -540813072,540813103,NL -540813104,540813119,US -540813120,540813183,SG -540813184,540813247,NL -540813248,540813287,US -540813288,540813295,DE -540813296,540813303,SG -540813304,540813311,US -540813312,540813567,NL -540813568,540813639,DE -540813640,540813671,TW -540813672,540813695,US -540813696,540814015,TW -540814016,540814079,US -540814080,540814271,TW -540814272,540814279,DE -540814280,540814327,US -540814328,540814335,IN +540750256,540803071,BZ +540803072,540811263,US +540811264,540814335,SG 540814336,540814591,AP -540814592,540814719,US -540814720,540814735,SG -540814736,540815124,US -540815125,540815126,SG -540815127,540815168,US -540815169,540815182,SG -540815183,540819455,US -540819456,540823551,CA -540823552,540826671,US -540826672,540826719,CA -540826720,540827135,US -540827136,540827263,CA -540827264,540827295,US -540827296,540827311,CA -540827312,540827359,US -540827360,540827375,CA -540827376,540827391,US -540827392,540827647,CA -540827648,540829183,US -540829184,540829439,CA -540829440,540829695,US -540829696,540829951,CA -540829952,540830511,US -540830512,540830527,CA -540830528,540830559,US -540830560,540830575,CA -540830576,540830623,US -540830624,540830975,CA -540830976,543690751,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 @@ -2727,7 +2648,9 @@ 543834112,543835135,GB 543835136,543835647,FR 543835648,543836159,US -543836160,543838207,FR +543836160,543836671,FR +543836672,543837183,US +543837184,543838207,FR 543838208,543840255,US 543840256,543841279,BE 543841280,543842303,US @@ -2781,25 +2704,15 @@ 543878656,543880191,IT 543880192,543881727,NL 543881728,543883263,GB -543883264,544249855,US -544249856,544250111,GB -544250112,544432127,US -544432128,544436223,CA -544436224,545712127,US -545712128,545714175,PR -545714176,548646399,US -548646400,548646911,PR -548646912,586973439,US -586973440,586973695,CA -586973696,586975999,US +543883264,548608767,US +548608768,548609023,PR +548609024,548616191,US +548616192,548618239,PR +548618240,586975999,US 586976000,586976255,AP -586976256,586977023,US -586977024,586977279,AU -586977280,587006719,US +586976256,587006719,US 587006720,587006975,GB -587006976,587039487,US -587039488,587039743,NO -587039744,603979775,US +587006976,603979775,US 603979776,603980799,CN 603980800,603981823,NP 603981824,604110847,CN @@ -2897,8 +2810,9 @@ 621928448,621932543,DE 621932544,621934591,UA 621934592,621936639,SE -621936640,621969407,RU -621969408,621971455,RO +621936640,621939455,RU +621939456,621940479,GE +621940480,621969407,RU 621971456,621971967,IM 621971968,621973503,GB 621973504,621975551,IE @@ -3041,9 +2955,7 @@ 624005120,624007167,IR 624007168,624009215,DE 624009216,624025599,RU -624025600,624026111,NL -624026112,624026367,DE -624026368,624027647,NL +624025600,624027647,NL 624027648,624029695,FR 624029696,624033791,SE 624033792,624164863,DE @@ -3370,9 +3282,7 @@ 630736896,630738943,TR 630738944,630743039,ES 630743040,630751231,SK -630751232,630757375,ES -630757376,630757631,GB -630757632,630759423,ES +630751232,630759423,ES 630759424,630767615,IR 630767616,630783999,GB 630784000,630802431,RU @@ -3415,7 +3325,9 @@ 633098240,633100287,HU 633100288,633102335,FR 633102336,633110527,GB -633110528,633143295,CZ +633110528,633134079,CZ +633134080,633135103,SK +633135104,633143295,CZ 633143296,633208831,PT 633208832,633241599,RU 633241600,633274367,PL @@ -3467,9 +3379,12 @@ 634204160,634206207,RU 634206208,634208255,GB 634208256,634216447,RU -634216448,634217983,HU -634217984,634218495,HR -634218496,634220543,HU +634216448,634217471,HR +634217472,634218239,HU +634218240,634218495,HR +634218496,634218751,HU +634218752,634219007,HR +634219008,634220543,HU 634220544,634222591,IQ 634222592,634224639,DK 634224640,634388479,IT @@ -3548,7 +3463,7 @@ 635717632,635719679,NL 635719680,635723775,RU 635723776,635725823,ES -635725824,635727871,NO +635725824,635727871,US 635727872,635729919,RU 635729920,635748351,DE 635748352,635764735,IE @@ -3578,10 +3493,12 @@ 636162048,636166143,IR 636166144,636168191,ES 636168192,636170239,GB -636170240,636170495,AT +636170240,636170495,PL 636170496,636170751,IS 636170752,636171007,CH -636171008,636171824,AT +636171008,636171263,AT +636171264,636171519,CL +636171520,636171824,AT 636171825,636171825,GB 636171826,636172031,AT 636172032,636172287,IM @@ -3604,7 +3521,9 @@ 636952576,636956671,NL 636956672,636958719,IT 636958720,636960767,PL -636960768,636968959,DE +636960768,636967935,DE +636967936,636968191,IT +636968192,636968959,DE 636968960,636975103,TR 636975104,636977151,ES 636977152,637140991,PL @@ -3621,8 +3540,8 @@ 637302784,637304831,NL 637304832,637313023,CH 637313024,637317119,EU -637317120,637317375,ES -637317376,637319167,CH +637317120,637318143,ES +637318144,637319167,CH 637319168,637321215,AT 637321216,637323263,GB 637323264,637325311,FR @@ -3638,14 +3557,14 @@ 641741056,641741311,US 641741312,641744895,CA 641744896,641761279,US -641761280,641761535,CA -641761536,641762815,US -641762816,641763071,CA -641763072,641765375,US -641765376,641765887,CA -641765888,641826815,US +641761280,641765887,CA +641765888,641766399,US +641766400,641767423,CA +641767424,641826815,US 641826816,641827839,MX -641827840,642695167,US +641827840,642088959,US +642088960,642097151,CA +642097152,642695167,US 642695168,642696191,US 642696192,642793471,US 642793472,642795519,CA @@ -3655,62 +3574,48 @@ 642797056,642797567,CA 642797568,642801663,US 642801664,642809855,CA -642809856,643875071,US +642809856,642924543,US +642924544,642926591,MX +642926592,643875071,US 643875072,643875327,US -643875328,644042751,US -644042752,644043007,IR -644043008,644048127,US +643875328,644048127,US 644048128,644048383,US 644048384,644049151,US 644049152,644049407,US 644049408,644055039,US -644055040,644055807,CA -644055808,644056063,US -644056064,644056575,CA -644056576,644057087,US -644057088,644057599,CA -644057600,644058111,US -644058112,644058975,CA -644058976,644058991,US -644058992,644059135,CA +644055040,644056047,CA +644056048,644056063,US +644056064,644059135,CA 644059136,644059391,CA -644059392,644059647,CA -644059648,644060671,US -644060672,644061183,CA -644061184,644062463,US -644062464,644062719,CA -644062720,644063231,US -644063232,644064767,CA -644064768,644066559,US -644066560,644066815,CA -644066816,644067071,US -644067072,644067711,CA -644067712,644093439,US +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,644236031,US -644236032,644236287,CA -644236288,644237311,US -644237312,644237567,CA -644237568,644239359,US -644239360,644240383,CA -644240384,644268671,US -644268672,644268735,CA -644268736,644323391,US +644122112,644235263,US +644235264,644243455,CA +644243456,644268543,US +644268544,644268799,CA +644268800,644323391,US 644323392,644323407,CA -644323408,644389375,US -644389376,644389631,CA -644389632,644389759,US -644389760,644390911,CA -644390912,644399103,US -644399104,644399359,CA -644399360,644403199,US +644323408,644388863,US +644388864,644390911,CA +644390912,644403199,US 644403200,644403711,CA -644403712,644408063,US +644403712,644403967,US +644403968,644404223,CA +644404224,644408063,US 644408064,644408319,CA -644408320,644414207,US -644414208,644414463,CA +644408320,644413439,US +644413440,644414463,CA 644414464,644422911,US 644422912,644423423,JP 644423424,644569087,US @@ -3720,43 +3625,33 @@ 644583424,644628479,US 644628480,644636671,CA 644636672,644718591,US -644718592,644720639,CA -644720640,644759551,US +644718592,644722687,CA +644722688,644759551,US 644759552,644767743,CA 644767744,644833279,US -644833280,644834303,CA -644834304,644834815,US -644834816,644835327,CA -644835328,644836351,US -644836352,644837375,CA -644837376,644838399,US -644838400,644841471,CA -644841472,644875519,US -644875520,644875775,CA -644875776,644881919,US -644881920,644882141,CA -644882142,644882142,US -644882143,644882175,CA -644882176,644890623,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,644986879,CA -644986880,644987647,US -644987648,644988927,CA +644980736,644988927,CA 644988928,645001215,US 645001216,645003263,US 645003264,645185535,US 645185536,645189631,CA 645189632,645218303,US -645218304,645220351,CA -645220352,645220863,US -645220864,645224447,CA -645224448,645225471,US -645225472,645225727,CA -645225728,645226495,US -645226496,645234687,CA +645218304,645234687,CA 645234688,645358271,US 645358272,645358335,US 645358336,645361663,US @@ -3764,14 +3659,14 @@ 645361920,645362175,US 645362176,645362431,US 645362432,645482495,US -645482496,645482751,CA -645482752,645483263,US -645483264,645483519,CA -645483520,645527551,US -645527552,645529599,CA +645482496,645484543,CA +645484544,645525503,US +645525504,645529599,CA 645529600,645547007,US 645547008,645547263,CA -645547264,645644287,US +645547264,645576703,US +645576704,645576959,CA +645576960,645644287,US 645644288,645645311,MX 645645312,645703679,US 645703680,645705727,MX @@ -3782,9 +3677,7 @@ 645736704,645810943,US 645810944,645811199,US 645811200,645873663,US -645873664,645879039,CA -645879040,645879295,US -645879296,645881855,CA +645873664,645881855,CA 645881856,654311423,US 654311424,654311679,CN 654311680,654311935,AU @@ -3839,9 +3732,7 @@ 692486144,692518911,AO 692518912,692551679,ZA 692551680,692584447,NG -692584448,692588543,AO -692588544,692588799,PT -692588800,692600831,AO +692584448,692600831,AO 692600832,692609023,EG 692609024,692617215,ZM 692617216,692625407,ZA @@ -4058,9 +3949,7 @@ 693370880,693403647,ZA 693403648,693411839,KE 693411840,693420031,NG -693420032,693423103,UG -693423104,693423359,KE -693423360,693428223,UG +693420032,693428223,UG 693428224,693436415,SZ 693436416,693477375,ZA 693477376,693485567,BJ @@ -4088,9 +3977,7 @@ 693960704,693993471,TZ 693993472,694026239,GH 694026240,694091775,MZ -694091776,694092287,SD -694092288,694092543,AE -694092544,694157311,SD +694091776,694157311,SD 694157312,695205887,DZ 695205888,696254463,ZA 696254464,696516607,EG @@ -4107,14 +3994,13 @@ 696942592,696950783,MR 696950784,696958975,NG 696958976,696963071,TZ -696963072,696967167,UG +696963072,696966911,UG +696966912,696967167,TZ 696967168,696971263,MZ 696971264,696975359,KE 696975360,696991743,GH 696991744,697008127,NG -697008128,697014783,KE -697014784,697015039,GB -697015040,697040895,KE +697008128,697040895,KE 697040896,697303039,MA 697303040,697827327,ZA 697827328,697958399,EG @@ -4145,9 +4031,7 @@ 700284928,700293119,GH 700293120,700301311,EG 700301312,700309503,CD -700309504,700310527,DJ -700310528,700310783,SO -700310784,700313599,DJ +700309504,700313599,DJ 700313600,700317695,US 700317696,700325887,NG 700325888,700334079,ZW @@ -4165,8 +4049,7 @@ 700366848,700375039,UG 700375040,700376063,CM 700376064,700377087,NE -700378112,700378879,MG -700378880,700379135,CA +700378112,700379135,MG 700379136,700380159,NG 700380160,700381183,BW 700381184,700382207,EG @@ -4186,8 +4069,7 @@ 700410880,700411903,NG 700411904,700412927,ZA 700412928,700413951,ZM -700413952,700414463,GB -700414464,700414975,SC +700413952,700414975,SC 700414976,700432383,ZA 700432384,700434431,KE 700434432,700436479,LS @@ -4197,11 +4079,7 @@ 700446720,700447743,SL 700447744,700448767,DZ 700448768,700579839,ZA -700579840,700582399,A2 -700582400,700582655,NG -700582656,700586495,A2 -700586496,700586751,US -700586752,700587007,A2 +700579840,700587007,A2 700587008,700587263,ZM 700587264,700588031,A2 700588032,700588286,KM @@ -4213,13 +4091,15 @@ 700592384,700592639,KE 700592640,700593151,A2 700593152,700594175,NG -700594176,700645375,A2 +700594176,700595967,A2 +700595968,700596223,CD +700596224,700645375,A2 700645376,700710911,ZA 700710912,700776447,EG 700776448,700841983,RW -700841984,700849919,MU -700849920,700858367,NA -700858368,700866559,MU +700841984,700851199,MU +700851200,700852223,NA +700852224,700866559,MU 700866560,700866815,NG 700866816,700867327,MU 700867328,700867583,NG @@ -4235,8 +4115,7 @@ 701104128,701112319,GH 701112320,701120511,ZA 701120512,701145087,CI -701145088,701149183,MY -701149184,701153279,SD +701145088,701153279,SD 701153280,701161471,CM 701161472,701169663,UG 701169664,701186047,ZA @@ -4245,16 +4124,12 @@ 701190138,701202431,NG 701202432,701210623,NE 701210624,701214719,ZA -701214720,701215359,LS -701215360,701215423,ZA -701215424,701218815,LS +701214720,701218815,LS 701218816,701222911,ML 701222912,701227007,KE 701227008,701231103,BF 701231104,701235199,SC -701235200,701236223,SZ -701236224,701237247,ZA -701237248,701243391,SZ +701235200,701243391,SZ 701243392,701251583,GH 701251584,701259775,CM 701259776,701267967,MG @@ -4278,12 +4153,8 @@ 701407232,701423615,ZA 701423616,701431807,NG 701431808,701439999,CI -701440000,701446911,MG -701446912,701447167,FR -701447168,701448191,MG -701448192,701456383,KE -701456384,701456639,GB -701456640,701461247,KE +701440000,701448191,MG +701448192,701461247,KE 701461248,701461503,CD 701461504,701462783,KE 701462784,701463039,CG @@ -4298,13 +4169,13 @@ 701472768,701480959,TG 701480960,701489151,CI 701489152,701513727,ZA -701513728,701523455,LY -701523456,701523711,AE -701523712,701530111,LY +701513728,701530111,LY 701530112,701546495,SN 701546496,701562879,ZA 701562880,701579263,KE -701579264,701595647,SD +701579264,701593343,SD +701593344,701593471,AE +701593472,701595647,SD 701595648,701603839,DZ 701612032,701628415,EG 701628416,701644799,GH @@ -4387,7 +4258,9 @@ 702328832,702332927,TZ 702332928,702337023,MZ 702337024,702341119,UG -702341120,702349311,KE +702341120,702345215,KE +702345216,702346239,US +702346240,702349311,KE 702349312,702353407,ZA 702353408,702357503,DZ 702357504,702365695,TZ @@ -4641,7 +4514,9 @@ 772927488,772929535,UA 772929536,772931583,RU 772931584,772933631,UA -772933632,772935679,GB +772933632,772933920,GB +772933921,772933928,IE +772933929,772935679,GB 772935680,772937727,PS 772937728,772939775,IT 772939776,772941823,BE @@ -4686,11 +4561,7 @@ 773027840,773031935,FR 773031936,773032191,CH 773032192,773032447,CH -773032448,773033087,CH -773033088,773033181,FR -773033182,773033182,CH -773033183,773033215,FR -773033216,773033727,CH +773032448,773033727,CH 773033728,773033983,CH 773033984,773036031,LV 773036032,773038079,DE @@ -4703,14 +4574,9 @@ 773050368,773052415,IE 773052416,773054463,NL 773054464,773054719,RS -773054720,773055231,AL -773055232,773055487,RS -773055488,773055516,AL -773055517,773055517,RS -773055518,773055743,AL -773055744,773056127,RS -773056128,773056255,AL -773056256,773056511,US +773054720,773055487,AL +773055488,773056127,RS +773056128,773056511,AL 773056512,773058559,IT 773058560,773060607,BE 773060608,773062655,DK @@ -4880,8 +4746,7 @@ 773795840,773797887,NL 773797888,773799935,ES 773799936,773801983,CY -773801984,773803007,US -773803008,773804031,IQ +773801984,773804031,IQ 773804032,773806079,GB 773806080,773808127,BE 773808128,773810175,IL @@ -4898,17 +4763,17 @@ 773830656,773832703,NO 773832704,773834751,FR 773834752,773835007,GB -773835008,773836543,IM -773836544,773836799,GB +773835008,773835519,IM +773835520,773835647,GB +773835648,773836031,IM +773836032,773836799,GB 773836800,773838847,FR 773838848,773840895,DE -773840896,773843967,GB -773843968,773844991,EU -773844992,773845247,GB -773845248,773845503,GG -773845504,773846015,GB -773846016,773846271,GG -773846272,773847039,GB +773840896,773842943,GB +773842944,773844991,EU +773844992,773846015,GB +773846016,773846527,GG +773846528,773847039,GB 773847040,773849087,IT 773849088,773857279,IR 773857280,773865471,DK @@ -4923,12 +4788,12 @@ 773939200,773947391,CZ 773947392,773955583,GB 773955584,773963775,FR -773963776,773964031,ME -773964032,773964799,RU -773964800,773971967,ME +773963776,773971967,ME 773971968,773980159,UA 773980160,773988351,GB -773988352,774004735,ES +773988352,774000771,ES +774000772,774000772,NL +774000773,774004735,ES 774004736,774012927,IR 774012928,774021119,RU 774021120,774029311,IR @@ -4970,9 +4835,7 @@ 774163221,774163224,DJ 774163225,774163225,VA 774163226,774163229,CF -774163230,774163230,VA -774163231,774163234,HM -774163235,774163235,VA +774163230,774163235,VA 774163236,774163239,MF 774163240,774163240,VA 774163241,774163244,VC @@ -5124,25 +4987,55 @@ 778043392,778108927,UA 778108928,778174463,RO 778174464,778239999,UA -778240000,778260479,AL -778260480,778264575,RS -778264576,778305535,AL +778240000,778244351,AL +778244352,778244607,RS +778244608,778305535,AL 778305536,778371071,IR 778371072,778436607,RU 778436608,778499049,RO 778499050,778499050,NL 778499051,778502143,RO -778502144,778514431,GR -778514432,778515455,CY -778515456,778549247,GR -778549248,778550271,CY -778550272,778556415,GR +778502144,778510335,GR +778510336,778510591,CY +778510592,778514431,GR +778514432,778514687,CY +778514688,778514943,GR +778514944,778515455,CY +778515456,778518015,GR +778518016,778518271,CY +778518272,778518527,GR +778518528,778519551,CY +778519552,778523135,GR +778523136,778523647,CY +778523648,778534911,GR +778534912,778536959,CY +778536960,778538495,GR +778538496,778539007,CY +778539008,778541567,GR +778541568,778542079,CY +778542080,778546175,GR +778546176,778546943,CY +778546944,778549247,GR +778549248,778549759,CY +778549760,778550271,GR +778550272,778550783,CY +778550784,778553343,GR +778553344,778555391,CY +778555392,778555903,GR +778555904,778556159,CY +778556160,778556415,GR 778556416,778557439,CY -778557440,778561535,GR -778561536,778563583,CY +778557440,778559999,GR +778560000,778560255,CY +778560256,778560511,GR +778560512,778561535,CY +778561536,778562559,GR +778562560,778563583,CY 778563584,778567679,GR 778567680,778633215,TR -778633216,778679212,FR +778633216,778679135,FR +778679136,778679151,DE +778679152,778679212,FR 778679213,778679214,FI 778679215,778681503,FR 778681504,778681507,DE @@ -5158,9 +5051,7 @@ 779354112,779485183,IL 779485184,779616255,UA 779616256,779747327,IL -779747328,779778047,SI -779778048,779778303,DE -779778304,779878399,SI +779747328,779878399,SI 779878400,780009471,AT 780009472,780140543,CH 780140544,780206079,DE @@ -5172,7 +5063,9 @@ 780533760,780599295,PL 780599296,780664831,CZ 780664832,780730367,FR -780730368,780756724,IE +780730368,780756170,IE +780756171,780756171,EU +780756172,780756724,IE 780756725,780756725,EU 780756726,780779519,IE 780779520,780795903,SG @@ -5182,7 +5075,9 @@ 780992512,781058047,IT 781058048,781123583,DE 781123584,781189119,IR -781189120,781320191,NL +781189120,781223423,NL +781223424,781223679,GB +781223680,781320191,NL 781320192,781451263,RU 781451264,781455359,PL 781455360,781459455,UA @@ -5271,7 +5166,9 @@ 782663680,782663935,GB 782663936,782665471,GB 782665472,782666751,GB -782666752,782671103,GB +782666752,782667519,GB +782667520,782667775,LU +782667776,782671103,GB 782671104,782671359,GB 782671360,782680063,GB 782680064,782696447,RU @@ -5345,9 +5242,7 @@ 783278080,783282175,PL 783282176,783286271,UA 783286272,783417343,GR -783417344,783507455,BE -783507456,783511551,NL -783511552,783548415,BE +783417344,783548415,BE 783548416,783679487,RU 783679488,783681535,FR 783681536,783683583,IE @@ -5390,9 +5285,7 @@ 783757312,783759359,FR 783759360,783763455,CZ 783763456,783765503,FI -783765504,783766015,RU -783766016,783766271,US -783766272,783767551,RU +783765504,783767551,RU 783767552,783769599,IL 783769600,783771647,DE 783771648,783773695,GB @@ -5413,11 +5306,7 @@ 783804416,783806463,IT 783806464,783810559,NL 783810560,783843327,SA -783843328,783850751,BH -783850752,783851007,US -783851008,783861759,BH -783861760,783862015,US -783862016,783876095,BH +783843328,783876095,BH 783876096,783908863,UA 783908864,783941631,JO 783941632,783974399,PL @@ -5435,11 +5324,36 @@ 784334848,784465919,FR 784465920,784596991,SE 784596992,784728063,TR -784728064,784733183,GR -784733184,784733695,CY -784733696,784759295,GR -784759296,784762879,CY -784762880,784763903,GR +784728064,784728575,CY +784728576,784729087,GR +784729088,784729599,CY +784729600,784730111,GR +784730112,784730879,CY +784730880,784732159,GR +784732160,784732671,CY +784732672,784732927,GR +784732928,784733055,CY +784733056,784733439,GR +784733440,784733695,CY +784733696,784745471,GR +784745472,784745983,CY +784745984,784750079,GR +784750080,784750847,CY +784750848,784751359,GR +784751360,784751615,CY +784751616,784753663,GR +784753664,784754175,CY +784754176,784756735,GR +784756736,784756991,CY +784756992,784757247,GR +784757248,784757759,CY +784757760,784758271,GR +784758272,784758783,CY +784758784,784760831,GR +784760832,784762879,CY +784762880,784763391,GR +784763392,784763647,CY +784763648,784763903,GR 784763904,784859135,CY 784859136,785121279,UA 785121280,785252351,PL @@ -5466,7 +5380,9 @@ 786567168,786569215,CZ 786569216,786571263,NO 786571264,786575359,ES -786575360,786577407,GB +786575360,786575871,GB +786575872,786576127,SE +786576128,786577407,GB 786577408,786579455,NL 786579456,786581503,RU 786581504,786583551,GB @@ -5545,8 +5461,7 @@ 786788352,786792447,CZ 786792448,786796543,RU 786796544,786800639,PL -786800640,786801663,BY -786801664,786804735,NL +786800640,786804735,NL 786804736,786808831,RU 786808832,786812927,BG 786812928,786817023,RU @@ -5657,20 +5572,33 @@ 787333120,787349503,DE 787349504,787365887,BG 787365888,787382271,PL -787382272,787382887,FR -787382888,787382888,GP -787382889,787383039,FR -787383040,787385599,GP -787385600,787386367,FR -787386368,787386623,MQ -787386624,787386879,FR -787386880,787392511,MQ -787392512,787393023,GP -787393024,787393791,FR -787393792,787394303,GP -787394304,787394559,FR -787394560,787396607,GF -787396608,787398655,FR +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 +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 787398656,787415039,PL 787415040,787431423,BA 787431424,787447807,SE @@ -5727,11 +5655,7 @@ 788054016,788062207,JO 788062208,788070399,GB 788070400,788078591,RU -788078592,788079359,NL -788079360,788079615,IN -788079616,788085503,NL -788085504,788085759,FR -788085760,788086783,NL +788078592,788086783,NL 788086784,788094975,BG 788094976,788103167,IR 788103168,788111359,HU @@ -5790,8 +5714,7 @@ 788410368,788412415,TR 788412416,788414463,SI 788414464,788416511,CZ -788416512,788418303,PL -788418304,788418559,CH +788416512,788418559,PL 788418560,788422655,RU 788422656,788424703,FI 788424704,788426751,IT @@ -5980,11 +5903,7 @@ 837795840,837812223,CN 837812224,838074367,JP 838074368,838139903,NP -838139904,838166527,SG -838166528,838167551,MY -838167552,838168063,SG -838168064,838168575,MY -838168576,838205439,SG +838139904,838205439,SG 838205440,838238207,KR 838238208,838262783,VN 838262784,838270975,CN @@ -5993,13 +5912,24 @@ 838467584,838729727,JP 838729728,838795263,KR 838795264,838860799,AU -838860800,838999039,US +838860800,838993423,US +838993424,838993447,MY +838993448,838993463,PK +838993464,838994175,US +838994176,838994271,HK +838994272,838995455,US +838995456,838995967,CA +838995968,838999039,US 838999040,838999295,CA -838999296,839002431,US +838999296,839000159,US +839000160,839000191,EG +839000192,839002399,US +839002400,839002431,ID 839002432,839002463,EE -839002464,839003775,US -839003776,839003807,EG -839003808,839005215,US +839002464,839002495,HK +839002496,839003775,US +839003776,839003839,EG +839003840,839005215,US 839005216,839005280,CA 839005281,839010559,US 839010560,839010815,CA @@ -6137,64 +6067,7 @@ 840909056,840909311,CA 840909312,840957695,US 840957696,840957951,JP -840957952,842530895,US -842530896,842530903,IL -842530904,842531443,US -842531444,842531447,GB -842531448,842531519,US -842531520,842531523,MX -842531524,842531603,US -842531604,842531605,ES -842531606,842531659,US -842531660,842531661,IN -842531662,842533679,US -842533680,842533683,BR -842533684,842534251,US -842534252,842534255,NO -842534256,842534335,US -842534336,842534339,ES -842534340,842541693,US -842541694,842541695,ZA -842541696,842541723,US -842541724,842541725,CA -842541726,842542399,US -842542400,842542407,NZ -842542408,842542415,US -842542416,842542423,NZ -842542424,842542431,JO -842542432,842564897,US -842564898,842564899,ES -842564900,842564933,US -842564934,842564935,CA -842564936,842565975,US -842565976,842565979,AU -842565980,842566015,US -842566016,842566019,BR -842566020,842570261,US -842570262,842570263,AU -842570264,842570327,US -842570328,842570329,CN -842570330,842571891,US -842571892,842571895,IN -842571896,842572055,US -842572056,842572059,MX -842572060,842572215,US -842572216,842572219,CA -842572220,842597639,US -842597640,842597647,GT -842597648,842597759,US -842597760,842597767,CA -842597768,842598703,US -842598704,842598719,CZ -842598720,842600079,US -842600080,842600087,GB -842600088,842601607,US -842601608,842601615,AR -842601616,842602423,US -842602424,842602431,IN -842602432,842651119,US -842651120,842651127,MX -842651128,843055103,US +840957952,843055103,US 843055104,843644927,CA 843644928,844890111,US 844890112,844988415,CA @@ -6222,19 +6095,9 @@ 846441890,846441900,RO 846441901,846442495,US 846442496,846446591,CA -846446592,846529791,US -846529792,846530047,US -846530048,846537727,US +846446592,846537727,US 846537728,846537983,US -846537984,846542847,US -846542848,846543103,US -846543104,846543615,US -846543616,846543871,US -846543872,846544127,US -846544128,846544383,US -846544384,846546943,US -846546944,846547199,US -846547200,846561279,US +846537984,846561279,US 846561280,846594047,CA 846594048,846626815,US 846626816,846627071,CN @@ -6255,7 +6118,9 @@ 905969664,921174015,US 921174016,921239551,BR 921239552,922091519,US -922091520,922222591,IE +922091520,922189311,IE +922189312,922189567,EU +922189568,922222591,IE 922222592,922353663,JP 922353664,922419199,US 922419200,922484735,SG @@ -6264,21 +6129,13 @@ 959447040,959512575,US 959512576,960629507,EU 960629508,960629508,GB -960629509,960640255,EU -960640256,960640511,GB -960640512,960640769,EU +960629509,960640769,EU 960640770,960640770,GB 960640771,960643365,EU 960643366,960643367,GB -960643368,960649215,EU -960649216,960654335,GB -960654336,960654847,EU -960654848,960655359,GB -960655360,960661759,EU -960661760,960662015,CH -960662016,960670207,EU -960670208,960670719,DE -960670720,960676607,EU +960643368,960647167,EU +960647168,960651263,GB +960651264,960676607,EU 960676608,960676863,PL 960676864,960692223,EU 960692224,960724991,FR @@ -6287,9 +6144,7 @@ 960727040,960727295,US 960727296,960729343,EU 960729344,960729599,ZA -960729600,960731647,EU -960731648,960731903,FR -960731904,960741375,EU +960729600,960741375,EU 960741376,960749567,NL 960749568,960757759,LU 960757760,960888831,US @@ -6348,9 +6203,7 @@ 961445888,961478655,ES 961478656,961511423,CH 961511424,961519615,PT -961519616,961521407,EU -961521408,961521663,SE -961521664,961527807,EU +961519616,961527807,EU 961527808,961531903,MC 961531904,961535999,SM 961536000,961540095,VA @@ -6414,13 +6267,7 @@ 962416640,962461695,EU 962461696,962469887,IE 962469888,962527231,TR -962527232,972744447,EU -972744448,972744703,IN -972744704,972747263,EU -972747264,972747519,US -972747520,972749823,EU -972749824,972750079,US -972750080,973078527,EU +962527232,973078527,EU 973078528,973209599,JP 973209600,973275135,IN 973275136,973471743,JP @@ -6452,7 +6299,9 @@ 977764352,977797119,MY 977797120,978321407,KR 978321408,978452479,JP -978452480,978583551,CN +978452480,978485247,CN +978485248,978518015,SG +978518016,978583551,CN 978599936,978640895,AU 978640896,978644991,NZ 978644992,978714623,JP @@ -6461,9 +6310,7 @@ 978784256,978788351,JP 978788352,978796543,KR 978796544,978812927,CN -978812928,978972671,JP -978972672,978973695,US -978973696,979369983,JP +978812928,979369983,JP 979369984,979410943,AU 979410944,979419135,HK 979419136,979435519,AU @@ -6513,9 +6360,7 @@ 984875008,984956927,KR 984956928,984965119,AU 984965120,984973311,PK -984973312,984983039,TH -984983040,984983295,AU -984983296,985006079,TH +984973312,985006079,TH 985006080,985071615,SG 985071616,985137151,JP 985137152,985202687,KR @@ -6543,11 +6388,7 @@ 996802560,996868095,JP 996868096,997195775,CN 997195776,998244351,TW -998244352,998760447,JP -998760448,998760703,US -998760704,998973376,JP -998973377,998973377,US -998973378,999292927,JP +998244352,999292927,JP 999292928,999423999,IN 999424000,999555071,JP 999555072,999686143,HK @@ -6604,9 +6445,7 @@ 1023238144,1023246335,ID 1023246336,1023279103,CN 1023279104,1023311871,IN -1023311872,1023315711,US -1023315712,1023315967,AU -1023315968,1023316991,US +1023311872,1023316991,US 1023316992,1023317247,AU 1023317248,1023317759,US 1023317760,1023318015,IN @@ -6617,7 +6456,9 @@ 1023344640,1023410175,CN 1023410176,1023672319,IN 1023672320,1023688703,HK -1023688704,1023692799,MM +1023688704,1023692031,MM +1023692032,1023692287,SG +1023692288,1023692799,MM 1023692800,1023696895,CN 1023696896,1023705087,MY 1023705088,1023717375,JP @@ -6628,9 +6469,7 @@ 1023778816,1023787007,KR 1023787008,1023791103,AF 1023791104,1023795199,NC -1023795200,1023799039,JP -1023799040,1023799295,US -1023799296,1023803391,JP +1023795200,1023803391,JP 1023803392,1023852543,MY 1023852544,1023868927,BN 1023868928,1023901695,JP @@ -6646,9 +6485,7 @@ 1023979520,1023983615,AU 1023983616,1023991551,SG 1023991552,1023991807,AP -1023991808,1023998207,SG -1023998208,1023998463,MY -1023998464,1023999999,SG +1023991808,1023999999,SG 1024000000,1024032767,PH 1024032768,1024065535,AU 1024065536,1024131071,HK @@ -6662,21 +6499,13 @@ 1024327680,1024344063,US 1024344064,1024352255,SG 1024352256,1024360447,AU -1024360448,1024362495,JP -1024362496,1024363519,MY -1024363520,1024364031,AU +1024360448,1024363775,JP +1024363776,1024364031,AU 1024364032,1024365055,JP 1024365056,1024365311,AP -1024365312,1024365567,JP -1024365568,1024365823,SG -1024365824,1024369407,JP -1024369408,1024369663,MY -1024369664,1024370687,JP +1024365312,1024370687,JP 1024370688,1024371199,PH -1024371200,1024372479,JP -1024372480,1024372735,HK -1024372736,1024374783,PH -1024374784,1024375295,JP +1024371200,1024375295,JP 1024375296,1024375807,AU 1024375808,1024376831,JP 1024376832,1024393215,PH @@ -6721,7 +6550,8 @@ 1026420736,1026422783,JP 1026422784,1026423295,AU 1026423296,1026423551,AP -1026423552,1026424831,AU +1026423552,1026423807,BD +1026423808,1026424831,AU 1026424832,1026490367,JP 1026490368,1026523135,TH 1026523136,1026539519,CN @@ -6731,9 +6561,7 @@ 1027866624,1027997695,AU 1027997696,1028128767,TW 1028128768,1029046271,KR -1029046272,1029119999,JP -1029120000,1029120255,US -1029120256,1029144575,JP +1029046272,1029144575,JP 1029144576,1029160959,SG 1029160960,1029177343,CN 1029177344,1029242879,AU @@ -6746,17 +6574,11 @@ 1029701632,1030750207,KR 1030750208,1030946303,JP 1030946304,1030946559,AP -1030946560,1031311359,JP -1031311360,1031315455,US -1031315456,1031415039,JP +1030946560,1031415039,JP 1031415040,1031415295,US -1031415296,1031635199,JP -1031635200,1031635455,IN -1031635456,1031798783,JP +1031415296,1031798783,JP 1031798784,1035993087,CN -1035993088,1036447999,JP -1036448000,1036448255,US -1036448256,1037410303,JP +1035993088,1037410303,JP 1037410304,1037415679,US 1037415680,1037415935,AP 1037415936,1037418495,US @@ -6785,9 +6607,7 @@ 1040318464,1040344063,CH 1040344064,1040344319,AT 1040344320,1040383999,CH -1040384000,1040388095,SA -1040388096,1040388351,US -1040388352,1040390853,SA +1040384000,1040390853,SA 1040390854,1040390854,ZA 1040390855,1040400383,SA 1040400384,1040416767,GB @@ -6803,9 +6623,7 @@ 1040482304,1040515071,BE 1040515072,1040547839,SE 1040547840,1040580607,RU -1040580608,1040625663,GB -1040625664,1040625919,US -1040625920,1040711679,GB +1040580608,1040711679,GB 1040711680,1040719871,FR 1040719872,1040728063,DE 1040728064,1040736255,KE @@ -6816,8 +6634,7 @@ 1040973824,1040982015,NL 1040982016,1040982527,DK 1040982528,1040982783,FI -1040982784,1040983295,DK -1040983296,1040983551,US +1040982784,1040983551,DK 1040983552,1040983807,EU 1040983808,1040990207,DK 1040990208,1040994303,CY @@ -6847,52 +6664,90 @@ 1041638912,1041642751,ES 1041642752,1041643007,EU 1041643008,1041694719,ES -1041694720,1041697279,GB +1041694720,1041696255,GB +1041696256,1041696511,FR +1041696512,1041697279,GB 1041697280,1041697535,FR -1041697536,1041700863,GB -1041700864,1041701375,FR -1041701376,1041701631,GB -1041701632,1041705471,FR -1041705472,1041705727,GB -1041705728,1041709055,FR -1041709056,1041713663,GB +1041697536,1041700351,GB +1041700352,1041700607,FR +1041700608,1041700863,GB +1041700864,1041701119,FR +1041701120,1041701631,GB +1041701632,1041701887,FR +1041701888,1041702143,GB +1041702144,1041702527,FR +1041702528,1041702655,GB +1041702656,1041702911,FR +1041702912,1041703423,GB +1041703424,1041703679,FR +1041703680,1041703935,GB +1041703936,1041704191,FR +1041704192,1041704447,GB +1041704448,1041704959,FR +1041704960,1041706239,GB +1041706240,1041707007,FR +1041707008,1041707263,GB +1041707264,1041708031,FR +1041708032,1041708287,GB +1041708288,1041708543,FR +1041708544,1041708799,GB +1041708800,1041709055,FR +1041709056,1041712383,GB +1041712384,1041712639,FR +1041712640,1041713663,GB 1041713664,1041713919,FR -1041713920,1041719551,GB +1041713920,1041714431,GB +1041714432,1041715199,FR +1041715200,1041718527,GB +1041718528,1041718783,FR +1041718784,1041719551,GB 1041719552,1041720063,FR 1041720064,1041720319,GB -1041720320,1041720831,FR -1041720832,1041722111,GB +1041720320,1041721087,FR +1041721088,1041722111,GB 1041722112,1041722367,FR 1041722368,1041722623,GB -1041722624,1041724671,FR -1041724672,1041724927,GB -1041724928,1041726719,FR -1041726720,1041727231,GB -1041727232,1041728255,FR -1041728256,1041730303,GB -1041730304,1041730559,FR -1041730560,1041731071,GB -1041731072,1041731839,FR -1041731840,1041731967,GB -1041731968,1041732863,FR -1041732864,1041733119,GB -1041733120,1041733887,FR +1041722624,1041722879,FR +1041722880,1041724415,GB +1041724416,1041724671,FR +1041724672,1041725183,GB +1041725184,1041725439,FR +1041725440,1041725695,GB +1041725696,1041725951,FR +1041725952,1041728767,GB +1041728768,1041729023,FR +1041729024,1041731071,GB +1041731072,1041731327,FR +1041731328,1041731839,GB +1041731840,1041732095,FR +1041732096,1041733375,GB +1041733376,1041733887,FR 1041733888,1041734399,GB -1041734400,1041735167,FR -1041735168,1041744127,GB -1041744128,1041744895,FR -1041744896,1041745151,GB +1041734400,1041734655,FR +1041734656,1041734911,GB +1041734912,1041735167,FR +1041735168,1041741055,GB +1041741056,1041741311,FR +1041741312,1041744127,GB +1041744128,1041744639,FR +1041744640,1041745151,GB 1041745152,1041745407,FR -1041745408,1041748991,GB +1041745408,1041745663,GB +1041745664,1041745919,FR +1041745920,1041748991,GB 1041748992,1041749247,EU 1041749248,1041749759,GB -1041749760,1041751039,FR +1041749760,1041750015,FR +1041750016,1041750527,GB +1041750528,1041751039,FR 1041751040,1041753599,GB 1041753600,1041754111,FR 1041754112,1041755391,GB -1041755392,1041757439,FR -1041757440,1041757695,GB -1041757696,1041758207,FR +1041755392,1041755647,FR +1041755648,1041756671,GB +1041756672,1041757183,FR +1041757184,1041757951,GB +1041757952,1041758207,FR 1041758208,1041760255,GB 1041760256,1041768447,DE 1041768448,1041776639,NO @@ -6928,8 +6783,8 @@ 1042879744,1042879999,NL 1042880000,1042880255,GB 1042880256,1042889983,NL -1042889984,1042890111,GB -1042890112,1042892799,NL +1042889984,1042890143,GB +1042890144,1042892799,NL 1042892800,1042893055,EU 1042893056,1042939903,NL 1042939904,1043070975,ES @@ -6946,9 +6801,9 @@ 1043349504,1043357695,DE 1043357696,1043365887,CH 1043365888,1043398655,PT -1043398656,1043473151,GB -1043473152,1043473407,DE -1043473408,1043483406,GB +1043398656,1043475455,GB +1043475456,1043475711,DE +1043475712,1043483406,GB 1043483407,1043483407,CH 1043483408,1043488767,GB 1043488768,1043496959,DE @@ -6961,13 +6816,9 @@ 1043595264,1043661567,DE 1043661568,1043661823,GB 1043661824,1043857407,DE -1043857408,1043892735,GB -1043892736,1043892991,CD -1043892992,1043910143,GB +1043857408,1043910143,GB 1043910144,1043910399,A2 -1043910400,1043914239,GB -1043914240,1043914751,NG -1043914752,1043922943,GB +1043910400,1043922943,GB 1043922944,1043988479,ES 1043988480,1043991103,BE 1043991104,1043991167,NL @@ -6975,16 +6826,14 @@ 1043992576,1043992831,NL 1043992832,1043996671,BE 1043996672,1043996927,NL -1043996928,1043999743,BE -1043999744,1044000255,NL -1044000256,1044003839,BE -1044003840,1044004095,NL -1044004096,1044012031,BE +1043996928,1044004073,BE +1044004074,1044004074,NL +1044004075,1044012031,BE 1044012032,1044012543,NL 1044012544,1044037631,BE 1044037632,1044038143,NL -1044038144,1044038655,BE -1044038656,1044039935,NL +1044038144,1044039679,BE +1044039680,1044039935,NL 1044039936,1044119551,BE 1044119552,1044152319,GB 1044152320,1044185087,IR @@ -7015,26 +6864,16 @@ 1044512768,1044578303,DK 1044578304,1044638273,GB 1044638274,1044638274,GB -1044638275,1044643839,GB +1044638275,1044642815,GB +1044642816,1044643327,DE +1044643328,1044643839,GB 1044643840,1044652031,DE 1044652032,1044660223,LY -1044660224,1044660479,GR -1044660480,1044660991,US -1044660992,1044661247,AU -1044661248,1044661503,SA -1044661504,1044661759,GR -1044661760,1044662271,AU -1044662272,1044663807,US -1044663808,1044664063,AU -1044664064,1044664575,US -1044664576,1044665343,GR -1044665344,1044666111,US -1044666112,1044666367,GR -1044666368,1044666623,US -1044666624,1044667391,GR -1044667392,1044667647,US -1044667648,1044668159,GR -1044668160,1044668415,SA +1044660224,1044665855,GR +1044665856,1044666367,US +1044666368,1044667647,GR +1044667648,1044667903,US +1044667904,1044668415,GR 1044668416,1044676607,BA 1044676608,1044684799,RU 1044684800,1044692991,HU @@ -7046,9 +6885,7 @@ 1044701184,1044709375,EG 1044709376,1044717567,RU 1044717568,1044742143,GB -1044742144,1044742399,IT -1044742400,1044742655,US -1044742656,1044744191,IT +1044742144,1044744191,IT 1044744192,1044746239,GB 1044746240,1044748287,DE 1044748288,1044750335,DK @@ -7060,16 +6897,24 @@ 1044840448,1044905983,FI 1044905984,1044930559,DE 1044930560,1044930815,GB -1044930816,1044931583,BE -1044931584,1044931839,GB -1044931840,1044932607,BE -1044932608,1044932863,GB -1044932864,1044934399,BE -1044934400,1044934655,GB -1044934656,1044935935,BE -1044935936,1044936191,GB -1044936192,1044936959,BE -1044936960,1044946943,GB +1044930816,1044930911,BE +1044930912,1044930927,DE +1044930928,1044931327,BE +1044931328,1044933293,GB +1044933294,1044933294,BE +1044933295,1044933887,GB +1044933888,1044934143,BE +1044934144,1044934911,GB +1044934912,1044935167,BE +1044935168,1044935423,GB +1044935424,1044935679,BE +1044935680,1044936547,GB +1044936548,1044936548,BE +1044936549,1044936703,GB +1044936704,1044936959,BE +1044936960,1044937727,GB +1044937728,1044937983,BE +1044937984,1044946943,GB 1044946944,1044955135,UA 1044955136,1044963327,NL 1044963328,1044971519,FI @@ -7096,25 +6941,25 @@ 1045323776,1045364735,FI 1045364736,1045430271,DK 1045430272,1045446655,DE -1045446656,1045447423,CZ -1045447424,1045447679,HU -1045447680,1045454847,CZ +1045446656,1045454847,CZ 1045454848,1045463039,DE 1045463040,1045471231,FI 1045471232,1045479423,UA 1045479424,1045487615,SE 1045487616,1045495807,LT -1045495808,1045588223,ES -1045588224,1045588479,CZ -1045588480,1045692415,ES +1045495808,1045692415,ES 1045692416,1045700607,LV 1045700608,1045708799,KZ 1045708800,1045716991,LB 1045716992,1045725183,RU 1045725184,1045733375,CZ 1045733376,1045742335,GB -1045742336,1045744127,SE -1045744128,1045749759,GB +1045742336,1045742591,SE +1045742592,1045743871,GB +1045743872,1045744127,SE +1045744128,1045745407,GB +1045745408,1045745663,SE +1045745664,1045749759,GB 1045749760,1045753855,SI 1045753856,1045755903,NL 1045755904,1045757951,UA @@ -7142,33 +6987,64 @@ 1046315008,1046323199,GB 1046323200,1046331391,ES 1046331392,1046347775,EU -1046347776,1046413311,IT +1046347776,1046391807,IT +1046391808,1046392319,US +1046392320,1046413311,IT 1046413312,1046446079,SE 1046446080,1046478847,EU -1046478848,1046479103,DE -1046479104,1046481151,GB +1046478848,1046481151,GB 1046481152,1046481407,DE 1046481408,1046482175,GB 1046482176,1046482431,DE -1046482432,1046485247,GB +1046482432,1046482943,GB +1046482944,1046483199,DE +1046483200,1046485247,GB 1046485248,1046485759,DE -1046485760,1046488063,GB +1046485760,1046486015,GB +1046486016,1046486271,DE +1046486272,1046487039,GB +1046487040,1046487295,DE +1046487296,1046488063,GB 1046488064,1046488575,DE -1046488576,1046504447,GB +1046488576,1046492159,GB +1046492160,1046492415,DE +1046492416,1046492671,GB +1046492672,1046492927,DE +1046492928,1046493695,GB +1046493696,1046493951,DE +1046493952,1046494719,GB +1046494720,1046495231,DE +1046495232,1046502911,GB +1046502912,1046503423,DE +1046503424,1046504447,GB 1046504448,1046507519,DE -1046507520,1046512639,GB -1046512640,1046513663,DE -1046513664,1046518783,GB +1046507520,1046512127,GB +1046512128,1046513663,DE +1046513664,1046514175,GB +1046514176,1046514431,DE +1046514432,1046514943,GB +1046514944,1046515071,DE +1046515072,1046518783,GB 1046518784,1046519039,DE -1046519040,1046526719,GB +1046519040,1046519295,GB +1046519296,1046519551,DE +1046519552,1046524159,GB +1046524160,1046524415,DE +1046524416,1046526719,GB 1046526720,1046526975,DE -1046526976,1046530815,GB -1046530816,1046531071,DE -1046531072,1046538751,GB +1046526976,1046530559,GB +1046530560,1046531327,DE +1046531328,1046538751,GB 1046538752,1046539263,DE -1046539264,1046541311,GB -1046541312,1046541823,DE -1046541824,1046544383,GB +1046539264,1046540031,GB +1046540032,1046540287,DE +1046540288,1046540543,GB +1046540544,1046540799,DE +1046540800,1046541311,GB +1046541312,1046541567,DE +1046541568,1046541823,GB +1046541824,1046542079,DE +1046542080,1046544383,GB 1046544384,1046560767,IT 1046560768,1046585343,ES 1046585344,1046609919,NO @@ -7210,12 +7086,16 @@ 1047273472,1047281663,DE 1047281664,1047289855,TR 1047289856,1047298047,RS -1047298048,1047306239,CH +1047298048,1047300351,CH +1047300352,1047300607,GB +1047300608,1047306239,CH 1047306240,1047314431,PL 1047314432,1047322623,SE 1047322624,1047330815,IT 1047330816,1047339007,RU -1047339008,1047347199,SE +1047339008,1047343871,SE +1047343872,1047344127,NO +1047344128,1047347199,SE 1047347200,1047363583,DE 1047363584,1047371775,CZ 1047371776,1047373559,RU @@ -7248,11 +7128,7 @@ 1047871488,1047887871,RU 1047887872,1047920639,ES 1047920640,1047986175,RU -1047986176,1048006655,SE -1048006656,1048006744,DK -1048006745,1048006872,SE -1048006873,1048006911,DK -1048006912,1048011775,SE +1047986176,1048011775,SE 1048011776,1048012031,EU 1048012032,1048051711,SE 1048051712,1048117247,SA @@ -7288,10 +7164,10 @@ 1048246272,1048248319,NO 1048248320,1048313855,IT 1048313856,1048510463,GB -1048510464,1048575999,SE -1048576000,1048581887,DE -1048581888,1048582143,IT -1048582144,1048584191,DE +1048510464,1048537087,SE +1048537088,1048539135,DK +1048539136,1048575999,SE +1048576000,1048584191,DE 1048584192,1048592383,IL 1048592384,1048600575,IT 1048600576,1048608767,DE @@ -7312,27 +7188,23 @@ 1048772608,1048838143,NL 1048838144,1048853503,DE 1048853504,1048853759,NL -1048853760,1048859903,DE -1048859904,1048860159,NL -1048860160,1048868863,DE +1048853760,1048868863,DE 1048868864,1048869119,NL -1048869120,1048869375,DE -1048869376,1048869631,NL -1048869632,1048871423,DE -1048871424,1048871935,NL -1048871936,1048872703,DE -1048872704,1048874239,NL +1048869120,1048871423,DE +1048871424,1048871679,NL +1048871680,1048873983,DE +1048873984,1048874239,NL 1048874240,1048888319,DE -1048888320,1048890367,NL -1048890368,1048890559,DE -1048890560,1048890623,NL -1048890624,1048893183,DE +1048888320,1048888575,NL +1048888576,1048889855,DE +1048889856,1048890623,NL +1048890624,1048890879,DE +1048890880,1048891135,NL +1048891136,1048893183,DE 1048893184,1048893439,NL 1048893440,1048901631,DE 1048901632,1048901887,NL -1048901888,1048902143,DE -1048902144,1048902399,NL -1048902400,1048903679,DE +1048901888,1048903679,DE 1048903680,1048911871,GB 1048911872,1048920063,IT 1048920064,1048936447,NL @@ -7340,22 +7212,28 @@ 1048944640,1048952831,RU 1048952832,1048969215,NL 1048969216,1048979455,EU -1048979456,1048980479,DE -1048980480,1048980991,EU -1048980992,1048981247,GB -1048981248,1048985087,EU -1048985088,1048985343,NL -1048985344,1049012479,EU -1049012480,1049012735,DE -1049012736,1049016575,EU +1048979456,1048979711,DE +1048979712,1048980223,EU +1048980224,1048980479,DE +1048980480,1048982783,EU +1048982784,1048983039,DE +1048983040,1048985087,EU +1048985088,1048985343,DE +1048985344,1049016575,EU 1049016576,1049016831,DE -1049016832,1049021439,EU -1049021440,1049021695,GB -1049021696,1049027071,EU -1049027072,1049027583,DE -1049027584,1049028095,EU -1049028096,1049028351,DE -1049028352,1049034751,EU +1049016832,1049017087,EU +1049017088,1049017343,DE +1049017344,1049017599,EU +1049017600,1049017855,DE +1049017856,1049021695,EU +1049021696,1049021951,DE +1049021952,1049027071,EU +1049027072,1049028607,DE +1049028608,1049029119,EU +1049029120,1049029375,DE +1049029376,1049032191,EU +1049032192,1049032703,DE +1049032704,1049034751,EU 1049034752,1049067519,EG 1049067520,1049100287,DK 1049100288,1049231359,GB @@ -7404,9 +7282,11 @@ 1049985024,1050017791,IT 1050017792,1050041087,KW 1050041088,1050041599,US -1050041600,1050047993,KW -1050047994,1050047995,US -1050047996,1050083327,KW +1050041600,1050047994,KW +1050047995,1050047995,US +1050047996,1050048767,KW +1050048768,1050049023,US +1050049024,1050083327,KW 1050083328,1050148863,ES 1050148864,1050157055,CY 1050157056,1050173439,RU @@ -7415,26 +7295,18 @@ 1050189824,1050198015,DE 1050198016,1050206207,RU 1050206208,1050214399,SK -1050214400,1050268671,DE -1050268672,1050269183,US -1050269184,1050272511,DE +1050214400,1050272511,DE 1050272512,1050272767,EU -1050272768,1050316799,DE -1050316800,1050317311,US -1050317312,1050332441,DE +1050272768,1050332441,DE 1050332442,1050332442,GB 1050332443,1050340607,DE 1050340608,1050340639,US 1050340640,1050470911,DE 1050470912,1050471167,GB -1050471168,1050627491,DE -1050627492,1050627495,EU -1050627496,1050642687,DE -1050642688,1050642943,US -1050642944,1050673151,DE -1050673152,1050768471,FR -1050768472,1050768479,RE -1050768480,1050804223,FR +1050471168,1050627327,DE +1050627328,1050627583,EU +1050627584,1050673151,DE +1050673152,1050804223,FR 1050804224,1050869759,MK 1050869760,1050935295,NL 1050935296,1050968063,EU @@ -7443,9 +7315,7 @@ 1051017216,1051033599,NL 1051033600,1051049983,FI 1051049984,1051066367,HU -1051066368,1051125759,BE -1051125760,1051126271,NL -1051126272,1051131903,BE +1051066368,1051131903,BE 1051131904,1051197439,CH 1051197440,1051213823,CZ 1051213824,1051230207,SK @@ -7467,24 +7337,10 @@ 1051549347,1051557887,GB 1051557888,1051566079,RU 1051566080,1051574271,IT -1051574272,1051576831,GB -1051576832,1051577023,DE -1051577024,1051577063,GB -1051577064,1051577087,DE -1051577088,1051577855,GB -1051577856,1051578111,NL -1051578112,1051590655,GB -1051590656,1051694079,ES -1051694080,1051694335,GB -1051694336,1051694591,ES -1051694592,1051694847,GB -1051694848,1051695359,ES -1051695360,1051695615,GB -1051695616,1051695871,ES -1051695872,1051696127,GB -1051696128,1051719167,ES -1051719168,1051719423,GB -1051719424,1051721727,ES +1051574272,1051584207,GB +1051584208,1051584223,BE +1051584224,1051590655,GB +1051590656,1051721727,ES 1051721728,1051729919,RU 1051729920,1051738111,FI 1051738112,1051754495,BG @@ -7499,25 +7355,33 @@ 1051852800,1051918335,AT 1051918336,1051918591,PL 1051918592,1051983871,AT -1051983872,1051994879,EU -1051994880,1051995135,DE -1051995136,1051999487,EU +1051983872,1051999487,EU 1051999488,1051999743,DE -1051999744,1052007041,EU -1052007042,1052007042,DE -1052007043,1052011263,EU +1051999744,1052002303,EU +1052002304,1052002559,DE +1052002560,1052003327,EU +1052003328,1052003583,DE +1052003584,1052011263,EU 1052011264,1052012287,DE -1052012288,1052015871,EU -1052015872,1052016127,DE -1052016128,1052019711,EU -1052019712,1052019967,GB -1052019968,1052042719,EU -1052042720,1052042751,DE +1052012288,1052014205,EU +1052014206,1052014206,DE +1052014207,1052016114,EU +1052016115,1052016115,DE +1052016116,1052017535,EU +1052017536,1052017663,DE +1052017664,1052041215,EU +1052041216,1052041471,DE +1052041472,1052042495,EU +1052042496,1052042751,DE 1052042752,1052043007,EU -1052043008,1052043071,FR -1052043072,1052043087,DE -1052043088,1052043263,FR -1052043264,1052049407,EU +1052043008,1052043103,DE +1052043104,1052043111,EU +1052043112,1052043263,DE +1052043264,1052043583,EU +1052043584,1052043615,DE +1052043616,1052046335,EU +1052046336,1052046591,DE +1052046592,1052049407,EU 1052049408,1052057599,PL 1052057600,1052065791,RU 1052065792,1052082175,SE @@ -7553,33 +7417,17 @@ 1052180480,1052213247,RU 1052213248,1052246015,FI 1052246016,1052508159,EU -1052508160,1052630015,GB -1052630016,1052630159,BE -1052630160,1052630175,GB -1052630176,1052630271,BE -1052630272,1052632575,GB -1052632576,1052632583,ZA -1052632584,1052653823,GB +1052508160,1052653823,GB 1052653824,1052654079,EU -1052654080,1052667903,GB -1052667904,1052668063,US -1052668064,1052668079,GB -1052668080,1052668159,US -1052668160,1052770303,GB +1052654080,1052675839,GB +1052675840,1052676095,IE +1052676096,1052770303,GB 1052770304,1052778495,CH 1052778496,1052786687,RU 1052786688,1052803071,NL 1052803072,1052803327,DE 1052803328,1052803583,EU -1052803584,1052804607,US -1052804608,1052804863,DE -1052804864,1052805119,AF -1052805120,1052805887,US -1052805888,1052806655,DE -1052806656,1052806911,US -1052806912,1052807679,DE -1052807680,1052809727,US -1052809728,1052810495,DE +1052803584,1052810495,DE 1052810496,1052810751,US 1052810752,1052811263,DE 1052811264,1052819455,RU @@ -7602,13 +7450,21 @@ 1053138944,1053147135,FI 1053147136,1053163519,SK 1053163520,1053294591,DK -1053294592,1053307903,EU +1053294592,1053299711,EU +1053299712,1053299967,GB +1053299968,1053300223,EU +1053300224,1053300479,GB +1053300480,1053300991,EU +1053300992,1053301247,FR +1053301248,1053307903,EU 1053307904,1053308415,GB -1053308416,1053313535,EU -1053313536,1053313791,GB -1053313792,1053316607,EU +1053308416,1053313279,EU +1053313280,1053313535,GB +1053313536,1053316607,EU 1053316608,1053316863,GB -1053316864,1053329407,EU +1053316864,1053327615,EU +1053327616,1053327871,ZA +1053327872,1053329407,EU 1053329408,1053329663,ES 1053329664,1053340927,EU 1053340928,1053341183,GB @@ -7637,19 +7493,17 @@ 1053655040,1053663231,UA 1053663232,1053671423,RU 1053671424,1053687807,LV -1053687808,1053720895,DE -1053720896,1053720959,GB -1053720960,1053753343,DE +1053687808,1053753343,DE 1053753344,1053818879,NL -1053818880,1053843455,EU -1053843456,1053843711,GB -1053843712,1053856511,EU +1053818880,1053837823,EU +1053837824,1053837951,FK +1053837952,1053856511,EU 1053856512,1053856767,GB 1053856768,1053857791,EU 1053857792,1053858047,GB -1053858048,1053858655,EU -1053858656,1053858687,GB -1053858688,1053876479,EU +1053858048,1053858559,EU +1053858560,1053858815,GB +1053858816,1053876479,EU 1053876480,1053876735,GB 1053876736,1053884415,EU 1053884416,1053892607,BH @@ -7663,21 +7517,27 @@ 1053949952,1054015487,FR 1054015488,1054089215,IT 1054089216,1054097407,GE -1054097408,1054099583,NL -1054099584,1054099711,DE -1054099712,1054105599,NL +1054097408,1054105599,NL 1054105600,1054113791,FR 1054113792,1054121983,NL 1054121984,1054130175,AT 1054130176,1054138367,LT 1054138368,1054146559,AZ 1054146560,1054179327,RU -1054179328,1054183807,GB -1054183808,1054183935,DE -1054183936,1054187519,GB +1054179328,1054183423,GB +1054183424,1054185471,DE +1054185472,1054187519,GB 1054187520,1054195711,BG 1054195712,1054212095,BE -1054212096,1054277631,DE +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 1054277632,1054343167,KW 1054343168,1054351359,NL 1054351360,1054359551,UA @@ -7704,26 +7564,32 @@ 1054646272,1054654463,SE 1054654464,1054662655,MK 1054662656,1054670847,FI -1054670848,1054672127,EU -1054672128,1054672383,DE -1054672384,1054679039,EU +1054670848,1054679039,EU 1054679040,1054687231,UA 1054687232,1054703615,MD 1054703616,1054711807,BG 1054711808,1054719999,IT 1054720000,1054867455,NL -1054867456,1054941695,DE -1054941696,1054941951,BE -1054941952,1054948253,DE +1054867456,1054948253,DE 1054948254,1054948254,EU 1054948255,1054949727,DE 1054949728,1054949735,US -1054949736,1054973951,DE +1054949736,1054971487,DE +1054971488,1054971503,AT +1054971504,1054971511,DE +1054971512,1054971519,AT +1054971520,1054973951,DE 1054973952,1054974207,EU 1054974208,1055129599,DE -1055129600,1055163647,CY -1055163648,1055163775,GR -1055163776,1055186943,CY +1055129600,1055133183,CY +1055133184,1055133439,GR +1055133440,1055145983,CY +1055145984,1055146239,GR +1055146240,1055173119,CY +1055173120,1055173631,GR +1055173632,1055174143,CY +1055174144,1055174655,GR +1055174656,1055186943,CY 1055186944,1055194879,GR 1055194880,1055195135,CY 1055195136,1055326207,EU @@ -7757,13 +7623,7 @@ 1056014336,1056022527,EG 1056022528,1056030719,GB 1056030720,1056047103,FI -1056047104,1056143615,DK -1056143616,1056143775,SE -1056143776,1056143839,DK -1056143840,1056143871,SE -1056143872,1056161023,DK -1056161024,1056161279,US -1056161280,1056178175,DK +1056047104,1056178175,DK 1056178176,1056194559,UA 1056194560,1056210943,FR 1056210944,1056219135,PL @@ -7805,13 +7665,9 @@ 1061853696,1061854207,GB 1061854208,1061939711,US 1061939712,1061940223,JM -1061940224,1061991583,US -1061991584,1061991591,AF -1061991592,1062069247,US +1061940224,1062069247,US 1062069248,1062070271,PR -1062070272,1062112767,US -1062112768,1062113023,IN -1062113024,1062219519,US +1062070272,1062219519,US 1062219520,1062219775,IN 1062219776,1062222975,US 1062222976,1062223039,PH @@ -7819,17 +7675,13 @@ 1062244312,1062244319,PH 1062244320,1062262783,US 1062262784,1062263039,PH -1062263040,1062299615,US -1062299616,1062299631,AU -1062299632,1062378767,US +1062263040,1062378767,US 1062378768,1062378783,CA 1062378784,1062429695,US 1062429696,1062430207,PR 1062430208,1062473731,US 1062473732,1062473732,IN -1062473733,1062475935,US -1062475936,1062475951,GB -1062475952,1062486271,US +1062473733,1062486271,US 1062486272,1062486527,MX 1062486528,1062497791,US 1062497792,1062498303,FM @@ -7841,7 +7693,9 @@ 1062597376,1062597631,PR 1062597632,1062636287,US 1062636288,1062636351,GB -1062636352,1062725103,US +1062636352,1062691159,US +1062691160,1062691167,AF +1062691168,1062725103,US 1062725104,1062725111,IL 1062725112,1062871551,US 1062871552,1062872319,PR @@ -7950,13 +7804,13 @@ 1064445184,1064445439,PK 1064445440,1064650751,US 1064650752,1064651775,EC -1064651776,1064662015,US -1064662016,1064662271,GB -1064662272,1064769023,US +1064651776,1064769023,US 1064769024,1064769535,A2 1064769536,1064973055,US 1064973056,1064973183,AU -1064973184,1065389439,US +1064973184,1065049471,US +1065049472,1065049535,CA +1065049536,1065389439,US 1065389440,1065389455,MY 1065389456,1065390591,US 1065390592,1065390599,MY @@ -7964,10 +7818,7 @@ 1065390656,1065390687,MX 1065390688,1065517087,US 1065517088,1065517119,A2 -1065517120,1065519247,US -1065519248,1065519263,IN -1065519264,1065519279,IT -1065519280,1065520895,US +1065517120,1065520895,US 1065520896,1065520911,CA 1065520912,1065520927,IT 1065520928,1065530879,US @@ -7997,7 +7848,17 @@ 1066352640,1066355711,JM 1066355712,1066355967,BB 1066355968,1066369023,JM -1066369024,1066828279,US +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,1066830119,US 1066830120,1066830127,SG @@ -8005,9 +7866,7 @@ 1066830288,1066830303,ML 1066830304,1066830311,US 1066830312,1066830319,SG -1066830320,1066830335,US -1066830336,1066830591,AU -1066830592,1066830783,US +1066830320,1066830783,US 1066830784,1066830799,SG 1066830800,1066830991,US 1066830992,1066831007,JP @@ -8348,9 +8207,7 @@ 1071315712,1071315967,JP 1071315968,1071318783,US 1071318784,1071319039,IN -1071319040,1071319807,US -1071319808,1071320063,CD -1071320064,1071321087,US +1071319040,1071321087,US 1071321088,1071322111,HK 1071322112,1071362063,US 1071362064,1071362079,DM @@ -8411,19 +8268,13 @@ 1071599393,1071599415,PH 1071599416,1071599477,US 1071599478,1071599490,PH -1071599491,1071954175,US -1071954176,1071954279,IE +1071599491,1071954279,US 1071954280,1071954287,FR -1071954288,1071954431,IE -1071954432,1071985631,US +1071954288,1071954375,US +1071954376,1071954383,NE +1071954384,1071985631,US 1071985632,1071985663,ML -1071985664,1071987679,US -1071987680,1071987711,CA -1071987712,1072157599,US -1072157600,1072157615,NE -1072157616,1072157663,GE -1072157664,1072157695,RO -1072157696,1072228863,US +1071985664,1072228863,US 1072228864,1072229375,CA 1072229376,1072360703,US 1072360704,1072360959,HK @@ -8435,9 +8286,13 @@ 1072707328,1072707583,IN 1072707584,1072710327,US 1072710328,1072710335,DE -1072710336,1072715943,US +1072710336,1072712479,US +1072712480,1072712495,IL +1072712496,1072715943,US 1072715944,1072715951,IL -1072715952,1072725071,US +1072715952,1072718031,US +1072718032,1072718039,DE +1072718040,1072725071,US 1072725072,1072725079,NZ 1072725080,1072725311,US 1072725312,1072725343,DE @@ -8455,7 +8310,11 @@ 1072774464,1072774479,JP 1072774480,1072777631,US 1072777632,1072777647,TW -1072777648,1072790015,US +1072777648,1072785415,US +1072785416,1072785423,DK +1072785424,1072785439,US +1072785440,1072785471,DK +1072785472,1072790015,US 1072790016,1072790031,JP 1072790032,1072923135,US 1072923136,1072923391,CA @@ -8465,8 +8324,10 @@ 1072924672,1072925183,US 1072925184,1072925695,GB 1072925696,1072926207,CA -1072926208,1072926463,US -1072926464,1072926719,CA +1072926208,1072926471,US +1072926472,1072926527,CA +1072926528,1072926591,US +1072926592,1072926719,CA 1072926720,1072926975,PH 1072926976,1072927487,CA 1072927488,1072927743,US @@ -8477,9 +8338,7 @@ 1072928128,1072928255,US 1072928256,1072928263,CA 1072928264,1072928287,US -1072928288,1072928322,CA -1072928323,1072928323,GA -1072928324,1072928383,CA +1072928288,1072928383,CA 1072928384,1072928447,US 1072928448,1072928767,CA 1072928768,1072929023,US @@ -8493,8 +8352,8 @@ 1072931584,1072931839,SY 1072931840,1072932607,CA 1072932608,1072932863,NG -1072932864,1072933887,US -1072933888,1072934399,CA +1072932864,1072933119,US +1072933120,1072934399,CA 1072934400,1072934719,US 1072934720,1072934751,CA 1072934752,1072934775,US @@ -8559,7 +8418,9 @@ 1073049600,1073052671,BS 1073052672,1073075460,US 1073075461,1073075716,NL -1073075717,1073093646,US +1073075717,1073091397,US +1073091398,1073091407,CH +1073091408,1073093646,US 1073093647,1073093654,PE 1073093655,1073094557,US 1073094558,1073094570,IT @@ -8567,9 +8428,7 @@ 1073373184,1073381375,CA 1073381376,1073381631,US 1073381632,1073381887,EU -1073381888,1073383519,US -1073383520,1073383551,SV -1073383552,1073383727,US +1073381888,1073383727,US 1073383728,1073383735,CA 1073383736,1073383839,US 1073383840,1073383871,VE @@ -8593,9 +8452,7 @@ 1073385152,1073385183,BR 1073385184,1073385279,US 1073385280,1073385311,BR -1073385312,1073389764,US -1073389765,1073389765,CA -1073389766,1073390207,US +1073385312,1073390207,US 1073390208,1073390215,CA 1073390216,1073390271,US 1073390272,1073390303,CA @@ -8667,7 +8524,9 @@ 1073438208,1073438463,A2 1073438464,1073442863,US 1073442864,1073442879,GB -1073442880,1074020351,US +1073442880,1073448927,US +1073448928,1073448959,IL +1073448960,1074020351,US 1074020352,1074028543,CA 1074028544,1074118655,US 1074118656,1074120703,CA @@ -8692,9 +8551,7 @@ 1074241536,1074397439,US 1074397440,1074399039,CA 1074399040,1074399231,US -1074399232,1074408319,CA -1074408320,1074408447,US -1074408448,1074462463,CA +1074399232,1074462463,CA 1074462464,1074463743,US 1074463744,1074493695,CA 1074493696,1074493823,US @@ -8761,7 +8618,9 @@ 1074708992,1074709247,PH 1074709248,1074711039,US 1074711040,1074711055,IN -1074711056,1074716679,US +1074711056,1074711103,US +1074711104,1074711167,GB +1074711168,1074716679,US 1074716680,1074716687,GB 1074716688,1074716719,US 1074716720,1074716735,GB @@ -8796,14 +8655,16 @@ 1075269632,1075421183,US 1075421184,1075429375,CA 1075429376,1075478527,US -1075478528,1075479607,CA +1075478528,1075479103,CA +1075479104,1075479111,GB +1075479112,1075479135,CA +1075479136,1075479151,US +1075479152,1075479607,CA 1075479608,1075479615,US -1075479616,1075491359,CA -1075491360,1075491375,SE -1075491376,1075494911,CA -1075494912,1075497983,US -1075497984,1075498495,IN -1075498496,1075513151,US +1075479616,1075482655,CA +1075482656,1075482671,US +1075482672,1075494911,CA +1075494912,1075513151,US 1075513152,1075513183,KW 1075513184,1075532663,US 1075532664,1075532673,IT @@ -8894,15 +8755,13 @@ 1075982848,1075983199,CA 1075983200,1075983231,US 1075983232,1075984383,CA -1075984384,1075984823,US -1075984824,1075984831,CA -1075984832,1075985919,US +1075984384,1075985919,US 1075985920,1075989055,CA 1075989056,1075989119,US -1075989120,1075989247,CA -1075989248,1075989279,FI +1075989120,1075989263,CA +1075989264,1075989279,US 1075989280,1075989295,CA -1075989296,1075989311,FI +1075989296,1075989311,US 1075989312,1075989327,CA 1075989328,1075989335,US 1075989336,1075989359,CA @@ -8945,7 +8804,7 @@ 1075995584,1075996671,CA 1075996672,1075996751,US 1075996752,1075996767,CA -1075996768,1075996799,BV +1075996768,1075996799,US 1075996800,1075997119,CA 1075997120,1075997183,MX 1075997184,1075997519,CA @@ -9093,7 +8952,9 @@ 1076030320,1076030335,US 1076030336,1076030399,CA 1076030400,1076030463,US -1076030464,1076030623,CA +1076030464,1076030599,CA +1076030600,1076030607,US +1076030608,1076030623,CA 1076030624,1076030631,US 1076030632,1076031487,CA 1076031488,1076031743,US @@ -9291,236 +9152,9 @@ 1076294656,1076294687,CY 1076294688,1076294703,US 1076294704,1076294719,NO -1076294720,1076295071,US -1076295072,1076295087,NL -1076295088,1076295167,US +1076294720,1076295167,US 1076295168,1076295199,CY -1076295200,1076298503,US -1076298504,1076298511,GB -1076298512,1076298591,US -1076298592,1076298607,BD -1076298608,1076298631,US -1076298632,1076298655,BD -1076298656,1076298695,US -1076298696,1076298703,MH -1076298704,1076299823,US -1076299824,1076299831,GB -1076299832,1076299847,US -1076299848,1076299855,VI -1076299856,1076299863,GB -1076299864,1076299871,CA -1076299872,1076299943,US -1076299944,1076299951,IT -1076299952,1076299959,US -1076299960,1076299975,FR -1076299976,1076300015,US -1076300016,1076300031,GB -1076300032,1076300047,US -1076300048,1076300055,BD -1076300056,1076300071,GB -1076300072,1076300079,CK -1076300080,1076300095,IL -1076300096,1076300111,BD -1076300112,1076300119,IN -1076300120,1076300207,US -1076300208,1076300223,RU -1076300224,1076300231,MX -1076300232,1076300255,US -1076300256,1076300271,SE -1076300272,1076300279,ID -1076300280,1076300287,AU -1076300288,1076300295,US -1076300296,1076300303,IN -1076300304,1076300311,US -1076300312,1076300319,GB -1076300320,1076300335,US -1076300336,1076300343,IN -1076300344,1076300383,US -1076300384,1076300391,GB -1076300392,1076300399,IN -1076300400,1076300447,US -1076300448,1076300455,MY -1076300456,1076300463,US -1076300464,1076300471,IN -1076300472,1076300479,US -1076300480,1076300487,IN -1076300488,1076300511,US -1076300512,1076300519,IN -1076300520,1076300527,GB -1076300528,1076300663,US -1076300664,1076300671,AU -1076300672,1076300799,US -1076300800,1076300807,IN -1076300808,1076300847,US -1076300848,1076300855,AU -1076300856,1076300903,US -1076300904,1076300911,IN -1076300912,1076300919,US -1076300920,1076300927,IN -1076300928,1076300991,US -1076300992,1076301007,NZ -1076301008,1076301015,US -1076301016,1076301023,GR -1076301024,1076301047,US -1076301048,1076301055,AU -1076301056,1076301087,US -1076301088,1076301095,CA -1076301096,1076301143,US -1076301144,1076301151,NL -1076301152,1076301159,US -1076301160,1076301167,GB -1076301168,1076301183,US -1076301184,1076301191,AU -1076301192,1076301199,US -1076301200,1076301207,AU -1076301208,1076301263,US -1076301264,1076301271,CA -1076301272,1076301279,IN -1076301280,1076301823,US -1076301824,1076301831,IN -1076301832,1076301871,US -1076301872,1076301879,SE -1076301880,1076301895,US -1076301896,1076301903,IL -1076301904,1076301927,US -1076301928,1076301935,AU -1076301936,1076302359,US -1076302360,1076302367,GB -1076302368,1076302407,US -1076302408,1076302415,IN -1076302416,1076302439,US -1076302440,1076302447,CA -1076302448,1076302495,US -1076302496,1076302503,BD -1076302504,1076302511,GB -1076302512,1076302519,US -1076302520,1076302527,DE -1076302528,1076302639,US -1076302640,1076302655,FR -1076302656,1076302719,US -1076302720,1076302735,NZ -1076302736,1076302751,US -1076302752,1076302759,DK -1076302760,1076302783,US -1076302784,1076302799,IN -1076302800,1076302807,US -1076302808,1076302815,AU -1076302816,1076302839,US -1076302840,1076302847,GB -1076302848,1076302855,NZ -1076302856,1076302879,US -1076302880,1076302887,IN -1076302888,1076302911,US -1076302912,1076302919,IN -1076302920,1076302983,US -1076302984,1076302991,AR -1076302992,1076303079,US -1076303080,1076303087,RU -1076303088,1076303167,US -1076303168,1076303183,CA -1076303184,1076303215,US -1076303216,1076303223,IN -1076303224,1076303231,MX -1076303232,1076303271,US -1076303272,1076303287,AU -1076303288,1076303319,US -1076303320,1076303327,EG -1076303328,1076303335,AU -1076303336,1076303359,US -1076303360,1076303391,BH -1076303392,1076303439,US -1076303440,1076303455,KW -1076303456,1076303495,US -1076303496,1076303511,AU -1076303512,1076303519,CA -1076303520,1076303527,US -1076303528,1076303535,AU -1076303536,1076303551,US -1076303552,1076303559,AU -1076303560,1076303599,US -1076303600,1076303615,AU -1076303616,1076303631,US -1076303632,1076303639,CH -1076303640,1076303647,US -1076303648,1076303655,AU -1076303656,1076303663,US -1076303664,1076303679,GI -1076303680,1076303695,US -1076303696,1076303703,GB -1076303704,1076303711,US -1076303712,1076303719,CA -1076303720,1076303775,US -1076303776,1076303791,AU -1076303792,1076303831,US -1076303832,1076303839,SE -1076303840,1076303983,US -1076303984,1076303991,AU -1076303992,1076304031,US -1076304032,1076304039,CA -1076304040,1076304079,US -1076304080,1076304087,CA -1076304088,1076304127,US -1076304128,1076304135,CA -1076304136,1076304151,US -1076304152,1076304159,CA -1076304160,1076304191,BH -1076304192,1076304215,US -1076304216,1076304223,GI -1076304224,1076304255,US -1076304256,1076304383,IT -1076304384,1076304391,CA -1076304392,1076304407,US -1076304408,1076304415,CA -1076304416,1076304439,US -1076304440,1076304447,CA -1076304448,1076304487,US -1076304488,1076304495,EG -1076304496,1076304567,US -1076304568,1076304575,IN -1076304576,1076304583,BM -1076304584,1076304591,CA -1076304592,1076304607,US -1076304608,1076304615,GB -1076304616,1076304623,US -1076304624,1076304631,GB -1076304632,1076304639,US -1076304640,1076304647,GB -1076304648,1076304655,JP -1076304656,1076304663,SE -1076304664,1076304687,US -1076304688,1076304695,IN -1076304696,1076304751,US -1076304752,1076304759,RU -1076304760,1076304831,US -1076304832,1076304839,VE -1076304840,1076304895,US -1076304896,1076304911,AU -1076304912,1076304919,US -1076304920,1076304927,ES -1076304928,1076304951,US -1076304952,1076304959,NZ -1076304960,1076304991,US -1076304992,1076304999,ID -1076305000,1076305023,US -1076305024,1076305039,CA -1076305040,1076305055,RU -1076305056,1076305079,US -1076305080,1076305087,AT -1076305088,1076305111,GB -1076305112,1076305167,US -1076305168,1076305175,FR -1076305176,1076305191,US -1076305192,1076305207,CA -1076305208,1076305215,AR -1076305216,1076305231,DE -1076305232,1076305239,US -1076305240,1076305247,GB -1076305248,1076305255,VE -1076305256,1076305263,US -1076305264,1076305271,CA -1076305272,1076305303,US -1076305304,1076305311,RU -1076305312,1076306463,US +1076295200,1076306463,US 1076306464,1076306479,GB 1076306480,1076306511,US 1076306512,1076306527,AE @@ -9567,11 +9201,9 @@ 1076406272,1076408063,A2 1076408064,1076408319,US 1076408320,1076412415,CA -1076412416,1076422143,US -1076422144,1076422192,GB +1076412416,1076422192,US 1076422193,1076422193,EU -1076422194,1076422399,GB -1076422400,1076424703,US +1076422194,1076424703,US 1076424704,1076428799,CA 1076428800,1076493311,US 1076493312,1076493375,IN @@ -9604,303 +9236,14 @@ 1076756480,1076772863,CA 1076772864,1076850687,US 1076850688,1076850943,CA -1076850944,1076851455,US -1076851456,1076851711,CA -1076851712,1076880383,US +1076850944,1076880383,US 1076880384,1076880639,CH 1076880640,1076880895,GB 1076880896,1076985855,US 1076985856,1076991487,A2 1076991488,1076991743,US 1076991744,1077002239,A2 -1077002240,1077002255,US -1077002256,1077002271,GB -1077002272,1077002343,US -1077002344,1077002351,VE -1077002352,1077002359,US -1077002360,1077002367,AG -1077002368,1077002399,US -1077002400,1077002407,CA -1077002408,1077002495,US -1077002496,1077002503,CA -1077002504,1077002543,US -1077002544,1077002551,CY -1077002552,1077002559,CA -1077002560,1077002575,US -1077002576,1077002583,CA -1077002584,1077002599,US -1077002600,1077002607,BH -1077002608,1077002823,US -1077002824,1077002831,IN -1077002832,1077002847,FR -1077002848,1077002855,NZ -1077002856,1077002863,AU -1077002864,1077002911,US -1077002912,1077002927,MX -1077002928,1077002935,IN -1077002936,1077002943,CA -1077002944,1077002991,US -1077002992,1077002999,BH -1077003000,1077003023,US -1077003024,1077003039,RU -1077003040,1077003047,AU -1077003048,1077003079,US -1077003080,1077003087,IN -1077003088,1077003199,US -1077003200,1077003231,IN -1077003232,1077003431,US -1077003432,1077003439,IE -1077003440,1077003687,US -1077003688,1077003695,PH -1077003696,1077003711,US -1077003712,1077003727,AU -1077003728,1077003735,DE -1077003736,1077003783,US -1077003784,1077003791,CA -1077003792,1077003807,US -1077003808,1077003815,AU -1077003816,1077003895,US -1077003896,1077003903,IN -1077003904,1077003919,US -1077003920,1077003927,JP -1077003928,1077003959,US -1077003960,1077003967,BH -1077003968,1077003991,US -1077003992,1077003999,AT -1077004000,1077004119,US -1077004120,1077004127,GB -1077004128,1077004143,US -1077004144,1077004159,FR -1077004160,1077004199,US -1077004200,1077004207,NZ -1077004208,1077004239,US -1077004240,1077004247,GB -1077004248,1077004255,US -1077004256,1077004263,AU -1077004264,1077004303,US -1077004304,1077004319,FR -1077004320,1077004327,AU -1077004328,1077004343,US -1077004344,1077004351,AT -1077004352,1077004367,US -1077004368,1077004375,ZA -1077004376,1077004431,US -1077004432,1077004439,CA -1077004440,1077004511,US -1077004512,1077004527,FR -1077004528,1077004543,US -1077004544,1077004559,CA -1077004560,1077004583,US -1077004584,1077004591,CA -1077004592,1077004687,US -1077004688,1077004695,GB -1077004696,1077004703,AE -1077004704,1077004735,FR -1077004736,1077004743,US -1077004744,1077004751,CA -1077004752,1077004759,US -1077004760,1077004767,NZ -1077004768,1077004783,US -1077004784,1077004791,CA -1077004792,1077004799,GB -1077004800,1077004815,CA -1077004816,1077004847,US -1077004848,1077004863,CA -1077004864,1077004871,US -1077004872,1077004879,GB -1077004880,1077005119,US -1077005120,1077005151,AU -1077005152,1077005295,US -1077005296,1077005303,CN -1077005304,1077005487,US -1077005488,1077005503,CA -1077005504,1077005535,US -1077005536,1077005543,AU -1077005544,1077005551,US -1077005552,1077005559,CA -1077005560,1077005631,US -1077005632,1077005695,AU -1077005696,1077005823,US -1077005824,1077005839,AU -1077005840,1077005895,US -1077005896,1077005903,RU -1077005904,1077005911,VE -1077005912,1077005943,US -1077005944,1077005951,TR -1077005952,1077006023,US -1077006024,1077006031,IN -1077006032,1077006039,US -1077006040,1077006047,NZ -1077006048,1077006071,US -1077006072,1077006079,IN -1077006080,1077006159,US -1077006160,1077006167,AE -1077006168,1077006407,US -1077006408,1077006415,CA -1077006416,1077006463,US -1077006464,1077006471,AU -1077006472,1077006623,US -1077006624,1077006631,GB -1077006632,1077006639,ES -1077006640,1077006647,IE -1077006648,1077006719,US -1077006720,1077006735,AU -1077006736,1077006743,US -1077006744,1077006751,IL -1077006752,1077006847,US -1077006848,1077006863,CA -1077006864,1077006887,US -1077006888,1077006895,IN -1077006896,1077006927,US -1077006928,1077006935,CA -1077006936,1077006943,AR -1077006944,1077006959,US -1077006960,1077006967,MX -1077006968,1077006991,US -1077006992,1077006999,CA -1077007000,1077007007,HK -1077007008,1077007063,CA -1077007064,1077007071,US -1077007072,1077007087,CA -1077007088,1077007103,US -1077007104,1077007111,NL -1077007112,1077007119,CA -1077007120,1077007167,US -1077007168,1077007191,CA -1077007192,1077007199,KR -1077007200,1077007247,US -1077007248,1077007255,BZ -1077007256,1077007287,US -1077007288,1077007295,CA -1077007296,1077007303,AU -1077007304,1077007311,IN -1077007312,1077007935,US -1077007936,1077007943,AU -1077007944,1077007967,US -1077007968,1077007983,NL -1077007984,1077008047,US -1077008048,1077008063,FR -1077008064,1077008127,US -1077008128,1077008191,CA -1077008192,1077008207,US -1077008208,1077008215,CA -1077008216,1077008239,US -1077008240,1077008271,CA -1077008272,1077008295,US -1077008296,1077008311,CA -1077008312,1077008319,US -1077008320,1077008335,CA -1077008336,1077008343,US -1077008344,1077008383,CA -1077008384,1077008431,US -1077008432,1077008439,PH -1077008440,1077008735,US -1077008736,1077008751,BM -1077008752,1077008879,US -1077008880,1077008895,GB -1077008896,1077010431,US -1077010432,1077010439,HK -1077010440,1077011247,US -1077011248,1077011255,CA -1077011256,1077011287,US -1077011288,1077011295,AU -1077011296,1077011311,US -1077011312,1077011319,IN -1077011320,1077011327,TR -1077011328,1077011599,US -1077011600,1077011607,EG -1077011608,1077011615,NZ -1077011616,1077011807,US -1077011808,1077011823,GR -1077011824,1077011831,AT -1077011832,1077012031,US -1077012032,1077012039,CO -1077012040,1077012063,US -1077012064,1077012079,AU -1077012080,1077012111,US -1077012112,1077012127,GB -1077012128,1077012143,US -1077012144,1077012159,EG -1077012160,1077012167,GB -1077012168,1077012295,US -1077012296,1077012303,HK -1077012304,1077012311,IN -1077012312,1077012455,US -1077012456,1077012463,IN -1077012464,1077012495,US -1077012496,1077012511,IT -1077012512,1077012559,US -1077012560,1077012567,CA -1077012568,1077012575,US -1077012576,1077012583,ES -1077012584,1077013247,US -1077013248,1077013255,HK -1077013256,1077013263,US -1077013264,1077013279,MX -1077013280,1077013343,US -1077013344,1077013351,AU -1077013352,1077013359,US -1077013360,1077013375,NL -1077013376,1077013391,US -1077013392,1077013399,HK -1077013400,1077013407,US -1077013408,1077013415,NZ -1077013416,1077013431,US -1077013432,1077013439,NZ -1077013440,1077013511,US -1077013512,1077013519,NZ -1077013520,1077013551,US -1077013552,1077013559,IN -1077013560,1077013567,RU -1077013568,1077013647,US -1077013648,1077013663,DK -1077013664,1077013671,US -1077013672,1077013679,CA -1077013680,1077013695,US -1077013696,1077013703,CA -1077013704,1077013735,US -1077013736,1077013743,CR -1077013744,1077013759,IN -1077013760,1077014111,US -1077014112,1077014127,MX -1077014128,1077014151,US -1077014152,1077014159,AU -1077014160,1077014167,US -1077014168,1077014175,IN -1077014176,1077014527,US -1077014528,1077014535,CA -1077014536,1077014567,US -1077014568,1077014575,FR -1077014576,1077014607,US -1077014608,1077014623,BY -1077014624,1077014631,US -1077014632,1077014639,IN -1077014640,1077014647,US -1077014648,1077014703,HK -1077014704,1077014711,ZA -1077014712,1077014743,US -1077014744,1077014767,AE -1077014768,1077015551,US -1077015552,1077015559,GB -1077015560,1077015623,US -1077015624,1077015631,IN -1077015632,1077015831,US -1077015832,1077015847,ZA -1077015848,1077015871,US -1077015872,1077015879,CA -1077015880,1077015919,US -1077015920,1077015935,GB -1077015936,1077017327,US -1077017328,1077017335,IN -1077017336,1077017439,US -1077017440,1077017455,FR -1077017456,1077017631,US -1077017632,1077017647,VG -1077017648,1077018023,US -1077018024,1077018031,GB -1077018032,1077018079,US -1077018080,1077018111,BD -1077018112,1077055487,US +1077002240,1077055487,US 1077055488,1077059583,CA 1077059584,1077383167,US 1077383168,1077384191,US @@ -10566,110 +9909,7 @@ 1077940183,1077940186,CA 1077940187,1077940213,US 1077940214,1077940217,MX -1077940218,1077942289,US -1077942290,1077942290,CN -1077942291,1077942310,US -1077942311,1077942314,AU -1077942315,1077942342,US -1077942343,1077942346,CN -1077942347,1077942363,US -1077942364,1077942367,AU -1077942368,1077942390,US -1077942391,1077942398,CA -1077942399,1077942411,US -1077942412,1077942415,CA -1077942416,1077942427,US -1077942428,1077942431,CA -1077942432,1077942435,SG -1077942436,1077942443,US -1077942444,1077942447,IN -1077942448,1077942456,US -1077942457,1077942461,CN -1077942462,1077942493,US -1077942494,1077942497,MX -1077942498,1077942501,VN -1077942502,1077942505,IN -1077942506,1077942509,GB -1077942510,1077942513,AE -1077942514,1077942535,US -1077942536,1077942539,AU -1077942540,1077942543,IN -1077942544,1077942544,US -1077942545,1077942559,CN -1077942560,1077942572,US -1077942573,1077942576,CA -1077942577,1077942600,US -1077942601,1077942604,PE -1077942605,1077942608,CO -1077942609,1077942612,JP -1077942613,1077942616,US -1077942617,1077942620,MX -1077942621,1077942624,BD -1077942625,1077942636,US -1077942637,1077942640,AU -1077942641,1077942656,US -1077942657,1077942660,CA -1077942661,1077942672,US -1077942673,1077942676,AU -1077942677,1077942718,US -1077942719,1077942722,CA -1077942723,1077942746,US -1077942747,1077942750,GB -1077942751,1077942754,MY -1077942755,1077942758,UA -1077942759,1077942762,US -1077942763,1077942766,AU -1077942767,1077942770,SG -1077942771,1077942813,US -1077942814,1077942817,OM -1077942818,1077942850,US -1077942851,1077942854,CN -1077942855,1077942858,ID -1077942859,1077942867,US -1077942868,1077942871,CA -1077942872,1077942889,US -1077942890,1077942893,ES -1077942894,1077942922,US -1077942923,1077942926,ZA -1077942927,1077942930,CA -1077942931,1077942943,US -1077942944,1077942947,CA -1077942948,1077942960,US -1077942961,1077942964,OM -1077942965,1077942972,US -1077942973,1077942976,CA -1077942977,1077942984,US -1077942985,1077942988,IN -1077942989,1077942992,NZ -1077942993,1077943028,US -1077943029,1077943038,TH -1077943039,1077943045,US -1077943046,1077943053,FI -1077943054,1077943096,US -1077943097,1077943100,AU -1077943101,1077943104,US -1077943105,1077943108,CN -1077943109,1077943109,US -1077943110,1077943110,CN -1077943111,1077943139,US -1077943140,1077943143,IN -1077943144,1077943175,US -1077943176,1077943179,DO -1077943180,1077943183,AU -1077943184,1077943191,CA -1077943192,1077943224,US -1077943225,1077943228,MY -1077943229,1077943242,US -1077943243,1077943246,IN -1077943247,1077943247,US -1077943248,1077943251,PK -1077943252,1077943270,US -1077943271,1077943274,BD -1077943275,1077943279,US -1077943280,1077943283,CN -1077943284,1077943287,SG -1077943288,1077943291,TH -1077943292,1077960751,US +1077940218,1077960751,US 1077960752,1077960759,CA 1077960760,1077960791,US 1077960792,1077960799,CO @@ -10746,8 +9986,7 @@ 1078284032,1078284255,CA 1078284256,1078284351,US 1078284352,1078284367,CA -1078284368,1078284383,BV -1078284384,1078284399,US +1078284368,1078284399,US 1078284400,1078284687,CA 1078284688,1078284695,US 1078284696,1078284703,MX @@ -10857,11 +10096,7 @@ 1078433318,1078433343,IT 1078433344,1078433631,US 1078433632,1078433663,CN -1078433664,1078434079,US -1078434080,1078434087,LV -1078434088,1078434271,US -1078434272,1078434303,GR -1078434304,1078434759,US +1078433664,1078434759,US 1078434760,1078434767,BE 1078434768,1078434775,US 1078434776,1078434783,JP @@ -10935,17 +10170,13 @@ 1078581312,1078581327,CR 1078581328,1078581359,US 1078581360,1078581391,IN -1078581392,1078581503,US -1078581504,1078581759,CA -1078581760,1078615679,US +1078581392,1078615679,US 1078615680,1078615711,GB 1078615712,1078621695,US 1078621696,1078621951,IN 1078621952,1078651055,US 1078651056,1078651071,CA -1078651072,1078654431,US -1078654432,1078654439,AU -1078654440,1078660799,US +1078651072,1078660799,US 1078660800,1078660831,CN 1078660832,1078661807,US 1078661808,1078661823,IN @@ -11148,9 +10379,7 @@ 1079328512,1079328767,CA 1079328768,1079329919,US 1079329920,1079329951,CA -1079329952,1079355967,US -1079355968,1079355991,CA -1079355992,1079377919,US +1079329952,1079377919,US 1079377920,1079378943,CA 1079378944,1079379199,US 1079379200,1079379455,CA @@ -11304,7 +10533,9 @@ 1079626992,1079627775,PR 1079627776,1079664639,US 1079664640,1079668735,CA -1079668736,1079861247,US +1079668736,1079827871,US +1079827872,1079827887,RU +1079827888,1079861247,US 1079861248,1079865343,CA 1079865344,1079943999,US 1079944000,1079944031,AU @@ -11314,9 +10545,7 @@ 1079953568,1079953599,GB 1079953600,1079962879,US 1079962880,1079963135,GB -1079963136,1080021999,US -1080022000,1080022007,GT -1080022008,1080024319,US +1079963136,1080024319,US 1080024320,1080024575,CA 1080024576,1080030527,US 1080030528,1080030591,AR @@ -11325,10 +10554,10 @@ 1080295424,1080492031,US 1080492032,1080496127,BE 1080496128,1080498431,US -1080498432,1080498559,FR -1080498560,1080498664,US +1080498432,1080498664,GB 1080498665,1080498665,EU -1080498666,1080501503,US +1080498666,1080498687,GB +1080498688,1080501503,US 1080501504,1080501759,EU 1080501760,1080508415,US 1080508416,1080516607,GB @@ -11336,21 +10565,22 @@ 1080524800,1080543231,IN 1080543232,1080549375,US 1080549376,1080557567,IN -1080557568,1080569343,US -1080569344,1080569599,JP -1080569600,1080569730,US -1080569731,1080569731,JP -1080569732,1080570367,US -1080570368,1080570623,JP -1080570624,1080578047,US -1080578048,1080580095,SG -1080580096,1080581887,US +1080557568,1080565759,US +1080565760,1080573951,JP +1080573952,1080581631,US +1080581632,1080581887,SG 1080581888,1080582143,AP -1080582144,1080590335,US +1080582144,1080589311,US +1080589312,1080589567,SG +1080589568,1080590335,US 1080590336,1080598527,IN 1080598528,1080606719,US -1080606720,1080619007,AU -1080619008,1080622079,US +1080606720,1080614911,AU +1080614912,1080615679,US +1080615680,1080615935,AU +1080615936,1080621311,US +1080621312,1080621567,AU +1080621568,1080622079,US 1080622080,1080622335,AU 1080622336,1080722827,US 1080722828,1080722837,IT @@ -11663,12 +10893,22 @@ 1081487992,1081488111,US 1081488112,1081488119,A2 1081488120,1081488123,US -1081488124,1081488127,A2 -1081488128,1081489671,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,1081565183,US +1081489920,1081546495,US +1081546496,1081546751,CA +1081546752,1081565183,US 1081565184,1081573375,CA 1081573376,1081581615,US 1081581616,1081581623,JP @@ -11723,9 +10963,7 @@ 1081588768,1081589759,US 1081589760,1081593855,BB 1081593856,1081597951,CA -1081597952,1081607759,US -1081607760,1081607767,CA -1081607768,1081608191,US +1081597952,1081608191,US 1081608192,1081608207,CA 1081608208,1081608223,US 1081608224,1081608231,CA @@ -11764,15 +11002,7 @@ 1081612192,1081612655,US 1081612656,1081612663,CA 1081612664,1081612671,IN -1081612672,1081613351,US -1081613352,1081613359,CA -1081613360,1081613399,US -1081613400,1081613407,CA -1081613408,1081613447,US -1081613448,1081613455,CA -1081613456,1081613543,US -1081613544,1081613551,CA -1081613552,1081618047,US +1081612672,1081618047,US 1081618048,1081618055,ZA 1081618056,1081618079,US 1081618080,1081618095,ZA @@ -11784,19 +11014,15 @@ 1081625672,1081625679,CA 1081625680,1081625775,US 1081625776,1081625783,CA -1081625784,1081630903,US -1081630904,1081630911,CA -1081630912,1081633919,US +1081625784,1081633919,US 1081633920,1081634047,IN 1081634048,1081872663,US 1081872664,1081872671,FI 1081872672,1081912575,US 1081912576,1081912639,DE -1081912640,1081914879,US -1081914880,1081915135,GB -1081915136,1081977919,US -1081977920,1081977935,GB -1081977936,1081978623,US +1081912640,1081927135,US +1081927136,1081927143,GB +1081927144,1081978623,US 1081978624,1081978631,CH 1081978632,1082091263,US 1082091264,1082091271,CN @@ -11804,7 +11030,9 @@ 1082093680,1082093695,AU 1082093696,1082097055,US 1082097056,1082097071,CA -1082097072,1082138623,US +1082097072,1082131199,US +1082131200,1082131455,AS +1082131456,1082138623,US 1082138624,1082139409,A2 1082139410,1082139410,ZA 1082139411,1082140671,A2 @@ -11872,9 +11100,9 @@ 1082350656,1082350671,IT 1082350672,1082350911,US 1082350912,1082350943,RU -1082350944,1082351359,US -1082351360,1082351615,SA -1082351616,1082419455,US +1082350944,1082351361,US +1082351362,1082351362,SA +1082351363,1082419455,US 1082419456,1082419711,A2 1082419712,1082679807,US 1082683392,1082687487,CA @@ -11888,7 +11116,9 @@ 1082790144,1082790399,IN 1082790400,1082819839,US 1082819840,1082820351,IN -1082820352,1082945535,US +1082820352,1082885855,US +1082885856,1082885887,CA +1082885888,1082945535,US 1082945536,1082948943,CA 1082948944,1082948959,US 1082948960,1082949631,CA @@ -11896,9 +11126,7 @@ 1082952704,1082952959,CA 1082952960,1082982399,US 1082982400,1083015167,CA -1083015168,1083145727,US -1083145728,1083145983,MX -1083145984,1083261311,US +1083015168,1083261311,US 1083261312,1083261439,US 1083261440,1083264383,US 1083264384,1083264447,US @@ -11908,7 +11136,9 @@ 1083265024,1083265279,CA 1083265280,1083396095,US 1083396096,1083400191,BM -1083400192,1083417727,US +1083400192,1083413247,US +1083413248,1083413375,CA +1083413376,1083417727,US 1083417728,1083417791,CA 1083417792,1083437055,US 1083437056,1083441151,CA @@ -12053,17 +11283,19 @@ 1087379456,1087379711,GB 1087379712,1087385855,US 1087385856,1087386111,EU -1087386112,1087393791,US -1087393792,1087395503,GB +1087386112,1087395327,US +1087395328,1087395503,GB 1087395504,1087395511,US -1087395512,1087395839,GB -1087395840,1087399167,US +1087395512,1087395583,GB +1087395584,1087399167,US 1087399168,1087399423,GB 1087399424,1087401727,US 1087401728,1087401791,GB -1087401792,1087419135,US -1087419136,1087419391,GB -1087419392,1087419903,US +1087401792,1087401855,US +1087401856,1087401887,MX +1087401888,1087401919,US +1087401920,1087401983,MX +1087401984,1087419903,US 1087419904,1087420159,CA 1087420160,1087432599,US 1087432600,1087432607,FR @@ -12090,18 +11322,22 @@ 1087496960,1087497855,US 1087497856,1087497887,CA 1087497888,1087514879,US -1087514880,1087515391,BB -1087515392,1087515647,US +1087514880,1087515135,BB +1087515136,1087515647,US 1087515648,1087516671,BB 1087516672,1087554751,US 1087554752,1087554759,IL 1087554760,1087580927,US 1087580928,1087581183,BR -1087581184,1087608485,US -1087608486,1087608486,GB -1087608487,1087643723,US +1087581184,1087596031,US +1087596032,1087596287,DE +1087596288,1087608319,US +1087608320,1087608575,GB +1087608576,1087643723,US 1087643724,1087643727,FR -1087643728,1087678623,US +1087643728,1087651839,US +1087651840,1087655935,VE +1087655936,1087678623,US 1087678624,1087678655,GB 1087678656,1087686655,US 1087686656,1087686911,PR @@ -12121,9 +11357,7 @@ 1087729664,1087733759,PR 1087733760,1087735639,US 1087735640,1087735647,GB -1087735648,1087738879,US -1087738880,1087739135,AR -1087739136,1087746079,US +1087735648,1087746079,US 1087746080,1087746083,HK 1087746084,1087758335,US 1087758336,1087766527,PR @@ -12134,11 +11368,13 @@ 1087825920,1087839231,US 1087839232,1087839743,GB 1087839744,1087854079,US -1087854080,1087854335,GB -1087854336,1087862783,US +1087854080,1087854591,GB +1087854592,1087862783,US 1087862784,1087864831,PA 1087864832,1087873023,US -1087873024,1087874559,CA +1087873024,1087873535,CA +1087873536,1087873791,US +1087873792,1087874559,CA 1087874560,1087874815,US 1087874816,1087875071,CA 1087875072,1087883263,US @@ -12235,12 +11471,16 @@ 1089172984,1089172991,US 1089172992,1089173119,NL 1089173120,1089173247,A2 -1089173248,1089174271,US -1089174272,1089175551,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 -1089191936,1089196623,CA -1089196624,1089196639,US -1089196640,1089200127,CA +1089191936,1089200127,CA 1089200128,1089200751,US 1089200752,1089200783,CA 1089200784,1089203439,US @@ -12312,7 +11552,9 @@ 1089493632,1089493647,CA 1089493648,1089503871,US 1089503872,1089503879,CA -1089503880,1089526783,US +1089503880,1089507159,US +1089507160,1089507167,CA +1089507168,1089526783,US 1089526784,1089527039,VE 1089527040,1089552383,US 1089552384,1089552391,AU @@ -12322,9 +11564,7 @@ 1089574320,1089574327,CA 1089574328,1089576623,US 1089576624,1089576631,CA -1089576632,1089579215,US -1089579216,1089579223,VI -1089579224,1089579519,US +1089576632,1089579519,US 1089579520,1089580031,VE 1089580032,1089581287,US 1089581288,1089581295,CA @@ -12386,15 +11626,25 @@ 1090356328,1090356335,US 1090356336,1090356399,CA 1090356400,1090356415,US -1090356416,1090363391,CA +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 1090363392,1090387967,US 1090387968,1090396159,CA -1090396160,1090424287,US -1090424288,1090424319,FI -1090424320,1090424831,US +1090396160,1090424831,US 1090424832,1090428927,CA 1090428928,1090445311,US -1090445312,1090453503,CA +1090445312,1090447359,CA +1090447360,1090447487,US +1090447488,1090448127,CA +1090448128,1090448255,US +1090448256,1090453503,CA 1090453504,1090497903,US 1090497904,1090497919,AU 1090497920,1091683357,US @@ -12458,13 +11708,7 @@ 1091694878,1091694887,DE 1091694888,1091695007,US 1091695008,1091695017,CA -1091695018,1091695123,US -1091695124,1091695163,CA -1091695164,1091695213,US -1091695214,1091695223,CA -1091695224,1091695283,US -1091695284,1091695293,CA -1091695294,1091797263,US +1091695018,1091797263,US 1091797264,1091797279,IT 1091797280,1091797975,US 1091797976,1091797983,US @@ -12575,7 +11819,7 @@ 1093111904,1093111935,CA 1093111936,1093111943,US 1093111944,1093111959,CA -1093111960,1093111967,BV +1093111960,1093111967,US 1093111968,1093112431,CA 1093112432,1093112479,US 1093112480,1093112543,CA @@ -12634,9 +11878,7 @@ 1093119744,1093119831,CA 1093119832,1093119839,US 1093119840,1093120383,CA -1093120384,1093120399,US -1093120400,1093120415,BV -1093120416,1093120431,US +1093120384,1093120431,US 1093120432,1093120767,CA 1093120768,1093120911,US 1093120912,1093120943,CA @@ -12726,10 +11968,8 @@ 1093136896,1093137351,CA 1093137352,1093137359,US 1093137360,1093137375,MX -1093137376,1093138175,CA -1093138176,1093138303,US -1093138304,1093138319,CA -1093138320,1093138559,US +1093137376,1093138431,CA +1093138432,1093138559,US 1093138560,1093138623,CA 1093138624,1093138687,NL 1093138688,1093139455,US @@ -12738,9 +11978,11 @@ 1093139648,1093139679,CA 1093139680,1093139695,US 1093139696,1093140223,CA -1093140224,1093671591,US -1093671592,1093671599,UY -1093671600,1093697535,US +1093140224,1093320191,US +1093320192,1093320255,PR +1093320256,1093320287,US +1093320288,1093320447,PR +1093320448,1093697535,US 1093697536,1093699071,BB 1093699072,1093700607,GD 1093700608,1093701631,VC @@ -12776,146 +12018,7 @@ 1093748800,1093748863,CN 1093748864,1094441727,US 1094441728,1094441983,US -1094441984,1094549687,US -1094549688,1094549695,CA -1094549696,1094549783,US -1094549784,1094549791,AU -1094549792,1094549807,US -1094549808,1094549815,UZ -1094549816,1094549863,US -1094549864,1094549871,BD -1094549872,1094549935,US -1094549936,1094549943,CA -1094549944,1094549951,CY -1094549952,1094550223,US -1094550224,1094550239,AU -1094550240,1094550247,BD -1094550248,1094550487,US -1094550488,1094550495,RO -1094550496,1094550607,US -1094550608,1094550615,BD -1094550616,1094550679,US -1094550680,1094550695,VE -1094550696,1094550799,US -1094550800,1094550807,NL -1094550808,1094550823,US -1094550824,1094550831,CA -1094550832,1094550847,US -1094550848,1094550855,IN -1094550856,1094550879,US -1094550880,1094550887,NZ -1094550888,1094550895,JP -1094550896,1094550911,US -1094550912,1094550919,JM -1094550920,1094550967,US -1094550968,1094550975,JM -1094550976,1094550991,US -1094550992,1094550999,NL -1094551000,1094551207,US -1094551208,1094551215,GB -1094551216,1094551231,AU -1094551232,1094551455,US -1094551456,1094551471,SE -1094551472,1094551839,US -1094551840,1094551855,GB -1094551856,1094552023,US -1094552024,1094552031,IN -1094552032,1094552191,US -1094552192,1094552199,GB -1094552200,1094552239,US -1094552240,1094552247,IN -1094552248,1094552287,US -1094552288,1094552311,NZ -1094552312,1094552319,US -1094552320,1094552335,IN -1094552336,1094552375,US -1094552376,1094552383,AE -1094552384,1094552527,US -1094552528,1094552543,CY -1094552544,1094552551,US -1094552552,1094552559,NL -1094552560,1094553855,US -1094553856,1094553863,GB -1094553864,1094553927,US -1094553928,1094553935,IN -1094553936,1094553975,US -1094553976,1094553983,NZ -1094553984,1094554879,US -1094554880,1094554887,LK -1094554888,1094554967,US -1094554968,1094554975,UZ -1094554976,1094555077,US -1094555078,1094555081,IN -1094555082,1094556191,US -1094556192,1094556207,IN -1094556208,1094556703,US -1094556704,1094556719,CA -1094556720,1094556783,US -1094556784,1094556799,NZ -1094556800,1094557183,US -1094557184,1094557199,AU -1094557200,1094557271,US -1094557272,1094557279,CA -1094557280,1094557751,US -1094557752,1094557759,GB -1094557760,1094558463,US -1094558464,1094558471,JP -1094558472,1094558751,US -1094558752,1094558783,CA -1094558784,1094558975,US -1094558976,1094558991,BD -1094558992,1094559535,US -1094559536,1094559551,GB -1094559552,1094559623,US -1094559624,1094559631,CA -1094559632,1094559743,US -1094559744,1094559775,AU -1094559776,1094559807,US -1094559808,1094559903,AU -1094559904,1094559919,US -1094559920,1094559935,AU -1094559936,1094560063,US -1094560064,1094560103,FR -1094560104,1094560255,US -1094560256,1094560263,IN -1094560264,1094560279,US -1094560280,1094560287,GB -1094560288,1094560319,US -1094560320,1094560335,IN -1094560336,1094560831,US -1094560832,1094560863,BD -1094560864,1094560895,US -1094560896,1094561023,CA -1094561024,1094561047,US -1094561048,1094561055,CA -1094561056,1094561311,US -1094561312,1094561319,ES -1094561320,1094561327,CA -1094561328,1094561399,US -1094561400,1094561407,IL -1094561408,1094561535,US -1094561536,1094561639,HK -1094561640,1094561831,US -1094561832,1094561839,AU -1094561840,1094561855,US -1094561856,1094561919,AU -1094561920,1094562431,US -1094562432,1094562455,TH -1094562456,1094562799,US -1094562800,1094562807,CA -1094562808,1094562879,US -1094562880,1094562895,MX -1094562896,1094562911,US -1094562912,1094562927,DK -1094562928,1094563743,US -1094563744,1094563775,BD -1094563776,1094563887,US -1094563888,1094563895,MX -1094563896,1094564671,US -1094564672,1094564703,BD -1094564704,1094565695,US -1094565696,1094565727,BD -1094565728,1094565887,US +1094441984,1094565887,US 1094565888,1094582271,CA 1094582272,1094662271,US 1094662272,1094662303,CN @@ -12929,11 +12032,7 @@ 1095450624,1095467007,BS 1095467008,1095627775,US 1095627776,1095628287,CA -1095628288,1095740415,US -1095740416,1095740671,IN -1095740672,1096224919,US -1096224920,1096224927,CO -1096224928,1096278015,US +1095628288,1096278015,US 1096278016,1096286207,CA 1096286208,1096290879,US 1096290880,1096290943,A2 @@ -12954,9 +12053,7 @@ 1096890880,1096891135,GB 1096891136,1096925183,US 1096925184,1096941567,CA -1096941568,1096947471,US -1096947472,1096947479,MY -1096947480,1096950551,US +1096941568,1096950551,US 1096950552,1096950559,CA 1096950560,1096952455,US 1096952456,1096952463,GB @@ -13011,7 +12108,9 @@ 1097131472,1097727999,US 1097728000,1097729151,CA 1097729152,1097729167,US -1097729168,1097736191,CA +1097729168,1097731447,CA +1097731448,1097731455,GB +1097731456,1097736191,CA 1097736192,1097768959,US 1097768960,1097777151,CA 1097785344,1097830399,US @@ -13028,9 +12127,7 @@ 1097947136,1097949183,VI 1097949184,1097951231,US 1097951232,1097953279,VI -1097953280,1098057375,US -1098057376,1098057407,CA -1098057408,1098083895,US +1097953280,1098083895,US 1098083896,1098083903,ME 1098083904,1098187599,US 1098187600,1098187607,GB @@ -13046,9 +12143,7 @@ 1098398976,1098399231,A2 1098399232,1098399487,US 1098399488,1098399743,A2 -1098399744,1098507263,US -1098507264,1098507519,CA -1098507520,1098891575,US +1098399744,1098891575,US 1098891576,1098891607,AU 1098891608,1098891623,US 1098891624,1098891631,AU @@ -13097,9 +12192,7 @@ 1101339888,1101339903,CA 1101339904,1101352959,US 1101352960,1101355007,HN -1101355008,1101384415,US -1101384416,1101384447,CA -1101384448,1101385855,US +1101355008,1101385855,US 1101385856,1101385919,DK 1101385920,1101402031,US 1101402032,1101402047,PR @@ -13153,9 +12246,7 @@ 1101791744,1101791999,A2 1101792000,1101792255,US 1101792256,1101792767,A2 -1101792768,1101798143,US -1101798144,1101798399,BB -1101798400,1101803519,US +1101792768,1101803519,US 1101803520,1101804543,HN 1101804544,1101837311,US 1101837312,1101837567,EC @@ -13163,17 +12254,17 @@ 1101856768,1101856775,DK 1101856776,1101857295,US 1101857296,1101857311,CA -1101857312,1101864223,US -1101864224,1101864255,BE -1101864256,1101869055,US +1101857312,1101869055,US 1101869056,1101869567,GH 1101869568,1101871103,US 1101871104,1101873151,BO -1101873152,1101905407,US +1101873152,1101881935,US +1101881936,1101881951,GB +1101881952,1101905407,US 1101905408,1101905663,GH -1101905664,1101921407,US -1101921408,1101921471,BA -1101921472,1101983231,US +1101905664,1101952439,US +1101952440,1101952447,CA +1101952448,1101983231,US 1101983232,1101983743,CW 1101983744,1102004223,US 1102004224,1102004479,IN @@ -13266,7 +12357,9 @@ 1102512128,1102516223,JM 1102516224,1103244799,US 1103244800,1103245055,EC -1103245056,1103476223,US +1103245056,1103475871,US +1103475872,1103475879,AF +1103475880,1103476223,US 1103476224,1103476255,CA 1103476256,1103548415,US 1103548416,1103550463,BS @@ -13276,9 +12369,7 @@ 1103586368,1103586375,AF 1103586376,1103603711,US 1103603712,1103605759,EC -1103605760,1103617023,US -1103617024,1103617279,IT -1103617280,1103623167,US +1103605760,1103623167,US 1103623168,1103623679,CO 1103623680,1103675647,US 1103675648,1103675711,AU @@ -13318,7 +12409,9 @@ 1104096408,1104096415,DE 1104096416,1104166911,US 1104166912,1104168959,CO -1104168960,1104265215,US +1104168960,1104232743,US +1104232744,1104232751,CA +1104232752,1104265215,US 1104265216,1104265727,PH 1104265728,1104413695,US 1104413696,1104413711,CA @@ -13338,7 +12431,9 @@ 1104630976,1104631039,CA 1104631040,1104666751,US 1104666752,1104666767,CA -1104666768,1104842751,US +1104666768,1104753151,US +1104753152,1104753407,SX +1104753408,1104842751,US 1104842752,1104844799,PR 1104844800,1104875335,US 1104875336,1104875351,AF @@ -13350,17 +12445,23 @@ 1105034496,1105034751,IT 1105034752,1105099519,US 1105099520,1105099775,EC -1105099776,1105143039,US +1105099776,1105142463,US +1105142464,1105142471,MN +1105142472,1105143039,US 1105143040,1105143047,MN 1105143048,1105153215,US 1105153216,1105153279,PH -1105153280,1106305663,US +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,1106469887,US +1106349608,1106469695,US +1106469696,1106469759,CO +1106469760,1106469887,US 1106469888,1106470911,BS 1106470912,1106475007,US 1106475008,1106475519,CO @@ -13403,7 +12504,9 @@ 1107288064,1107292159,CA 1107292160,1107701759,US 1107701760,1107705855,CA -1107705856,1107808842,US +1107705856,1107801367,US +1107801368,1107801375,CA +1107801376,1107808842,US 1107808843,1107808846,PE 1107808847,1107808877,US 1107808878,1107808881,PE @@ -13438,9 +12541,7 @@ 1107948800,1108025343,US 1108025344,1108029439,CA 1108029440,1108033535,US -1108033536,1108036679,CA -1108036680,1108036687,US -1108036688,1108041727,CA +1108033536,1108041727,CA 1108041728,1108054015,US 1108054016,1108054303,CA 1108054304,1108054311,US @@ -13546,9 +12647,13 @@ 1109650656,1109688319,US 1109688320,1109696511,CA 1109696512,1109705727,US -1109705728,1109705823,CD -1109705824,1109705839,CG -1109705840,1109705928,CD +1109705728,1109705743,CG +1109705744,1109705759,US +1109705760,1109705791,CD +1109705792,1109705823,US +1109705824,1109705839,CD +1109705840,1109705855,US +1109705856,1109705928,CD 1109705929,1109705929,LB 1109705930,1109705983,CD 1109705984,1109707007,US @@ -13563,9 +12668,7 @@ 1109711176,1109711183,HT 1109711184,1109712767,US 1109712768,1109712895,A2 -1109712896,1109738495,US -1109738496,1109738623,VA -1109738624,1109772223,US +1109712896,1109772223,US 1109772224,1109772239,HK 1109772240,1109774175,US 1109774176,1109774183,CA @@ -13576,7 +12679,11 @@ 1109819392,1109848831,CA 1109848832,1109849087,CA 1109849088,1109852159,CA -1109852160,1109918463,US +1109852160,1109902415,US +1109902416,1109902431,CY +1109902432,1109902511,US +1109902512,1109902527,CY +1109902528,1109918463,US 1109918464,1109918719,GB 1109918720,1109919743,US 1109919744,1109919999,GB @@ -13604,9 +12711,7 @@ 1109954352,1109954367,ES 1109954368,1110126591,US 1110126592,1110130687,CA -1110130688,1110307903,US -1110307904,1110307967,AU -1110307968,1110310911,US +1110130688,1110310911,US 1110310912,1110376447,CA 1110376448,1110415929,US 1110415930,1110415930,US @@ -13748,7 +12853,9 @@ 1110474496,1110474751,CA 1110474752,1110540287,US 1110540288,1110573055,CA -1110573056,1110638591,PR +1110573056,1110578431,PR +1110578432,1110578687,US +1110578688,1110638591,PR 1110638592,1110654463,US 1110654464,1110654719,HT 1110654720,1110663167,US @@ -13817,17 +12924,13 @@ 1112906368,1112906375,BR 1112906376,1112906431,US 1112906432,1112906439,GB -1112906440,1112906943,US -1112906944,1112906959,BR -1112906960,1112907775,US +1112906440,1112907775,US 1112907776,1112907783,CA 1112907784,1112907919,US 1112907920,1112907935,EG 1112907936,1112914175,US 1112914176,1112914239,GB -1112914240,1113212479,US -1113212480,1113212495,CA -1113212496,1113591807,US +1112914240,1113591807,US 1113591808,1113595903,CA 1113595904,1113596415,CL 1113596416,1113596927,GT @@ -13936,11 +13039,11 @@ 1114537984,1114550271,CA 1114550272,1114579831,US 1114579832,1114579832,US -1114579833,1114612991,US -1114612992,1114613247,AU -1114613248,1114628995,US +1114579833,1114628995,US 1114628996,1114628996,US -1114628997,1114681343,US +1114628997,1114653951,US +1114653952,1114653983,MO +1114653984,1114681343,US 1114681344,1114685439,CA 1114685440,1114730495,US 1114730496,1114734591,CA @@ -13976,7 +13079,11 @@ 1114881280,1114881407,CY 1114881408,1114881471,US 1114881472,1114881535,CY -1114881536,1114930175,US +1114881536,1114928863,US +1114928864,1114928871,GB +1114928872,1114929071,US +1114929072,1114929087,RU +1114929088,1114930175,US 1114930176,1114930303,GB 1114930304,1114966815,US 1114966816,1114966831,GB @@ -13988,7 +13095,9 @@ 1115111936,1115112063,PR 1115112064,1115112079,US 1115112080,1115112087,ES -1115112088,1115113471,US +1115112088,1115112575,US +1115112576,1115112607,IN +1115112608,1115113471,US 1115113472,1115114495,HN 1115114496,1115114751,MX 1115114752,1115115007,GT @@ -14005,7 +13114,9 @@ 1115136000,1115144191,CA 1115144192,1115705343,US 1115705344,1115709439,CA -1115709440,1115774799,US +1115709440,1115768351,US +1115768352,1115768367,CA +1115768368,1115774799,US 1115774800,1115774815,A2 1115774816,1115783167,US 1115783168,1115791359,CA @@ -14021,7 +13132,9 @@ 1116015872,1116016127,A2 1116016128,1116021247,US 1116021248,1116021503,CI -1116021504,1116027135,US +1116021504,1116024063,US +1116024064,1116024127,PG +1116024128,1116027135,US 1116027136,1116027903,A2 1116027904,1116158271,US 1116158272,1116158335,CA @@ -14032,9 +13145,7 @@ 1116158720,1116159519,US 1116159520,1116159535,BR 1116159536,1116168191,US -1116168192,1116169311,CA -1116169312,1116169327,US -1116169328,1116175103,CA +1116168192,1116175103,CA 1116175104,1116175135,JM 1116175136,1116176383,CA 1116176384,1116425393,US @@ -14049,11 +13160,11 @@ 1117142272,1117142527,CA 1117142528,1117167855,US 1117167856,1117167871,GB -1117167872,1117178287,US -1117178288,1117178303,GB -1117178304,1117189951,US +1117167872,1117189951,US 1117189952,1117190015,KR -1117190016,1117198591,US +1117190016,1117195991,US +1117195992,1117195999,A2 +1117196000,1117198591,US 1117198592,1117198847,CA 1117198848,1117274111,US 1117274112,1117282303,CA @@ -14099,9 +13210,7 @@ 1117815296,1117815551,CN 1117815552,1117817919,US 1117817920,1117817983,CA -1117817984,1117818975,US -1117818976,1117818991,HK -1117818992,1117819631,US +1117817984,1117819631,US 1117819632,1117819647,AE 1117819648,1117822463,US 1117822464,1117822527,CA @@ -14117,9 +13226,23 @@ 1117831424,1117978623,US 1117978624,1117979503,CA 1117979504,1117979519,US -1117979520,1117986575,CA -1117986576,1117986687,US -1117986688,1117986815,CA +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 1117986816,1117995007,US 1117995008,1117999103,CA 1117999104,1118027783,US @@ -14211,11 +13334,42 @@ 1118151464,1118151471,CR 1118151472,1118151631,US 1118151632,1118151647,MX -1118151648,1118156319,US -1118156320,1118156335,PE -1118156336,1118156399,US -1118156400,1118156415,VE -1118156416,1118158847,US +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 1118158848,1118167039,CA 1118167040,1118474239,US 1118474240,1118474535,CA @@ -14249,7 +13403,9 @@ 1118543872,1118547967,CA 1118547968,1118548671,US 1118548672,1118548679,CA -1118548680,1118564607,US +1118548680,1118549575,US +1118549576,1118549583,IN +1118549584,1118564607,US 1118564608,1118564639,NO 1118564640,1118564655,US 1118564656,1118564671,IN @@ -14265,9 +13421,30 @@ 1118789784,1118789791,BB 1118789792,1118790655,US 1118790656,1118790911,IL -1118790912,1118793471,US +1118790912,1118791999,US +1118792000,1118792031,PR +1118792032,1118792063,DO +1118792064,1118792127,US +1118792128,1118792143,AU +1118792144,1118793407,US +1118793408,1118793423,BB +1118793424,1118793471,US 1118793472,1118793727,CO -1118793728,1118796543,US +1118793728,1118793823,US +1118793824,1118793839,CA +1118793840,1118793871,US +1118793872,1118793887,DO +1118793888,1118793935,US +1118793936,1118793951,ES +1118793952,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 1118796544,1118796799,GB 1118796800,1118797063,US 1118797064,1118797071,CR @@ -14293,8 +13470,13 @@ 1118964880,1118964991,A2 1118964992,1118965247,CW 1118965248,1118965503,AS -1118965504,1118965759,A2 -1118965760,1118966015,GF +1118965504,1118965839,A2 +1118965840,1118965847,EC +1118965848,1118965911,A2 +1118965912,1118965919,MA +1118965920,1118965991,A2 +1118965992,1118966007,NG +1118966008,1118966015,A2 1118966016,1118966271,BR 1118966272,1118966351,SV 1118966352,1118966367,A2 @@ -14492,8 +13674,12 @@ 1118977312,1118977343,NG 1118977344,1118977351,KE 1118977352,1118977535,A2 -1118977536,1118977791,US -1118977792,1118977839,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 @@ -14771,7 +13957,9 @@ 1119211520,1119215615,CA 1119215616,1119289343,US 1119289344,1119354879,CA -1119354880,1119428607,US +1119354880,1119369407,US +1119369408,1119369415,UM +1119369416,1119428607,US 1119428608,1119432703,VI 1119432704,1119436799,CA 1119436800,1119440895,US @@ -14786,11 +13974,11 @@ 1119502336,1119510527,CA 1119510528,1119558143,US 1119558144,1119558655,PR -1119558656,1119580159,US +1119558656,1119571967,US +1119571968,1119576063,CA +1119576064,1119580159,US 1119580160,1119584255,CA -1119584256,1119612671,US -1119612672,1119612927,AU -1119612928,1120064511,US +1119584256,1120064511,US 1120064512,1120064767,AR 1120064768,1120149503,US 1120149504,1120149599,CA @@ -14802,9 +13990,7 @@ 1120151712,1120152159,CA 1120152160,1120152191,US 1120152192,1120153599,CA -1120153600,1120159487,US -1120159488,1120159743,GB -1120159744,1120272383,US +1120153600,1120272383,US 1120272384,1120276991,CA 1120276992,1120277503,US 1120277504,1120280575,CA @@ -14877,7 +14063,9 @@ 1120371712,1120372223,US 1120372224,1120372479,CA 1120372480,1120372735,US -1120372736,1120374047,CA +1120372736,1120373423,CA +1120373424,1120373503,US +1120373504,1120374047,CA 1120374048,1120374063,US 1120374064,1120374279,CA 1120374280,1120374303,US @@ -14959,7 +14147,13 @@ 1120382440,1120382447,CA 1120382448,1120382463,US 1120382464,1120382975,CA -1120382976,1120383775,US +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 @@ -15048,9 +14242,7 @@ 1120517632,1120517887,US 1120517888,1120518143,CL 1120518144,1120534527,CA -1120534528,1120575167,US -1120575168,1120575199,CA -1120575200,1120641023,US +1120534528,1120641023,US 1120641024,1120657407,CA 1120657408,1120731391,US 1120731392,1120731647,A2 @@ -15110,10 +14302,20 @@ 1120911360,1120919551,CA 1120919552,1121005567,US 1121005568,1121009663,CA -1121009664,1121038335,US +1121009664,1121009983,US +1121009984,1121009999,CA +1121010000,1121038335,US 1121038336,1121042431,CA 1121042432,1121230847,US -1121230848,1121239039,CA +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 1121239040,1121247231,US 1121247232,1121247239,CA 1121247240,1121247255,AG @@ -15286,253 +14488,7 @@ 1121253376,1121253887,CA 1121253888,1121254143,BZ 1121254144,1121255423,CA -1121255424,1121468463,US -1121468464,1121468479,AR -1121468480,1121468495,US -1121468496,1121468511,PK -1121468512,1121468519,AU -1121468520,1121468527,IN -1121468528,1121468551,US -1121468552,1121468559,CA -1121468560,1121468567,US -1121468568,1121468575,AU -1121468576,1121468591,US -1121468592,1121468600,AU -1121468601,1121468911,US -1121468912,1121468927,GB -1121468928,1121469175,US -1121469176,1121469183,CA -1121469184,1121469367,US -1121469368,1121469375,CA -1121469376,1121469839,US -1121469840,1121469847,AU -1121469848,1121469871,US -1121469872,1121469879,SE -1121469880,1121469911,US -1121469912,1121469919,PH -1121469920,1121470015,US -1121470016,1121470047,AU -1121470048,1121470175,US -1121470176,1121470191,CA -1121470192,1121470215,US -1121470216,1121470223,CA -1121470224,1121470263,US -1121470264,1121470271,CA -1121470272,1121470311,US -1121470312,1121470319,IL -1121470320,1121470423,US -1121470424,1121470463,NL -1121470464,1121470551,US -1121470552,1121470559,LB -1121470560,1121470583,US -1121470584,1121470591,AU -1121470592,1121470703,US -1121470704,1121470711,VU -1121470712,1121470727,US -1121470728,1121470735,CA -1121470736,1121470759,US -1121470760,1121470767,FR -1121470768,1121470815,US -1121470816,1121470831,AU -1121470832,1121470847,US -1121470848,1121470863,AU -1121470864,1121470871,US -1121470872,1121470879,AU -1121470880,1121471063,US -1121471064,1121471071,AU -1121471072,1121471087,US -1121471088,1121471095,AU -1121471096,1121471127,US -1121471128,1121471135,AU -1121471136,1121471151,US -1121471152,1121471159,CH -1121471160,1121471279,US -1121471280,1121471295,GB -1121471296,1121471375,US -1121471376,1121471391,DK -1121471392,1121471471,US -1121471472,1121471487,CA -1121471488,1121471503,MY -1121471504,1121471511,US -1121471512,1121471519,BR -1121471520,1121471527,US -1121471528,1121471535,EC -1121471536,1121471559,US -1121471560,1121471575,CA -1121471576,1121471591,US -1121471592,1121471599,CA -1121471600,1121471623,US -1121471624,1121471631,CA -1121471632,1121471655,US -1121471656,1121471663,CA -1121471664,1121471703,US -1121471704,1121471711,JP -1121471712,1121471719,US -1121471720,1121471727,IT -1121471728,1121471935,US -1121471936,1121471943,CA -1121471944,1121471951,IN -1121471952,1121471975,US -1121471976,1121471983,CA -1121471984,1121472047,US -1121472048,1121472055,MY -1121472056,1121472263,US -1121472264,1121472271,LK -1121472272,1121472287,US -1121472288,1121472303,IN -1121472304,1121472375,US -1121472376,1121472447,AU -1121472448,1121472463,IN -1121472464,1121472511,US -1121472512,1121472519,NZ -1121472520,1121472527,CA -1121472528,1121472559,US -1121472560,1121472567,IN -1121472568,1121472655,US -1121472656,1121472663,UA -1121472664,1121472727,US -1121472728,1121472735,CA -1121472736,1121472743,LB -1121472744,1121472775,US -1121472776,1121472807,RU -1121472808,1121472831,US -1121472832,1121472839,LB -1121472840,1121472847,US -1121472848,1121472863,IN -1121472864,1121472871,US -1121472872,1121472879,SE -1121472880,1121472887,IT -1121472888,1121472927,US -1121472928,1121472935,GB -1121472936,1121473175,US -1121473176,1121473183,FR -1121473184,1121473239,US -1121473240,1121473247,ES -1121473248,1121473279,US -1121473280,1121473295,AU -1121473296,1121473303,US -1121473304,1121473311,AU -1121473312,1121473439,US -1121473440,1121473471,AU -1121473472,1121473479,US -1121473480,1121473487,CA -1121473488,1121473599,US -1121473600,1121473607,GB -1121473608,1121473871,US -1121473872,1121473887,NL -1121473888,1121474007,US -1121474008,1121474015,DE -1121474016,1121474031,US -1121474032,1121474039,AG -1121474040,1121474063,US -1121474064,1121474071,GB -1121474072,1121474079,SI -1121474080,1121474095,US -1121474096,1121474111,CA -1121474112,1121474151,US -1121474152,1121474159,CA -1121474160,1121474351,US -1121474352,1121474359,NZ -1121474360,1121474383,US -1121474384,1121474415,AU -1121474416,1121474535,US -1121474536,1121474543,GB -1121474544,1121474591,US -1121474592,1121474607,CA -1121474608,1121474927,US -1121474928,1121474935,AU -1121474936,1121475967,US -1121475968,1121476031,AU -1121476032,1121476191,US -1121476192,1121476223,BD -1121476224,1121476431,US -1121476432,1121476439,JP -1121476440,1121476927,US -1121476928,1121476935,IN -1121476936,1121477391,US -1121477392,1121477399,IN -1121477400,1121477415,US -1121477416,1121477423,NZ -1121477424,1121477439,US -1121477440,1121477447,ID -1121477448,1121477551,US -1121477552,1121477567,CA -1121477568,1121477599,US -1121477600,1121477607,AU -1121477608,1121477935,US -1121477936,1121477943,CA -1121477944,1121478023,US -1121478024,1121478031,GB -1121478032,1121478079,US -1121478080,1121478087,CA -1121478088,1121478095,US -1121478096,1121478111,CA -1121478112,1121478167,US -1121478168,1121478175,AU -1121478176,1121478207,US -1121478208,1121478239,GB -1121478240,1121478343,US -1121478344,1121478367,AU -1121478368,1121478511,US -1121478512,1121478519,RU -1121478520,1121478527,KE -1121478528,1121478591,US -1121478592,1121478655,AU -1121478656,1121478687,US -1121478688,1121478703,NZ -1121478704,1121478967,US -1121478968,1121478975,AU -1121478976,1121478991,US -1121478992,1121478999,IN -1121479000,1121479023,US -1121479024,1121479031,CY -1121479032,1121479143,US -1121479144,1121479167,EG -1121479168,1121479215,US -1121479216,1121479231,CA -1121479232,1121479295,US -1121479296,1121479303,HK -1121479304,1121479343,CA -1121479344,1121479359,US -1121479360,1121479367,NZ -1121479368,1121479407,US -1121479408,1121479415,CA -1121479416,1121479687,US -1121479688,1121479695,CA -1121479696,1121479759,US -1121479760,1121479783,AU -1121479784,1121479831,US -1121479832,1121479839,NZ -1121479840,1121479847,IN -1121479848,1121479919,US -1121479920,1121479927,AU -1121479928,1121480783,US -1121480784,1121480791,TH -1121480792,1121480847,US -1121480848,1121480855,CY -1121480856,1121480903,US -1121480904,1121480911,HK -1121480912,1121480959,US -1121480960,1121480967,AU -1121480968,1121480991,US -1121480992,1121481023,AU -1121481024,1121481039,US -1121481040,1121481047,AU -1121481048,1121481055,US -1121481056,1121481087,AU -1121481088,1121481407,US -1121481408,1121481415,GB -1121481416,1121481439,US -1121481440,1121481447,AT -1121481448,1121482799,US -1121482800,1121482807,AU -1121482808,1121483467,US -1121483468,1121483468,CA -1121483469,1121483567,US -1121483568,1121483575,PT -1121483576,1121483759,US -1121483760,1121483775,FR -1121483776,1121654863,US +1121255424,1121654863,US 1121654864,1121654879,IN 1121654880,1121654975,US 1121654976,1121654991,FR @@ -15544,9 +14500,7 @@ 1121714999,1121714999,KW 1121715000,1121715935,US 1121715936,1121715943,US -1121715944,1121717431,US -1121717432,1121717439,JP -1121717440,1121878015,US +1121715944,1121878015,US 1121878016,1121910783,CA 1121910784,1122074623,US 1122074624,1122087935,CA @@ -15618,8 +14572,8 @@ 1122497392,1122497535,US 1122497536,1122498047,PR 1122498048,1122498559,US -1122498560,1122499327,PR -1122499328,1122499583,US +1122498560,1122499071,PR +1122499072,1122499583,US 1122499584,1122500095,PR 1122500096,1122528603,US 1122528604,1122528613,ES @@ -15630,7 +14584,9 @@ 1122635776,1122639871,CA 1122639872,1122667071,US 1122667072,1122667135,CH -1122667136,1123123199,US +1122667136,1122759247,US +1122759248,1122759263,CA +1122759264,1123123199,US 1123123200,1123127295,CA 1123127296,1123180543,US 1123180544,1123184639,CA @@ -15651,9 +14607,9 @@ 1123598336,1123651583,US 1123651584,1123651839,JM 1123651840,1123652095,BB -1123652096,1123652223,JM -1123652224,1123652351,AG -1123652352,1123653119,JM +1123652096,1123652351,AI +1123652352,1123652863,JM +1123652864,1123653119,HT 1123653120,1123653375,BB 1123653376,1123653631,JM 1123653632,1123654655,KY @@ -15860,37 +14816,16 @@ 1125290242,1125290242,AE 1125290243,1125350145,US 1125350146,1125350146,US -1125350147,1125454007,US -1125454008,1125454015,GB -1125454016,1125454111,US +1125350147,1125454111,US 1125454112,1125454119,ES 1125454120,1125454271,US 1125454272,1125454279,DE 1125454280,1125454303,US 1125454304,1125454323,NO 1125454324,1125454327,SG -1125454328,1125454343,US -1125454344,1125454351,NO -1125454352,1125454371,US -1125454372,1125454375,ES -1125454376,1125454383,US -1125454384,1125454395,NO -1125454396,1125454411,US -1125454412,1125454423,NO -1125454424,1125454435,ES -1125454436,1125454439,NO -1125454440,1125454447,ES -1125454448,1125454451,NO -1125454452,1125454459,US -1125454460,1125454463,NO -1125454464,1125454467,ES -1125454468,1125454471,NO -1125454472,1125454479,ES -1125454480,1125454483,NO -1125454484,1125454487,ES -1125454488,1125454495,NO -1125454496,1125454587,US -1125454588,1125454591,CA +1125454328,1125454411,US +1125454412,1125454527,NO +1125454528,1125454591,US 1125454592,1125454847,A2 1125454848,1125455359,US 1125455360,1125455363,CA @@ -15944,11 +14879,7 @@ 1125456240,1125456247,GB 1125456248,1125456259,CW 1125456260,1125456263,ES -1125456264,1125456407,US -1125456408,1125456411,CW -1125456412,1125456415,US -1125456416,1125456419,CW -1125456420,1125474303,US +1125456264,1125474303,US 1125474304,1125478399,CA 1125478400,1125481215,US 1125481216,1125481727,CA @@ -16026,9 +14957,7 @@ 1125550336,1125552127,CA 1125552128,1125572607,US 1125572608,1125576703,CA -1125576704,1125593371,US -1125593372,1125593375,GB -1125593376,1125595695,US +1125576704,1125595695,US 1125595696,1125595711,NG 1125595712,1125596687,US 1125596688,1125596695,VE @@ -16125,9 +15054,7 @@ 1128818688,1128818719,CA 1128818720,1130536959,US 1130536960,1130539007,GU -1130539008,1131762175,US -1131762176,1131762431,IN -1131762432,1132582463,US +1130539008,1132582463,US 1132582464,1132582479,CA 1132582480,1132698119,US 1132698120,1132698127,CA @@ -16139,8 +15066,14 @@ 1132954320,1132954335,IS 1132954336,1133461247,US 1133461248,1133461503,CA -1133461504,1133785087,US -1133785088,1133785599,GB +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,1134440447,US @@ -16179,712 +15112,9 @@ 1134546944,1134551039,CA 1134551040,1134759726,US 1134759727,1134759727,US -1134759728,1136656503,US -1136656504,1136656511,CA -1136656512,1136656583,US -1136656584,1136656591,GB -1136656592,1136656615,US -1136656616,1136656631,AU -1136656632,1136656863,US -1136656864,1136656895,CA -1136656896,1136657039,US -1136657040,1136657047,CA -1136657048,1136657615,US -1136657616,1136657623,GB -1136657624,1136657775,US -1136657776,1136657783,CA -1136657784,1136657815,US -1136657816,1136657823,CA -1136657824,1136657871,US -1136657872,1136657887,GT -1136657888,1136657911,US -1136657912,1136657919,CA -1136657920,1136658087,US -1136658088,1136658095,CN -1136658096,1136658111,MX -1136658112,1136658119,US -1136658120,1136658127,JP -1136658128,1136658135,US -1136658136,1136658143,AU -1136658144,1136658151,US -1136658152,1136658159,AU -1136658160,1136658439,US -1136658440,1136658447,MX -1136658448,1136658711,US -1136658712,1136658719,IN -1136658720,1136658727,NZ -1136658728,1136658991,US -1136658992,1136658999,AU -1136659000,1136659023,US -1136659024,1136659031,AU -1136659032,1136659039,US -1136659040,1136659047,AU -1136659048,1136659599,US -1136659600,1136659607,MX -1136659608,1136659639,US -1136659640,1136659647,FR -1136659648,1136659767,US -1136659768,1136659775,CA -1136659776,1136659927,US -1136659928,1136659935,CA -1136659936,1136659967,US -1136659968,1136659975,CA -1136659976,1136660047,US -1136660048,1136660055,GB -1136660056,1136660223,US -1136660224,1136660231,CA -1136660232,1136660239,US -1136660240,1136660247,GB -1136660248,1136660471,US -1136660472,1136660479,GB -1136660480,1136660487,US -1136660488,1136660495,NO -1136660496,1136660511,US -1136660512,1136660519,HR -1136660520,1136660759,US -1136660760,1136660767,CA -1136660768,1136660775,US -1136660776,1136660791,CA -1136660792,1136660823,US -1136660824,1136660839,CA -1136660840,1136660871,US -1136660872,1136660879,AU -1136660880,1136660943,US -1136660944,1136660951,IN -1136660952,1136661295,US -1136661296,1136661303,TW -1136661304,1136661327,US -1136661328,1136661335,IN -1136661336,1136661343,US -1136661344,1136661351,CN -1136661352,1136661367,US -1136661368,1136661375,IN -1136661376,1136661399,US -1136661400,1136661407,MX -1136661408,1136661631,US -1136661632,1136661639,IN -1136661640,1136661687,US -1136661688,1136661695,GB -1136661696,1136661727,US -1136661728,1136661743,CA -1136661744,1136661919,US -1136661920,1136661951,CA -1136661952,1136662087,US -1136662088,1136662095,CA -1136662096,1136662151,US -1136662152,1136662159,MX -1136662160,1136662575,US -1136662576,1136662583,CA -1136662584,1136662663,US -1136662664,1136662671,CA -1136662672,1136662815,US -1136662816,1136662823,IN -1136662824,1136662911,US -1136662912,1136662919,IN -1136662920,1136663247,US -1136663248,1136663255,CL -1136663256,1136663575,US -1136663576,1136663583,CN -1136663584,1136663679,US -1136663680,1136663687,IN -1136663688,1136663695,JP -1136663696,1136664543,US -1136664544,1136664551,AU -1136664552,1136664639,US -1136664640,1136664647,CA -1136664648,1136664791,US -1136664792,1136664799,GB -1136664800,1136664815,US -1136664816,1136664823,IL -1136664824,1136664847,US -1136664848,1136664863,CA -1136664864,1136665103,US -1136665104,1136665111,AU -1136665112,1136665135,US -1136665136,1136665143,GB -1136665144,1136665655,US -1136665656,1136665663,IN -1136665664,1136665735,US -1136665736,1136665743,GB -1136665744,1136665759,US -1136665760,1136665767,CA -1136665768,1136665831,US -1136665832,1136665839,CA -1136665840,1136665919,US -1136665920,1136665927,DE -1136665928,1136666143,US -1136666144,1136666151,CA -1136666152,1136666223,US -1136666224,1136666231,PT -1136666232,1136666351,US -1136666352,1136666359,IL -1136666360,1136666447,US -1136666448,1136666463,GB -1136666464,1136666743,US -1136666744,1136666751,CA -1136666752,1136666791,US -1136666792,1136666799,IL -1136666800,1136666863,US -1136666864,1136666871,GB -1136666872,1136666991,US -1136666992,1136667007,CA -1136667008,1136667087,US -1136667088,1136667103,IL -1136667104,1136667447,US -1136667448,1136667455,GB -1136667456,1136667551,US -1136667552,1136667559,AU -1136667560,1136667599,US -1136667600,1136667615,IN -1136667616,1136667655,US -1136667656,1136667663,CA -1136667664,1136667759,US -1136667760,1136667767,KW -1136667768,1136668023,US -1136668024,1136668031,GB -1136668032,1136668127,US -1136668128,1136668159,AU -1136668160,1136668287,US -1136668288,1136668303,IN -1136668304,1136668319,MX -1136668320,1136668335,US -1136668336,1136668351,MX -1136668352,1136668383,US -1136668384,1136668415,IN -1136668416,1136668447,US -1136668448,1136668455,IN -1136668456,1136668559,US -1136668560,1136668567,CA -1136668568,1136668671,US -1136668672,1136668679,IN -1136668680,1136668887,US -1136668888,1136668895,CL -1136668896,1136669143,US -1136669144,1136669151,IN -1136669152,1136669263,US -1136669264,1136669279,GB -1136669280,1136669343,US -1136669344,1136669359,CO -1136669360,1136669487,US -1136669488,1136669495,CA -1136669496,1136669511,US -1136669512,1136669519,CA -1136669520,1136669567,US -1136669568,1136669575,CA -1136669576,1136669583,MX -1136669584,1136669775,US -1136669776,1136669783,NL -1136669784,1136669911,US -1136669912,1136669919,ES -1136669920,1136670063,US -1136670064,1136670071,SG -1136670072,1136670151,US -1136670152,1136670159,SG -1136670160,1136672999,US -1136673000,1136673007,CA -1136673008,1136673039,US -1136673040,1136673047,IN -1136673048,1136673231,US -1136673232,1136673239,GB -1136673240,1136673279,US -1136673280,1136673287,CA -1136673288,1136673327,US -1136673328,1136673335,CA -1136673336,1136673423,US -1136673424,1136673431,CA -1136673432,1136673559,US -1136673560,1136673567,VE -1136673568,1136673703,US -1136673704,1136673711,MX -1136673712,1136673855,US -1136673856,1136673863,CA -1136673864,1136673903,US -1136673904,1136673919,CA -1136673920,1136673927,GB -1136673928,1136674079,US -1136674080,1136674095,AU -1136674096,1136674447,US -1136674448,1136674463,AU -1136674464,1136674583,US -1136674584,1136674591,CA -1136674592,1136674607,MX -1136674608,1136674807,US -1136674808,1136674815,GB -1136674816,1136674863,US -1136674864,1136674871,IN -1136674872,1136674895,US -1136674896,1136674903,IL -1136674904,1136674911,GB -1136674912,1136674967,US -1136674968,1136674975,CA -1136674976,1136675007,US -1136675008,1136675015,AU -1136675016,1136675023,CL -1136675024,1136675055,US -1136675056,1136675063,ES -1136675064,1136675311,US -1136675312,1136675319,GB -1136675320,1136675751,US -1136675752,1136675759,IN -1136675760,1136675815,US -1136675816,1136675823,AE -1136675824,1136675839,US -1136675840,1136676095,GB -1136676096,1136676127,US -1136676128,1136676143,IE -1136676144,1136676255,US -1136676256,1136676271,CA -1136676272,1136676551,US -1136676552,1136676559,GB -1136676560,1136676583,US -1136676584,1136676591,AU -1136676592,1136676671,US -1136676672,1136676679,CA -1136676680,1136677375,US -1136677376,1136677391,AU -1136677392,1136677463,US -1136677464,1136677471,CA -1136677472,1136677615,US -1136677616,1136677631,CA -1136677632,1136678103,US -1136678104,1136678111,IN -1136678112,1136678303,US -1136678304,1136678319,MX -1136678320,1136678431,US -1136678432,1136678447,GB -1136678448,1136679071,US -1136679072,1136679087,CA -1136679088,1136679135,US -1136679136,1136679167,BR -1136679168,1136679215,US -1136679216,1136679223,GB -1136679224,1136679231,US -1136679232,1136679263,IL -1136679264,1136679279,US -1136679280,1136679295,CA -1136679296,1136680055,US -1136680056,1136680063,CA -1136680064,1136680143,US -1136680144,1136680151,NO -1136680152,1136680159,US -1136680160,1136680175,BD -1136680176,1136680311,US -1136680312,1136680319,IN -1136680320,1136680743,US -1136680744,1136680751,BD -1136680752,1136680759,IN -1136680760,1136681167,US -1136681168,1136681175,CA -1136681176,1136681191,US -1136681192,1136681199,MX -1136681200,1136681215,US -1136681216,1136681223,HN -1136681224,1136681231,US -1136681232,1136681239,IL -1136681240,1136681311,US -1136681312,1136681319,BR -1136681320,1136681439,US -1136681440,1136681447,GB -1136681448,1136681455,US -1136681456,1136681471,IL -1136681472,1136681487,US -1136681488,1136681495,GB -1136681496,1136681559,US -1136681560,1136681567,CA -1136681568,1136682271,US -1136682272,1136682303,GB -1136682304,1136682495,US -1136682496,1136682503,CA -1136682504,1136682527,US -1136682528,1136682559,CA -1136682560,1136682583,US -1136682584,1136682591,CA -1136682592,1136682695,US -1136682696,1136682703,CA -1136682704,1136682863,US -1136682864,1136682871,CA -1136682872,1136683095,US -1136683096,1136683103,IL -1136683104,1136683367,US -1136683368,1136683375,GB -1136683376,1136683383,ZA -1136683384,1136683527,US -1136683528,1136683535,AU -1136683536,1136683543,US -1136683544,1136683551,AE -1136683552,1136684047,US -1136684048,1136684063,CA -1136684064,1136684087,US -1136684088,1136684095,MX -1136684096,1136684103,US -1136684104,1136684111,CA -1136684112,1136684231,US -1136684232,1136684239,CA -1136684240,1136684247,IN -1136684248,1136684463,US -1136684464,1136684471,CA -1136684472,1136684559,US -1136684560,1136684575,CA -1136684576,1136684607,US -1136684608,1136684615,CA -1136684616,1136684623,US -1136684624,1136684631,IN -1136684632,1136684663,US -1136684664,1136684671,AU -1136684672,1136684679,GB -1136684680,1136684703,US -1136684704,1136684719,MX -1136684720,1136684735,US -1136684736,1136684751,IN -1136684752,1136684807,US -1136684808,1136684815,IT -1136684816,1136684895,US -1136684896,1136684911,CA -1136684912,1136684919,HR -1136684920,1136684975,US -1136684976,1136684983,CA -1136684984,1136684991,US -1136684992,1136684999,JP -1136685000,1136685055,US -1136685056,1136685183,CA -1136685184,1136685191,US -1136685192,1136685199,BM -1136685200,1136685231,US -1136685232,1136685239,CN -1136685240,1136685247,US -1136685248,1136685263,CA -1136685264,1136685791,US -1136685792,1136685799,IL -1136685800,1136685871,US -1136685872,1136685879,CA -1136685880,1136685903,US -1136685904,1136685911,HR -1136685912,1136685935,US -1136685936,1136685943,IT -1136685944,1136686047,US -1136686048,1136686055,IE -1136686056,1136689271,US -1136689272,1136689279,MX -1136689280,1136689431,US -1136689432,1136689439,BM -1136689440,1136689503,US -1136689504,1136689511,VE -1136689512,1136689551,US -1136689552,1136689559,IN -1136689560,1136689735,US -1136689736,1136689743,GB -1136689744,1136689815,US -1136689816,1136689823,GB -1136689824,1136689951,US -1136689952,1136689959,CA -1136689960,1136689975,US -1136689976,1136689983,IL -1136689984,1136690023,US -1136690024,1136690031,IN -1136690032,1136690055,US -1136690056,1136690063,CA -1136690064,1136690079,US -1136690080,1136690087,AU -1136690088,1136690407,US -1136690408,1136690415,BD -1136690416,1136690847,US -1136690848,1136690863,GB -1136690864,1136691415,US -1136691416,1136691423,CA -1136691424,1136691935,US -1136691936,1136691943,CA -1136691944,1136692039,US -1136692040,1136692047,AU -1136692048,1136692071,US -1136692072,1136692079,CA -1136692080,1136692239,US -1136692240,1136692247,AR -1136692248,1136692319,US -1136692320,1136692327,NL -1136692328,1136692535,US -1136692536,1136692543,GB -1136692544,1136692799,US -1136692800,1136692807,NZ -1136692808,1136692919,US -1136692920,1136692927,IN -1136692928,1136692991,US -1136692992,1136693023,IR -1136693024,1136693055,IE -1136693056,1136693063,AU -1136693064,1136693503,US -1136693504,1136693511,GB -1136693512,1136693519,CA -1136693520,1136693887,US -1136693888,1136693903,CA -1136693904,1136693951,US -1136693952,1136693959,CA -1136693960,1136693967,AU -1136693968,1136693975,US -1136693976,1136693983,GB -1136693984,1136694079,US -1136694080,1136694087,BG -1136694088,1136694263,US -1136694264,1136694271,GB -1136694272,1136694303,US -1136694304,1136694311,KR -1136694312,1136694319,US -1136694320,1136694327,KR -1136694328,1136694399,US -1136694400,1136694415,CA -1136694416,1136694895,US -1136694896,1136694903,AU -1136694904,1136694991,US -1136694992,1136694999,GB -1136695000,1136695503,US -1136695504,1136695511,GB -1136695512,1136695703,US -1136695704,1136695711,DK -1136695712,1136695719,US -1136695720,1136695727,IL -1136695728,1136695743,DK -1136695744,1136696087,US -1136696088,1136696095,AU -1136696096,1136696111,US -1136696112,1136696127,AU -1136696128,1136696263,US -1136696264,1136696271,CA -1136696272,1136696647,US -1136696648,1136696655,GB -1136696656,1136696671,US -1136696672,1136696679,IL -1136696680,1136696711,US -1136696712,1136696719,GT -1136696720,1136696767,US -1136696768,1136696775,IL -1136696776,1136696855,US -1136696856,1136696863,GB -1136696864,1136697047,US -1136697048,1136697055,BM -1136697056,1136697455,US -1136697456,1136697463,CA -1136697464,1136697647,US -1136697648,1136697655,CA -1136697656,1136697767,US -1136697768,1136697775,GB -1136697776,1136697975,US -1136697976,1136697983,CA -1136697984,1136698023,US -1136698024,1136698031,GB -1136698032,1136698039,US -1136698040,1136698111,IE -1136698112,1136698815,US -1136698816,1136698823,GB -1136698824,1136699023,US -1136699024,1136699039,GB -1136699040,1136699087,US -1136699088,1136699095,GB -1136699096,1136699487,US -1136699488,1136699503,CA -1136699504,1136699511,US -1136699512,1136699519,SE -1136699520,1136699583,US -1136699584,1136699599,CA -1136699600,1136699623,US -1136699624,1136699631,CA -1136699632,1136699647,IN -1136699648,1136699695,US -1136699696,1136699703,AU -1136699704,1136699839,US -1136699840,1136699847,MT -1136699848,1136699935,US -1136699936,1136699943,AU -1136699944,1136699999,US -1136700000,1136700007,GB -1136700008,1136700031,US -1136700032,1136700039,CA -1136700040,1136700103,US -1136700104,1136700111,NZ -1136700112,1136700263,US -1136700264,1136700271,IL -1136700272,1136700343,US -1136700344,1136700351,MX -1136700352,1136700479,US -1136700480,1136700487,NZ -1136700488,1136700583,US -1136700584,1136700591,AU -1136700592,1136700663,US -1136700664,1136700671,DK -1136700672,1136700783,US -1136700784,1136700791,CA -1136700792,1136700847,US -1136700848,1136700855,CL -1136700856,1136700911,US -1136700912,1136700919,CA -1136700920,1136701119,US -1136701120,1136701183,AU -1136701184,1136701279,US -1136701280,1136701287,CA -1136701288,1136701311,US -1136701312,1136701327,ZA -1136701328,1136701335,US -1136701336,1136701343,GB -1136701344,1136701455,US -1136701456,1136701463,IN -1136701464,1136701527,US -1136701528,1136701543,CA -1136701544,1136702711,US -1136702712,1136702719,GB -1136702720,1136702727,CA -1136702728,1136702799,US -1136702800,1136702807,GB -1136702808,1136702871,US -1136702872,1136702879,AT -1136702880,1136702911,US -1136702912,1136702919,GB -1136702920,1136703095,US -1136703096,1136703103,CA -1136703104,1136703279,US -1136703280,1136703287,CA -1136703288,1136704639,US -1136704640,1136704703,GB -1136704704,1136705575,US -1136705576,1136705583,CA -1136705584,1136705671,US -1136705672,1136705679,CA -1136705680,1136705807,US -1136705808,1136705815,IN -1136705816,1136705823,RU -1136705824,1136706087,US -1136706088,1136706095,IN -1136706096,1136706119,US -1136706120,1136706127,CA -1136706128,1136706231,US -1136706232,1136706239,MX -1136706240,1136706359,US -1136706360,1136706367,BM -1136706368,1136706455,US -1136706456,1136706463,GB -1136706464,1136706471,CA -1136706472,1136706495,US -1136706496,1136706559,IE -1136706560,1136706591,US -1136706592,1136706599,AU -1136706600,1136706703,US -1136706704,1136706711,CA -1136706712,1136706935,US -1136706936,1136706943,AU -1136706944,1136707087,US -1136707088,1136707095,GB -1136707096,1136707175,US -1136707176,1136707183,ZA -1136707184,1136707263,US -1136707264,1136707271,IN -1136707272,1136707751,US -1136707752,1136707759,GB -1136707760,1136707775,US -1136707776,1136707783,BR -1136707784,1136707847,US -1136707848,1136707855,SG -1136707856,1136707887,US -1136707888,1136707895,CA -1136707896,1136708039,US -1136708040,1136708047,CA -1136708048,1136708679,US -1136708680,1136708687,GB -1136708688,1136708871,US -1136708872,1136708879,GB -1136708880,1136709023,US -1136709024,1136709031,BD -1136709032,1136709647,US -1136709648,1136709655,CA -1136709656,1136709679,US -1136709680,1136709695,AU -1136709696,1136709767,US -1136709768,1136709775,GB -1136709776,1136709815,US -1136709816,1136709823,CA -1136709824,1136709927,US -1136709928,1136709935,CA -1136709936,1136710191,US -1136710192,1136710199,GB -1136710200,1136710415,US -1136710416,1136710431,AU -1136710432,1136711479,US -1136711480,1136711487,ZA -1136711488,1136711927,US -1136711928,1136711935,GB -1136711936,1136711991,US -1136711992,1136711999,AU -1136712000,1136712607,US -1136712608,1136712615,GB -1136712616,1136712695,US -1136712696,1136712703,CA -1136712704,1136712991,US -1136712992,1136712999,CA -1136713000,1136713087,US -1136713088,1136713103,CA -1136713104,1136713151,US -1136713152,1136713167,CA -1136713168,1136713471,US -1136713472,1136713479,SG -1136713480,1136713583,US -1136713584,1136713591,CA -1136713592,1136713919,US -1136713920,1136713935,NO -1136713936,1136714031,US -1136714032,1136714039,BR -1136714040,1136714167,US -1136714168,1136714175,IE -1136714176,1136714255,US -1136714256,1136714263,GB -1136714264,1136714271,US -1136714272,1136714279,GB -1136714280,1136714639,US -1136714640,1136714647,DE -1136714648,1136714671,US -1136714672,1136714679,CN -1136714680,1136715135,US -1136715136,1136715151,MX -1136715152,1136715623,US -1136715624,1136715631,AU -1136715632,1136716287,US -1136716288,1136716295,ZA -1136716296,1136716431,US -1136716432,1136716439,IN -1136716440,1136716447,US -1136716448,1136716479,CA -1136716480,1136716631,US -1136716632,1136716639,AU -1136716640,1136716703,US -1136716704,1136716711,IN -1136716712,1136716759,US -1136716760,1136716767,CA -1136716768,1136716775,US -1136716776,1136716783,NZ -1136716784,1136716799,US -1136716800,1136716831,VI -1136716832,1136717167,US -1136717168,1136717183,IT -1136717184,1136717399,US -1136717400,1136717407,GB -1136717408,1136717551,US -1136717552,1136717559,CA -1136717560,1136717583,US -1136717584,1136717599,GB -1136717600,1136717935,US -1136717936,1136717943,CA -1136717944,1136718391,US -1136718392,1136718399,MX -1136718400,1136718439,US -1136718440,1136718447,IN -1136718448,1136718487,US -1136718488,1136718495,IN -1136718496,1136718759,US -1136718760,1136718767,AU -1136718768,1136718791,US -1136718792,1136718799,CA -1136718800,1136718879,US -1136718880,1136718895,AU -1136718896,1136721919,US +1134759728,1136721919,US 1136721920,1136787455,CA -1136787456,1137102847,US -1137102848,1137103103,CN -1137103104,1137189135,US +1136787456,1137189135,US 1137189136,1137189151,IE 1137189152,1137189247,US 1137189248,1137189255,GB @@ -16898,7 +15128,9 @@ 1137255168,1137255423,IT 1137255424,1137256191,US 1137256192,1137256203,IT -1137256204,1137278975,US +1137256204,1137261119,US +1137261120,1137261183,IT +1137261184,1137278975,US 1137278976,1137283071,CA 1137283072,1137287167,US 1137287168,1137295359,CA @@ -16912,8 +15144,8 @@ 1137369224,1137369359,CA 1137369360,1137369375,US 1137369376,1137369519,CA -1137369520,1137369551,US -1137369552,1137369855,CA +1137369520,1137369535,US +1137369536,1137369855,CA 1137369856,1137376255,US 1137376256,1137376335,CA 1137376336,1137376351,US @@ -16946,9 +15178,7 @@ 1137508352,1137524735,US 1137524736,1137525642,CA 1137525643,1137525643,CA -1137525644,1137537023,CA -1137537024,1137537247,US -1137537248,1137541119,CA +1137525644,1137541119,CA 1137541120,1137623039,US 1137623040,1137639423,PR 1137639424,1137704967,US @@ -16958,23 +15188,19 @@ 1137705384,1137705391,NL 1137705392,1137705447,CA 1137705448,1137705455,US -1137705456,1137706239,CA -1137706240,1137706311,US -1137706312,1137706319,CA -1137706320,1137706495,US -1137706496,1137707071,CA -1137707072,1137707095,US -1137707096,1137707127,CA -1137707128,1137707143,US -1137707144,1137707151,CA -1137707152,1137707159,NL -1137707160,1137707191,US -1137707192,1137707199,CA -1137707200,1137707207,NL -1137707208,1137707223,US -1137707224,1137707255,CA -1137707256,1137707263,US -1137707264,1137707519,CA +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 @@ -17015,7 +15241,13 @@ 1137709440,1137709447,US 1137709448,1137709463,CA 1137709464,1137709487,US -1137709488,1137710847,CA +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 @@ -17178,9 +15410,7 @@ 1138049024,1138053631,CA 1138053632,1138053887,US 1138053888,1138061311,CA -1138061312,1138106367,US -1138106368,1138108415,GT -1138108416,1138163711,US +1138061312,1138163711,US 1138163712,1138163967,CA 1138163968,1138163975,MA 1138163976,1138163991,CA @@ -17530,11 +15760,7 @@ 1138662624,1138662639,GB 1138662640,1138662640,US 1138662641,1138662648,EG -1138662649,1138662841,US -1138662842,1138662849,GB -1138662850,1138662865,US -1138662866,1138662873,VE -1138662874,1138663021,US +1138662649,1138663021,US 1138663022,1138663166,GB 1138663167,1138712575,US 1138712576,1138714071,CA @@ -17548,9 +15774,7 @@ 1138778112,1138780159,US 1138780160,1138780415,CA 1138780416,1138786303,US -1138786304,1138793215,PR -1138793216,1138793343,US -1138793344,1138819071,PR +1138786304,1138819071,PR 1138819072,1138851839,CA 1138851840,1138851847,US 1138851848,1138851855,IN @@ -17570,9 +15794,13 @@ 1139146752,1139154943,GT 1139154944,1139167231,JM 1139167232,1139167743,US -1139167744,1139170559,PR -1139170560,1139171071,US -1139171072,1139171327,PR +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 1139179520,1139195903,CA @@ -17592,8 +15820,8 @@ 1145243136,1145243391,EU 1145243392,1145243647,US 1145243648,1145244159,EU -1145244160,1145244671,NO -1145244672,1145249791,US +1145244160,1145244415,NO +1145244416,1145249791,US 1145249792,1145257983,CA 1145257984,1145259007,US 1145259008,1145259071,IN @@ -17617,29 +15845,16 @@ 1145333192,1145333199,CN 1145333200,1145333215,US 1145333216,1145333223,CN -1145333224,1145333327,US -1145333328,1145333343,CN -1145333344,1145333351,US -1145333352,1145333359,CN -1145333360,1145333367,US -1145333368,1145333375,PA -1145333376,1145333503,BD -1145333504,1145333879,US -1145333880,1145333895,CN -1145333896,1145334151,US +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,1145334527,US -1145334528,1145334621,US -1145334622,1145334623,US -1145334624,1145334755,US -1145334756,1145334759,US -1145334760,1145334943,US -1145334944,1145334975,US -1145334976,1145335039,US +1145334528,1145335039,US 1145335040,1145335103,US 1145335104,1145335135,NL 1145335136,1145335167,US @@ -17653,7 +15868,9 @@ 1145413632,1145421823,US 1145421824,1145430015,CA 1145430016,1145475071,US -1145475072,1145479167,CA +1145475072,1145476887,CA +1145476888,1145476895,US +1145476896,1145479167,CA 1145479168,1145484031,US 1145484032,1145484063,VG 1145484064,1145503743,US @@ -17721,13 +15938,11 @@ 1152082176,1152082303,IN 1152082304,1152083455,US 1152083456,1152083967,CN -1152083968,1152084735,US -1152084736,1152084991,IN +1152083968,1152084479,US +1152084480,1152084991,IN 1152084992,1152116479,US 1152116480,1152116735,CA -1152116736,1152116991,US -1152116992,1152117247,CA -1152117248,1152581631,US +1152116736,1152581631,US 1152581632,1152614399,CA 1152614400,1152778239,US 1152778240,1152843775,CA @@ -17764,9 +15979,19 @@ 1157910778,1157910782,CR 1157910783,1157910848,CA 1157910849,1157910864,US -1157910865,1157911355,CA +1157910865,1157910911,CA +1157910912,1157911039,US +1157911040,1157911295,CA +1157911296,1157911326,US +1157911327,1157911355,CA 1157911356,1157911386,US -1157911387,1157912448,CA +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 @@ -17777,7 +16002,9 @@ 1157912578,1157912606,US 1157912607,1157912833,CA 1157912834,1157912848,MY -1157912849,1157913154,CA +1157912849,1157912959,CA +1157912960,1157913023,US +1157913024,1157913154,CA 1157913155,1157913168,MY 1157913169,1157914194,CA 1157914195,1157914202,IN @@ -17846,7 +16073,30 @@ 1158488834,1158488846,IL 1158488847,1158493441,US 1158493442,1158493566,CA -1158493567,1158498457,US +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 @@ -17898,15 +16148,17 @@ 1158526931,1158526963,AS 1158526964,1158538864,US 1158538865,1158538872,WS -1158538873,1158711559,US -1158711560,1158711567,AE -1158711568,1158714111,US +1158538873,1158714111,US 1158714112,1158714367,US -1158714368,1158716415,US +1158714368,1158715007,US +1158715008,1158715039,IE +1158715040,1158716415,US 1158716416,1158716423,IN 1158716424,1158716543,US 1158716544,1158716551,IE -1158716552,1158726731,US +1158716552,1158716671,US +1158716672,1158716703,IE +1158716704,1158726731,US 1158726732,1158726739,CA 1158726740,1158732876,US 1158732877,1158732884,GB @@ -17922,298 +16174,7 @@ 1158794240,1158794495,US 1158794496,1158799359,BM 1158799360,1158807551,CA -1158807552,1158940823,US -1158940824,1158940831,ES -1158940832,1158940911,US -1158940912,1158940919,CA -1158940920,1158941247,US -1158941248,1158941255,CY -1158941256,1158941351,US -1158941352,1158941359,CR -1158941360,1158941367,CA -1158941368,1158941399,US -1158941400,1158941407,CA -1158941408,1158941775,US -1158941776,1158941791,JM -1158941792,1158941799,IE -1158941800,1158942271,US -1158942272,1158942279,IE -1158942280,1158942311,US -1158942312,1158942319,CA -1158942320,1158943423,US -1158943424,1158943431,PK -1158943432,1158943535,US -1158943536,1158943543,CA -1158943544,1158943599,US -1158943600,1158943615,GB -1158943616,1158943707,US -1158943708,1158943709,CA -1158943710,1158943863,US -1158943864,1158943871,CR -1158943872,1158943975,US -1158943976,1158943983,CA -1158943984,1158944505,US -1158944506,1158944507,BG -1158944508,1158944863,US -1158944864,1158944871,CA -1158944872,1158944895,US -1158944896,1158944903,ZA -1158944904,1158944951,US -1158944952,1158944959,IN -1158944960,1158945095,US -1158945096,1158945103,TH -1158945104,1158945111,US -1158945112,1158945119,CA -1158945120,1158945127,US -1158945128,1158945135,MX -1158945136,1158945271,US -1158945272,1158945287,CA -1158945288,1158945319,US -1158945320,1158945335,CA -1158945336,1158945535,US -1158945536,1158945543,CA -1158945544,1158945791,US -1158945792,1158945799,IE -1158945800,1158945807,US -1158945808,1158945815,IE -1158945816,1158945823,US -1158945824,1158945831,JP -1158945832,1158945935,US -1158945936,1158945943,CA -1158945944,1158946047,US -1158946048,1158946055,CA -1158946056,1158946151,US -1158946152,1158946159,IE -1158946160,1158946207,US -1158946208,1158946215,CA -1158946216,1158946299,US -1158946300,1158946301,CA -1158946302,1158946487,US -1158946488,1158946495,GB -1158946496,1158946551,US -1158946552,1158946559,CH -1158946560,1158946575,US -1158946576,1158946583,IN -1158946584,1158946711,US -1158946712,1158946719,HK -1158946720,1158946771,US -1158946772,1158946772,MX -1158946773,1158947391,US -1158947392,1158947399,CA -1158947400,1158947591,US -1158947592,1158947599,JP -1158947600,1158947647,US -1158947648,1158947655,CA -1158947656,1158947663,US -1158947664,1158947695,IE -1158947696,1158947711,US -1158947712,1158947719,CA -1158947720,1158947735,US -1158947736,1158947743,IN -1158947744,1158947759,AT -1158947760,1158947791,US -1158947792,1158947799,IN -1158947800,1158947831,US -1158947832,1158947839,TR -1158947840,1158947847,US -1158947848,1158947849,CA -1158947850,1158948383,US -1158948384,1158948391,IT -1158948392,1158948895,US -1158948896,1158948903,CA -1158948904,1158948967,US -1158948968,1158948975,CA -1158948976,1158949007,US -1158949008,1158949015,IL -1158949016,1158949287,US -1158949288,1158949295,CA -1158949296,1158950105,US -1158950106,1158950107,CA -1158950108,1158950335,US -1158950336,1158950351,CA -1158950352,1158950359,IN -1158950360,1158950367,CA -1158950368,1158950767,US -1158950768,1158950775,TH -1158950776,1158951231,US -1158951232,1158951263,TH -1158951264,1158951423,US -1158951424,1158951439,CA -1158951440,1158951447,NL -1158951448,1158951551,US -1158951552,1158951559,NL -1158951560,1158951575,US -1158951576,1158951583,CA -1158951584,1158951627,US -1158951628,1158951631,CA -1158951632,1158951743,US -1158951744,1158951751,IN -1158951752,1158951839,US -1158951840,1158951855,CA -1158951856,1158952711,US -1158952712,1158952719,IN -1158952720,1158952743,US -1158952744,1158952751,FI -1158952752,1158953503,US -1158953504,1158953511,NL -1158953512,1158954815,US -1158954816,1158954823,GB -1158954824,1158954831,CA -1158954832,1158955015,US -1158955016,1158955023,CA -1158955024,1158955039,US -1158955040,1158955047,GB -1158955048,1158956063,US -1158956064,1158956079,NL -1158956080,1158956095,US -1158956096,1158956103,CA -1158956104,1158956295,US -1158956296,1158956303,CA -1158956304,1158957455,US -1158957456,1158957471,NL -1158957472,1158957647,US -1158957648,1158957655,AU -1158957656,1158957663,PE -1158957664,1158957801,US -1158957802,1158957803,NL -1158957804,1158958295,US -1158958296,1158958303,AG -1158958304,1158958311,ES -1158958312,1158958367,US -1158958368,1158958375,CA -1158958376,1158958591,US -1158958592,1158958599,ZA -1158958600,1158958607,IL -1158958608,1158958671,US -1158958672,1158958679,SA -1158958680,1158958719,US -1158958720,1158958751,CA -1158958752,1158959031,US -1158959032,1158959039,CA -1158959040,1158959135,US -1158959136,1158959151,BD -1158959152,1158959679,US -1158959680,1158959687,CR -1158959688,1158960455,US -1158960456,1158960463,IN -1158960464,1158960535,US -1158960536,1158960543,NZ -1158960544,1158961063,US -1158961064,1158961071,TW -1158961072,1158961151,US -1158961152,1158961159,GB -1158961160,1158961175,US -1158961176,1158961183,CA -1158961184,1158961255,US -1158961256,1158961263,ES -1158961264,1158961775,US -1158961776,1158961783,CA -1158961784,1158962023,US -1158962024,1158962027,IL -1158962028,1158962175,US -1158962176,1158962183,GB -1158962184,1158962287,US -1158962288,1158962295,ZA -1158962296,1158962591,US -1158962592,1158962607,GB -1158962608,1158962615,US -1158962616,1158962623,GB -1158962624,1158962671,US -1158962672,1158962675,IN -1158962676,1158963271,US -1158963272,1158963279,IE -1158963280,1158963453,US -1158963454,1158963455,CA -1158963456,1158963647,US -1158963648,1158963663,IN -1158963664,1158964103,US -1158964104,1158964111,IN -1158964112,1158964189,US -1158964190,1158964191,CA -1158964192,1158964287,US -1158964288,1158964319,CA -1158964320,1158964631,US -1158964632,1158964639,CA -1158964640,1158964647,MX -1158964648,1158964701,US -1158964702,1158964703,CA -1158964704,1158964711,US -1158964712,1158964713,JE -1158964714,1158964799,US -1158964800,1158964807,IE -1158964808,1158964831,US -1158964832,1158964839,GB -1158964840,1158964943,US -1158964944,1158964951,MX -1158964952,1158965087,US -1158965088,1158965111,CA -1158965112,1158965119,US -1158965120,1158965135,AR -1158965136,1158965159,US -1158965160,1158965167,IL -1158965168,1158965199,US -1158965200,1158965215,CA -1158965216,1158965247,US -1158965248,1158965255,IN -1158965256,1158965559,US -1158965560,1158965567,IN -1158965568,1158965743,US -1158965744,1158965751,IN -1158965752,1158966127,US -1158966128,1158966143,FR -1158966144,1158966335,US -1158966336,1158966343,PL -1158966344,1158966359,CA -1158966360,1158966485,US -1158966486,1158966489,AT -1158966490,1158966567,US -1158966568,1158966591,CA -1158966592,1158966799,US -1158966800,1158966807,CA -1158966808,1158966911,US -1158966912,1158966919,MX -1158966920,1158966959,US -1158966960,1158966967,MX -1158966968,1158966991,US -1158966992,1158966999,CA -1158967000,1158967263,US -1158967264,1158967279,TH -1158967280,1158967327,US -1158967328,1158967335,JP -1158967336,1158967343,GB -1158967344,1158967527,US -1158967528,1158967535,CA -1158967536,1158967543,IE -1158967544,1158967559,US -1158967560,1158967567,CA -1158967568,1158967615,US -1158967616,1158967623,GT -1158967624,1158967631,US -1158967632,1158967679,CA -1158967680,1158968015,US -1158968016,1158968017,GB -1158968018,1158968071,US -1158968072,1158968079,MT -1158968080,1158968103,US -1158968104,1158968111,HU -1158968112,1158968207,US -1158968208,1158968239,CA -1158968240,1158968823,US -1158968824,1158968827,GB -1158968828,1158969447,US -1158969448,1158969455,CA -1158969456,1158969663,US -1158969664,1158969679,MX -1158969680,1158969703,US -1158969704,1158969711,CA -1158969712,1158970127,US -1158970128,1158970135,CA -1158970136,1158970287,US -1158970288,1158970295,CA -1158970296,1158970303,MY -1158970304,1158970943,US -1158970944,1158970975,CA -1158970976,1158995967,US +1158807552,1158995967,US 1158995968,1158997879,CA 1158997880,1158997887,US 1158997888,1158997919,CA @@ -18282,15 +16243,17 @@ 1159281920,1159282175,GB 1159282176,1159290655,US 1159290656,1159290687,CA -1159290688,1159300607,US +1159290688,1159292807,US +1159292808,1159292815,AU +1159292816,1159293487,US +1159293488,1159293503,BR +1159293504,1159300607,US 1159300608,1159300863,SE 1159300864,1159314943,US 1159314944,1159315199,CR 1159315200,1159318015,US 1159318016,1159318047,GB -1159318048,1159343615,US -1159343616,1159343871,FR -1159343872,1159347199,US +1159318048,1159347199,US 1159347200,1159347455,AU 1159347456,1159348223,US 1159348224,1159356415,CA @@ -18369,10 +16332,9 @@ 1159522168,1159522175,CA 1159522176,1159522207,US 1159522208,1159522239,CA -1159522240,1159522271,BV +1159522240,1159522271,US 1159522272,1159522287,CA -1159522288,1159522303,BV -1159522304,1159522815,US +1159522288,1159522815,US 1159522816,1159523327,CA 1159523328,1159523583,US 1159523584,1159524351,CA @@ -18384,9 +16346,7 @@ 1159656488,1159656495,BR 1159656496,1159657023,US 1159657024,1159657039,AU -1159657040,1159659071,US -1159659072,1159659079,IN -1159659080,1159668479,US +1159657040,1159668479,US 1159668480,1159668735,CA 1159668736,1159673471,US 1159673472,1159673503,CA @@ -18398,9 +16358,7 @@ 1159694592,1159694847,CA 1159694848,1159700479,US 1159700480,1159725055,CA -1159725056,1159767039,US -1159767040,1159767295,CA -1159767296,1159988735,US +1159725056,1159988735,US 1159988736,1159988991,MX 1159988992,1159995647,US 1159995648,1159995655,AU @@ -18419,7 +16377,15 @@ 1159998712,1160011775,US 1160011776,1160012783,CA 1160012784,1160012791,US -1160012792,1160014775,CA +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 @@ -18474,9 +16440,7 @@ 1160373440,1160373503,AE 1160373504,1160392703,US 1160392704,1160396799,CA -1160396800,1160397007,US -1160397008,1160397023,GB -1160397024,1160405631,US +1160396800,1160405631,US 1160405632,1160406015,DO 1160406016,1160406271,US 1160406272,1160406303,VE @@ -18490,7 +16454,17 @@ 1160408320,1160408575,CA 1160408576,1160409599,US 1160409600,1160410111,CO -1160410112,1160411407,US +1160410112,1160410287,US +1160410288,1160410303,DO +1160410304,1160410447,US +1160410448,1160410463,UY +1160410464,1160410479,TT +1160410480,1160410495,US +1160410496,1160410511,PR +1160410512,1160410519,EC +1160410520,1160410551,US +1160410552,1160410559,EC +1160410560,1160411407,US 1160411408,1160411423,GB 1160411424,1160411567,US 1160411568,1160411583,BR @@ -18579,9 +16553,7 @@ 1160665816,1160667087,US 1160667088,1160667095,GB 1160667096,1160667135,US -1160667136,1160667967,CA -1160667968,1160668031,US -1160668032,1160675327,CA +1160667136,1160675327,CA 1160675328,1160677247,US 1160677248,1160677279,GB 1160677280,1160677375,US @@ -18595,9 +16567,25 @@ 1160684064,1160684071,US 1160684072,1160684887,CA 1160684888,1160684895,US -1160684896,1160685695,CA -1160685696,1160685823,US -1160685824,1160689419,CA +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 @@ -18650,7 +16638,9 @@ 1160691648,1160691671,CA 1160691672,1160691679,US 1160691680,1160691711,CA -1160691712,1160810495,US +1160691712,1160808255,US +1160808256,1160808287,CA +1160808288,1160810495,US 1160810496,1160810751,CA 1160810752,1160811551,US 1160811552,1160811559,BE @@ -18658,9 +16648,7 @@ 1160847360,1160855551,CA 1160855552,1160863999,US 1160864000,1160864255,CA -1160864256,1160867839,US -1160867840,1160871935,CA -1160871936,1160905215,US +1160864256,1160905215,US 1160905216,1160905471,US 1160905472,1160921087,US 1160921088,1160925183,AG @@ -18702,8 +16690,9 @@ 1161363456,1161367551,CA 1161367552,1161416703,US 1161416704,1161420799,CA -1161420800,1161421055,AG -1161421056,1161421311,GB +1161420800,1161421151,AG +1161421152,1161421167,MS +1161421168,1161421311,AG 1161421312,1161421567,AI 1161421568,1161422079,AG 1161422080,1161422335,VG @@ -18728,7 +16717,9 @@ 1161426176,1161426943,AG 1161426944,1161427199,AI 1161427200,1161427455,VG -1161427456,1161428223,AG +1161427456,1161427487,AG +1161427488,1161427519,MS +1161427520,1161428223,AG 1161428224,1161428991,KN 1161428992,1161429247,US 1161429248,1161429503,CA @@ -18769,8 +16760,40 @@ 1161430720,1161430743,CA 1161430744,1161430751,IT 1161430752,1161430759,TH -1161430760,1161431039,CA -1161431040,1161433087,US +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,1161432831,CA +1161432832,1161433087,US 1161433088,1161437183,CA 1161437184,1161453567,US 1161453568,1161457663,CA @@ -19153,12 +17176,8 @@ 1161651096,1161651103,HR 1161651104,1161651135,GB 1161651136,1161651143,BG -1161651144,1161651775,US -1161651776,1161651807,AR -1161651808,1161651839,US -1161651840,1161651855,MY -1161651856,1161651935,US -1161651936,1161651999,AF +1161651144,1161651967,US +1161651968,1161651999,AF 1161652000,1161652095,US 1161652096,1161652103,CY 1161652104,1161652135,US @@ -19218,7 +17237,82 @@ 1161796100,1161796103,CZ 1161796104,1161818111,US 1161818112,1161822207,CA -1161822208,1161830928,US +1161822208,1161830417,US +1161830418,1161830418,JP +1161830419,1161830425,US +1161830426,1161830426,CA +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,1161830479,US +1161830480,1161830480,BY +1161830481,1161830497,US +1161830498,1161830498,VN +1161830499,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,UA +1161830641,1161830662,US +1161830663,1161830664,BR +1161830665,1161830683,US +1161830684,1161830684,BR +1161830685,1161830694,US +1161830695,1161830695,UA +1161830696,1161830696,GT +1161830697,1161830721,US +1161830722,1161830722,CY +1161830723,1161830753,US +1161830754,1161830754,CA +1161830755,1161830779,US +1161830780,1161830780,BE +1161830781,1161830784,US +1161830785,1161830785,CY +1161830786,1161830799,US +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,US +1161830821,1161830821,CY +1161830822,1161830822,CN +1161830823,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,1161830893,US +1161830894,1161830894,BE +1161830895,1161830895,BR +1161830896,1161830928,US 1161830929,1161830929,MX 1161830930,1161830933,US 1161830934,1161830934,MX @@ -19396,8 +17490,8 @@ 1161832474,1161832475,CA 1161832476,1161832476,US 1161832477,1161832478,CA -1161832479,1161832482,US -1161832483,1161832484,UA +1161832479,1161832483,US +1161832484,1161832484,UA 1161832485,1161832485,TR 1161832486,1161832486,US 1161832487,1161832488,TR @@ -19412,22 +17506,24 @@ 1161832509,1161832509,MX 1161832510,1161832510,MD 1161832511,1161832516,US -1161832517,1161832530,CA +1161832517,1161832518,BR +1161832519,1161832524,CA +1161832525,1161832530,BR 1161832531,1161832531,US -1161832532,1161832536,CA +1161832532,1161832536,BR 1161832537,1161832537,US -1161832538,1161832538,CA +1161832538,1161832538,BR 1161832539,1161832539,PK -1161832540,1161832541,CA +1161832540,1161832541,BR 1161832542,1161832542,US -1161832543,1161832543,CA -1161832544,1161832544,TR +1161832543,1161832543,BR +1161832544,1161832544,US 1161832545,1161832545,NL -1161832546,1161832550,CA +1161832546,1161832550,BR 1161832551,1161832553,US 1161832554,1161832554,NL -1161832555,1161832555,TR -1161832556,1161832556,CA +1161832555,1161832555,US +1161832556,1161832556,BR 1161832557,1161832558,IN 1161832559,1161832559,CA 1161832560,1161832562,US @@ -19455,7 +17551,9 @@ 1161832623,1161832623,CA 1161832624,1161832625,US 1161832626,1161832632,CA -1161832633,1161832799,US +1161832633,1161832770,US +1161832771,1161832782,BR +1161832783,1161832799,US 1161832800,1161832831,BR 1161832832,1161832927,US 1161832928,1161832959,LT @@ -19481,26 +17579,31 @@ 1161833078,1161833081,BR 1161833082,1161833082,TR 1161833083,1161833083,NL -1161833084,1161833093,US -1161833094,1161833094,TR +1161833084,1161833089,US +1161833090,1161833090,BR +1161833091,1161833093,US +1161833094,1161833094,CA 1161833095,1161833097,US 1161833098,1161833100,CA -1161833101,1161833101,US +1161833101,1161833101,BR 1161833102,1161833128,CA 1161833129,1161833129,US -1161833130,1161833134,CA +1161833130,1161833132,CA +1161833133,1161833134,BR 1161833135,1161833136,US -1161833137,1161833138,CA +1161833137,1161833138,BR 1161833139,1161833139,US -1161833140,1161833144,CA +1161833140,1161833144,BR 1161833145,1161833145,US -1161833146,1161833151,CA +1161833146,1161833151,BR 1161833152,1161833152,US -1161833153,1161833168,CA +1161833153,1161833168,BR 1161833169,1161833169,US -1161833170,1161833170,CA -1161833171,1161833174,US -1161833175,1161833175,TR +1161833170,1161833170,BR +1161833171,1161833171,US +1161833172,1161833173,BR +1161833174,1161833174,US +1161833175,1161833175,CA 1161833176,1161833191,US 1161833192,1161833197,CA 1161833198,1161833198,US @@ -19580,8 +17683,9 @@ 1161837948,1161837948,PK 1161837949,1161837958,BR 1161837959,1161837959,US -1161837960,1161837967,BR -1161837968,1161837975,US +1161837960,1161837971,BR +1161837972,1161837974,US +1161837975,1161837975,CA 1161837976,1161837976,BR 1161837977,1161837994,US 1161837995,1161838000,BR @@ -19604,7 +17708,9 @@ 1161838437,1161838437,IR 1161838438,1161838441,US 1161838442,1161838442,BR -1161838443,1161838456,US +1161838443,1161838452,US +1161838453,1161838453,PH +1161838454,1161838456,US 1161838457,1161838458,RU 1161838459,1161838459,US 1161838460,1161838460,BR @@ -19612,11 +17718,13 @@ 1161838469,1161838469,DO 1161838470,1161838475,US 1161838476,1161838476,CA -1161838477,1161838480,US +1161838477,1161838477,BR +1161838478,1161838480,US 1161838481,1161838481,CA 1161838482,1161838505,US 1161838506,1161838506,CA -1161838507,1161838514,US +1161838507,1161838511,US +1161838512,1161838514,AU 1161838515,1161838515,PK 1161838516,1161838516,IN 1161838517,1161838517,US @@ -19698,7 +17806,9 @@ 1162204971,1162204972,US 1162204973,1162215423,US 1162215424,1162280959,CA -1162280960,1162297343,US +1162280960,1162296407,US +1162296408,1162296415,CA +1162296416,1162297343,US 1162297344,1162305535,CA 1162305536,1162313727,US 1162313728,1162320127,A2 @@ -19728,7 +17838,9 @@ 1162473472,1162475007,GD 1162475008,1162477567,BB 1162477568,1162715135,US -1162715136,1162723327,CA +1162715136,1162716159,CA +1162716160,1162716175,US +1162716176,1162723327,CA 1162723328,1162807295,US 1162807296,1162809343,PR 1162809344,1162811391,US @@ -19738,11 +17850,9 @@ 1162812416,1162813439,BS 1162813440,1162817535,CW 1162817536,1162821631,GT -1162821632,1162823679,PR +1162821632,1162823679,US 1162823680,1162825727,GT -1162825728,1162829823,US -1162829824,1162831103,PR -1162831104,1162831871,US +1162825728,1162831871,US 1162831872,1162833919,PR 1162833920,1162835967,GT 1162835968,1162836223,BS @@ -19891,10 +18001,14 @@ 1163468800,1163469055,PR 1163469056,1163469311,US 1163469312,1163472895,PR -1163472896,1163526143,US -1163526144,1163526911,CA -1163526912,1163527167,GB -1163527168,1163527903,CA +1163472896,1163479295,US +1163479296,1163479551,CA +1163479552,1163526143,US +1163526144,1163527059,CA +1163527060,1163527071,US +1163527072,1163527103,CA +1163527104,1163527135,US +1163527136,1163527903,CA 1163527904,1163527935,US 1163527936,1163529215,CA 1163529216,1163530239,US @@ -19978,11 +18092,8 @@ 1163545216,1163545295,CA 1163545296,1163545303,US 1163545304,1163545311,CA -1163545312,1163545343,BV -1163545344,1163545423,US -1163545424,1163545439,CA -1163545440,1163545599,US -1163545600,1163545631,CA +1163545312,1163545567,US +1163545568,1163545631,CA 1163545632,1163545663,GB 1163545664,1163545695,CA 1163545696,1163545727,US @@ -19994,9 +18105,7 @@ 1163546040,1163546047,NZ 1163546048,1163546119,CA 1163546120,1163546127,US -1163546128,1163546135,CA -1163546136,1163546143,US -1163546144,1163546199,CA +1163546128,1163546199,CA 1163546200,1163546207,US 1163546208,1163546399,CA 1163546400,1163546423,US @@ -20006,7 +18115,15 @@ 1163546528,1163546535,US 1163546536,1163546551,CA 1163546552,1163546559,US -1163546560,1163550239,CA +1163546560,1163547487,CA +1163547488,1163547519,US +1163547520,1163547535,CA +1163547536,1163547539,US +1163547540,1163547567,CA +1163547568,1163547583,VG +1163547584,1163547951,CA +1163547952,1163547983,US +1163547984,1163550239,CA 1163550240,1163550255,US 1163550256,1163550335,CA 1163550336,1163550351,US @@ -20037,8 +18154,7 @@ 1163552704,1163553855,CA 1163553856,1163553871,US 1163553872,1163553919,CA -1163553920,1163553935,BV -1163553936,1163553951,US +1163553920,1163553951,US 1163553952,1163554559,CA 1163554560,1163554591,US 1163554592,1163554639,CA @@ -20078,8 +18194,8 @@ 1163571984,1163571999,US 1163572000,1163572175,CA 1163572176,1163572183,US -1163572184,1163573247,CA -1163573248,1163573439,US +1163572184,1163573263,CA +1163573264,1163573439,US 1163573440,1163573503,IN 1163573504,1163575039,US 1163575040,1163575295,IN @@ -20164,11 +18280,7 @@ 1163870576,1163870583,CN 1163870584,1163878399,US 1163878400,1163878407,CN -1163878408,1167319111,US -1167319112,1167319119,ZA -1167319120,1167319255,US -1167319256,1167319263,CA -1167319264,1167319359,US +1163878408,1167319359,US 1167319360,1167319367,CA 1167319368,1167320071,US 1167320072,1167320079,CA @@ -20184,9 +18296,7 @@ 1167323544,1167323551,CA 1167323552,1167323823,US 1167323824,1167323831,IN -1167323832,1167324047,US -1167324048,1167324055,CA -1167324056,1167324287,US +1167323832,1167324287,US 1167324288,1167324295,GB 1167324296,1167324311,US 1167324312,1167324319,CA @@ -20212,7 +18322,9 @@ 1167327112,1167327119,IN 1167327120,1167327207,US 1167327208,1167327215,IN -1167327216,1167851519,US +1167327216,1167693199,US +1167693200,1167693215,UA +1167693216,1167851519,US 1167851520,1168113663,CA 1168113664,1168138239,US 1168138240,1168146431,JM @@ -20278,21 +18390,12 @@ 1168953120,1168953279,CA 1168953280,1168953311,US 1168953312,1168953343,CA -1168953344,1168954075,US -1168954076,1168954079,CA -1168954080,1168955647,US +1168953344,1168955647,US 1168955648,1168956415,CA 1168956416,1168957183,US 1168957184,1168957311,IN 1168957312,1168957439,US -1168957440,1168958047,CA -1168958048,1168958055,DE -1168958056,1168958063,CA -1168958064,1168958071,US -1168958072,1168958111,CA -1168958112,1168958127,US -1168958128,1168958191,CA -1168958192,1168958207,AU +1168957440,1168958207,CA 1168958208,1168958211,US 1168958212,1168958215,CA 1168958216,1168958223,US @@ -20366,8 +18469,7 @@ 1169203200,1169211391,CA 1169211392,1170190335,US 1170190336,1170190847,GB -1170190848,1170191103,JP -1170191104,1170375167,US +1170190848,1170375167,US 1170375168,1170375679,US 1170375680,1170456959,US 1170456960,1170456975,CR @@ -20416,9 +18518,7 @@ 1175977984,1176502271,CA 1176502272,1176511831,US 1176511832,1176511839,CA -1176511840,1176512175,US -1176512176,1176512183,CA -1176512184,1176512703,US +1176511840,1176512703,US 1176512704,1176512711,ZA 1176512712,1176513479,US 1176513480,1176513487,CA @@ -20452,14 +18552,18 @@ 1176620784,1176620863,CA 1176620864,1176620879,US 1176620880,1176620911,CA -1176620912,1176620927,US +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,1176621695,CA +1176621632,1176621663,CA +1176621664,1176621679,US +1176621680,1176621695,CA 1176621696,1176621727,US 1176621728,1176621759,CA 1176621760,1176621823,US @@ -20476,8 +18580,36 @@ 1176623568,1176623583,US 1176623584,1176623615,CA 1176623616,1176623871,US -1176623872,1176627199,CA -1176627200,1176629247,US +1176623872,1176625151,CA +1176625152,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 @@ -20496,13 +18628,31 @@ 1176629760,1176630271,US 1176630272,1176631295,CA 1176631296,1176631423,NL -1176631424,1176662015,US -1176662016,1176666111,CA -1176666112,1176702975,US +1176631424,1176702975,US 1176702976,1176707071,CA 1176707072,1176731647,US 1176731648,1176735743,PR -1176735744,1176739839,A2 +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 +1176738304,1176739071,CO +1176739072,1176739327,US +1176739328,1176739407,CO +1176739408,1176739583,A2 +1176739584,1176739839,CO 1176739840,1176743935,CA 1176743936,1176752127,US 1176752128,1176756223,CA @@ -20526,23 +18676,21 @@ 1176771840,1176771895,US 1176771896,1176771903,AE 1176771904,1176772079,US -1176772080,1176772095,DO -1176772096,1176776703,US +1176772080,1176772087,MX +1176772088,1176776703,US 1176776704,1176780799,CA 1176780800,1176895487,US -1176895488,1176896519,CA -1176896520,1176896527,MX -1176896528,1176896543,CA -1176896544,1176896551,MX -1176896552,1176897047,CA +1176895488,1176897047,CA 1176897048,1176897055,US -1176897056,1176899151,CA -1176899152,1176899159,KZ -1176899160,1176908223,CA +1176897056,1176900735,CA +1176900736,1176900743,US +1176900744,1176904767,CA +1176904768,1176904775,US +1176904776,1176904871,CA +1176904872,1176904879,US +1176904880,1176908223,CA 1176908224,1176908231,MX -1176908232,1176909671,CA -1176909672,1176909679,US -1176909680,1176917831,CA +1176908232,1176917831,CA 1176917832,1176917839,AU 1176917840,1176925007,CA 1176925008,1176925015,NG @@ -20553,9 +18701,7 @@ 1177022976,1177023231,GB 1177023232,1177030655,US 1177030656,1177033727,AG -1177033728,1177053695,US -1177053696,1177053951,GB -1177053952,1177059327,US +1177033728,1177059327,US 1177059328,1177061375,CA 1177061376,1177062143,US 1177062144,1177075455,CA @@ -20570,19 +18716,21 @@ 1177164896,1177164927,US 1177164928,1177164943,CA 1177164944,1177165055,US -1177165056,1177165087,CA -1177165088,1177165311,US -1177165312,1177165823,CA -1177165824,1177182527,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,1177389941,PR -1177389942,1177389942,US -1177389943,1177419775,PR +1177354240,1177355263,PR +1177355264,1177355391,US +1177355392,1177419775,PR 1177419776,1177505401,US 1177505402,1177505402,BB 1177505403,1177550847,US @@ -20619,7 +18767,9 @@ 1192468480,1192476671,CA 1192476672,1192488959,US 1192488960,1192493055,CA -1192493056,1199722495,US +1192493056,1199718695,US +1199718696,1199718703,A2 +1199718704,1199722495,US 1199722496,1199722503,A2 1199722504,1207975935,US 1207975936,1207980031,CA @@ -20638,361 +18788,7 @@ 1208107008,1208122031,US 1208122032,1208122047,GB 1208122048,1208122063,CA -1208122064,1208189951,US -1208189952,1208190015,GB -1208190016,1208190543,US -1208190544,1208190559,GB -1208190560,1208190583,US -1208190584,1208190591,GB -1208190592,1208191047,US -1208191048,1208191055,AU -1208191056,1208191087,US -1208191088,1208191095,NO -1208191096,1208191311,US -1208191312,1208191313,GB -1208191314,1208191317,US -1208191318,1208191319,GB -1208191320,1208191359,US -1208191360,1208191367,GB -1208191368,1208191391,US -1208191392,1208191423,NO -1208191424,1208191447,US -1208191448,1208191455,IE -1208191456,1208191567,US -1208191568,1208191575,SG -1208191576,1208191647,US -1208191648,1208191655,AG -1208191656,1208192167,US -1208192168,1208192175,BM -1208192176,1208192311,US -1208192312,1208192319,CA -1208192320,1208192359,US -1208192360,1208192367,GB -1208192368,1208192487,US -1208192488,1208192495,CA -1208192496,1208192879,US -1208192880,1208192895,MY -1208192896,1208192903,US -1208192904,1208192911,CA -1208192912,1208192959,US -1208192960,1208192967,IL -1208192968,1208193135,US -1208193136,1208193151,MY -1208193152,1208193391,US -1208193392,1208193407,AU -1208193408,1208193455,US -1208193456,1208193463,PA -1208193464,1208193599,US -1208193600,1208193615,CA -1208193616,1208193871,US -1208193872,1208193879,AU -1208193880,1208194045,US -1208194046,1208194047,IL -1208194048,1208194191,US -1208194192,1208194223,MY -1208194224,1208194289,US -1208194290,1208194291,GB -1208194292,1208194511,US -1208194512,1208194513,CA -1208194514,1208194519,US -1208194520,1208194523,AU -1208194524,1208195359,US -1208195360,1208195375,MY -1208195376,1208195391,US -1208195392,1208195399,IN -1208195400,1208195447,US -1208195448,1208195455,GB -1208195456,1208195487,US -1208195488,1208195519,HU -1208195520,1208195535,US -1208195536,1208195551,GB -1208195552,1208195703,US -1208195704,1208195711,CA -1208195712,1208195759,US -1208195760,1208195775,BG -1208195776,1208195855,US -1208195856,1208195871,GB -1208195872,1208195887,US -1208195888,1208195903,ID -1208195904,1208196143,US -1208196144,1208196151,AU -1208196152,1208196327,US -1208196328,1208196335,CA -1208196336,1208196607,US -1208196608,1208196615,CA -1208196616,1208196703,US -1208196704,1208196719,CA -1208196720,1208196951,US -1208196952,1208196959,ZA -1208196960,1208197047,US -1208197048,1208197055,BM -1208197056,1208197057,BR -1208197058,1208197135,US -1208197136,1208197167,MY -1208197168,1208197239,US -1208197240,1208197247,CA -1208197248,1208197527,US -1208197528,1208197535,FR -1208197536,1208197559,US -1208197560,1208197567,AU -1208197568,1208197579,US -1208197580,1208197583,GB -1208197584,1208197631,US -1208197632,1208197639,AU -1208197640,1208197967,US -1208197968,1208197983,AU -1208197984,1208198031,US -1208198032,1208198039,AU -1208198040,1208198047,BS -1208198048,1208198135,US -1208198136,1208198143,AU -1208198144,1208198159,US -1208198160,1208198167,ID -1208198168,1208198343,US -1208198344,1208198347,GB -1208198348,1208198349,CA -1208198350,1208198559,US -1208198560,1208198575,IN -1208198576,1208198743,US -1208198744,1208198751,GB -1208198752,1208199055,US -1208199056,1208199063,AU -1208199064,1208199087,US -1208199088,1208199103,MY -1208199104,1208199127,US -1208199128,1208199129,IE -1208199130,1208199223,US -1208199224,1208199231,AR -1208199232,1208199343,US -1208199344,1208199351,CR -1208199352,1208199359,MY -1208199360,1208199637,US -1208199638,1208199639,NG -1208199640,1208199767,US -1208199768,1208199775,MX -1208199776,1208199783,MY -1208199784,1208199831,US -1208199832,1208199839,AR -1208199840,1208200167,US -1208200168,1208200175,CA -1208200176,1208200247,US -1208200248,1208200255,MC -1208200256,1208200271,US -1208200272,1208200287,BD -1208200288,1208200303,US -1208200304,1208200319,AU -1208200320,1208200823,US -1208200824,1208200887,BS -1208200888,1208200959,US -1208200960,1208200963,ID -1208200964,1208201063,US -1208201064,1208201071,IN -1208201072,1208201535,US -1208201536,1208201543,GB -1208201544,1208201631,US -1208201632,1208201639,CA -1208201640,1208201951,US -1208201952,1208201959,MY -1208201960,1208202007,US -1208202008,1208202015,CA -1208202016,1208202255,US -1208202256,1208202287,MY -1208202288,1208202495,US -1208202496,1208202511,GB -1208202512,1208202519,AU -1208202520,1208202559,US -1208202560,1208202575,JP -1208202576,1208202731,US -1208202732,1208202733,CA -1208202734,1208203023,US -1208203024,1208203071,MY -1208203072,1208203255,US -1208203256,1208203257,RO -1208203258,1208203343,US -1208203344,1208203359,AU -1208203360,1208204007,US -1208204008,1208204015,NL -1208204016,1208204031,US -1208204032,1208204039,GB -1208204040,1208204047,US -1208204048,1208204055,JP -1208204056,1208204259,US -1208204260,1208204263,MX -1208204264,1208204775,US -1208204776,1208204783,CA -1208204784,1208205049,US -1208205050,1208205053,IL -1208205054,1208205063,US -1208205064,1208205079,MY -1208205080,1208205167,US -1208205168,1208205231,MY -1208205232,1208205247,US -1208205248,1208205263,IN -1208205264,1208205303,US -1208205304,1208205311,CO -1208205312,1208205415,US -1208205416,1208205423,MY -1208205424,1208205455,US -1208205456,1208205463,CA -1208205464,1208205523,US -1208205524,1208205525,IN -1208205526,1208205703,US -1208205704,1208205711,CA -1208205712,1208205959,US -1208205960,1208205967,SG -1208205968,1208206041,US -1208206042,1208206043,SG -1208206044,1208206231,US -1208206232,1208206239,CH -1208206240,1208206535,US -1208206536,1208206537,IL -1208206538,1208206559,US -1208206560,1208206561,BH -1208206562,1208206783,US -1208206784,1208206785,ZA -1208206786,1208207095,US -1208207096,1208207097,IN -1208207098,1208207183,US -1208207184,1208207191,AU -1208207192,1208207359,US -1208207360,1208207391,CA -1208207392,1208207583,US -1208207584,1208207591,AU -1208207592,1208207599,US -1208207600,1208207607,AU -1208207608,1208207623,US -1208207624,1208207631,GB -1208207632,1208207983,US -1208207984,1208207999,NL -1208208000,1208208111,US -1208208112,1208208127,CA -1208208128,1208208215,US -1208208216,1208208223,CA -1208208224,1208208231,AU -1208208232,1208208303,US -1208208304,1208208311,KR -1208208312,1208208319,US -1208208320,1208208321,CA -1208208322,1208208799,US -1208208800,1208208807,AU -1208208808,1208208815,US -1208208816,1208208831,CA -1208208832,1208208875,US -1208208876,1208208877,CH -1208208878,1208208879,CA -1208208880,1208208927,US -1208208928,1208208943,AU -1208208944,1208209095,US -1208209096,1208209097,IN -1208209098,1208209175,US -1208209176,1208209183,CA -1208209184,1208209215,US -1208209216,1208209231,MY -1208209232,1208209359,US -1208209360,1208209375,MY -1208209376,1208209643,US -1208209644,1208209645,JE -1208209646,1208209719,US -1208209720,1208209727,TH -1208209728,1208209863,US -1208209864,1208209871,GT -1208209872,1208209959,US -1208209960,1208209967,IN -1208209968,1208210063,US -1208210064,1208210071,HK -1208210072,1208210079,US -1208210080,1208210095,GB -1208210096,1208210303,US -1208210304,1208210351,GB -1208210352,1208210431,US -1208210432,1208210439,JP -1208210440,1208210511,US -1208210512,1208210519,CA -1208210520,1208210751,US -1208210752,1208210759,TR -1208210760,1208211239,US -1208211240,1208211247,JM -1208211248,1208211423,US -1208211424,1208211439,IL -1208211440,1208211935,US -1208211936,1208211943,BM -1208211944,1208211951,US -1208211952,1208211959,ES -1208211960,1208212839,US -1208212840,1208212847,CA -1208212848,1208213087,US -1208213088,1208213103,NG -1208213104,1208213383,US -1208213384,1208213391,CA -1208213392,1208214679,US -1208214680,1208214687,JP -1208214688,1208215311,US -1208215312,1208215319,CA -1208215320,1208215351,US -1208215352,1208215359,PR -1208215360,1208215447,US -1208215448,1208215455,AU -1208215456,1208215935,US -1208215936,1208215951,GB -1208215952,1208216367,US -1208216368,1208216375,CA -1208216376,1208218031,US -1208218032,1208218039,HK -1208218040,1208218415,US -1208218416,1208218423,IN -1208218424,1208218823,US -1208218824,1208218831,FR -1208218832,1208219159,US -1208219160,1208219167,AU -1208219168,1208219319,US -1208219320,1208219327,AU -1208219328,1208219751,US -1208219752,1208219759,AU -1208219760,1208220655,US -1208220656,1208220663,AU -1208220664,1208220671,NZ -1208220672,1208220743,US -1208220744,1208220751,GB -1208220752,1208220815,US -1208220816,1208220823,FR -1208220824,1208250367,US -1208250368,1208250375,CA -1208250376,1208250623,US -1208250624,1208250631,NL -1208250632,1208250711,US -1208250712,1208250719,GB -1208250720,1208250735,US -1208250736,1208250743,IN -1208250744,1208251199,US -1208251200,1208251207,CA -1208251208,1208251215,US -1208251216,1208251223,AU -1208251224,1208251415,US -1208251416,1208251423,GB -1208251424,1208251431,IL -1208251432,1208251439,US -1208251440,1208251447,ES -1208251448,1208251479,US -1208251480,1208251487,GB -1208251488,1208251495,BB -1208251496,1208251631,US -1208251632,1208251647,GB -1208251648,1208251679,US -1208251680,1208251695,GB -1208251696,1208251807,US -1208251808,1208251823,CA -1208251824,1208251871,US -1208251872,1208251887,GB -1208251888,1208251903,IL -1208251904,1208252423,US -1208252424,1208252431,CA -1208252432,1208252703,US -1208252704,1208252735,AU -1208252736,1208252927,US -1208252928,1208253183,MX -1208253184,1208253599,US -1208253600,1208253615,IN -1208253616,1208301455,US +1208122064,1208301455,US 1208301456,1208301471,CA 1208301472,1208333567,US 1208333568,1208333823,GB @@ -21246,8 +19042,10 @@ 1208936448,1208954879,US 1208954880,1208957695,CA 1208957696,1208957823,US -1208957824,1208957887,CA -1208957888,1208957951,US +1208957824,1208957855,CA +1208957856,1208957919,US +1208957920,1208957935,CA +1208957936,1208957951,US 1208957952,1208958975,CA 1208958976,1208975359,US 1208975360,1208980503,CA @@ -21255,14 +19053,12 @@ 1208980512,1208982799,CA 1208982800,1208982815,SE 1208982816,1208983551,CA -1208983552,1208991775,US -1208991776,1208991791,GB -1208991792,1209002351,US +1208983552,1209002351,US 1209002352,1209002367,A2 1209002368,1209002495,US 1209002496,1209002687,A2 -1209002688,1209003007,US -1209003008,1209004031,A2 +1209002688,1209003519,US +1209003520,1209004031,A2 1209004032,1209189379,US 1209189380,1209189395,MX 1209189396,1209190147,US @@ -21351,676 +19147,16 @@ 1209892608,1209892863,CA 1209892864,1209893503,US 1209893504,1209893519,MX -1209893520,1209917439,US -1209917440,1209921055,CA -1209921056,1209921087,US -1209921088,1209925631,CA -1209925632,1210057039,US -1210057040,1210057047,JM -1210057048,1210057055,US -1210057056,1210057071,DE -1210057072,1210057519,US -1210057520,1210057535,IN -1210057536,1210057567,US -1210057568,1210057583,NG -1210057584,1210057615,US -1210057616,1210057623,CA -1210057624,1210057639,US -1210057640,1210057647,GB -1210057648,1210057879,US -1210057880,1210057887,IL -1210057888,1210057895,US -1210057896,1210057903,MX -1210057904,1210057911,GB -1210057912,1210058159,US -1210058160,1210058167,CA -1210058168,1210058191,US -1210058192,1210058199,CA -1210058200,1210058615,US -1210058616,1210058623,AU -1210058624,1210059271,US -1210059272,1210059279,ES -1210059280,1210059303,US -1210059304,1210059311,AU -1210059312,1210059591,US -1210059592,1210059599,CA -1210059600,1210059767,US -1210059768,1210059775,CH -1210059776,1210059791,GB -1210059792,1210060031,US -1210060032,1210060047,AE -1210060048,1210060351,US -1210060352,1210060359,IN -1210060360,1210060383,US -1210060384,1210060407,IL -1210060408,1210060515,US -1210060516,1210060517,IN -1210060518,1210060623,US -1210060624,1210060639,CA -1210060640,1210060783,US -1210060784,1210060787,NL -1210060788,1210060799,US -1210060800,1210060815,BR -1210060816,1210060823,US -1210060824,1210060831,IN -1210060832,1210060839,US -1210060840,1210060847,AU -1210060848,1210060855,IN -1210060856,1210061327,US -1210061328,1210061335,CA -1210061336,1210061367,US -1210061368,1210061375,IN -1210061376,1210061407,US -1210061408,1210061415,AU -1210061416,1210061463,US -1210061464,1210061471,HK -1210061472,1210061599,US -1210061600,1210061631,IL -1210061632,1210061655,US -1210061656,1210061663,GB -1210061664,1210061727,US -1210061728,1210061735,GB -1210061736,1210061803,US -1210061804,1210061807,AU -1210061808,1210061991,US -1210061992,1210061999,AU -1210062000,1210062095,US -1210062096,1210062103,NZ -1210062104,1210062463,US -1210062464,1210062479,IN -1210062480,1210062487,US -1210062488,1210062495,MX -1210062496,1210062815,US -1210062816,1210062831,ZA -1210062832,1210062847,IL -1210062848,1210062927,US -1210062928,1210062935,AU -1210062936,1210062967,US -1210062968,1210062975,IE -1210062976,1210062983,CR -1210062984,1210064067,US -1210064068,1210064071,CA -1210064072,1210064311,US -1210064312,1210064319,IE -1210064320,1210064527,US -1210064528,1210064535,AU -1210064536,1210064663,US -1210064664,1210064671,AU -1210064672,1210064989,US -1210064990,1210064991,AU -1210064992,1210065023,US -1210065024,1210065031,CA -1210065032,1210065319,US -1210065320,1210065327,AU -1210065328,1210065535,US -1210065536,1210065543,IN -1210065544,1210065663,US -1210065664,1210065679,IN -1210065680,1210065695,US -1210065696,1210065703,IN -1210065704,1210065751,US -1210065752,1210065759,GB -1210065760,1210065783,US -1210065784,1210065791,PA -1210065792,1210065823,US -1210065824,1210065855,AU -1210065856,1210065877,US -1210065878,1210065879,AU -1210065880,1210066175,US -1210066176,1210066183,CA -1210066184,1210066287,US -1210066288,1210066295,IN -1210066296,1210066787,US -1210066788,1210066791,CR -1210066792,1210066807,US -1210066808,1210066831,CA -1210066832,1210066883,US -1210066884,1210066887,CA -1210066888,1210066921,US -1210066922,1210066923,IN -1210066924,1210067207,US -1210067208,1210067215,AU -1210067216,1210067263,US -1210067264,1210067287,GB -1210067288,1210067295,AU -1210067296,1210067311,NL -1210067312,1210067417,US -1210067418,1210067419,IE -1210067420,1210067632,US -1210067633,1210067640,AU -1210067641,1210067671,US -1210067672,1210067675,NL -1210067676,1210068039,US -1210068040,1210068047,GB -1210068048,1210068163,US -1210068164,1210068165,IN -1210068166,1210068319,US -1210068320,1210068327,CA -1210068328,1210068343,US -1210068344,1210068351,MX -1210068352,1210068447,US -1210068448,1210068471,NO -1210068472,1210068607,US -1210068608,1210068735,IL -1210068736,1210068903,US -1210068904,1210068927,AU -1210068928,1210069015,US -1210069016,1210069023,CA -1210069024,1210069159,US -1210069160,1210069167,AU -1210069168,1210070175,US -1210070176,1210070183,IL -1210070184,1210070631,US -1210070632,1210070639,MX -1210070640,1210070799,US -1210070800,1210070807,AU -1210070808,1210070959,US -1210070960,1210070967,JP -1210070968,1210071007,US -1210071008,1210071015,GB -1210071016,1210071039,US -1210071040,1210071167,GB -1210071168,1210072519,US -1210072520,1210072527,NZ -1210072528,1210072559,US -1210072560,1210072567,GB -1210072568,1210075279,US -1210075280,1210075295,FR -1210075296,1210076039,US -1210076040,1210076047,CA -1210076048,1210076097,US -1210076098,1210076099,NL -1210076100,1210076109,US -1210076110,1210076111,CH -1210076112,1210079911,US -1210079912,1210079919,BM -1210079920,1210079959,US -1210079960,1210079961,MX -1210079962,1210080079,US -1210080080,1210080111,GB -1210080112,1210080407,US -1210080408,1210080415,NL -1210080416,1210080423,US -1210080424,1210080455,NL -1210080456,1210080731,US -1210080732,1210080733,IL -1210080734,1210080799,US -1210080800,1210080815,CA -1210080816,1210081087,US -1210081088,1210081103,CA -1210081104,1210081335,US -1210081336,1210081343,CR -1210081344,1210081559,US -1210081560,1210081567,PK -1210081568,1210081599,US -1210081600,1210081615,AU -1210081616,1210081751,US -1210081752,1210081753,FR -1210081754,1210081789,US -1210081790,1210081791,IN -1210081792,1210081823,US -1210081824,1210081831,MX -1210081832,1210081839,US -1210081840,1210081847,MX -1210081848,1210081879,US -1210081880,1210081887,MX -1210081888,1210081911,US -1210081912,1210081919,AU -1210081920,1210081943,US -1210081944,1210081951,CA -1210081952,1210082043,US -1210082044,1210082047,CA -1210082048,1210082055,IN -1210082056,1210082327,US -1210082328,1210082335,CA -1210082336,1210082447,US -1210082448,1210082463,AU -1210082464,1210082655,US -1210082656,1210082663,CA -1210082664,1210082797,US -1210082798,1210082799,AU -1210082800,1210082809,US -1210082810,1210082811,IN -1210082812,1210082831,US -1210082832,1210082839,AU -1210082840,1210082847,IN -1210082848,1210082975,US -1210082976,1210082991,GB -1210082992,1210083071,US -1210083072,1210083079,JP -1210083080,1210083567,US -1210083568,1210083569,BH -1210083570,1210083719,US -1210083720,1210083735,IN -1210083736,1210083871,US -1210083872,1210083879,CA -1210083880,1210083983,US -1210083984,1210083991,IN -1210083992,1210084215,US -1210084216,1210084223,VE -1210084224,1210084263,US -1210084264,1210084271,NZ -1210084272,1210084359,US -1210084360,1210084367,BG -1210084368,1210084415,US -1210084416,1210084479,CA -1210084480,1210084711,US -1210084712,1210084719,AU -1210084720,1210084783,US -1210084784,1210084799,BD -1210084800,1210085055,US -1210085056,1210085057,AU -1210085058,1210086503,US -1210086504,1210086511,GB -1210086512,1210086551,US -1210086552,1210086559,SE -1210086560,1210086583,US -1210086584,1210086591,SE -1210086592,1210086599,US -1210086600,1210086607,NZ -1210086608,1210086623,US -1210086624,1210086631,SE -1210086632,1210087295,US -1210087296,1210087303,GB -1210087304,1210087423,US -1210087424,1210087431,MX -1210087432,1210087463,US -1210087464,1210087471,CA -1210087472,1210088959,US -1210088960,1210088967,GB -1210088968,1210089047,US -1210089048,1210089055,MX -1210089056,1210089375,US -1210089376,1210089383,CA -1210089384,1210089399,US -1210089400,1210089407,GB -1210089408,1210089705,US -1210089706,1210089707,HK -1210089708,1210089823,US -1210089824,1210089855,CA -1210089856,1210090071,US -1210090072,1210090079,MX -1210090080,1210090219,US -1210090220,1210090221,AU -1210090222,1210090287,US -1210090288,1210090295,AU -1210090296,1210090367,US -1210090368,1210090375,JM -1210090376,1210090383,US -1210090384,1210090399,CA -1210090400,1210090439,US -1210090440,1210090443,FR -1210090444,1210090475,US -1210090476,1210090479,CA -1210090480,1210090623,US -1210090624,1210090639,BD -1210090640,1210090767,US -1210090768,1210090783,BD -1210090784,1210090895,US -1210090896,1210090903,AU -1210090904,1210091079,US -1210091080,1210091087,SG -1210091088,1210091135,US -1210091136,1210091151,CA -1210091152,1210091175,US -1210091176,1210091183,SR -1210091184,1210091351,US -1210091352,1210091359,AU -1210091360,1210091535,US -1210091536,1210091543,CA -1210091544,1210091663,US -1210091664,1210091671,IN -1210091672,1210091679,US -1210091680,1210091687,AU -1210091688,1210091723,US -1210091724,1210091725,GB -1210091726,1210091839,US -1210091840,1210091847,CA -1210091848,1210091987,US -1210091988,1210091991,GB -1210091992,1210092001,US -1210092002,1210092003,AU -1210092004,1210092287,US -1210092288,1210092543,ES -1210092544,1210092567,US -1210092568,1210092575,AU -1210092576,1210092583,CA -1210092584,1210092591,MX -1210092592,1210092607,US -1210092608,1210092639,GB -1210092640,1210092799,US -1210092800,1210092815,CA -1210092816,1210093191,US -1210093192,1210093199,CA -1210093200,1210093247,US -1210093248,1210093249,AU -1210093250,1210093255,US -1210093256,1210093257,AU -1210093258,1210093283,US -1210093284,1210093285,AU -1210093286,1210093407,US -1210093408,1210093423,MX -1210093424,1210093639,US -1210093640,1210093647,CA -1210093648,1210093663,US -1210093664,1210093671,CA -1210093672,1210093679,AU -1210093680,1210093751,US -1210093752,1210093759,AU -1210093760,1210093771,US -1210093772,1210093775,HU -1210093776,1210093811,US -1210093812,1210093813,AU -1210093814,1210093815,US -1210093816,1210093817,JE -1210093818,1210093847,US -1210093848,1210093855,AU -1210093856,1210094043,US -1210094044,1210094045,AU -1210094046,1210094175,US -1210094176,1210094183,TT -1210094184,1210094407,US -1210094408,1210094415,GB -1210094416,1210094831,US -1210094832,1210094847,SG -1210094848,1210094855,US -1210094856,1210094863,SE -1210094864,1210095263,US -1210095264,1210095271,GB -1210095272,1210095503,US -1210095504,1210095519,IN -1210095520,1210095543,US -1210095544,1210095551,SG -1210095552,1210095711,US -1210095712,1210095727,GB -1210095728,1210095935,US -1210095936,1210095951,IN -1210095952,1210095959,US -1210095960,1210095967,GB -1210095968,1210096295,US -1210096296,1210096303,GB -1210096304,1210096391,US -1210096392,1210096399,AU -1210096400,1210096543,US -1210096544,1210096551,MX -1210096552,1210096559,US -1210096560,1210096575,DE -1210096576,1210096871,US -1210096872,1210096879,CA -1210096880,1210097151,US -1210097152,1210097159,GB -1210097160,1210097303,US -1210097304,1210097311,MX -1210097312,1210097335,US -1210097336,1210097343,IE -1210097344,1210097415,US -1210097416,1210097423,ZA -1210097424,1210097567,US -1210097568,1210097575,GB -1210097576,1210097655,US -1210097656,1210097663,GB -1210097664,1210097783,US -1210097784,1210097791,GB -1210097792,1210098111,US -1210098112,1210098119,IL -1210098120,1210098127,US -1210098128,1210098143,CA -1210098144,1210098215,US -1210098216,1210098223,IN -1210098224,1210098319,US -1210098320,1210098327,CA -1210098328,1210098527,US -1210098528,1210098535,SG -1210098536,1210098775,US -1210098776,1210098783,CN -1210098784,1210098899,US -1210098900,1210098901,MX -1210098902,1210098959,US -1210098960,1210098975,CA -1210098976,1210099383,US -1210099384,1210099399,AE -1210099400,1210099495,US -1210099496,1210099503,BG -1210099504,1210099511,US -1210099512,1210099519,MX -1210099520,1210099695,US -1210099696,1210099711,AU -1210099712,1210099783,US -1210099784,1210099791,NZ -1210099792,1210099879,US -1210099880,1210099895,GB -1210099896,1210099967,US -1210099968,1210099975,MT -1210099976,1210100103,US -1210100104,1210100111,MT -1210100112,1210100199,US -1210100200,1210100203,CA -1210100204,1210100231,US -1210100232,1210100239,CA -1210100240,1210100255,PK -1210100256,1210100287,CA -1210100288,1210100359,US -1210100360,1210100367,AU -1210100368,1210100463,US -1210100464,1210100479,CA -1210100480,1210100631,US -1210100632,1210100639,NZ -1210100640,1210101023,US -1210101024,1210101039,GB -1210101040,1210101191,US -1210101192,1210101195,CA -1210101196,1210101263,US -1210101264,1210101279,MY -1210101280,1210101311,US -1210101312,1210101319,IE -1210101320,1210101327,IL -1210101328,1210101519,US -1210101520,1210101527,IL -1210101528,1210101559,US -1210101560,1210101567,AU -1210101568,1210101727,US -1210101728,1210101743,GB -1210101744,1210101863,US -1210101864,1210101871,CH -1210101872,1210101879,US -1210101880,1210101887,CA -1210101888,1210102287,US -1210102288,1210102295,IL -1210102296,1210102399,US -1210102400,1210102407,AU -1210102408,1210102815,US -1210102816,1210102823,CA -1210102824,1210102879,US -1210102880,1210102895,IL -1210102896,1210103255,US -1210103256,1210103263,AU -1210103264,1210107967,US -1210107968,1210107975,MO -1210107976,1210108295,US -1210108296,1210108303,IN -1210108304,1210108335,US -1210108336,1210108343,CA -1210108344,1210108351,IL -1210108352,1210108359,US -1210108360,1210108367,CA -1210108368,1210108423,US -1210108424,1210108431,PR -1210108432,1210108631,US -1210108632,1210108639,GB -1210108640,1210108903,US -1210108904,1210108911,AU -1210108912,1210108919,GB -1210108920,1210109247,US -1210109248,1210109255,DK -1210109256,1210109263,IL -1210109264,1210109271,CA -1210109272,1210109751,US -1210109752,1210109759,IL -1210109760,1210109767,GB -1210109768,1210109775,IN -1210109776,1210109935,US -1210109936,1210109943,BB -1210109944,1210110955,US -1210110956,1210110957,GH -1210110958,1210111007,US -1210111008,1210111015,GB -1210111016,1210111279,US -1210111280,1210111287,VG -1210111288,1210111295,US -1210111296,1210111303,AU -1210111304,1210111991,US -1210111992,1210111999,BR -1210112000,1210112007,CA -1210112008,1210112039,US -1210112040,1210112047,IL -1210112048,1210112455,US -1210112456,1210112463,ZA -1210112464,1210112679,US -1210112680,1210112687,CA -1210112688,1210112727,US -1210112728,1210112735,PY -1210112736,1210112815,US -1210112816,1210112823,MX -1210112824,1210113055,US -1210113056,1210113063,CA -1210113064,1210113535,US -1210113536,1210113551,CA -1210113552,1210113615,US -1210113616,1210113631,GB -1210113632,1210113991,US -1210113992,1210113999,IE -1210114000,1210114095,US -1210114096,1210114103,CR -1210114104,1210114151,US -1210114152,1210114159,MY -1210114160,1210114167,US -1210114168,1210114175,HN -1210114176,1210114279,US -1210114280,1210114287,AU -1210114288,1210114351,US -1210114352,1210114367,AU -1210114368,1210114439,US -1210114440,1210114447,GB -1210114448,1210114471,US -1210114472,1210114479,AU -1210114480,1210114487,CL -1210114488,1210114495,AU -1210114496,1210114503,US -1210114504,1210114511,BB -1210114512,1210114551,US -1210114552,1210114559,AU -1210114560,1210114623,US -1210114624,1210114631,CA -1210114632,1210114711,US -1210114712,1210114719,ZA -1210114720,1210114759,US -1210114760,1210114775,MT -1210114776,1210114831,US -1210114832,1210114839,AU -1210114840,1210114991,US -1210114992,1210114999,AU -1210115000,1210115079,US -1210115080,1210115087,AU -1210115088,1210115135,US -1210115136,1210115143,AU -1210115144,1210115199,US -1210115200,1210115207,GB -1210115208,1210115335,US -1210115336,1210115343,GB -1210115344,1210115471,US -1210115472,1210115479,IN -1210115480,1210115495,US -1210115496,1210115503,AU -1210115504,1210115551,US -1210115552,1210115575,BB -1210115576,1210115719,US -1210115720,1210115727,AU -1210115728,1210115791,US -1210115792,1210115799,GB -1210115800,1210115911,US -1210115912,1210115919,GB -1210115920,1210116255,US -1210116256,1210116263,IN -1210116264,1210116375,US -1210116376,1210116383,CA -1210116384,1210116423,US -1210116424,1210116431,GB -1210116432,1210116527,US -1210116528,1210116535,PR -1210116536,1210116671,US -1210116672,1210116679,AU -1210116680,1210116687,GB -1210116688,1210116695,NG -1210116696,1210116863,US -1210116864,1210116871,GB -1210116872,1210117191,US -1210117192,1210117199,CA -1210117200,1210117567,US -1210117568,1210117599,CA -1210117600,1210117631,US -1210117632,1210117639,IN -1210117640,1210117647,GB -1210117648,1210117655,AE -1210117656,1210117871,US -1210117872,1210117879,CA -1210117880,1210118089,US -1210118090,1210118091,IN -1210118092,1210118191,US -1210118192,1210118199,NZ -1210118200,1210118239,US -1210118240,1210118255,TH -1210118256,1210118431,US -1210118432,1210118439,AU -1210118440,1210118655,US -1210118656,1210118663,IN -1210118664,1210118687,US -1210118688,1210118703,IN -1210118704,1210118815,US -1210118816,1210118823,CA -1210118824,1210118887,US -1210118888,1210118895,BR -1210118896,1210119119,US -1210119120,1210119135,GB -1210119136,1210119183,US -1210119184,1210119191,CA -1210119192,1210119255,US -1210119256,1210119263,MY -1210119264,1210119311,US -1210119312,1210119319,CW -1210119320,1210119551,US -1210119552,1210119559,MX -1210119560,1210119823,US -1210119824,1210119831,CA -1210119832,1210119881,US -1210119882,1210119883,GB -1210119884,1210119911,US -1210119912,1210119913,AU -1210119914,1210120007,US -1210120008,1210120015,IN -1210120016,1210120155,US -1210120156,1210120157,CA -1210120158,1210120175,US -1210120176,1210120177,IN -1210120178,1210120847,US -1210120848,1210120855,MY -1210120856,1210120895,US -1210120896,1210120903,MX -1210120904,1210120991,US -1210120992,1210120999,IN -1210121000,1210121023,US -1210121024,1210121039,AU -1210121040,1210121839,US -1210121840,1210121847,IL -1210121848,1210122063,US -1210122064,1210122071,MX -1210122072,1210122211,US -1210122212,1210122215,CA -1210122216,1210253311,US +1209893520,1209904959,US +1209904960,1209904975,GB +1209904976,1209917439,US +1209917440,1209918367,CA +1209918368,1209918399,US +1209918400,1209925631,CA +1209925632,1210253311,US 1210253312,1210254703,CA 1210254704,1210254719,NZ -1210254720,1210258431,CA -1210258432,1210258687,US -1210258688,1210261503,CA +1210254720,1210261503,CA 1210261504,1210381759,US 1210381760,1210381823,RU 1210381824,1210418175,US @@ -22039,22 +19175,37 @@ 1210925056,1210941439,CA 1210941440,1211032223,US 1211032224,1211032255,VE -1211032256,1211032271,US -1211032272,1211032287,DO -1211032288,1211033087,US +1211032256,1211033087,US 1211033088,1211033599,CO -1211033600,1211036031,US +1211033600,1211035647,US +1211035648,1211035663,PR +1211035664,1211035711,US +1211035712,1211035775,CA +1211035776,1211035791,US +1211035792,1211035807,CR +1211035808,1211036031,US 1211036032,1211036095,EC 1211036096,1211036319,US 1211036320,1211036335,CA -1211036336,1211038719,US +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 1211038720,1211038975,CY -1211038976,1211236351,US +1211038976,1211039007,US +1211039008,1211039023,VG +1211039024,1211039087,US +1211039088,1211039103,RU +1211039104,1211236351,US 1211236352,1211255551,PR 1211255552,1211255807,US -1211255808,1211266047,PR -1211266048,1211266303,US -1211266304,1211269119,PR +1211255808,1211269119,PR 1211269120,1211304063,US 1211304064,1211304159,CA 1211304160,1211304207,US @@ -22077,7 +19228,7 @@ 1211306774,1211306879,CA 1211306880,1211308167,US 1211308168,1211308175,CA -1211308176,1211308191,BV +1211308176,1211308191,US 1211308192,1211308543,CA 1211308544,1211308559,KN 1211308560,1211308607,CA @@ -22089,15 +19240,13 @@ 1211308672,1211308703,CA 1211308704,1211308719,VG 1211308720,1211308735,CA -1211308736,1211308751,BV +1211308736,1211308751,US 1211308752,1211308767,CA 1211308768,1211308783,US 1211308784,1211310079,CA 1211310080,1211310404,US 1211310405,1211310405,IN -1211310406,1211310951,US -1211310952,1211310952,IN -1211310953,1211311378,US +1211310406,1211311378,US 1211311379,1211311379,IN 1211311380,1211311394,US 1211311395,1211311395,IN @@ -22107,11 +19256,7 @@ 1211311964,1211311964,IN 1211311965,1211312569,US 1211312570,1211312570,IN -1211312571,1211313219,US -1211313220,1211313231,IN -1211313232,1211313311,US -1211313312,1211313315,IN -1211313316,1211313431,US +1211312571,1211313431,US 1211313432,1211313439,IN 1211313440,1211313567,US 1211313568,1211313579,IN @@ -22150,9 +19295,7 @@ 1211384280,1211384287,GB 1211384288,1211384327,US 1211384328,1211384335,US -1211384336,1211387983,US -1211387984,1211387999,AE -1211388000,1211388159,US +1211384336,1211388159,US 1211388160,1211388287,US 1211388288,1211391455,US 1211391456,1211391487,CN @@ -22175,9 +19318,7 @@ 1211421741,1211432959,US 1211432960,1211473919,CA 1211473920,1211596799,US -1211596800,1211598079,CA -1211598080,1211598335,US -1211598336,1211605999,CA +1211596800,1211605999,CA 1211606000,1211606003,US 1211606004,1211613183,CA 1211613184,1212191304,US @@ -22194,15 +19335,15 @@ 1218693120,1218696191,IN 1218696192,1218697215,US 1218697216,1218697471,IN -1218697472,1218731807,US +1218697472,1218706431,US +1218706432,1218706687,CN +1218706688,1218731807,US 1218731808,1218731815,A2 1218731816,1218778111,US 1218778112,1218778367,SG 1218778368,1218987263,US 1218987264,1218987519,CA -1218987520,1219253119,US -1219253120,1219253135,IN -1219253136,1219253319,US +1218987520,1219253319,US 1219253320,1219253327,CA 1219253328,1219256319,US 1219256320,1219264511,CA @@ -22276,13 +19417,14 @@ 1224476672,1224478719,CW 1224478720,1224480767,US 1224480768,1224484863,JM -1224484864,1224485887,MX -1224485888,1224493055,GT +1224484864,1224493055,GT 1224493056,1224497151,US 1224497152,1224501247,GT 1224501248,1224503551,JM 1224503552,1224503807,BS -1224503808,1224539904,JM +1224503808,1224525568,JM +1224525569,1224525823,US +1224525824,1224539904,JM 1224539905,1224701942,US 1224701943,1224701943,CA 1224701944,1241743359,US @@ -22291,17 +19433,13 @@ 1242300416,1242562559,CA 1242562560,1244659711,US 1244659712,1244790783,CA -1244790784,1244822783,US -1244822784,1244823039,AE -1244823040,1244831743,US +1244790784,1244831743,US 1244831744,1244839935,CA 1244839936,1244848127,US 1244848128,1244852223,CA 1244852224,1244864511,US 1244864512,1244872703,CA -1244872704,1244917759,US -1244917760,1244918015,CA -1244918016,1244996655,US +1244872704,1244996655,US 1244996656,1244996663,CH 1244996664,1245050689,US 1245050690,1245050690,SA @@ -22335,7 +19473,9 @@ 1245665746,1245665747,US 1245665748,1246864899,US 1246864900,1246864958,EG -1246864959,1246874127,US +1246864959,1246865663,US +1246865664,1246865919,GB +1246865920,1246874127,US 1246874128,1246874216,GB 1246874217,1246874368,US 1246874369,1246874496,GB @@ -22343,19 +19483,19 @@ 1246874559,1246874590,GB 1246874591,1246875509,US 1246875510,1246875520,NL -1246875521,1246890463,US +1246875521,1246887935,US +1246887936,1246888191,PL +1246888192,1246890463,US 1246890464,1246890464,US 1246890465,1246902783,US 1246902784,1246903039,NL 1246903040,1246937087,US 1246937088,1246945279,CA 1246945280,1247027199,US -1247027200,1247034559,A2 -1247034560,1247034623,US +1247027200,1247034367,A2 +1247034368,1247034623,US 1247034624,1247035391,A2 -1247035392,1247069303,US -1247069304,1247069311,VA -1247069312,1247072719,US +1247035392,1247072719,US 1247072720,1247072735,NL 1247072736,1247073791,US 1247073792,1247074303,A2 @@ -22370,13 +19510,15 @@ 1247481904,1247481911,US 1247481912,1247481927,CN 1247481928,1247481951,US -1247481952,1247481967,CN -1247481968,1247481983,US +1247481952,1247481959,CN +1247481960,1247481983,US 1247481984,1247482015,GB 1247482016,1247482047,CN 1247482048,1247482063,CA 1247482064,1247482079,US -1247482080,1247482175,CN +1247482080,1247482103,CN +1247482104,1247482111,US +1247482112,1247482175,CN 1247482176,1247482239,US 1247482240,1247482255,GB 1247482256,1247482263,CN @@ -22397,11 +19539,9 @@ 1247482568,1247482583,CN 1247482584,1247482615,US 1247482616,1247482623,CN -1247482624,1247482687,US -1247482688,1247482751,CA -1247482752,1247482815,US -1247482816,1247482879,CN -1247482880,1247482927,US +1247482624,1247482815,US +1247482816,1247482847,CN +1247482848,1247482927,US 1247482928,1247482951,BO 1247482952,1247482967,US 1247482968,1247482975,CN @@ -22441,19 +19581,7 @@ 1248864256,1248866303,CA 1248866304,1248885759,US 1248885760,1248886783,CA -1248886784,1248887935,US -1248887936,1248887943,CA -1248887944,1248888055,US -1248888056,1248888063,BR -1248888064,1248888439,US -1248888440,1248888447,BO -1248888448,1248888631,US -1248888632,1248888639,CA -1248888640,1248888679,US -1248888680,1248888687,BO -1248888688,1248888703,US -1248888704,1248888711,BR -1248888712,1248899071,US +1248886784,1248899071,US 1248899072,1248900095,CA 1248900096,1248902143,US 1248902144,1248903167,CA @@ -22505,7 +19633,8 @@ 1249027648,1249027655,GB 1249027656,1249027719,US 1249027720,1249027727,GR -1249027728,1249027823,US +1249027728,1249027735,CO +1249027736,1249027823,US 1249027824,1249027839,CA 1249027840,1249027895,US 1249027896,1249027903,PL @@ -22538,13 +19667,7 @@ 1249101824,1249102847,PR 1249102848,1249103103,US 1249103104,1249103871,CA -1249103872,1249105279,US -1249105280,1249105295,CA -1249105296,1249105367,US -1249105368,1249105375,ES -1249105376,1249105567,US -1249105568,1249105599,CA -1249105600,1249106431,US +1249103872,1249106431,US 1249106432,1249106687,DE 1249106688,1249106943,US 1249106944,1249107967,CA @@ -22603,9 +19726,7 @@ 1249256650,1249256687,GB 1249256688,1249256835,CA 1249256836,1249256868,US -1249256869,1249256988,CA -1249256989,1249256998,US -1249256999,1249256999,CA +1249256869,1249256999,CA 1249257000,1249257009,LB 1249257010,1249257178,CA 1249257179,1249257213,GB @@ -22634,9 +19755,7 @@ 1249382288,1249382303,DE 1249382304,1249384447,US 1249384448,1249386495,PR -1249386496,1249389343,US -1249389344,1249389375,CR -1249389376,1249391615,US +1249386496,1249391615,US 1249391616,1249392639,CA 1249392640,1249396735,US 1249396736,1249397759,CA @@ -22718,13 +19837,7 @@ 1249690678,1249690686,GB 1249690687,1249690783,US 1249690784,1249690815,AU -1249690816,1249691999,US -1249692000,1249692031,CA -1249692032,1249692735,US -1249692736,1249692767,HK -1249692768,1249693263,US -1249693264,1249693271,CA -1249693272,1249710143,US +1249690816,1249710143,US 1249710144,1249710207,CN 1249710208,1249710271,NL 1249710272,1249710335,BE @@ -22734,12 +19847,16 @@ 1249715968,1249716735,US 1249716736,1249716991,DE 1249716992,1249720319,US -1249720320,1249720575,AU +1249720320,1249720352,AU +1249720353,1249720353,JP +1249720354,1249720575,AU 1249720576,1249720599,GB 1249720600,1249720607,IT -1249720608,1249720767,GB -1249720768,1249720831,DE -1249720832,1249721343,US +1249720608,1249720623,CH +1249720624,1249720703,GB +1249720704,1249720751,US +1249720752,1249720767,GB +1249720768,1249721343,US 1249721344,1249721351,AT 1249721352,1249721359,BE 1249721360,1249721367,CH @@ -22761,7 +19878,7 @@ 1249721512,1249721519,TR 1249721520,1249721527,ZA 1249721528,1249721535,DK -1249721536,1249721599,US +1249721536,1249721599,GB 1249721600,1249721607,AT 1249721608,1249721615,BE 1249721616,1249721623,CH @@ -22788,7 +19905,8 @@ 1249721792,1249721799,KE 1249721800,1249721807,TR 1249721808,1249721815,ZA -1249721816,1249722111,US +1249721816,1249721855,GB +1249721856,1249722111,US 1249722112,1249722367,IN 1249722368,1249723903,US 1249723904,1249724159,CN @@ -22799,10 +19917,12 @@ 1249726208,1249727999,US 1249728000,1249728255,HU 1249728256,1249736959,US -1249736960,1249737215,GB -1249737216,1249744895,US +1249736960,1249737471,EU +1249737472,1249744895,US 1249744896,1249745151,TW -1249745152,1249796095,US +1249745152,1249773023,US +1249773024,1249773055,CA +1249773056,1249796095,US 1249796096,1249804287,CA 1249804288,1249838847,US 1249838848,1249838911,IN @@ -22851,12 +19971,12 @@ 1254604176,1254604191,US 1254604192,1254604199,IE 1254604200,1254621183,US -1254621184,1254622207,CA -1254622208,1254622463,US -1254622464,1254629375,CA +1254621184,1254629375,CA 1254629376,1254704383,US 1254704384,1254704639,PH -1254704640,1254713359,US +1254704640,1254704903,US +1254704904,1254704911,PH +1254704912,1254713359,US 1254713360,1254713407,CA 1254713408,1254738239,US 1254738240,1254738255,CA @@ -22866,462 +19986,29 @@ 1254752192,1254752207,CH 1254752208,1254924687,US 1254924688,1254924703,RO -1254924704,1254948927,US -1254948928,1254948935,SG -1254948936,1254949247,US -1254949248,1254949279,IN -1254949280,1254950199,US -1254950200,1254950207,IL -1254950208,1254950671,US -1254950672,1254950679,RU -1254950680,1254950687,CA -1254950688,1254950751,US -1254950752,1254950759,IL -1254950760,1254950767,US -1254950768,1254950775,GR -1254950776,1254950847,US -1254950848,1254950855,IL -1254950856,1254950919,US -1254950920,1254950927,CA -1254950928,1254950951,US -1254950952,1254950959,IN -1254950960,1254951247,US -1254951248,1254951263,CA -1254951264,1254951431,US -1254951432,1254951439,CA -1254951440,1254951471,US -1254951472,1254951479,MX -1254951480,1254951591,US -1254951592,1254951599,IL -1254951600,1254951607,US -1254951608,1254951615,IN -1254951616,1254951631,US -1254951632,1254951639,JP -1254951640,1254951655,US -1254951656,1254951663,CA -1254951664,1254951871,US -1254951872,1254951887,TH -1254951888,1254952047,US -1254952048,1254952055,MX -1254952056,1254952255,US -1254952256,1254952263,CA -1254952264,1254952279,US -1254952280,1254952287,CA -1254952288,1254952295,IL -1254952296,1254952591,US -1254952592,1254952599,CA -1254952600,1254952927,US -1254952928,1254952935,CA -1254952936,1254953031,US -1254953032,1254953039,CA -1254953040,1254953047,ZA -1254953048,1254953055,US -1254953056,1254953063,IL -1254953064,1254953071,US -1254953072,1254953079,CA -1254953080,1254953087,US -1254953088,1254953095,CA -1254953096,1254953279,US -1254953280,1254953295,BD -1254953296,1254953327,US -1254953328,1254953343,NL -1254953344,1254953615,US -1254953616,1254953623,GB -1254953624,1254953639,US -1254953640,1254953647,TW -1254953648,1254953743,US -1254953744,1254953751,IN -1254953752,1254953759,US -1254953760,1254953767,IN -1254953768,1254953775,GB -1254953776,1254953815,US -1254953816,1254953823,GT -1254953824,1254953855,US -1254953856,1254953863,NL -1254953864,1254953871,US -1254953872,1254953879,NL -1254953880,1254953919,US -1254953920,1254953935,NL -1254953936,1254954255,US -1254954256,1254954263,CA -1254954264,1254954287,US -1254954288,1254954295,CA -1254954296,1254954319,US -1254954320,1254954327,CA -1254954328,1254954639,US -1254954640,1254954647,GB -1254954648,1254954655,CA -1254954656,1254954663,US -1254954664,1254954671,GB -1254954672,1254954887,US -1254954888,1254954895,IL -1254954896,1254955599,US -1254955600,1254955607,GB -1254955608,1254955735,US -1254955736,1254955743,GB -1254955744,1254956135,US -1254956136,1254956143,IL -1254956144,1254956383,US -1254956384,1254956391,IL -1254956392,1254957055,US -1254957056,1254957063,GB -1254957064,1254957071,MX -1254957072,1254957239,US -1254957240,1254957247,GB -1254957248,1254957255,MT -1254957256,1254957287,US -1254957288,1254957295,IN -1254957296,1254957311,US -1254957312,1254957327,CA -1254957328,1254957375,US -1254957376,1254957391,CA -1254957392,1254957407,US -1254957408,1254957423,IN -1254957424,1254958303,US -1254958304,1254958319,GB -1254958320,1254958351,US -1254958352,1254958359,BO -1254958360,1254958535,US -1254958536,1254958543,CA -1254958544,1254958567,US -1254958568,1254958575,MX -1254958576,1254958855,US -1254958856,1254958863,NZ -1254958864,1254958895,US -1254958896,1254958903,CA -1254958904,1254959151,US -1254959152,1254959183,CA -1254959184,1254959391,US -1254959392,1254959399,GB -1254959400,1254959671,US -1254959672,1254959679,GB -1254959680,1254959775,US -1254959776,1254959783,KR -1254959784,1254959799,US -1254959800,1254959807,GB -1254959808,1254959927,US -1254959928,1254959935,MX -1254959936,1254959943,US -1254959944,1254959951,CA -1254959952,1254959991,US -1254959992,1254959999,MX -1254960000,1254960039,US -1254960040,1254960047,IN -1254960048,1254960279,US -1254960280,1254960287,JM -1254960288,1254960351,US -1254960352,1254960359,AU -1254960360,1254960367,CA -1254960368,1254960415,US -1254960416,1254960423,CA -1254960424,1254960447,US -1254960448,1254960455,AU -1254960456,1254960463,US -1254960464,1254960471,SG -1254960472,1254960487,AU -1254960488,1254960495,GB -1254960496,1254960583,US -1254960584,1254960591,MY -1254960592,1254960655,US -1254960656,1254960663,CA -1254960664,1254960879,US -1254960880,1254960887,CA -1254960888,1254960903,US -1254960904,1254960911,NZ -1254960912,1254960935,US -1254960936,1254960943,IN -1254960944,1254960967,US -1254960968,1254960975,IN -1254960976,1254961567,US -1254961568,1254961599,BD -1254961600,1254961751,US -1254961752,1254961767,GB -1254961768,1254961823,US -1254961824,1254961831,AE -1254961832,1254961911,US -1254961912,1254961919,CA -1254961920,1254962015,US -1254962016,1254962023,AE -1254962024,1254962351,US -1254962352,1254962359,GB -1254962360,1254962511,US -1254962512,1254962527,JP -1254962528,1254962695,US -1254962696,1254962703,GB -1254962704,1254962799,US -1254962800,1254962807,CA -1254962808,1254962855,US -1254962856,1254962863,CA -1254962864,1254962951,US -1254962952,1254962959,NZ -1254962960,1254962975,US -1254962976,1254962983,CA -1254962984,1254963047,US -1254963048,1254963055,MX -1254963056,1254963583,US -1254963584,1254963591,AU -1254963592,1254964079,US -1254964080,1254964087,DK -1254964088,1254964255,US -1254964256,1254964263,BR -1254964264,1254964335,US -1254964336,1254964343,NZ -1254964344,1254964351,PR -1254964352,1254964391,US -1254964392,1254964399,AU -1254964400,1254964799,US -1254964800,1254964815,CA -1254964816,1254964927,US -1254964928,1254964943,CA -1254964944,1254965095,US -1254965096,1254965103,IN -1254965104,1254965239,US -1254965240,1254965247,GB -1254965248,1254965431,US -1254965432,1254965439,GB -1254965440,1254965887,US -1254965888,1254965895,MX -1254965896,1254966031,US -1254966032,1254966039,CA -1254966040,1254966383,US -1254966384,1254966391,ZA -1254966392,1254966487,US -1254966488,1254966495,IE -1254966496,1254966567,US -1254966568,1254966575,ZA -1254966576,1254966607,US -1254966608,1254966615,JO -1254966616,1254966863,US -1254966864,1254966879,IL -1254966880,1254966927,US -1254966928,1254966943,FR -1254966944,1254966975,US -1254966976,1254966991,IL -1254966992,1254967279,US -1254967280,1254967287,FR -1254967288,1254967519,US -1254967520,1254967535,CA -1254967536,1254967607,US -1254967608,1254967615,CA -1254967616,1254967647,US -1254967648,1254967655,EG -1254967656,1254967887,US -1254967888,1254967895,CA -1254967896,1254967975,US -1254967976,1254967991,IN -1254967992,1254968103,US -1254968104,1254968111,UY -1254968112,1254968295,US -1254968296,1254968303,IT -1254968304,1254968391,US -1254968392,1254968399,SG -1254968400,1254968487,US -1254968488,1254968495,CA -1254968496,1254968671,US -1254968672,1254968679,DO -1254968680,1254968751,US -1254968752,1254968759,GB -1254968760,1254968927,US -1254968928,1254968935,CA -1254968936,1254968951,US -1254968952,1254968959,GB -1254968960,1254968991,US -1254968992,1254968999,CA -1254969000,1254969111,US -1254969112,1254969127,AU -1254969128,1254969175,US -1254969176,1254969183,AU -1254969184,1254969247,US -1254969248,1254969255,CO -1254969256,1254969263,BD -1254969264,1254969287,US -1254969288,1254969295,GB -1254969296,1254969311,US -1254969312,1254969319,CA -1254969320,1254969399,US -1254969400,1254969407,CA -1254969408,1254969423,US -1254969424,1254969431,CA -1254969432,1254969439,GB -1254969440,1254969447,CA -1254969448,1254969455,US -1254969456,1254969463,IL -1254969464,1254969471,GB -1254969472,1254969495,US -1254969496,1254969503,DK -1254969504,1254969551,US -1254969552,1254969559,CA -1254969560,1254969575,US -1254969576,1254969583,AE -1254969584,1254969727,US -1254969728,1254969735,CA -1254969736,1254970047,US -1254970048,1254970063,CA -1254970064,1254970095,US -1254970096,1254970111,AE -1254970112,1254970167,US -1254970168,1254970175,GB -1254970176,1254970183,US -1254970184,1254970191,GB -1254970192,1254970287,US -1254970288,1254970295,IN -1254970296,1254970335,US -1254970336,1254970343,CH -1254970344,1254970527,US -1254970528,1254970543,GB -1254970544,1254970591,US -1254970592,1254970607,PH -1254970608,1254970623,GH -1254970624,1254970631,MX -1254970632,1254970831,US -1254970832,1254970839,MX -1254970840,1254970903,US -1254970904,1254970911,CA -1254970912,1254971007,US -1254971008,1254971015,JP -1254971016,1254971023,IN -1254971024,1254971055,US -1254971056,1254971063,GB -1254971064,1254971231,US -1254971232,1254971239,IN -1254971240,1254971319,US -1254971320,1254971327,MX -1254971328,1254971951,US -1254971952,1254971959,GB -1254971960,1254971967,IN -1254971968,1254972239,US -1254972240,1254972247,CA -1254972248,1254972335,US -1254972336,1254972343,GH -1254972344,1254972407,US -1254972408,1254972415,AU -1254972416,1254972431,US -1254972432,1254972439,AU -1254972440,1254972447,US -1254972448,1254972455,GG -1254972456,1254972727,US -1254972728,1254972735,AU -1254972736,1254972879,US -1254972880,1254972895,MX -1254972896,1254972983,US -1254972984,1254972991,CA -1254972992,1254973015,US -1254973016,1254973023,BR -1254973024,1254973047,US -1254973048,1254973055,AU -1254973056,1254973575,US -1254973576,1254973583,MX -1254973584,1254973663,US -1254973664,1254973671,PH -1254973672,1254973679,US -1254973680,1254973687,IN -1254973688,1254973695,US -1254973696,1254973703,MY -1254973704,1254973807,US -1254973808,1254973815,IN -1254973816,1254974167,US -1254974168,1254974175,MX -1254974176,1254974327,US -1254974328,1254974335,MX -1254974336,1254974367,US -1254974368,1254974375,CA -1254974376,1254974391,US -1254974392,1254974399,CA -1254974400,1254974511,US -1254974512,1254974519,IL -1254974520,1254974767,US -1254974768,1254974775,GB -1254974776,1254974887,US -1254974888,1254974895,AU -1254974896,1254974951,US -1254974952,1254974959,NZ -1254974960,1254975231,US -1254975232,1254975239,AU -1254975240,1254975415,US -1254975416,1254975423,CA -1254975424,1254975471,US -1254975472,1254975487,GB -1254975488,1254975615,US -1254975616,1254975623,IN -1254975624,1254975887,US -1254975888,1254975895,IN -1254975896,1254975919,US -1254975920,1254975927,IN -1254975928,1254975935,CA -1254975936,1254976023,US -1254976024,1254976031,GB -1254976032,1254976127,US -1254976128,1254976135,AU -1254976136,1254976151,US -1254976152,1254976167,CA -1254976168,1254976303,US -1254976304,1254976311,GB -1254976312,1254976351,US -1254976352,1254976359,GB -1254976360,1254976399,US -1254976400,1254976407,MX -1254976408,1254976735,US -1254976736,1254976751,CA -1254976752,1254976767,US -1254976768,1254976775,GB -1254976776,1254976791,US -1254976792,1254976799,IN -1254976800,1254976903,US -1254976904,1254976911,MX -1254976912,1254976991,US -1254976992,1254977023,IN -1254977024,1254977095,US -1254977096,1254977103,CO -1254977104,1254977135,US -1254977136,1254977143,NZ -1254977144,1254977159,US -1254977160,1254977167,IN -1254977168,1254977247,US -1254977248,1254977255,CL -1254977256,1254977455,US -1254977456,1254977471,IN -1254977472,1254977487,US -1254977488,1254977503,TH -1254977504,1254977647,US -1254977648,1254977655,AE -1254977656,1254977735,US -1254977736,1254977743,NZ -1254977744,1254977791,US -1254977792,1254977799,GB -1254977800,1254978183,US -1254978184,1254978191,GB -1254978192,1254978327,US -1254978328,1254978335,IN -1254978336,1254978375,US -1254978376,1254978383,BR -1254978384,1254978391,CA -1254978392,1254978447,US -1254978448,1254978463,IN -1254978464,1254978495,US -1254978496,1254978559,NL -1254978560,1254978751,US +1254924704,1254978751,US 1254978752,1254978767,LB -1254978768,1254979407,US -1254979408,1254979423,CA -1254979424,1254989823,US -1254989824,1254990335,CA -1254990336,1254990591,US -1254990592,1254998015,CA -1254998016,1255002111,US -1255002112,1255004927,CA -1255004928,1255005183,US -1255005184,1255006207,CA +1254978768,1254993919,US +1254993920,1254994175,CA +1254994176,1255002111,US +1255002112,1255006207,CA 1255006208,1255007487,US 1255007488,1255007711,CA -1255007712,1255011343,US +1255007712,1255011327,US +1255011328,1255011335,CA +1255011336,1255011343,US 1255011344,1255011359,CA -1255011360,1255011375,US -1255011376,1255011551,CA +1255011360,1255011367,US +1255011368,1255011551,CA 1255011552,1255011559,US 1255011560,1255011839,CA -1255011840,1255039631,US +1255011840,1255039503,US +1255039504,1255039519,CA +1255039520,1255039631,US 1255039632,1255039663,CA -1255039664,1255047167,US +1255039664,1255044351,US +1255044352,1255044479,CA +1255044480,1255047167,US 1255047168,1255055359,CA 1255055360,1255057887,US 1255057888,1255057919,NL @@ -23397,31 +20084,31 @@ 1255972864,1255981055,CA 1255981056,1256001535,US 1256001536,1256005631,CA -1256005632,1256054271,US +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,1256057975,US 1256057976,1256057983,BZ -1256057984,1256058719,US -1256058720,1256058727,CA -1256058728,1256063231,US -1256063232,1256063359,CN -1256063360,1256079359,US -1256079360,1256087039,KY -1256087040,1256087295,GB -1256087296,1256087551,KY +1256057984,1256079359,US +1256079360,1256087551,KY 1256087552,1258767359,US 1258767360,1258767615,US -1258767616,1263263999,US -1263264000,1263264127,CA -1263264128,1263264511,US -1263264512,1263264767,CA -1263264768,1263268275,US +1258767616,1258958095,US +1258958096,1258958103,CA +1258958104,1263266815,US +1263266816,1263266823,CN +1263266824,1263266855,US +1263266856,1263266863,CN +1263266864,1263268275,US 1263268276,1263268340,CA 1263268341,1263268343,US 1263268344,1263268351,CA -1263268352,1263270143,US -1263270144,1263270159,CA -1263270160,1263271423,US +1263268352,1263271423,US 1263271424,1263271679,CA 1263271680,1264717823,US 1264717824,1264718079,CA @@ -23429,21 +20116,23 @@ 1264718592,1264718847,CA 1264718848,1264719103,US 1264719104,1264719871,CA -1264719872,1264733759,US -1264733760,1264733823,IL -1264733824,1264762879,US +1264719872,1264762879,US 1264762880,1264763391,CA 1264763392,1264763647,IE -1264763648,1264766975,CA +1264763648,1264764927,CA +1264764928,1264764959,US +1264764960,1264766975,CA 1264766976,1264968406,US 1264968407,1264968407,US 1264968408,1264980735,US 1264980736,1264980743,CA -1264980744,1264984575,US +1264980744,1264982847,US +1264982848,1264982855,CA +1264982856,1264982895,US +1264982896,1264982903,AF +1264982904,1264984575,US 1264984576,1264984583,VE -1264984584,1264984799,US -1264984800,1264984807,AF -1264984808,1264990975,US +1264984584,1264990975,US 1264990976,1264991231,NL 1264991232,1266147327,US 1266147328,1266155519,CA @@ -23453,8 +20142,8 @@ 1266498176,1266498303,MA 1266498304,1266516817,US 1266516818,1266516830,IE -1266516831,1266614591,US -1266614592,1266614607,CA +1266516831,1266614599,US +1266614600,1266614607,CA 1266614608,1266614655,US 1266614656,1266614783,CA 1266614784,1266615551,US @@ -23511,7 +20200,10 @@ 1275711488,1275712511,US 1275712512,1275714047,CA 1275714048,1275714559,US -1275714560,1275715583,CA +1275714560,1275714815,CA +1275714816,1275714831,US +1275714832,1275714847,IE +1275714848,1275715583,CA 1275715584,1275756543,US 1275756544,1275772927,CA 1275772928,1275789311,US @@ -23732,9 +20424,7 @@ 1275899952,1275899967,NG 1275899968,1275900271,US 1275900272,1275900287,GB -1275900288,1275900455,US -1275900456,1275900479,AU -1275900480,1275901007,US +1275900288,1275901007,US 1275901008,1275901023,PT 1275901024,1275901135,US 1275901136,1275901143,IL @@ -23918,7 +20608,9 @@ 1279940944,1279940959,DE 1279940960,1279940991,US 1279940992,1279940999,DE -1279941000,1279950847,US +1279941000,1279943679,US +1279943680,1279943743,PR +1279943744,1279950847,US 1279950848,1279951103,CA 1279951104,1279951167,US 1279951168,1279951199,CA @@ -23977,17 +20669,11 @@ 1279957180,1279957180,IN 1279957181,1279957184,US 1279957185,1279957185,IN -1279957186,1279957252,US -1279957253,1279957253,IN -1279957254,1279957375,US -1279957376,1279957383,IN -1279957384,1279957431,US +1279957186,1279957431,US 1279957432,1279957439,IN 1279957440,1279957631,US 1279957632,1279957651,IN -1279957652,1279958305,US -1279958306,1279958306,IN -1279958307,1279959551,US +1279957652,1279959551,US 1279959552,1279959807,CA 1279959808,1279960063,US 1279960064,1279960127,CA @@ -24016,8 +20702,16 @@ 1279963968,1279965183,US 1279965184,1279966207,CA 1279966208,1279967231,US -1279967232,1279971327,CA -1279971328,1279971583,US +1279967232,1279967519,CA +1279967520,1279967543,US +1279967544,1279967583,CA +1279967584,1279967695,US +1279967696,1279967711,CA +1279967712,1279969311,US +1279969312,1279969343,CA +1279969344,1279969407,US +1279969408,1279969423,CA +1279969424,1279971583,US 1279971584,1279972095,CA 1279972096,1279973951,US 1279973952,1279973967,CA @@ -24050,20 +20744,13 @@ 1279977728,1279978111,CA 1279978112,1279978143,US 1279978144,1279978495,CA -1279978496,1279978683,US -1279978684,1279978692,IN -1279978693,1279978693,US -1279978694,1279978702,IN -1279978703,1279979424,US -1279979425,1279979425,IN -1279979426,1279979559,US +1279978496,1279979559,US 1279979560,1279979575,CA 1279979576,1279979583,US 1279979584,1279979647,CA 1279979648,1279979775,US 1279979776,1279980063,CA -1279980064,1279980071,US -1279980072,1279980079,BV +1279980064,1279980079,US 1279980080,1279980127,CA 1279980128,1279980135,US 1279980136,1279980159,CA @@ -24218,9 +20905,7 @@ 1286398976,1286399487,US 1286399488,1287611402,US 1287611403,1287611403,US -1287611404,1287612122,US -1287612123,1287612136,SE -1287612137,1287877503,US +1287611404,1287877503,US 1287877504,1287877567,UM 1287877568,1290252799,US 1290252800,1290252863,GB @@ -24246,9 +20931,7 @@ 1294532608,1294598143,RU 1294598144,1294630911,IT 1294630912,1294663679,LB -1294663680,1294687743,IT -1294687744,1294687999,BE -1294688000,1294696447,IT +1294663680,1294696447,IT 1294696448,1294729215,RU 1294729216,1294761983,GB 1294761984,1294794751,SY @@ -24266,7 +20949,9 @@ 1295056896,1295122431,GR 1295122432,1295253503,RU 1295253504,1295319039,UA -1295319040,1295384575,SE +1295319040,1295349119,SE +1295349120,1295349247,NO +1295349248,1295384575,SE 1295384576,1295450111,PT 1295450112,1295515647,PL 1295515648,1295777791,CH @@ -24276,15 +20961,11 @@ 1296105472,1296171007,PL 1296171008,1296203775,DK 1296203776,1296236543,RU -1296236544,1296241919,IE -1296241920,1296242175,GB -1296242176,1296244991,IE +1296236544,1296244991,IE 1296244992,1296245247,CH -1296245248,1296246271,IE -1296246272,1296246527,ES -1296246528,1296248063,IE -1296248064,1296248319,GB -1296248320,1296249023,IE +1296245248,1296245759,IE +1296245760,1296246783,ES +1296246784,1296249023,IE 1296249024,1296249087,GB 1296249088,1296256840,IE 1296256841,1296256848,US @@ -24505,22 +21186,21 @@ 1297868800,1297870847,DE 1297870848,1297872895,FR 1297872896,1297874943,GB -1297874944,1297880831,CY -1297880832,1297883135,TR +1297874944,1297879295,CY +1297879296,1297879551,TR +1297879552,1297879807,CY +1297879808,1297880063,TR +1297880064,1297881087,CY +1297881088,1297883135,TR 1297883136,1297891327,PL 1297891328,1297899519,GB 1297899520,1297915903,TR 1297915904,1297924095,BH 1297924096,1297932287,CZ -1297932288,1297936383,GE -1297936384,1297936895,RU -1297936896,1297937407,GE -1297937408,1297940479,RU +1297932288,1297940479,GE 1297940480,1297948671,LV 1297948672,1297956863,UA -1297956864,1297959167,NL -1297959168,1297959423,CA -1297959424,1297965055,NL +1297956864,1297965055,NL 1297965056,1297973247,RU 1297973248,1297981439,GB 1297981440,1297989631,RO @@ -24586,23 +21266,24 @@ 1298956288,1298972671,GB 1298972672,1298989055,RU 1298989056,1299005439,UA -1299005440,1299008767,NL -1299008768,1299009791,BE -1299009792,1299010047,NL +1299005440,1299009279,NL +1299009280,1299009535,BE +1299009536,1299010047,NL 1299010048,1299010815,BE 1299010816,1299011071,RU 1299011072,1299011327,BE -1299011328,1299013887,NL -1299013888,1299015167,BE -1299015168,1299015423,NL -1299015424,1299015679,BE -1299015680,1299017727,NL -1299017728,1299018495,BE -1299018496,1299018879,NL -1299018880,1299019775,BE +1299011328,1299013631,NL +1299013632,1299014399,BE +1299014400,1299014911,NL +1299014912,1299015679,BE +1299015680,1299016703,NL +1299016704,1299016959,BE +1299016960,1299017727,NL +1299017728,1299018751,BE +1299018752,1299019007,NL +1299019008,1299019775,BE 1299019776,1299020031,NL -1299020032,1299020543,BE -1299020544,1299021823,NL +1299020032,1299021823,BE 1299021824,1299038207,CH 1299038208,1299054591,FI 1299054592,1299070975,SE @@ -24623,8 +21304,8 @@ 1305477120,1305739263,ES 1305739264,1306001407,DK 1306001408,1306218495,SE -1306218496,1306222591,LT -1306222592,1306263551,SE +1306218496,1306220543,LT +1306220544,1306263551,SE 1306263552,1306265599,A2 1306265600,1306266879,KE 1306266880,1306267135,NG @@ -24658,9 +21339,7 @@ 1306492928,1306501119,TR 1306501120,1306509311,NO 1306509312,1306525695,PL -1306525696,1306721279,ES -1306721280,1306721535,GB -1306721536,1307049983,ES +1306525696,1307049983,ES 1307049984,1307066367,RU 1307066368,1307068869,EU 1307068870,1307068870,CH @@ -24748,7 +21427,9 @@ 1307635712,1307637247,EE 1307637248,1307637759,LV 1307637760,1307638271,EE -1307638272,1307639807,LT +1307638272,1307638527,LT +1307638528,1307639551,EE +1307639552,1307639807,LT 1307639808,1307643903,IT 1307643904,1307652095,RU 1307652096,1307656191,ES @@ -24756,7 +21437,7 @@ 1307660288,1307664383,BE 1307664384,1307668479,NO 1307668480,1307672575,ES -1307672576,1307676671,DK +1307672576,1307676671,SE 1307676672,1307680767,RU 1307680768,1307684863,LV 1307684864,1307688959,GB @@ -24779,17 +21460,15 @@ 1307742208,1307746303,HU 1307746304,1307750399,UA 1307750400,1307754495,IT -1307754496,1307756856,GB -1307756857,1307756857,FR -1307756858,1307758591,GB +1307754496,1307756799,GB +1307756800,1307757055,FR +1307757056,1307758591,GB 1307758592,1307762687,SM 1307762688,1307766783,PL 1307766784,1307770879,GB 1307770880,1307774975,RU 1307774976,1307779071,RS -1307779072,1307780607,DK -1307780608,1307780863,DE -1307780864,1307787263,DK +1307779072,1307787263,DK 1307787264,1307791359,MT 1307791360,1307795455,KZ 1307795456,1307803647,RU @@ -24820,9 +21499,7 @@ 1307893760,1307897855,SE 1307897856,1307901951,AT 1307901952,1307906047,JO -1307906048,1307906815,CH -1307906816,1307907071,GB -1307907072,1307910143,CH +1307906048,1307910143,CH 1307910144,1307914239,DE 1307914240,1307918335,NL 1307918336,1307922431,GB @@ -24838,9 +21515,12 @@ 1307963392,1307967487,PL 1307967488,1307971583,IT 1307971584,1307980543,GB -1307980544,1307981311,ZW -1307981312,1307983359,GB -1307983360,1307983871,ZA +1307980544,1307980799,ZW +1307980800,1307981055,GB +1307981056,1307981311,ZW +1307981312,1307981567,GB +1307981568,1307981823,ZW +1307981824,1307983871,GB 1307983872,1307984383,NG 1307984384,1307987967,LB 1307987968,1307992063,FR @@ -24879,9 +21559,7 @@ 1308098560,1308360703,NL 1308360704,1308622847,PL 1308622848,1308884991,HR -1308884992,1309141759,IT -1309141760,1309142015,GB -1309142016,1309147135,IT +1308884992,1309147135,IT 1309147136,1309409279,PL 1309409280,1309671423,IT 1309671424,1309933567,IE @@ -24897,7 +21575,6 @@ 1310212096,1310214143,HU 1310214144,1310216191,UA 1310216192,1310218239,IT -1310218240,1310220287,NO 1310220288,1310222335,NL 1310222336,1310224383,RS 1310224384,1310226431,GB @@ -24923,9 +21600,7 @@ 1310326784,1310343167,NO 1310343168,1310359551,IT 1310359552,1310392319,UA -1310392320,1310401023,NL -1310401024,1310401279,ES -1310401280,1310408703,NL +1310392320,1310408703,NL 1310408704,1310425087,FI 1310425088,1310457855,UA 1310457856,1310474239,PL @@ -25013,8 +21688,8 @@ 1311301632,1311303679,TR 1311303680,1311307775,GB 1311307776,1311309823,IS -1311309824,1311310079,GB -1311310080,1311310847,GG +1311309824,1311310335,GB +1311310336,1311310847,GG 1311310848,1311311103,GB 1311311104,1311311359,GG 1311311360,1311311871,GB @@ -25038,9 +21713,7 @@ 1311350784,1311352831,FR 1311352832,1311354879,SK 1311354880,1311356927,RU -1311356928,1311358207,FR -1311358208,1311358463,PL -1311358464,1311358975,FR +1311356928,1311358975,FR 1311358976,1311361023,RU 1311361024,1311363071,NL 1311363072,1311365119,GB @@ -25055,7 +21728,9 @@ 1311506432,1311637503,CZ 1311637504,1312292863,DE 1312292864,1312817151,LT -1312817152,1313865727,SE +1312817152,1313192191,SE +1313192192,1313192447,DK +1313192448,1313865727,SE 1313865728,1313931263,CZ 1313931264,1313996799,RU 1313996800,1314062335,SE @@ -25077,9 +21752,7 @@ 1314783232,1314848767,DE 1314848768,1315045375,RO 1315045376,1315176447,SK -1315176448,1315184383,QA -1315184384,1315184639,US -1315184640,1315307519,QA +1315176448,1315307519,QA 1315307520,1315438591,CZ 1315438592,1315504127,AT 1315504128,1315569663,GB @@ -25097,7 +21770,15 @@ 1315745792,1315749887,CZ 1315749888,1315753983,RU 1315753984,1315758079,KZ -1315758080,1315762175,RE +1315758080,1315759103,RE +1315759104,1315759871,FR +1315759872,1315760383,RE +1315760384,1315760895,FR +1315760896,1315761023,RE +1315761024,1315761407,FR +1315761408,1315761663,RE +1315761664,1315761919,FR +1315761920,1315762175,RE 1315762176,1315766271,BG 1315766272,1315769087,NL 1315769088,1315769343,EU @@ -25136,7 +21817,7 @@ 1315893248,1315897343,RU 1315897344,1315901439,IR 1315901440,1315905535,UA -1315905536,1315909631,SI +1315905536,1315909631,BA 1315909632,1315913727,AZ 1315913728,1315917823,DE 1315917824,1315921919,RU @@ -25147,9 +21828,7 @@ 1315938304,1315942399,DK 1315942400,1315946495,UA 1315946496,1315946751,GB -1315946752,1315947391,GG -1315947392,1315947487,GB -1315947488,1315950591,GG +1315946752,1315950591,GG 1315950592,1315954687,UA 1315954688,1315958783,DE 1315958784,1315962879,RU @@ -25168,9 +21847,7 @@ 1317371904,1317404671,PL 1317404672,1317437439,IT 1317437440,1317470207,HR -1317470208,1317473279,TR -1317473280,1317473791,GB -1317473792,1317502975,TR +1317470208,1317502975,TR 1317502976,1317535743,IE 1317535744,1317552127,GB 1317552128,1317568511,ES @@ -25181,9 +21858,7 @@ 1317625856,1317627903,DE 1317627904,1317629951,RU 1317629952,1317634047,GB -1317634048,1317646847,IE -1317646848,1317647103,GB -1317647104,1317650431,IE +1317634048,1317650431,IE 1317650432,1317666815,PT 1317666816,1317683199,GB 1317683200,1317699583,DE @@ -25218,16 +21893,19 @@ 1318658048,1318666239,SI 1318666240,1318674431,DE 1318674432,1318682623,HU -1318682624,1318687231,RU -1318687232,1318687487,CZ -1318687488,1318690815,RU +1318682624,1318690815,RU 1318690816,1318699007,DK 1318699008,1318707199,IE -1318707200,1318708223,SE -1318708224,1318708735,FR +1318707200,1318707455,FR +1318707456,1318708479,SE +1318708480,1318708735,FR 1318708736,1318709247,SE 1318709248,1318711295,FR -1318711296,1318715391,SE +1318711296,1318711807,SE +1318711808,1318712319,FR +1318712320,1318713023,SE +1318713024,1318713119,FR +1318713120,1318715391,SE 1318715392,1318723583,BG 1318723584,1318731775,IR 1318731776,1318739967,PL @@ -25242,33 +21920,37 @@ 1318813696,1318821887,FR 1318821888,1318838271,RU 1318838272,1318839039,GB -1318839040,1318839807,IE -1318839808,1318840959,GB +1318839040,1318840319,IE +1318840320,1318840959,GB 1318840960,1318841078,IE 1318841079,1318841079,GB 1318841080,1318841087,IE -1318841088,1318841599,GB -1318841600,1318841855,IE +1318841088,1318841471,GB +1318841472,1318841855,IE 1318841856,1318842111,GB 1318842112,1318842367,IE -1318842368,1318846463,GB +1318842368,1318842623,GB +1318842624,1318842879,IE +1318842880,1318846463,GB 1318846464,1318854655,NO 1318854656,1318862847,CZ 1318862848,1318871039,GB 1318871040,1318879231,DK 1318879232,1318887423,CZ 1318887424,1318895615,PL -1318895616,1318897663,SE -1318897664,1318901247,DK -1318901248,1318901503,SE -1318901504,1318903807,DK +1318895616,1318898687,SE +1318898688,1318899199,DK +1318899200,1318900735,SE +1318900736,1318903807,DK 1318903808,1318911999,RU 1318912000,1318920191,MK 1318920192,1318928383,IR 1318928384,1318936575,LT 1318936576,1318944767,DK -1318944768,1318959103,CZ -1318959104,1318960895,PL +1318944768,1318958079,CZ +1318958080,1318959615,PL +1318959616,1318960639,CZ +1318960640,1318960895,PL 1318960896,1318961151,CZ 1318961152,1318969343,GB 1318969344,1318977535,RU @@ -25282,9 +21964,7 @@ 1319043072,1319051263,FR 1319051264,1319059455,UA 1319059456,1319067647,PL -1319067648,1319074303,DE -1319074304,1319074559,RU -1319074560,1319075839,DE +1319067648,1319075839,DE 1319075840,1319084031,BG 1319084032,1319092223,KW 1319092224,1319100415,IT @@ -25306,8 +21986,7 @@ 1331836928,1331838975,FR 1331838976,1331841023,ES 1331841024,1331843071,CZ -1331843072,1331844863,GB -1331844864,1331845119,FR +1331843072,1331845119,GB 1331845120,1331847167,RU 1331847168,1331849215,FR 1331849216,1331851263,BG @@ -25366,7 +22045,9 @@ 1332215808,1332346879,RU 1332346880,1332412415,AL 1332412416,1332477951,GR -1332477952,1332609023,ES +1332477952,1332489215,ES +1332489216,1332489727,US +1332489728,1332609023,ES 1332609024,1332613119,PL 1332613120,1332617215,UA 1332617216,1332621311,CZ @@ -25409,8 +22090,7 @@ 1334091776,1334099967,LT 1334099968,1334108159,IR 1334108160,1334116351,BE -1334116352,1334116863,AX -1334116864,1334123391,FI +1334116352,1334123391,FI 1334123392,1334123519,AX 1334123520,1334124543,FI 1334124544,1334132735,DE @@ -25439,18 +22119,14 @@ 1334345728,1334378495,RU 1334378496,1334411263,IT 1334411264,1334444031,RU -1334444032,1334485503,SE -1334485504,1334485887,DK -1334485888,1334486655,SE -1334486656,1334488319,DK +1334444032,1334484991,SE +1334484992,1334487039,DK +1334487040,1334487295,SE +1334487296,1334488319,DK 1334488320,1334488575,SE 1334488576,1334489087,DK -1334489088,1334501631,SE -1334501632,1334504703,DK -1334504704,1334504959,SE -1334504960,1334508799,DK -1334508800,1334509055,SE -1334509056,1334509567,DK +1334489088,1334501375,SE +1334501376,1334509567,DK 1334509568,1334542335,PL 1334542336,1334575103,RU 1334575104,1334579199,UA @@ -25467,20 +22143,20 @@ 1334624256,1334625535,GB 1334625536,1334625791,AP 1334625792,1334626303,AU -1334626304,1334628351,GB +1334626304,1334627839,GB +1334627840,1334628095,NO +1334628096,1334628351,GB 1334628352,1334632447,IE 1334632448,1334636543,KZ 1334636544,1334640639,RU 1334640640,1334644735,FR -1334644736,1334644991,DE -1334644992,1334645051,LB +1334644736,1334645051,DE 1334645052,1334645052,A2 -1334645053,1334645222,LB +1334645053,1334645222,DE 1334645223,1334645223,US -1334645224,1334645226,LB +1334645224,1334645226,DE 1334645227,1334645227,US -1334645228,1334645247,LB -1334645248,1334648831,DE +1334645228,1334648831,DE 1334648832,1334652927,GB 1334652928,1334661119,RU 1334661120,1334665215,CH @@ -25488,9 +22164,9 @@ 1334669312,1334673407,MK 1334673408,1334677503,GB 1334677504,1334681599,FI -1334681600,1334682371,DE -1334682372,1334682375,FR -1334682376,1334682879,DE +1334681600,1334682367,DE +1334682368,1334682623,FR +1334682624,1334682879,DE 1334682880,1334683135,DK 1334683136,1334685695,DE 1334685696,1334689791,IT @@ -25505,7 +22181,9 @@ 1334718464,1334722559,KZ 1334722560,1334726655,NL 1334726656,1334729983,RU -1334729984,1334730751,KZ +1334729984,1334730239,KZ +1334730240,1334730495,RU +1334730496,1334730751,KZ 1334730752,1334734847,RU 1334734848,1334738943,LT 1334738944,1334743039,CH @@ -25538,16 +22216,16 @@ 1336147968,1336279039,RU 1336279040,1336410111,GR 1336410112,1336541183,PT -1336541184,1336543231,SA +1336541184,1336542207,SA +1336542208,1336542463,US +1336542464,1336543231,SA 1336543232,1336545279,ES 1336545280,1336547327,SE 1336547328,1336549375,RU 1336549376,1336551423,IM 1336551424,1336553471,GB 1336553472,1336555519,SA -1336555520,1336556031,BE -1336556032,1336556287,SE -1336556288,1336557567,BE +1336555520,1336557567,BE 1336557568,1336559615,ES 1336559616,1336561663,GB 1336561664,1336563711,NO @@ -25557,7 +22235,6 @@ 1336571904,1336573951,PL 1336573952,1336575999,DK 1336576000,1336578047,RU -1336578048,1336580095,IR 1336580096,1336584191,RU 1336584192,1336586239,TR 1336586240,1336588287,GB @@ -25579,7 +22256,9 @@ 1336619008,1336621055,AL 1336621056,1336623103,DE 1336623104,1336625151,BE -1336625152,1336627199,IE +1336625152,1336626259,IE +1336626260,1336626263,GB +1336626264,1336627199,IE 1336627200,1336629247,NO 1336629248,1336631295,DE 1336631296,1336633343,IS @@ -25625,81 +22304,86 @@ 1337458688,1337982975,PL 1337982976,1342177279,DE 1342177280,1342701567,GB -1342701568,1342707455,MQ -1342707456,1342707711,FR -1342707712,1342708223,MQ -1342708224,1342708479,FR -1342708480,1342708735,MQ -1342708736,1342709247,FR -1342709248,1342714111,MQ -1342714112,1342714623,FR -1342714624,1342715903,MQ -1342715904,1342716159,FR -1342716160,1342716671,MQ -1342716672,1342716927,FR -1342716928,1342717951,MQ -1342717952,1342719743,GP -1342719744,1342719999,FR -1342720000,1342722559,GP +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 +1342717184,1342717951,MQ +1342717952,1342722559,GP 1342722560,1342722815,FR -1342722816,1342734335,GP -1342734336,1342736383,RE -1342736384,1342736639,FR -1342736640,1342742015,RE -1342742016,1342742271,FR -1342742272,1342746111,RE +1342722816,1342727679,GP +1342727680,1342727935,FR +1342727936,1342733311,GP +1342733312,1342733567,FR +1342733568,1342734335,GP +1342734336,1342735615,RE +1342735616,1342735871,FR +1342735872,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,1342748671,RE +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,1342751487,RE -1342751488,1342751743,FR -1342751744,1342752255,RE -1342752256,1342752511,FR -1342752512,1342753535,RE +1342750720,1342753535,RE 1342753536,1342753791,FR 1342753792,1342758911,RE -1342758912,1342759679,GF -1342759680,1342759935,FR -1342759936,1342760447,GF -1342760448,1342760959,FR -1342760960,1342762239,GF +1342758912,1342759423,GF +1342759424,1342761727,FR +1342761728,1342762239,GF 1342762240,1342763007,FR -1342763008,1342767103,GF +1342763008,1342765055,GF +1342765056,1342765823,FR +1342765824,1342767103,GF 1342767104,1342996479,FR 1342996480,1342996991,GF 1342996992,1342997247,FR -1342997248,1342997759,GF -1342997760,1342998015,FR -1342998016,1342998271,GF -1342998272,1342998783,FR -1342998784,1342999039,GF -1342999040,1342999295,FR -1342999296,1343000575,GF -1343000576,1343000831,FR -1343000832,1343005695,GF +1342997248,1342998015,GF +1342998016,1342998271,FR +1342998272,1342998527,GF +1342998528,1342998783,FR +1342998784,1343003391,GF +1343003392,1343003647,FR +1343003648,1343005695,GF 1343005696,1343005951,FR 1343005952,1343006719,GF -1343006720,1343007231,FR -1343007232,1343008511,GF +1343006720,1343006975,FR +1343006976,1343008511,GF 1343008512,1343008767,FR -1343008768,1343012863,GF +1343008768,1343011327,GF +1343011328,1343011583,FR +1343011584,1343012351,GF +1343012352,1343012607,FR +1343012608,1343012863,GF 1343012864,1343017983,FR -1343017984,1343018239,RE -1343018240,1343018272,FR -1343018273,1343018273,RE -1343018274,1343225855,FR +1343017984,1343018495,RE +1343018496,1343225855,FR 1343225856,1343475711,IT 1343475712,1343475967,US 1343475968,1343605503,IT 1343605504,1343605759,US -1343605760,1343746559,IT -1343746560,1343746815,US -1343746816,1343750143,IT -1343750144,1344566271,ES -1344566272,1344566527,US -1344566528,1344798719,ES +1343605760,1343750143,IT +1343750144,1344798719,ES 1344798720,1345323007,GB 1345323008,1345847295,PL 1345847296,1345978367,NL @@ -25748,7 +22432,6 @@ 1346539520,1346543615,RU 1346543616,1346547711,FI 1346547712,1346551807,IR -1346551808,1346555903,DE 1346555904,1346559999,IT 1346560000,1346564095,LI 1346564096,1346568191,EE @@ -25756,7 +22439,9 @@ 1346572288,1346576383,DE 1346576384,1346580479,DK 1346580480,1346584575,RU -1346584576,1346592767,EU +1346584576,1346587135,EU +1346587136,1346587391,US +1346587392,1346592767,EU 1346592768,1346596863,ES 1346596864,1346600959,IT 1346605056,1346609151,CH @@ -25786,13 +22471,13 @@ 1346740224,1346744319,FI 1346744320,1346748415,RU 1346748416,1346752511,DE -1346752512,1346752767,RE -1346752768,1346753023,FR -1346753024,1346753151,RE -1346753152,1346753535,FR -1346753536,1346753791,RE -1346753792,1346754559,FR -1346754560,1346756607,RE +1346752512,1346753535,FR +1346753536,1346754047,RE +1346754048,1346754559,FR +1346754560,1346754815,RE +1346754816,1346755071,FR +1346755072,1346755583,RE +1346755584,1346756607,FR 1346756608,1346760703,SE 1346760704,1346764799,IR 1346764800,1346768895,DK @@ -25879,23 +22564,13 @@ 1347166208,1347174399,GR 1347174400,1347182591,IT 1347182592,1347186687,RU -1347186688,1347187791,GB -1347187792,1347187807,US -1347187808,1347190783,GB +1347186688,1347190783,GB 1347190784,1347194879,RU 1347194880,1347198975,SE 1347198976,1347203071,QA 1347203072,1347207167,RU 1347207168,1347215359,GB -1347215360,1347219644,RU -1347219645,1347219645,KW -1347219646,1347219967,RU -1347219968,1347220479,US -1347220480,1347222015,RU -1347222016,1347222271,US -1347222272,1347222527,RU -1347222528,1347222783,US -1347222784,1347223551,RU +1347215360,1347223551,RU 1347223552,1347227647,GB 1347227648,1347231743,DE 1347231744,1347235839,UA @@ -26115,9 +22790,7 @@ 1347296265,1347296272,US 1347296273,1347297279,SE 1347297280,1347305471,UA -1347305472,1347308927,AL -1347308928,1347309055,IT -1347309056,1347309567,AL +1347305472,1347309567,AL 1347309568,1347313663,DE 1347313664,1347321855,RU 1347321856,1347322111,KW @@ -26145,8 +22818,9 @@ 1347375616,1347375871,EU 1347375872,1347379199,GB 1347379200,1347383295,NL -1347383296,1347387135,EE -1347387136,1347387391,FI +1347383296,1347385599,EE +1347385600,1347385855,FR +1347385856,1347387391,EE 1347387392,1347391487,GB 1347391488,1347395583,LB 1347395584,1347399679,SE @@ -26166,11 +22840,7 @@ 1347452928,1347455930,BG 1347455931,1347455931,BG 1347455932,1347461119,BG -1347461120,1347464618,AL -1347464619,1347464619,US -1347464620,1347464703,AL -1347464704,1347464959,US -1347464960,1347465215,AL +1347461120,1347465215,AL 1347465216,1347469311,GB 1347469312,1347473407,RU 1347473408,1347477503,UZ @@ -26247,13 +22917,13 @@ 1347837952,1347846143,RO 1347846144,1347850239,NO 1347850240,1347854335,IT -1347854336,1347854591,EU -1347854592,1347854847,DE -1347854848,1347855871,EU -1347855872,1347856127,DE -1347856128,1347862015,EU -1347862016,1347862271,DE -1347862272,1347862527,EU +1347854336,1347854599,EU +1347854600,1347854607,DE +1347854608,1347854655,EU +1347854656,1347854719,DE +1347854720,1347855615,EU +1347855616,1347856127,DE +1347856128,1347862527,EU 1347862528,1347866623,CH 1347866624,1347870719,NO 1347870720,1347874815,AM @@ -26289,8 +22959,9 @@ 1347989504,1347993599,FI 1347993600,1348001791,GB 1348001792,1348005887,ES -1348005888,1348009471,BH -1348009472,1348009983,US +1348005888,1348009215,BH +1348009216,1348009471,US +1348009472,1348009983,BH 1348009984,1348014079,RU 1348014080,1348018175,DK 1348018176,1348026367,NO @@ -26300,8 +22971,8 @@ 1348038656,1348042751,FR 1348042752,1348050943,RU 1348050944,1348055039,SE -1348055040,1348057599,LB -1348057600,1348058111,NG +1348055040,1348057087,LB +1348057088,1348058111,NG 1348058112,1348059135,LB 1348059136,1348063231,RU 1348063232,1348067327,CH @@ -26315,9 +22986,7 @@ 1348104192,1348108287,RU 1348108288,1348112383,CZ 1348112384,1348116479,DE -1348116480,1348117503,JO -1348117504,1348117759,CN -1348117760,1348120575,JO +1348116480,1348120575,JO 1348120576,1348124671,RU 1348124672,1348128767,GB 1348128768,1348132863,SI @@ -26340,16 +23009,15 @@ 1348198400,1348202495,NO 1348202496,1348206591,EU 1348206592,1348218879,RU -1348218880,1348220159,US +1348218880,1348219647,DE +1348219648,1348220159,US 1348220160,1348222975,DE 1348222976,1348231167,LU 1348231168,1348235263,RU 1348235264,1348239359,AT -1348239360,1348241663,SE -1348241664,1348241919,NO -1348241920,1348242175,SE -1348242176,1348242943,NO -1348242944,1348243455,SE +1348239360,1348241407,SE +1348241408,1348242431,NO +1348242432,1348243455,SE 1348243456,1348247551,GB 1348247552,1348251647,RU 1348251648,1348255743,GE @@ -26409,44 +23077,33 @@ 1348993024,1349124095,IT 1349124096,1349255167,GR 1349255168,1349517311,AT -1349517312,1349763071,NL +1349517312,1349584543,NL +1349584544,1349584551,GB +1349584552,1349763071,NL 1349763072,1349771263,RU 1349771264,1349779455,NL 1349779456,1349910527,IT 1349910528,1350041599,FR -1350041600,1350159935,AT -1350159936,1350159967,DE -1350159968,1350215679,AT +1350041600,1350215679,AT 1350215680,1350215935,IQ -1350215936,1350216703,US -1350216704,1350216959,AT +1350215936,1350216959,AT 1350216960,1350217215,IQ -1350217216,1350217471,US +1350217216,1350217471,AT 1350217472,1350217727,IQ -1350217728,1350296063,AT -1350296064,1350296575,US -1350296576,1350303743,AT +1350217728,1350303743,AT 1350303744,1350434815,FR 1350434816,1350565887,NL -1350565888,1351950079,DE -1351950080,1351950335,GB -1351950336,1351972679,DE -1351972680,1351972687,CH -1351972688,1351998679,DE +1350565888,1351998679,DE 1351998680,1351998687,TH 1351998688,1352031618,DE 1352031619,1352031619,EU 1352031620,1352069631,DE -1352069632,1352069887,US -1352069888,1352151063,DE -1352151064,1352151071,US -1352151072,1352271543,DE -1352271544,1352271551,US -1352271552,1352276991,DE -1352276992,1352277503,US -1352277504,1352293375,DE -1352293376,1352293631,GB -1352293632,1352294911,DE +1352069632,1352069759,US +1352069760,1352069799,DE +1352069800,1352069887,US +1352069888,1352293471,DE +1352293472,1352293479,GB +1352293480,1352294911,DE 1352294912,1352295167,EU 1352295168,1352299775,DE 1352299776,1352300031,US @@ -26454,25 +23111,24 @@ 1352405504,1352405759,US 1352405760,1352412159,DE 1352412160,1352412415,FR -1352412416,1352412671,DE -1352412672,1352412799,FR -1352412800,1352663039,DE +1352412416,1352663039,DE 1352663040,1353187327,DK -1353187328,1353267711,GB +1353187328,1353266959,GB +1353266960,1353266975,IE +1353266976,1353267711,GB 1353267712,1353267967,IE -1353267968,1353272319,GB -1353272320,1353273343,ES -1353273344,1353274367,GB -1353274368,1353274623,ES -1353274624,1353274879,GB -1353274880,1353275391,ES -1353275392,1353277439,GB -1353277440,1353278463,CH -1353278464,1353279743,GB -1353279744,1353279999,IT -1353280000,1353282047,GB -1353282048,1353282303,IT -1353282304,1353286143,GB +1353267968,1353272575,GB +1353272576,1353272831,ES +1353272832,1353273087,GB +1353273088,1353273343,ES +1353273344,1353274623,GB +1353274624,1353274879,ES +1353274880,1353275015,GB +1353275016,1353275135,ES +1353275136,1353277439,GB +1353277440,1353279487,CH +1353279488,1353279999,IT +1353280000,1353286143,GB 1353286144,1353286255,EU 1353286256,1353286271,GB 1353286272,1353286303,EU @@ -26480,14 +23136,18 @@ 1353286312,1353286397,EU 1353286398,1353286398,GB 1353286399,1353286399,EU -1353286400,1353287327,GB -1353287328,1353287359,IE -1353287360,1353287679,GB -1353287680,1353289471,IE -1353289472,1353312255,GB -1353312256,1353312511,CH -1353312512,1353315327,GB -1353315328,1353316095,ES +1353286400,1353288191,GB +1353288192,1353288703,IE +1353288704,1353289215,GB +1353289216,1353289471,IE +1353289472,1353298687,GB +1353298688,1353298943,SE +1353298944,1353312767,GB +1353312768,1353313023,IT +1353313024,1353313535,GB +1353313536,1353313791,IE +1353313792,1353315839,GB +1353315840,1353316095,ES 1353316096,1353318399,GB 1353318400,1353383935,SE 1353383936,1353449471,DE @@ -26528,9 +23188,7 @@ 1356201984,1356333055,FR 1356333056,1356464127,SE 1356464128,1356595199,CH -1356595200,1356714111,FI -1356714112,1356714239,AX -1356714240,1356857343,FI +1356595200,1356857343,FI 1356857344,1356922879,ES 1356922880,1356988415,GB 1356988416,1357053951,DE @@ -26548,21 +23206,19 @@ 1357323776,1357342975,EU 1357342976,1357343231,GB 1357343232,1357360127,EU -1357360128,1357360273,GB -1357360274,1357360274,FR -1357360275,1357360383,GB +1357360128,1357360271,GB +1357360272,1357360279,FR +1357360280,1357360383,GB 1357360384,1357361151,EU 1357361152,1357363199,GB 1357363200,1357366015,EU 1357366016,1357366271,KM -1357366272,1357366783,EU -1357366784,1357367039,BE -1357367040,1357371391,EU +1357366272,1357371391,EU 1357371392,1357371647,GB -1357371648,1357373183,EU -1357373184,1357373439,GB -1357373440,1357381631,EU -1357381632,1357414399,NO +1357371648,1357381631,EU +1357381632,1357386143,NO +1357386144,1357386147,DK +1357386148,1357414399,NO 1357414400,1357447167,LV 1357447168,1357479935,IE 1357479936,1357512703,LV @@ -26584,7 +23240,12 @@ 1357840384,1357873151,NO 1357873152,1357883391,EU 1357883392,1357883647,FR -1357883648,1357902365,EU +1357883648,1357883903,SE +1357883904,1357892863,EU +1357892864,1357893119,NL +1357893120,1357899007,EU +1357899008,1357899263,DE +1357899264,1357902365,EU 1357902366,1357902366,NO 1357902367,1357905919,EU 1357905920,1357910015,LT @@ -26601,16 +23262,14 @@ 1357967360,1357971455,RU 1357971456,1357975551,KZ 1357975552,1357979647,AT -1357979648,1357982463,KZ -1357982464,1357982719,GB -1357982720,1357983743,KZ +1357979648,1357983743,KZ 1357983744,1357985791,GB 1357985792,1357987839,DE 1357987840,1357991935,GB 1357991936,1357996031,NO 1357996032,1358000127,CH 1358000128,1358004223,LI -1358004224,1358008319,PL +1358004224,1358006271,PL 1358008320,1358012415,BH 1358012416,1358016511,IT 1358016512,1358020607,GE @@ -26641,13 +23300,12 @@ 1358151680,1358155775,DE 1358155776,1358159871,CH 1358159872,1358163967,ES -1358163968,1358165503,MQ -1358165504,1358166015,FR -1358166016,1358168063,MQ +1358163968,1358166015,FR +1358166016,1358167295,MQ +1358167296,1358167807,FR +1358167808,1358168063,MQ 1358168064,1358172159,GB -1358172160,1358172415,GR -1358172416,1358172671,CY -1358172672,1358176255,GR +1358172160,1358176255,GR 1358176256,1358180351,RU 1358180352,1358184447,ES 1358184448,1358192639,SE @@ -26657,7 +23315,11 @@ 1358209024,1358213119,IL 1358213120,1358217215,GB 1358217216,1358221311,SE -1358221312,1358225407,DE +1358221312,1358223615,DE +1358223616,1358223871,GB +1358223872,1358225027,DE +1358225028,1358225028,IT +1358225029,1358225407,DE 1358225408,1358229503,RU 1358229504,1358233599,DE 1358233600,1358237695,ES @@ -26726,12 +23388,12 @@ 1358528512,1358536703,RU 1358536704,1358540799,HU 1358540800,1358548991,RU -1358548992,1358550015,NL -1358550016,1358550527,JO -1358550528,1358551039,NL +1358548992,1358551039,NL 1358551040,1358553087,GB 1358553088,1358557183,UA -1358557184,1358561279,IE +1358557184,1358557375,IE +1358557376,1358557407,GB +1358557408,1358561279,IE 1358561280,1358569471,CZ 1358569472,1358573567,NG 1358573568,1358577663,LV @@ -26744,11 +23406,11 @@ 1358610432,1358614527,IR 1358614528,1358622719,RU 1358622720,1358626815,SK -1358626816,1358627925,GB +1358626816,1358627839,GB +1358627840,1358627925,US 1358627926,1358627926,A2 -1358627927,1358628095,GB -1358628096,1358628351,US -1358628352,1358635007,GB +1358627927,1358628863,US +1358628864,1358635007,GB 1358635008,1358639103,TR 1358639104,1358643199,RU 1358643200,1358647295,ES @@ -26756,14 +23418,11 @@ 1358651392,1358655487,FR 1358655488,1358667775,RU 1358667776,1358668543,GB -1358668544,1358669823,PT -1358669824,1358671359,GB +1358668544,1358668799,PT +1358668800,1358671359,GB 1358671360,1358671615,PT 1358671616,1358675967,GB -1358675968,1358677247,SE -1358677248,1358677759,DK -1358677760,1358679807,SE -1358679808,1358680063,DK +1358675968,1358680063,SE 1358680064,1358688255,RU 1358688256,1358692351,CZ 1358692352,1358696447,PL @@ -26771,9 +23430,7 @@ 1358700544,1358704639,AT 1358704640,1358708735,HU 1358708736,1358712831,GB -1358712832,1358714007,NL -1358714008,1358714015,SG -1358714016,1358716927,NL +1358712832,1358716927,NL 1358716928,1358721023,DE 1358721024,1358725119,GB 1358725120,1358733311,RU @@ -26810,27 +23467,24 @@ 1358860288,1358860835,GB 1358860836,1358860836,EU 1358860837,1358861311,GB -1358861312,1358861567,DE -1358861568,1358862847,GB +1358861312,1358861567,EU +1358861568,1358861823,GB +1358861824,1358862079,FR +1358862080,1358862847,GB 1358862848,1358862898,EU 1358862899,1358862899,NO 1358862900,1358863103,EU -1358863104,1358863135,DE -1358863136,1358863167,CH -1358863168,1358863359,DE +1358863104,1358863359,CH 1358863360,1358864383,GB 1358864384,1358872575,CH 1358872576,1358876671,IT 1358876672,1358880767,LV -1358880768,1358884863,GB 1358884864,1358888959,SE 1358888960,1358893055,DE 1358893056,1358897151,RU -1358897152,1358898291,GB -1358898292,1358898292,US -1358898293,1358898943,GB -1358898944,1358899199,US -1358899200,1358899711,GB +1358897152,1358898975,GB +1358898976,1358898991,US +1358898992,1358899711,GB 1358899712,1358899967,US 1358899968,1358900223,KE 1358900224,1358905343,GB @@ -26881,9 +23535,13 @@ 1359413248,1359429631,DE 1359429632,1359446015,LT 1359446016,1359462399,DK -1359462400,1359468031,DE +1359462400,1359467007,DE +1359467008,1359467263,US +1359467264,1359468031,DE 1359468032,1359468287,US -1359468288,1359470591,DE +1359468288,1359468543,DE +1359468544,1359468799,SG +1359468800,1359470591,DE 1359470592,1359478783,CH 1359478784,1359511551,TR 1359511552,1359544319,SE @@ -26928,7 +23586,9 @@ 1360113664,1360117759,HU 1360117760,1360121855,FI 1360121856,1360125951,DE -1360125952,1360130047,SI +1360125952,1360129023,SI +1360129024,1360129279,BA +1360129280,1360130047,SI 1360130048,1360134143,IE 1360134144,1360138239,NL 1360138240,1360142335,CH @@ -26954,9 +23614,7 @@ 1360232448,1360236543,RU 1360236544,1360240639,AT 1360240640,1360244735,ES -1360244736,1360251391,GB -1360251392,1360251647,ZA -1360251648,1360257023,GB +1360244736,1360257023,GB 1360257024,1360265215,DK 1360265216,1360269311,GB 1360269312,1360273407,KG @@ -27036,9 +23694,8 @@ 1360613376,1360617471,SE 1360617472,1360621567,IT 1360621568,1360625663,ES -1360625664,1360628492,DE -1360628493,1360628493,LB -1360628494,1360629759,DE +1360625664,1360625919,A2 +1360625920,1360629759,DE 1360629760,1360633855,SE 1360633856,1360637951,RU 1360637952,1360642047,FO @@ -27118,27 +23775,27 @@ 1361018880,1361022975,AT 1361022976,1361027071,IT 1361027072,1361035263,IR -1361035264,1361035627,US +1361035264,1361035627,NL 1361035628,1361035631,DZ -1361035632,1361039359,US +1361035632,1361039359,NL 1361039360,1361041407,IE 1361041408,1361042431,NL 1361042432,1361043455,PL 1361043456,1361051647,IR 1361051648,1362100223,ES -1362100224,1362423807,FR -1362423808,1362424063,US -1362424064,1362755583,FR +1362100224,1362755583,FR 1362755584,1362756095,NL 1362756096,1362771967,BE -1362771968,1362780159,NL -1362780160,1362788351,BE -1362788352,1362798591,NL +1362771968,1362796543,NL +1362796544,1362797567,BE +1362797568,1362798591,NL 1362798592,1362818091,BE 1362818092,1362818092,NL 1362818093,1362821119,BE 1362821120,1362829311,NL -1362829312,1362886655,BE +1362829312,1362880767,BE +1362880768,1362881023,NL +1362881024,1362886655,BE 1362886656,1363017727,ES 1363017728,1363148799,CH 1363148800,1363410943,FR @@ -27151,21 +23808,18 @@ 1364459520,1364525055,PT 1364525056,1364525311,NL 1364525312,1364525567,A2 -1364525568,1364537087,NL -1364537088,1364537343,US -1364537344,1364579839,NL +1364525568,1364579839,NL 1364579840,1364580095,US -1364580096,1364585727,NL +1364580096,1364582399,NL +1364582400,1364583423,US +1364583424,1364585727,NL 1364585728,1364585983,CA 1364585984,1364586239,LB -1364586240,1364587263,NL -1364587264,1364587519,US -1364587520,1364588977,NL +1364586240,1364588977,NL 1364588978,1364588978,US 1364588979,1364589567,NL 1364589568,1364589823,A2 -1364589824,1364590335,NL -1364590336,1364590591,US +1364589824,1364590591,NL 1364590592,1364721663,GB 1364721664,1364725759,SE 1364725760,1364733951,DE @@ -27176,9 +23830,7 @@ 1364750336,1364754431,RU 1364754432,1364758527,SK 1364758528,1364762623,KZ -1364762624,1364764159,GB -1364764160,1364764415,IM -1364764416,1364766719,GB +1364762624,1364766719,GB 1364766720,1364770815,CH 1364770816,1364774911,KG 1364774912,1364779007,RU @@ -27247,10 +23899,13 @@ 1365041664,1365041695,FR 1365041696,1365042047,LU 1365042048,1365042055,GB -1365042056,1365045247,LU +1365042056,1365044900,LU +1365044901,1365044901,FR +1365044902,1365045247,LU 1365045248,1365047295,AT -1365047296,1365049087,SK -1365049088,1365049343,AT +1365047296,1365047551,SK +1365047552,1365048319,AT +1365048320,1365049343,SK 1365049344,1365057535,FR 1365057536,1365061631,IT 1365061632,1365065727,NL @@ -27293,12 +23948,8 @@ 1365237760,1365241855,UZ 1365241856,1365245951,DK 1365245952,1366294527,GB -1366294528,1366673407,IT -1366673408,1366673663,US -1366673664,1367343103,IT -1367343104,1368440063,GB -1368440064,1368440319,US -1368440320,1369440255,GB +1366294528,1367343103,IT +1367343104,1369440255,GB 1369440256,1369473023,DE 1369473024,1369505791,HU 1369505792,1369509887,RO @@ -27357,7 +24008,9 @@ 1370182912,1370183167,NL 1370183168,1370185983,NL 1370185984,1370186495,NL -1370186496,1370189311,NL +1370186496,1370188799,NL +1370188800,1370189055,US +1370189056,1370189311,NL 1370189312,1370189567,NL 1370189568,1370193919,NL 1370193920,1370226687,GB @@ -27372,9 +24025,7 @@ 1370456064,1370488831,FI 1370488832,1370619903,RU 1370619904,1370750975,GB -1370750976,1370768383,RO -1370768384,1370768639,MD -1370768640,1370882047,RO +1370750976,1370882047,RO 1370882048,1371013119,HU 1371013120,1371078655,ES 1371078656,1371144191,FR @@ -27387,9 +24038,7 @@ 1371406336,1371471871,PL 1371471872,1371537407,NO 1371537408,1371602943,MA -1371602944,1371610111,PT -1371610112,1371610623,US -1371610624,1371668479,PT +1371602944,1371668479,PT 1371668480,1371734015,FR 1371734016,1371799551,RU 1371799552,1371865087,RO @@ -27400,16 +24049,18 @@ 1371996928,1371997183,GB 1371997184,1371997439,KE 1371997440,1371997695,A2 -1371997696,1372006426,GB +1371997696,1371998463,GB +1371998464,1371998719,NG +1371998720,1372006426,GB 1372006427,1372006427,TZ -1372006428,1372026367,GB +1372006428,1372011775,GB +1372011776,1372012031,ZM +1372012032,1372026367,GB 1372026368,1372026879,KE 1372026880,1372027903,IL 1372027904,1372033279,GB 1372033280,1372033535,IN -1372033536,1372043007,GB -1372043008,1372043263,NG -1372043264,1372045567,GB +1372033536,1372045567,GB 1372045568,1372045823,ZM 1372045824,1372060159,GB 1372060160,1372060415,IL @@ -27450,10 +24101,10 @@ 1372618752,1372651519,GB 1372651520,1372684287,FI 1372684288,1372689663,EU -1372689664,1372689919,DE -1372689920,1372693503,EU -1372693504,1372693759,CY -1372693760,1372695999,EU +1372689664,1372690175,DE +1372690176,1372692223,EU +1372692224,1372692479,DE +1372692480,1372695999,EU 1372696000,1372696007,DK 1372696008,1372699135,EU 1372699136,1372699391,DE @@ -27462,9 +24113,7 @@ 1372713472,1372717055,EU 1372717056,1372749823,PL 1372749824,1372782591,DE -1372782592,1372784639,RU -1372784640,1372784895,EU -1372784896,1372815359,RU +1372782592,1372815359,RU 1372815360,1372848127,SE 1372848128,1373110271,TR 1373110272,1373175807,SE @@ -27475,70 +24124,88 @@ 1373437952,1373503487,CH 1373503488,1373569023,RU 1373569024,1373634559,AT -1373634560,1374165631,SE -1374165632,1374165759,DK -1374165760,1374683135,SE +1373634560,1374683135,SE 1374683136,1375080959,BE 1375080960,1375081215,EU -1375081216,1375089407,BE -1375089408,1375089663,CH -1375089664,1375207423,BE +1375081216,1375207423,BE 1375207424,1375208447,MQ 1375208448,1375208703,GP 1375208704,1375210239,MQ 1375210240,1375210495,GP -1375210496,1375210751,FR -1375210752,1375211519,MQ -1375211520,1375214591,GP +1375210496,1375211519,MQ +1375211520,1375211775,FR +1375211776,1375212799,GP +1375212800,1375213055,FR +1375213056,1375214591,GP 1375214592,1375214847,FR -1375214848,1375215615,GP -1375215616,1375217919,GF +1375214848,1375215103,GP +1375215104,1375215359,FR +1375215360,1375215615,GP +1375215616,1375216895,GF +1375216896,1375217151,FR +1375217152,1375217919,GF 1375217920,1375218175,FR -1375218176,1375218687,GF -1375218688,1375218943,FR -1375218944,1375219455,GF -1375219456,1375219711,FR -1375219712,1375223807,GF -1375223808,1375231999,MQ +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,1375233279,MQ -1375233280,1375233535,FR -1375233536,1375237887,MQ -1375237888,1375238143,FR -1375238144,1375239679,MQ -1375239680,1375240191,FR -1375240192,1375240703,GP -1375240704,1375240959,FR -1375240960,1375241983,GP -1375241984,1375242239,FR -1375242240,1375245311,GP +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 +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,1375246335,GP -1375246336,1375246847,FR -1375246848,1375247871,GP -1375247872,1375248127,FR -1375248128,1375248895,GP -1375248896,1375249151,FR -1375249152,1375255039,GP -1375255040,1375255295,FR -1375255296,1375256319,GP -1375256320,1375256575,FR -1375256576,1375257599,RE -1375257600,1375258111,FR -1375258112,1375270911,RE +1375245568,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 +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,1375272191,RE -1375272192,1375272447,FR -1375272448,1375272959,RE -1375272960,1375497039,FR -1375497040,1375497047,MQ -1375497048,1375705984,FR +1375271168,1375271423,RE +1375271424,1375271679,FR +1375271680,1375272959,RE +1375272960,1375705984,FR 1375705985,1375705985,EU 1375705986,1375731711,FR -1375731712,1375844607,GB -1375844608,1375844743,US -1375844744,1375844751,GB -1375844752,1375844863,US +1375731712,1375844671,GB +1375844672,1375844735,US +1375844736,1375844767,GB +1375844768,1375844863,US 1375844864,1378719197,GB 1378719198,1378719198,EU 1378719199,1378877439,GB @@ -27570,7 +24237,9 @@ 1382213632,1382219775,GB 1382219776,1382222847,SE 1382222848,1382223103,FI -1382223104,1382252543,SE +1382223104,1382233407,SE +1382233408,1382233423,NO +1382233424,1382252543,SE 1382252544,1382268927,CZ 1382268928,1382285311,IR 1382285312,1382301695,CZ @@ -27592,13 +24261,11 @@ 1382547456,1382809599,IT 1382809600,1382967551,GB 1382967552,1382967807,GB -1382967808,1383005439,GB -1383005440,1383005695,QA -1383005696,1383071743,GB +1382967808,1383071743,GB 1383071744,1383088127,RU 1383088128,1383096319,IS -1383096320,1383099135,GB -1383099136,1383099391,DE +1383096320,1383098879,GB +1383098880,1383099391,DE 1383099392,1383100159,GB 1383100160,1383100415,FR 1383100416,1383104511,GB @@ -27623,18 +24290,20 @@ 1383194624,1383202815,GB 1383202816,1383211007,RU 1383211008,1383219199,CY -1383219200,1383219461,AL -1383219462,1383219462,US -1383219463,1383223039,AL -1383223040,1383223551,RS -1383223552,1383223623,AL -1383223624,1383223631,RS -1383223632,1383223727,AL -1383223728,1383223743,RS -1383223744,1383226921,AL -1383226922,1383226922,RS -1383226923,1383227135,AL -1383227136,1383227391,RS +1383219200,1383222463,AL +1383222464,1383222471,RS +1383222472,1383223125,AL +1383223126,1383223126,RS +1383223127,1383223295,AL +1383223296,1383223807,RS +1383223808,1383224063,AL +1383224064,1383224319,RS +1383224320,1383225343,AL +1383225344,1383225599,RS +1383225600,1383226111,AL +1383226112,1383226367,RS +1383226368,1383226879,AL +1383226880,1383227391,RS 1383227392,1383243775,RU 1383243776,1383251967,YE 1383251968,1383260159,CZ @@ -27650,9 +24319,7 @@ 1383325696,1383333887,GB 1383333888,1383350271,RU 1383350272,1383358463,NO -1383358464,1383367167,DE -1383367168,1383367423,US -1383367424,1383368957,DE +1383358464,1383368957,DE 1383368958,1383368958,US 1383368959,1383369727,DE 1383369728,1383369760,SA @@ -27705,9 +24372,7 @@ 1384382464,1384415231,HR 1384415232,1384480767,GB 1384480768,1384513535,FI -1384513536,1384527103,NO -1384527104,1384527119,AU -1384527120,1384546303,NO +1384513536,1384546303,NO 1384546304,1384579071,NL 1384579072,1384611839,DE 1384611840,1384644607,LT @@ -27769,13 +24434,9 @@ 1385316352,1385324543,NO 1385324544,1385332735,BE 1385332736,1385340927,GB -1385340928,1385341439,LB -1385341440,1385341634,US +1385340928,1385341634,LB 1385341635,1385341635,GB -1385341636,1385341695,US -1385341696,1385342207,LB -1385342208,1385342463,US -1385342464,1385349119,LB +1385341636,1385349119,LB 1385349120,1385357311,CH 1385357312,1385365503,PL 1385365504,1385373695,GB @@ -27801,13 +24462,15 @@ 1385545728,1385553919,RU 1385553920,1385562111,DE 1385562112,1385566719,EU -1385566720,1385567231,FR -1385567232,1385570303,EU +1385566720,1385566975,FR +1385566976,1385570303,EU 1385570304,1385578495,HU 1385578496,1385580543,TR 1385580544,1385580799,DK 1385580800,1385586687,TR -1385586688,1385594879,GB +1385586688,1385588223,GB +1385588224,1385588479,US +1385588480,1385594879,GB 1385594880,1385603071,NL 1385603072,1385611263,CZ 1385611264,1385619455,AT @@ -27822,9 +24485,13 @@ 1385668608,1385676799,NL 1385676800,1385684991,RU 1385684992,1385824255,GB -1385824256,1385955327,PT +1385824256,1385833471,PT +1385833472,1385833727,GB +1385833728,1385955327,PT 1385955328,1386086399,NL -1386086400,1386217471,ES +1386086400,1386217319,ES +1386217320,1386217327,NO +1386217328,1386217471,ES 1386217472,1386283007,PL 1386283008,1386348543,NL 1386348544,1386414079,RU @@ -27842,9 +24509,7 @@ 1387528192,1387593727,DK 1387593728,1387659263,FI 1387659264,1387790335,SE -1387790336,1388128511,IT -1388128512,1388128767,US -1388128768,1388314623,IT +1387790336,1388314623,IT 1388314624,1388322815,AT 1388322816,1388331007,SI 1388331008,1388339199,NL @@ -27870,9 +24535,7 @@ 1388519424,1388527615,NL 1388527616,1388535807,DE 1388535808,1388543999,GB -1388544000,1388545535,IE -1388545536,1388545791,CY -1388545792,1388552191,IE +1388544000,1388552191,IE 1388552192,1388560383,GB 1388560384,1388568575,FI 1388568576,1388570841,CH @@ -27885,9 +24548,9 @@ 1388588288,1388588543,GB 1388588544,1388588799,EU 1388588800,1388589055,GB -1388589056,1388590127,EU -1388590128,1388590327,FR -1388590328,1388591103,EU +1388589056,1388590079,EU +1388590080,1388590335,FR +1388590336,1388591103,EU 1388591104,1388591359,AU 1388591360,1388593151,EU 1388593152,1388601343,RU @@ -27899,8 +24562,7 @@ 1388642304,1388650495,FI 1388650496,1388658687,PL 1388658688,1388666879,GB -1388666880,1388667391,RE -1388667392,1388675071,FR +1388666880,1388675071,FR 1388675072,1388683263,EU 1388683264,1388691455,CH 1388691456,1388699647,NL @@ -27912,8 +24574,7 @@ 1388714240,1388714495,LB 1388714496,1388715007,RU 1388715008,1388715263,LB -1388715264,1388715775,RU -1388715776,1388716031,LB +1388715264,1388716031,RU 1388716032,1388724223,ES 1388724224,1388732415,DE 1388732416,1388740607,ES @@ -27925,9 +24586,7 @@ 1388781568,1388789759,ES 1388789760,1388794943,NL 1388794944,1388794959,GB -1388794960,1388796610,NL -1388796611,1388796611,DE -1388796612,1388797951,NL +1388794960,1388797951,NL 1388797952,1388806143,RU 1388806144,1388814335,DE 1388814336,1388822527,AX @@ -27946,23 +24605,15 @@ 1389166592,1389199359,PS 1389199360,1389199871,AE 1389199872,1389200159,US -1389200160,1389203455,AE -1389203456,1389204479,US -1389204480,1389210627,AE +1389200160,1389210627,AE 1389210628,1389210631,US 1389210632,1389212159,AE 1389212160,1389212415,GB -1389212416,1389215743,AE -1389215744,1389215999,US -1389216000,1389223935,AE +1389212416,1389223935,AE 1389223936,1389224191,US -1389224192,1389224959,AE -1389224960,1389225215,US -1389225216,1389231103,AE -1389231104,1389231359,US +1389224192,1389231359,AE 1389231360,1389231615,EU -1389231616,1389231871,US -1389231872,1389232127,AE +1389231616,1389232127,AE 1389232128,1389264895,DE 1389264896,1389265151,TZ 1389265152,1389265407,GB @@ -27972,23 +24623,19 @@ 1389266944,1389266957,A2 1389266958,1389266958,NG 1389266959,1389267199,A2 -1389267200,1389268257,GB -1389268258,1389268258,US -1389268259,1389268305,GB -1389268306,1389268306,US -1389268307,1389268489,GB -1389268490,1389268490,US -1389268491,1389272575,GB -1389272576,1389272831,US -1389272832,1389275647,GB +1389267200,1389268481,GB +1389268482,1389268482,US +1389268483,1389275647,GB 1389275648,1389275903,ZA -1389275904,1389289471,GB +1389275904,1389281791,GB +1389281792,1389282047,ZA +1389282048,1389289471,GB 1389289472,1389290239,NO 1389290240,1389293311,GB 1389293312,1389293567,A2 -1389293568,1389295573,GB -1389295574,1389295574,US -1389295575,1389297663,GB +1389293568,1389295103,GB +1389295104,1389295615,US +1389295616,1389297663,GB 1389297664,1389330431,UA 1389330432,1389363199,DE 1389363200,1389365780,CZ @@ -28004,11 +24651,7 @@ 1389494272,1389510655,DE 1389510656,1389527039,NL 1389527040,1389543423,PL -1389543424,1389552639,DE -1389552640,1389552895,US -1389552896,1389554943,DE -1389554944,1389555199,BE -1389555200,1389557247,DE +1389543424,1389557247,DE 1389557248,1389557375,EU 1389557376,1389557391,DE 1389557392,1389557503,EU @@ -28020,9 +24663,7 @@ 1389598720,1389598975,RU 1389598976,1389604863,GE 1389604864,1389605119,RU -1389605120,1389607935,GE -1389607936,1389608447,US -1389608448,1389608959,GE +1389605120,1389608959,GE 1389608960,1389625343,DK 1389625344,1389641727,DE 1389641728,1389658111,JO @@ -28079,7 +24720,11 @@ 1397489664,1397751807,CH 1397751808,1398276095,NL 1398276096,1398800383,DK -1398800384,1398833151,KW +1398800384,1398817279,KW +1398817280,1398817343,US +1398817344,1398817407,KW +1398817408,1398817535,US +1398817536,1398833151,KW 1398833152,1398865919,NL 1398865920,1398867967,RU 1398867968,1398870015,NL @@ -28115,7 +24760,9 @@ 1399848960,1400111103,FR 1400111104,1400373247,NL 1400373248,1400635391,DE -1400635392,1400713215,EU +1400635392,1400705791,EU +1400705792,1400706047,DE +1400706048,1400713215,EU 1400713216,1400717311,DE 1400717312,1400731647,EU 1400731648,1400733695,DE @@ -28129,9 +24776,7 @@ 1401290752,1401356287,BE 1401356288,1401421823,DE 1401421824,1401423871,GB -1401423872,1401425151,AE -1401425152,1401425407,US -1401425408,1401425919,AE +1401423872,1401425919,AE 1401425920,1401427967,NL 1401427968,1401430015,RU 1401430016,1401432063,AT @@ -28160,7 +24805,9 @@ 1401479168,1401481215,PL 1401481216,1401485311,RU 1401485312,1401487359,FI -1401487360,1401489407,GB +1401487360,1401487871,GB +1401487872,1401488127,EU +1401488128,1401489407,GB 1401489408,1401491455,SE 1401491456,1401493503,NL 1401493504,1401495551,CH @@ -28190,10 +24837,9 @@ 1401544704,1401546751,GB 1401546752,1401548799,IT 1401548800,1401550847,FR -1401550848,1401551103,GB -1401551104,1401551359,JE -1401551360,1401551615,GB -1401551616,1401552895,JE +1401550848,1401551871,GB +1401551872,1401552383,JE +1401552384,1401552895,GB 1401552896,1401554943,NL 1401554944,1401556991,IE 1401556992,1401563135,GB @@ -28221,7 +24867,7 @@ 1401831424,1401833471,GB 1401833472,1401835519,FI 1401835520,1401837567,DE -1401837568,1401839615,FR +1401837568,1401839615,CH 1401839616,1401841663,NO 1401841664,1401843711,UA 1401843712,1401847807,PL @@ -28246,11 +24892,9 @@ 1401892864,1401894911,RU 1401894912,1401896959,FI 1401896960,1401899007,RU -1401899008,1401901055,PL 1401901056,1401903103,NO 1401903104,1401905151,FI 1401905152,1401907199,PL -1401909248,1401911295,NO 1401911296,1401913343,DK 1401913344,1401917439,PL 1401917440,1401919487,BG @@ -28334,9 +24978,7 @@ 1403650048,1403653631,A2 1403653632,1403653663,DE 1403653664,1403666431,A2 -1403666432,1403673855,GB -1403673856,1403674111,AE -1403674112,1403699199,GB +1403666432,1403699199,GB 1403699200,1403715583,UA 1403715584,1403731967,LT 1403731968,1403748351,RU @@ -28358,9 +25000,8 @@ 1403994112,1404010495,AT 1404010496,1404026879,PL 1404026880,1404043263,ES -1404043264,1404044287,SE -1404044288,1404045311,EE -1404045312,1404059647,SE +1404043264,1404047359,EE +1404047360,1404059647,SE 1404059648,1404076031,NO 1404076032,1404084223,SE 1404084224,1404085247,NO @@ -28377,55 +25018,77 @@ 1404218112,1404232191,SE 1404232192,1404232703,NO 1404232704,1404379135,SE -1404379136,1404381183,AT -1404381184,1404387327,SE -1404387328,1404391423,DE -1404391424,1404393471,SE +1404379136,1404383231,AT +1404383232,1404387327,SE +1404387328,1404389375,DE +1404389376,1404393471,SE 1404393472,1404393983,DE -1404393984,1404575743,SE +1404393984,1404394495,SE +1404394496,1404395007,DE +1404395008,1404575743,SE 1404575744,1404583935,HR 1404583936,1404772351,SE 1404772352,1404780543,NL 1404780544,1404796927,SE -1404796928,1404801023,EE -1404801024,1404802047,SE -1404802048,1404803071,EE -1404803072,1404805119,SE +1404796928,1404799487,EE +1404799488,1404802047,SE +1404802048,1404802559,EE +1404802560,1404803071,SE +1404803072,1404803583,LV +1404803584,1404805119,SE 1404805120,1404813311,AT 1404813312,1404815871,SE 1404815872,1404816127,LT -1404816128,1404903935,SE -1404903936,1404904191,DE -1404904192,1404908287,SE -1404908288,1404908543,DE -1404908544,1404908799,SE -1404908800,1404909567,DE -1404909568,1404910591,SE -1404910592,1404910847,DE -1404910848,1404912127,SE -1404912128,1404912383,DE -1404912384,1404915711,SE -1404915712,1404916223,DE -1404916224,1404918783,SE +1404816128,1404870655,SE +1404870656,1404871679,LT +1404871680,1404903679,SE +1404903680,1404904703,DE +1404904704,1404905215,SE +1404905216,1404905983,DE +1404905984,1404906495,SE +1404906496,1404907007,DE +1404907008,1404907263,SE +1404907264,1404907519,DE +1404907520,1404908799,SE +1404908800,1404909311,DE +1404909312,1404909567,SE +1404909568,1404909823,DE +1404909824,1404910079,SE +1404910080,1404910335,DE +1404910336,1404910847,SE +1404910848,1404911103,DE +1404911104,1404912127,SE +1404912128,1404912639,DE +1404912640,1404913151,SE +1404913152,1404913663,DE +1404913664,1404914175,SE +1404914176,1404914687,DE +1404914688,1404914943,SE +1404914944,1404915199,DE +1404915200,1404916991,SE +1404916992,1404917247,DE +1404917248,1404918783,SE 1404918784,1404919039,DE -1404919040,1404919551,SE -1404919552,1404919807,DE -1404919808,1405026303,SE -1405026304,1405042687,NO -1405042688,1405050879,SE +1404919040,1404919295,SE +1404919296,1404919551,DE +1404919552,1404921855,SE +1404921856,1404923903,DE +1404923904,1405026303,SE +1405026304,1405030399,NO +1405030400,1405050879,SE 1405050880,1405059071,AT -1405059072,1405064447,SE -1405064448,1405064703,NO -1405064704,1405066239,SE -1405066240,1405066751,NO -1405066752,1405091839,SE +1405059072,1405063167,SE +1405063168,1405067263,NO +1405067264,1405091839,SE 1405091840,1406010111,FR 1406010112,1406010367,RE 1406010368,1406140415,FR 1406140416,1406205951,CZ 1406205952,1406271487,SE 1406271488,1406337023,IE -1406337024,1406402559,IT +1406337024,1406376703,IT +1406376704,1406376959,US +1406376960,1406402559,IT 1406402560,1406468095,GR 1406468096,1406533631,ES 1406533632,1406599167,FR @@ -28443,22 +25106,26 @@ 1406730240,1406746623,RU 1406746624,1406754815,BE 1406754816,1406763007,GB -1406763008,1406770943,LU -1406770944,1406771199,BE +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 1406771200,1406779391,GB 1406779392,1406787583,RU 1406787584,1406789631,ES 1406789632,1406789887,FR 1406789888,1406795775,ES 1406795776,1406797823,IM -1406797824,1406798079,GB -1406798080,1406798591,IM -1406798592,1406802175,GB -1406802176,1406802431,IM -1406802432,1406802943,GB -1406802944,1406803775,IM -1406803776,1406803807,GB -1406803808,1406803967,IM +1406797824,1406798591,GB +1406798592,1406798847,IM +1406798848,1406802943,GB +1406802944,1406803967,IM 1406803968,1406812159,DE 1406812160,1406820351,SE 1406820352,1406828543,PL @@ -28469,8 +25136,7 @@ 1406861312,1406869503,RU 1406869504,1406877695,GB 1406877696,1406885887,NL -1406885888,1406889471,CH -1406889472,1406889983,DE +1406887936,1406889983,DE 1406889984,1406894079,CH 1406894080,1406902271,RU 1406902272,1406910463,AT @@ -28486,9 +25152,9 @@ 1407000576,1407016959,DE 1407016960,1407025151,IT 1407025152,1407033343,DK -1407033344,1407035391,RU -1407035392,1407041535,UZ -1407041536,1407049727,RU +1407033344,1407036927,RU +1407036928,1407037439,UZ +1407037440,1407049727,RU 1407049728,1407057919,DE 1407057920,1407066111,RU 1407066112,1407074303,LU @@ -28496,9 +25162,7 @@ 1407090688,1407098879,CH 1407098880,1407107071,BG 1407107072,1407115263,RU -1407115264,1407121663,GB -1407121664,1407121919,SG -1407121920,1407123455,GB +1407115264,1407123455,GB 1407123456,1407131647,SE 1407131648,1407139839,NL 1407139840,1407148031,DE @@ -28511,28 +25175,28 @@ 1407320064,1407451135,SE 1407451136,1407483903,BG 1407483904,1407516671,CH -1407516672,1407516687,GB -1407516688,1407516695,NG -1407516696,1407522303,GB +1407516672,1407520511,GB +1407520512,1407520767,NG +1407520768,1407522303,GB 1407522304,1407522559,A2 -1407522560,1407522815,US -1407522816,1407529175,GB -1407529176,1407529178,SO +1407522560,1407528959,GB +1407528960,1407529178,US 1407529179,1407529180,NG -1407529181,1407529183,SO -1407529184,1407534365,GB +1407529181,1407529215,US +1407529216,1407532927,GB +1407532928,1407533055,US +1407533056,1407534365,GB 1407534366,1407534366,NG -1407534367,1407536127,GB +1407534367,1407535359,GB +1407535360,1407535615,GA +1407535616,1407536127,GB 1407536128,1407536639,GA -1407536640,1407548415,GB -1407548416,1407549439,ZA +1407536640,1407549439,GB 1407549440,1407582207,RU 1407582208,1407614975,PL 1407614976,1407680511,ES 1407680512,1407713279,GB -1407713280,1407730175,NL -1407730176,1407730431,BE -1407730432,1407778815,NL +1407713280,1407778815,NL 1407778816,1407844351,SE 1407844352,1407909887,RU 1407909888,1407975423,GR @@ -28585,28 +25249,20 @@ 1409941504,1410007039,PL 1410007040,1410008831,DE 1410008832,1410009087,US -1410009088,1410009599,DE -1410009600,1410009855,US -1410009856,1410035967,DE -1410035968,1410036223,US -1410036224,1410040319,DE -1410040320,1410040575,US -1410040576,1410042367,DE +1410009088,1410009855,DE +1410009856,1410010111,US +1410010112,1410017535,DE +1410017536,1410017791,US +1410017792,1410042367,DE 1410042368,1410042623,US 1410042624,1410043169,DE 1410043170,1410043171,US 1410043172,1410043172,DE 1410043173,1410043173,US -1410043174,1410043903,DE -1410043904,1410044159,GB -1410044160,1410046463,DE -1410046464,1410046719,CA -1410046720,1410072575,DE +1410043174,1410072575,DE 1410072576,1410203647,GB 1410203648,1410269183,FR -1410269184,1410273023,LT -1410273024,1410273279,LV -1410273280,1410334719,LT +1410269184,1410334719,LT 1410334720,1410342911,ES 1410342912,1410351103,SK 1410351104,1410359295,CH @@ -28627,8 +25283,7 @@ 1410473984,1410490367,JO 1410490368,1410498559,RU 1410498560,1410506751,IT -1410506752,1410507007,GB -1410507008,1410514943,IE +1410506752,1410514943,IE 1410514944,1410523135,GB 1410523136,1410531327,PT 1410531328,1410539519,DE @@ -28661,8 +25316,10 @@ 1410727936,1410736127,BG 1410736128,1410744319,RS 1410744320,1410745087,FR -1410745088,1410745343,US -1410745344,1410752511,FR +1410745088,1410745343,A2 +1410745344,1410751487,FR +1410751488,1410751999,DE +1410752000,1410752511,FR 1410752512,1410760703,DE 1410760704,1410768895,RU 1410768896,1410777087,GB @@ -28681,12 +25338,10 @@ 1411448832,1411514367,IT 1411514368,1411579903,FI 1411579904,1411645439,NL -1411645440,1411659007,EG -1411659008,1411659263,US -1411659264,1411710975,EG +1411645440,1411710975,EG 1411710976,1411776511,FR 1411776512,1411778559,RU -1411778560,1411780607,GR +1411778560,1411780607,NO 1411780608,1411784703,PL 1411784704,1411788799,GB 1411788800,1411792895,IT @@ -28702,8 +25357,7 @@ 1411833856,1411837951,NL 1411837952,1411842047,BG 1411842048,1411850239,NL -1411850240,1411854335,PT -1411854336,1411858431,RO +1411850240,1411858431,RO 1411858432,1411870719,DE 1411870720,1411872767,EU 1411872768,1411874815,NL @@ -28723,9 +25377,9 @@ 1411907584,1411923967,EU 1411923968,1411940351,BG 1411940352,1411973119,PL -1411973120,1412000255,SI -1412000256,1412000767,BA -1412000768,1412002815,SI +1411973120,1411999999,SI +1412000000,1412000511,BA +1412000512,1412002815,SI 1412002816,1412003071,BA 1412003072,1412005887,SI 1412005888,1412038655,NL @@ -28776,9 +25430,7 @@ 1415446528,1415577599,IL 1415577600,1416101887,FR 1416101888,1416364031,NL -1416364032,1416610303,IL -1416610304,1416610559,US -1416610560,1416626175,IL +1416364032,1416626175,IL 1416626176,1417150463,AT 1417150464,1417674751,ES 1417674752,1421869055,DE @@ -28802,9 +25454,8 @@ 1422786560,1422852095,HU 1422852096,1422911231,EU 1422911232,1422911487,NL -1422911488,1422917585,EU -1422917586,1422917586,GB -1422917587,1422917631,EU +1422911488,1422917375,EU +1422917376,1422917631,GB 1422917632,1423441919,NO 1423441920,1423704063,SE 1423704064,1423966207,IT @@ -28812,36 +25463,39 @@ 1424097280,1424228351,CH 1424228352,1424359423,IL 1424359424,1424490495,FI -1424490496,1424507903,ES -1424507904,1424508159,GB -1424508160,1424523263,ES +1424490496,1424523263,ES 1424523264,1424556031,RO 1424556032,1424588799,EG -1424588800,1424592639,GB +1424588800,1424589055,DE +1424589056,1424592639,GB 1424592640,1424592895,FR 1424592896,1424594431,GB 1424594432,1424594687,IE -1424594688,1424597069,GB +1424594688,1424595711,GB +1424595712,1424595967,IT +1424595968,1424597069,GB 1424597070,1424597070,CZ -1424597071,1424597759,GB -1424597760,1424598015,US -1424598016,1424600575,GB +1424597071,1424600575,GB 1424600576,1424600831,FR 1424600832,1424602879,GB 1424602880,1424603135,US -1424603136,1424604447,GB -1424604448,1424604463,NL +1424603136,1424604415,GB +1424604416,1424604463,NL 1424604464,1424604671,GB 1424604672,1424604927,EU -1424604928,1424608255,GB -1424608256,1424608511,FR -1424608512,1424610815,GB +1424604928,1424606463,GB +1424606464,1424606719,IT +1424606720,1424608351,GB +1424608352,1424608383,FR +1424608384,1424608433,GB +1424608434,1424608434,FR +1424608435,1424609063,GB +1424609064,1424609064,DE +1424609065,1424610815,GB 1424610816,1424611071,FR -1424611072,1424613631,GB -1424613632,1424614143,IT -1424614144,1424614399,GB -1424614400,1424614655,US -1424614656,1424615679,GB +1424611072,1424613887,GB +1424613888,1424614143,IT +1424614144,1424615679,GB 1424615680,1424615935,IT 1424615936,1424621567,GB 1424621568,1424625663,PL @@ -28858,9 +25512,9 @@ 1424713728,1424719871,SA 1424719872,1424752639,DE 1424752640,1424785407,HU -1424785408,1424811519,ES -1424811520,1424811775,GB -1424811776,1424818175,ES +1424785408,1424811775,ES +1424811776,1424812031,GB +1424812032,1424818175,ES 1424818176,1424850943,RU 1424850944,1424883711,LV 1424883712,1424916479,DK @@ -28905,8 +25559,8 @@ 1425446912,1425448959,GB 1425448960,1425451007,CZ 1425451008,1425459199,GB -1425459200,1425460991,IM -1425460992,1425461247,GB +1425459200,1425460735,IM +1425460736,1425461247,GB 1425461248,1425463295,ES 1425463296,1425467391,FR 1425467392,1425469439,CH @@ -28917,11 +25571,13 @@ 1425485824,1425506303,RO 1425506304,1425522687,NO 1425522688,1425539071,IT -1425539072,1425711103,FI -1425711104,1425711615,AX -1425711616,1425715071,FI +1425539072,1425712895,FI +1425712896,1425713151,AX +1425713152,1425715071,FI 1425715072,1425715199,AX -1425715200,1425801215,FI +1425715200,1425715967,FI +1425715968,1425716223,AX +1425716224,1425801215,FI 1425801216,1425817599,BG 1425817600,1425833983,DE 1425833984,1425850367,RU @@ -28934,13 +25590,12 @@ 1425948672,1425965055,DE 1425965056,1425970175,IT 1425970176,1425970431,FR -1425970432,1425970687,IT -1425970688,1425970943,US -1425970944,1425971967,IT +1425970432,1425971967,IT 1425971968,1425972223,A2 1425972224,1425980415,IT 1425980416,1425980671,IQ -1425980672,1425981439,IT +1425980672,1425981183,IT +1425981184,1425981439,US 1425981440,1425997823,RU 1425997824,1426014207,MT 1426014208,1426030591,DK @@ -28979,9 +25634,7 @@ 1427062784,1427095551,RU 1427095552,1427111935,LV 1427111936,1427177471,DE -1427177472,1427218687,NL -1427218688,1427218943,DE -1427218944,1427220556,NL +1427177472,1427220556,NL 1427220557,1427220557,KG 1427220558,1427236631,NL 1427236632,1427236633,US @@ -28994,9 +25647,7 @@ 1427570688,1427636223,FI 1427636224,1427668991,DK 1427668992,1427701759,SE -1427701760,1427737599,DE -1427737600,1427737855,RU -1427737856,1427739889,DE +1427701760,1427739889,DE 1427739890,1427739890,RU 1427739891,1427767295,DE 1427767296,1427800063,BE @@ -29004,7 +25655,9 @@ 1427832832,1427865599,BE 1427865600,1427898367,DK 1427898368,1427914751,RU -1427914752,1427931135,BE +1427914752,1427923967,BE +1427923968,1427924223,FR +1427924224,1427931135,BE 1427931136,1427947519,PL 1427947520,1427963903,RU 1427963904,1427980287,TR @@ -29016,10 +25669,9 @@ 1428062208,1428078591,SE 1428078592,1428094975,RU 1428094976,1428103167,AT -1428103168,1428115455,GB -1428115456,1428116735,US -1428116736,1428117503,GB -1428117504,1428119551,US +1428103168,1428118783,GB +1428118784,1428119039,US +1428119040,1428119551,GB 1428119552,1428121599,LV 1428121600,1428123647,FR 1428123648,1428127743,RU @@ -29031,23 +25683,27 @@ 1428137984,1428140031,GB 1428140032,1428142079,RU 1428142080,1428144127,DE -1428144128,1428146175,SE -1428146176,1428147199,FR -1428147200,1428147711,SE -1428147712,1428151295,FR -1428151296,1428152319,SE +1428144128,1428145151,FR +1428145152,1428146431,SE +1428146432,1428146687,FR +1428146688,1428147519,SE +1428147520,1428147615,FR +1428147616,1428147711,SE +1428147712,1428148223,FR +1428148224,1428148991,SE +1428148992,1428149247,FR +1428149248,1428150271,SE +1428150272,1428151295,FR +1428151296,1428152063,SE +1428152064,1428152319,FR 1428152320,1428160511,PL 1428160512,1428260863,IT 1428260864,1428261119,GB -1428261120,1428272127,IT -1428272128,1428272383,US -1428272384,1428474367,IT +1428261120,1428474367,IT 1428474368,1428474623,US 1428474624,1428536831,IT -1428536832,1428537343,US -1428537344,1428737279,IT -1428737280,1428737535,US -1428737536,1429209087,IT +1428536832,1428537087,US +1428537088,1429209087,IT 1429209088,1430257663,ES 1430257664,1430388735,IL 1430388736,1430519807,HU @@ -29072,14 +25728,11 @@ 1431928832,1431937023,IT 1431937024,1431945215,PL 1431945216,1431953407,NO -1431953408,1431955967,DK -1431955968,1431956223,GB -1431956224,1431956735,DK +1431953408,1431956735,DK 1431956736,1431956991,EU 1431956992,1431961599,DK 1431961600,1431969791,CH -1431969792,1431973887,GB -1431973888,1431977983,FR +1431969792,1431977983,GB 1431977984,1431986175,NL 1431986176,1431994367,RU 1431994368,1432002559,AT @@ -29152,10 +25805,10 @@ 1433610240,1433611519,US 1433611520,1433615027,GB 1433615028,1433615028,EU -1433615029,1433616383,GB -1433616384,1433619455,AE -1433619456,1433619711,US -1433619712,1433624575,AE +1433615029,1433615359,GB +1433615360,1433615615,FR +1433615616,1433616383,GB +1433616384,1433624575,AE 1433624576,1433632767,LV 1433632768,1433640959,GI 1433640960,1433649151,RU @@ -29199,7 +25852,9 @@ 1433862144,1433864191,CH 1433864192,1433866239,HU 1433866240,1433867519,GB -1433867520,1433867775,NL +1433867520,1433867521,NL +1433867522,1433867522,GB +1433867523,1433867775,NL 1433867776,1433870335,GB 1433870336,1433872383,TR 1433872384,1433874431,IT @@ -29253,9 +25908,7 @@ 1435500544,1436024831,NL 1436024832,1436090367,ES 1436090368,1436155903,TR -1436155904,1436206591,OM -1436206592,1436207103,US -1436207104,1436221439,OM +1436155904,1436221439,OM 1436221440,1436286975,ES 1436286976,1436418047,FI 1436418048,1436420095,DE @@ -29354,13 +26007,11 @@ 1438875648,1438876927,RU 1438876928,1438877183,IQ 1438877184,1438877439,A2 -1438877440,1438878063,RU -1438878064,1438878079,LB -1438878080,1438878207,RU -1438878208,1438878463,LB -1438878464,1438890495,RU -1438890496,1438890751,IQ -1438890752,1438892031,RU +1438877440,1438877951,RU +1438877952,1438878463,LB +1438878464,1438884607,RU +1438884608,1438884863,IQ +1438884864,1438892031,RU 1438892032,1438908415,CH 1438908416,1438924799,GR 1438924800,1438941183,NO @@ -29446,11 +26097,7 @@ 1441447936,1441456127,BE 1441456128,1441464319,NL 1441464320,1441468671,SE -1441468672,1441469183,DK -1441469184,1441469439,SE -1441469440,1441470271,DK -1441470272,1441470463,SE -1441470464,1441470719,DK +1441468672,1441470719,DK 1441470720,1441472511,SE 1441472512,1441480703,RU 1441480704,1441488895,TR @@ -29469,7 +26116,9 @@ 1441568768,1441570815,FR 1441570816,1441579007,RU 1441579008,1441587199,DE -1441587200,1441603583,AT +1441587200,1441594879,AT +1441594880,1441595135,DE +1441595136,1441603583,AT 1441603584,1441611775,RU 1441611776,1441619967,DE 1441619968,1441628159,FR @@ -29497,19 +26146,9 @@ 1441767424,1441775615,IT 1441775616,1441783807,ES 1441783808,1441791999,CZ -1441792000,1441798399,PT -1441798400,1441798655,US -1441798656,1441911295,PT -1441911296,1441911807,US -1441911808,1441913087,PT -1441913088,1441913343,US -1441913344,1442047487,PT -1442047488,1442047999,US -1442048000,1442048767,PT -1442048768,1442049023,US -1442049024,1442087935,PT -1442087936,1442088191,GB -1442088192,1442316287,PT +1441792000,1441870847,PT +1441870848,1441871359,US +1441871360,1442316287,PT 1442316288,1442381823,SK 1442381824,1442447359,RU 1442447360,1442512895,IL @@ -29553,15 +26192,16 @@ 1446576128,1446608895,IR 1446608896,1446641663,BY 1446641664,1446674431,SI -1446674432,1446707199,DK +1446674432,1446707175,DK +1446707176,1446707183,NO +1446707184,1446707199,DK 1446707200,1446739967,AT 1446739968,1446772735,HU 1446772736,1446805503,SA 1446805504,1446838271,FI 1446838272,1446871039,SI 1446871040,1446903807,CZ -1446903808,1446904831,AE -1446904832,1446905087,US +1446903808,1446905087,AE 1446905088,1446905343,A2 1446905344,1446906879,AE 1446906880,1446907135,IQ @@ -29586,9 +26226,11 @@ 1449459712,1449525247,HU 1449525248,1449590783,RU 1449590784,1449656319,DE -1449656320,1449840639,RO -1449840640,1449844735,MD -1449844736,1449918463,RO +1449656320,1449841663,RO +1449841664,1449843711,MD +1449843712,1449850879,RO +1449850880,1449852927,MD +1449852928,1449918463,RO 1449918464,1449951231,JO 1449951232,1449983999,TR 1449984000,1449992191,NL @@ -29626,7 +26268,9 @@ 1450311680,1450442751,FI 1450442752,1450704895,CH 1450704896,1451229183,RO -1451229184,1455423487,GB +1451229184,1455204703,GB +1455204704,1455204735,GG +1455204736,1455423487,GB 1455423488,1459617791,FR 1459617792,1461714943,IT 1461714944,1462763519,IE @@ -29634,9 +26278,7 @@ 1463162612,1463162612,US 1463162613,1463162613,DK 1463162614,1463162614,US -1463162615,1463171071,DK -1463171072,1463171327,US -1463171328,1463812095,DK +1463162615,1463812095,DK 1463812096,1464074239,BE 1464074240,1464336383,IL 1464336384,1464467455,DK @@ -29646,9 +26288,7 @@ 1464606720,1464614911,KZ 1464614912,1464664063,UA 1464664064,1464860671,DE -1464860672,1465242399,GB -1465242400,1465242415,US -1465242416,1465384959,GB +1464860672,1465384959,GB 1465384960,1465647103,FR 1465647104,1465909247,FI 1465909248,1465942015,PL @@ -29669,12 +26309,9 @@ 1466241024,1466249215,PL 1466249216,1466253311,GR 1466253312,1466257407,PL -1466257408,1466261503,GR 1466261504,1466265599,GB 1466265600,1466269695,HU -1466269696,1466269951,SA -1466269952,1466270207,GB -1466270208,1466302463,SA +1466269696,1466302463,SA 1466302464,1466335231,GB 1466335232,1466367999,CH 1466368000,1466400767,PT @@ -29756,7 +26393,9 @@ 1475092480,1475094527,CY 1475094528,1475096575,RU 1475096576,1475098623,BH -1475098624,1475102719,GB +1475098624,1475101695,GB +1475101696,1475101951,ZA +1475101952,1475102719,GB 1475102720,1475104767,FR 1475104768,1475106815,RU 1475106816,1475107583,SE @@ -29813,9 +26452,7 @@ 1475206400,1475206655,AP 1475206656,1475207151,DE 1475207152,1475207183,US -1475207184,1475208447,AE -1475208448,1475208959,US -1475208960,1475209215,AE +1475207184,1475209215,AE 1475209216,1475211263,UZ 1475211264,1475213311,DE 1475213312,1475215359,FR @@ -29828,7 +26465,9 @@ 1475237888,1475239935,ES 1475239936,1475241983,RU 1475241984,1475244031,MC -1475244032,1475245055,DE +1475244032,1475244287,DE +1475244288,1475244543,SD +1475244544,1475245055,DE 1475245056,1475245311,US 1475245312,1475245823,DE 1475245824,1475246079,RU @@ -29902,7 +26541,9 @@ 1475706880,1475723263,RU 1475723264,1475726079,GB 1475726080,1475726335,RU -1475726336,1475739647,GB +1475726336,1475726847,GB +1475726848,1475727103,RU +1475727104,1475739647,GB 1475739648,1475756031,BG 1475756032,1475772415,GB 1475772416,1475788799,LV @@ -29932,9 +26573,7 @@ 1475928064,1475952639,RU 1475952640,1475954175,GB 1475954176,1475954687,NO -1475954688,1475956735,GB -1475956736,1475956991,US -1475956992,1475958527,GB +1475954688,1475958527,GB 1475958528,1475958783,NO 1475958784,1475960831,GB 1475960832,1475969023,NL @@ -29948,7 +26587,9 @@ 1476042752,1476050943,PL 1476050944,1476067327,RU 1476067328,1476075519,TR -1476075520,1476083711,NL +1476075520,1476079555,NL +1476079556,1476079557,DE +1476079558,1476083711,NL 1476083712,1476116479,RU 1476116480,1476124671,SE 1476124672,1476132863,PL @@ -29965,7 +26606,9 @@ 1476214784,1476222975,SE 1476222976,1476231167,IT 1476231168,1476239359,NL -1476239360,1476247551,DE +1476239360,1476245759,DE +1476245760,1476246015,PL +1476246016,1476247551,DE 1476247552,1476255743,RU 1476255744,1476257791,ES 1476257792,1476259839,FR @@ -29987,22 +26630,14 @@ 1476378624,1476386815,KZ 1476386816,1476395007,RU 1476395008,1478492159,ES -1478492160,1478544383,IT -1478544384,1478544639,US -1478544640,1479006463,IT -1479006464,1479006719,US -1479006720,1479016191,IT +1478492160,1479016191,IT 1479016192,1479016447,US -1479016448,1479400447,IT -1479400448,1479401471,US +1479016448,1479400703,IT +1479400704,1479401471,US 1479401472,1479898367,IT 1479898368,1479898623,US -1479898624,1480287231,IT -1480287232,1480287487,US -1480287488,1480589311,IT -1480589312,1481629951,DE -1481629952,1481630143,US -1481630144,1481633041,DE +1479898624,1480589311,IT +1480589312,1481633041,DE 1481633042,1481633042,DE 1481633043,1481637887,DE 1481637888,1481646079,SE @@ -30016,14 +26651,11 @@ 1481711616,1481719807,RU 1481719808,1481727999,CZ 1481728000,1481736191,IE -1481736192,1481741823,GG -1481741824,1481742079,GB +1481736192,1481741568,GG +1481741569,1481742079,GB 1481742080,1481742335,GG -1481742336,1481744287,GB -1481744288,1481744303,GG -1481744304,1481744328,GB -1481744329,1481744329,GG -1481744330,1481744383,GB +1481742336,1481744127,GB +1481744128,1481744383,GG 1481744384,1481752575,IT 1481752576,1481760767,RU 1481760768,1481768959,UA @@ -30081,17 +26713,15 @@ 1482948608,1483210751,CZ 1483210752,1483735039,GB 1483735040,1483997183,FI -1483997184,1484038143,AT -1484038144,1484038399,US -1484038400,1484038911,AT -1484038912,1484039167,US -1484039168,1484128255,AT +1483997184,1484128255,AT 1484128256,1484259327,LT 1484259328,1484783615,FR 1484783616,1484849151,DE 1484849152,1484914687,SE 1484914688,1484980223,DE -1484980224,1485045759,SE +1484980224,1485001055,SE +1485001056,1485001087,NO +1485001088,1485045759,SE 1485045760,1485111295,HU 1485111296,1485242367,DE 1485242368,1485246463,RU @@ -30111,9 +26741,7 @@ 1486061568,1486094335,RU 1486094336,1486127103,ES 1486127104,1486159871,FI -1486159872,1486179157,IS -1486179158,1486179158,DK -1486179159,1486192639,IS +1486159872,1486192639,IS 1486192640,1486225407,IT 1486225408,1486258175,DE 1486258176,1486290943,RS @@ -30165,22 +26793,13 @@ 1489534976,1489567743,RU 1489567744,1489600511,BH 1489600512,1489633279,RU -1489633280,1489637887,IT -1489637888,1489638399,US -1489638400,1489644543,IT +1489633280,1489644543,IT 1489644544,1489644799,IQ -1489644800,1489645055,US -1489645056,1489645567,IT -1489645568,1489645823,US -1489645824,1489646335,IT -1489646336,1489646847,US -1489646848,1489649151,IT -1489649152,1489649158,A2 +1489644800,1489646335,IT +1489646336,1489646591,US +1489646592,1489649158,IT 1489649159,1489649159,US -1489649160,1489649407,A2 -1489649408,1489661951,IT -1489661952,1489662207,US -1489662208,1489666047,IT +1489649160,1489666047,IT 1489666048,1489698815,GB 1489698816,1489731583,MT 1489731584,1489764351,BG @@ -30201,14 +26820,18 @@ 1490075648,1490092031,GB 1490092032,1490108415,DE 1490108416,1490116863,MC -1490116864,1490118143,FR -1490118144,1490118399,MC -1490118400,1490118655,FR -1490118656,1490124799,MC +1490116864,1490117119,FR +1490117120,1490117631,MC +1490117632,1490118143,FR +1490118144,1490124799,MC 1490124800,1490157567,HU 1490157568,1490173951,RU 1490173952,1490190335,PT -1490190336,1490206719,GB +1490190336,1490196991,GB +1490196992,1490197247,IE +1490197248,1490201087,GB +1490201088,1490201343,DE +1490201344,1490206719,GB 1490206720,1490223103,GE 1490223104,1490255871,GB 1490255872,1490272255,NL @@ -30223,7 +26846,9 @@ 1490419712,1490436095,DE 1490436096,1490452479,UA 1490452480,1490468863,PT -1490468864,1490501631,GB +1490468864,1490478591,GB +1490478592,1490478847,RU +1490478848,1490501631,GB 1490501632,1490518015,DE 1490518016,1490534399,RU 1490534400,1490550783,DE @@ -30236,22 +26861,23 @@ 1490944000,1491075071,LT 1491075072,1493172223,TR 1493172224,1493303295,DE -1493303296,1493431807,FR -1493431808,1493432319,GP -1493432320,1493433855,FR -1493433856,1493434111,MQ -1493434112,1493434367,FR +1493303296,1493434367,FR 1493434368,1493565439,SA 1493565440,1493696511,ES 1493696512,1493958655,NO 1493958656,1494220799,DE -1494220800,1494221567,RE -1494221568,1494221823,FR -1494221824,1494222079,RE -1494222080,1494222335,FR -1494222336,1494224383,RE +1494220800,1494221055,FR +1494221056,1494221311,RE +1494221312,1494222335,FR +1494222336,1494223103,RE +1494223104,1494224127,FR +1494224128,1494224383,RE 1494224384,1494224895,FR -1494224896,1494228991,GP +1494224896,1494226431,GP +1494226432,1494226943,FR +1494226944,1494227455,GP +1494227456,1494227967,FR +1494227968,1494228991,GP 1494228992,1494237183,RU 1494237184,1494245375,IE 1494245376,1494253567,RU @@ -30262,7 +26888,18 @@ 1494286336,1494294527,HR 1494294528,1494302719,RU 1494302720,1494310911,FI -1494310912,1494318591,LB +1494310912,1494311423,GB +1494311424,1494311679,LB +1494311680,1494312447,GB +1494312448,1494312959,LB +1494312960,1494313215,GB +1494313216,1494313727,LB +1494313728,1494313983,GB +1494313984,1494315007,LB +1494315008,1494315519,GB +1494315520,1494316287,LB +1494316288,1494317055,GB +1494317056,1494318591,LB 1494318592,1494319103,GB 1494319104,1494327295,IS 1494327296,1494335487,IT @@ -30344,10 +26981,14 @@ 1495070720,1495072767,RU 1495072768,1495105535,CZ 1495105536,1495138303,ES -1495138304,1495168767,EU +1495138304,1495167743,EU +1495167744,1495167999,FR +1495168000,1495168767,EU 1495168768,1495169023,GB 1495169024,1495170047,EU -1495170048,1495171071,FR +1495170048,1495170303,FR +1495170304,1495170815,EU +1495170816,1495171071,FR 1495171072,1495203839,NL 1495203840,1495205887,DE 1495205888,1495207935,CZ @@ -30383,16 +27024,18 @@ 1495326720,1495328767,MD 1495328768,1495334911,RO 1495334912,1495335935,MD -1495335936,1495883775,RO -1495883776,1495887871,MD -1495887872,1496262655,RO -1496262656,1496263167,US +1495335936,1495875583,RO +1495875584,1495879679,MD +1495879680,1495884799,RO +1495884800,1495885823,MD +1495885824,1496178943,RO +1496178944,1496179199,AE +1496179200,1496262911,RO +1496262912,1496263167,US 1496263168,1496317951,RO 1496317952,1497366527,DE 1497366528,1498415103,PL -1498415104,1498452375,FR -1498452376,1498452376,NC -1498452377,1499463679,FR +1498415104,1499463679,FR 1499463680,1499594751,IT 1499594752,1499725823,NL 1499725824,1499856895,IE @@ -30432,12 +27075,7 @@ 1500180480,1500182527,BE 1500182528,1500184575,RU 1500184576,1500184831,GB -1500184832,1500186367,IM -1500186368,1500186463,GB -1500186464,1500186479,IM -1500186480,1500186527,GB -1500186528,1500186543,IM -1500186544,1500186623,GB +1500184832,1500186623,IM 1500186624,1500188671,KW 1500188672,1500190719,GB 1500190720,1500194815,RU @@ -30481,9 +27119,7 @@ 1500495872,1500512255,BA 1500512256,1500643327,RU 1500643328,1500774399,RO -1500774400,1500903167,LT -1500903168,1500903423,GB -1500903424,1500905471,LT +1500774400,1500905471,LT 1500905472,1501036543,IT 1501036544,1501298687,RO 1501298688,1501560831,IE @@ -30491,9 +27127,7 @@ 1501822976,1502085119,HU 1502085120,1502216191,RO 1502216192,1502347263,IL -1502347264,1502399551,ES -1502399552,1502399615,GB -1502399616,1502478335,ES +1502347264,1502478335,ES 1502478336,1502609407,SI 1502609408,1502625791,DE 1502625792,1502642175,SA @@ -30514,11 +27148,8 @@ 1502806016,1502822399,SA 1502822400,1502838783,HU 1502838784,1502855167,SE -1502855168,1502867455,AZ -1502867456,1502867711,TR -1502867712,1502871551,AZ -1502871552,1502887679,BH -1502887680,1502887935,US +1502855168,1502871551,AZ +1502871552,1502887935,BH 1502887936,1502904319,HU 1502904320,1502920703,IT 1502920704,1502937087,RU @@ -30569,9 +27200,7 @@ 1504444416,1504509951,HR 1504509952,1504575487,SK 1504575488,1504641023,PL -1504641024,1504675839,RU -1504675840,1504676095,US -1504676096,1504706559,RU +1504641024,1504706559,RU 1504706560,1504837631,CZ 1504837632,1504968703,RU 1504968704,1505099775,PT @@ -30635,7 +27264,13 @@ 1505665024,1505673215,IT 1505673216,1505681407,BG 1505681408,1505689599,RU -1505689600,1505697791,NO +1505689600,1505691391,NO +1505691392,1505691418,DK +1505691419,1505691423,NO +1505691424,1505691551,DK +1505691552,1505691559,NO +1505691560,1505691647,DK +1505691648,1505697791,NO 1505697792,1505705983,IE 1505705984,1505714175,DE 1505714176,1505722367,LV @@ -30662,25 +27297,33 @@ 1506410496,1506443263,DE 1506443264,1506445567,GB 1506445568,1506445823,FR -1506445824,1506447359,GB +1506445824,1506446079,GB +1506446080,1506446335,FR +1506446336,1506447359,GB 1506447360,1506447615,IT -1506447616,1506450943,GB +1506447616,1506449151,GB +1506449152,1506449407,BE +1506449408,1506450175,GB +1506450176,1506450431,CH +1506450432,1506450943,GB 1506450944,1506451199,DK 1506451200,1506451711,GB -1506451712,1506451967,ES +1506451712,1506451791,ES +1506451792,1506451799,GB +1506451800,1506451967,ES 1506451968,1506452223,GB 1506452224,1506452479,DE -1506452480,1506456831,GB +1506452480,1506455295,GB +1506455296,1506455551,IT +1506455552,1506456831,GB 1506456832,1506457087,IT 1506457088,1506459177,GB 1506459178,1506459178,EU 1506459179,1506459391,GB 1506459392,1506459647,BE 1506459648,1506459903,GB -1506459904,1506460159,FR -1506460160,1506460529,GB -1506460530,1506460530,FR -1506460531,1506460927,GB +1506459904,1506460415,FR +1506460416,1506460927,GB 1506460928,1506461183,IT 1506461184,1506461439,GB 1506461440,1506461695,IT @@ -30688,25 +27331,29 @@ 1506462624,1506462655,FR 1506462656,1506462719,GB 1506462720,1506462975,IT -1506462976,1506465023,GB +1506462976,1506463231,GB +1506463232,1506463487,SE +1506463488,1506463743,GB +1506463744,1506463999,DE +1506464000,1506465023,GB 1506465024,1506465187,EU 1506465188,1506465188,NL 1506465189,1506465279,EU 1506465280,1506466399,GB -1506466400,1506466431,DE -1506466432,1506468863,GB +1506466400,1506466559,DE +1506466560,1506468863,GB 1506468864,1506469119,IT 1506469120,1506469631,GB 1506469632,1506469887,IT 1506469888,1506470655,GB -1506470656,1506471679,IT -1506471680,1506472191,GB +1506470656,1506471167,IT +1506471168,1506472191,GB 1506472192,1506472447,IT 1506472448,1506473471,GB -1506473472,1506473983,IT -1506473984,1506474755,GB -1506474756,1506474756,IT -1506474757,1506476031,GB +1506473472,1506474495,IT +1506474496,1506474751,GB +1506474752,1506475007,IT +1506475008,1506476031,GB 1506476032,1506508799,KW 1506508800,1506541567,CZ 1506541568,1506574335,RU @@ -30808,9 +27455,7 @@ 1508648448,1508648703,DK 1508648704,1508650751,SE 1508650752,1508651263,DK -1508651264,1508651775,SE -1508651776,1508652031,DK -1508652032,1508652543,SE +1508651264,1508652543,SE 1508652544,1508654079,DK 1508654080,1508654591,SE 1508654592,1508655103,DK @@ -30840,7 +27485,8 @@ 1509449728,1509453823,ES 1509453824,1509457919,RU 1509457920,1509462015,NL -1509462016,1509466111,LI +1509462016,1509465855,LI +1509465856,1509466111,CH 1509466112,1509470207,NL 1509470208,1509478399,RU 1509478400,1509482495,FR @@ -30867,7 +27513,15 @@ 1509584896,1509588991,NO 1509588992,1509593087,DE 1509593088,1509601279,RU -1509601280,1509605375,NL +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 1509605376,1509609471,PL 1509609472,1509617663,RU 1509617664,1509621759,CZ @@ -30882,7 +27536,9 @@ 1509654528,1509658623,DE 1509658624,1509666815,RU 1509666816,1509670911,IT -1509670912,1509679103,GB +1509670912,1509677311,GB +1509677312,1509677567,NO +1509677568,1509679103,GB 1509679104,1509683199,ES 1509683200,1509687295,CH 1509687296,1509703679,UA @@ -30901,247 +27557,321 @@ 1509900288,1509916671,RU 1509916672,1509933055,GB 1509933056,1509949439,US -1509949440,1511981567,FR -1511981568,1511982847,RE -1511982848,1511983103,FR -1511983104,1511985663,RE -1511985664,1511986175,FR -1511986176,1511987455,RE -1511987456,1511987711,FR -1511987712,1511990271,RE +1509949440,1511981055,FR +1511981056,1511986175,RE +1511986176,1511986431,FR +1511986432,1511987967,RE +1511987968,1511988223,FR +1511988224,1511989247,RE +1511989248,1511989503,FR +1511989504,1511989759,RE +1511989760,1511990015,FR +1511990016,1511990271,RE 1511990272,1511990527,FR -1511990528,1511991551,RE -1511991552,1511991807,FR -1511991808,1511992831,RE +1511990528,1511992831,RE 1511992832,1511993087,FR 1511993088,1511993855,RE 1511993856,1511994367,FR -1511994368,1511994879,RE -1511994880,1511995391,FR -1511995392,1511996927,RE -1511996928,1511997439,FR +1511994368,1511996671,RE +1511996672,1511996927,FR +1511996928,1511997183,RE +1511997184,1511997439,FR 1511997440,1511997695,MQ 1511997696,1511997951,FR -1511997952,1511999487,MQ -1511999488,1512000511,FR -1512000512,1512001535,MQ +1511997952,1512001535,MQ 1512001536,1512001791,FR -1512001792,1512005631,MQ -1512005632,1512007679,GP -1512007680,1512007935,FR -1512007936,1512008191,GP -1512008192,1512008703,FR -1512008704,1512008959,GP -1512008960,1512009471,FR -1512009472,1512009727,GP -1512009728,1512011519,GF -1512011520,1512011775,FR -1512011776,1512012543,GF -1512012544,1512012799,FR -1512012800,1512014335,GF -1512014336,1512014591,FR -1512014592,1512015103,GF -1512015104,1512015615,FR -1512015616,1512016639,GF -1512016640,1512017407,FR -1512017408,1512018431,GF -1512018432,1512018687,FR -1512018688,1512019967,GF -1512019968,1512022015,FR -1512022016,1512022527,GF -1512022528,1512023295,FR -1512023296,1512023551,GF -1512023552,1512024063,FR -1512024064,1512025599,GF +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,1512027135,GF -1512027136,1512027903,FR -1512027904,1512028159,GF +1512025856,1512028159,GF 1512028160,1512030207,FR 1512030208,1512046591,YT 1512046592,1512767487,FR -1512767488,1512772095,RE +1512767488,1512769023,RE +1512769024,1512769279,FR +1512769280,1512771071,RE +1512771072,1512771327,FR +1512771328,1512772095,RE 1512772096,1512772863,FR -1512772864,1512779007,RE +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 +1512777216,1512777471,FR +1512777472,1512779007,RE 1512779008,1512779263,FR 1512779264,1512780031,RE 1512780032,1512780287,FR -1512780288,1512780543,RE -1512780544,1512780799,FR -1512780800,1512781823,RE +1512780288,1512781823,RE 1512781824,1512782847,FR -1512782848,1512783871,RE -1512783872,1512784639,FR -1512784640,1512785919,RE -1512785920,1512786431,FR -1512786432,1512788991,RE +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,1512791551,RE +1512789248,1512791039,RE +1512791040,1512791295,FR +1512791296,1512791551,RE 1512791552,1512792063,FR -1512792064,1512793087,RE -1512793088,1512793343,FR -1512793344,1512798207,RE +1512792064,1512798207,RE 1512798208,1512799231,FR -1512799232,1512800255,RE -1512800256,1512801791,MQ -1512801792,1512802047,FR -1512802048,1512809471,MQ -1512809472,1512810495,FR -1512810496,1512814079,MQ -1512814080,1512814335,FR -1512814336,1512816383,MQ -1512816384,1512816639,FR -1512816640,1512817407,GP -1512817408,1512817663,FR -1512817664,1512819711,GP -1512819712,1512819967,FR -1512819968,1512824063,GP +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,1512828159,GP -1512828160,1512828415,FR -1512828416,1512828927,GP -1512828928,1512829439,FR -1512829440,1512829695,GP -1512829696,1512829951,FR -1512829952,1512831743,GP -1512831744,1512831999,FR -1512832000,1512833023,GP -1512833024,1514110975,FR -1514110976,1514111999,GP -1514112000,1514112255,FR -1514112256,1514113535,GP -1514113536,1514113791,FR -1514113792,1514118655,GP -1514118656,1514119423,FR -1514119424,1514119935,GP -1514119936,1514120191,FR -1514120192,1514123007,GP -1514123008,1514123263,FR -1514123264,1514126335,GP -1514126336,1514126591,FR -1514126592,1514126847,GP -1514126848,1514127359,FR -1514127360,1514127615,RE -1514127616,1514127871,FR -1514127872,1514131967,RE -1514131968,1514132479,FR -1514132480,1514133503,RE -1514133504,1514134271,FR -1514134272,1514135295,RE -1514135296,1514135551,FR -1514135552,1514142207,RE -1514142208,1514142463,FR -1514142464,1514142719,RE -1514142720,1514142975,FR -1514142976,1514143743,RE +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 +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 +1514131968,1514132223,FR +1514132224,1514134015,RE +1514134016,1514134271,FR +1514134272,1514139391,RE +1514139392,1514139647,FR +1514139648,1514143743,RE 1514143744,1515192639,FR 1515192640,1515192655,EU 1515192656,1518338047,FR -1518338048,1518365183,SE -1518365184,1518365695,DE -1518365696,1518365951,SE -1518365952,1518366207,DE -1518366208,1518367231,SE -1518367232,1518367743,DE -1518367744,1518368255,SE -1518368256,1518368511,DE -1518368512,1518368767,SE -1518368768,1518369279,DE -1518369280,1518370303,SE -1518370304,1518370559,DE +1518338048,1518362623,SE +1518362624,1518362879,DE +1518362880,1518363135,SE +1518363136,1518363391,DE +1518363392,1518364415,SE +1518364416,1518364927,DE +1518364928,1518365311,SE +1518365312,1518366463,DE +1518366464,1518366719,SE +1518366720,1518367743,DE +1518367744,1518368767,SE +1518368768,1518369023,DE +1518369024,1518369791,SE +1518369792,1518370559,DE 1518370560,1518452735,SE 1518452736,1518460927,AT -1518460928,1518501887,SE -1518501888,1518503935,EE -1518503936,1518508031,LT +1518460928,1518502911,SE +1518502912,1518503935,EE +1518503936,1518504959,LT +1518504960,1518505983,SE +1518505984,1518508031,LT 1518508032,1518510079,SE -1518510080,1518514175,LV -1518514176,1518555135,SE -1518555136,1518557183,NL -1518557184,1518731775,SE -1518731776,1518732287,DE -1518732288,1518732799,SE -1518732800,1518733311,DE -1518733312,1518733823,SE -1518733824,1518736383,DE -1518736384,1518737919,SE +1518510080,1518516223,LV +1518516224,1518551039,SE +1518551040,1518559231,NL +1518559232,1518563327,SE +1518563328,1518565375,NL +1518565376,1518733823,SE +1518733824,1518734335,DE +1518734336,1518734847,SE +1518734848,1518735359,DE +1518735360,1518736383,SE +1518736384,1518737407,DE +1518737408,1518737919,SE 1518737920,1518738431,DE -1518738432,1518742527,SE +1518738432,1518740479,SE +1518740480,1518740991,DE +1518740992,1518742527,SE 1518742528,1518743551,DE 1518743552,1518744575,SE 1518744576,1518745087,DE -1518745088,1518864895,SE -1518864896,1518865407,DE +1518745088,1518746111,SE +1518746112,1518746623,DE +1518746624,1518863871,SE +1518863872,1518865407,DE 1518865408,1518865919,SE -1518865920,1518866687,DE -1518866688,1518867455,SE -1518867456,1518873599,DE -1518873600,1518874111,SE -1518874112,1518874367,DE +1518865920,1518866175,DE +1518866176,1518866431,SE +1518866432,1518866687,DE +1518866688,1518867967,SE +1518867968,1518868479,DE +1518868480,1518869503,SE +1518869504,1518870015,DE +1518870016,1518870271,SE +1518870272,1518870527,DE +1518870528,1518871295,SE +1518871296,1518874367,DE 1518874368,1518874623,SE -1518874624,1518876671,DE -1518876672,1518877695,SE -1518877696,1518879999,DE -1518880000,1518881023,SE -1518881024,1518881791,DE -1518881792,1518882559,SE -1518882560,1518883327,DE +1518874624,1518875903,DE +1518875904,1518876159,SE +1518876160,1518876415,DE +1518876416,1518876671,SE +1518876672,1518877695,DE +1518877696,1518878463,SE +1518878464,1518878975,DE +1518878976,1518879231,SE +1518879232,1518879743,DE +1518879744,1518880767,SE +1518880768,1518881791,DE +1518881792,1518882815,SE +1518882816,1518883327,DE 1518883328,1518883839,SE -1518883840,1518885887,DE -1518885888,1518890495,SE -1518890496,1518892031,DE -1518892032,1518893055,SE -1518893056,1518896127,DE -1518896128,1518899199,SE -1518899200,1518900223,DE -1518900224,1518901759,SE -1518901760,1518902271,DE -1518902272,1518902783,SE -1518902784,1518903039,DE -1518903040,1518904319,SE -1518904320,1518905343,DE -1518905344,1518905855,SE -1518905856,1518906367,DE -1518906368,1518907391,SE -1518907392,1518909439,DE -1518909440,1518911999,SE -1518912000,1518912255,DE -1518912256,1518913023,SE -1518913024,1518913279,DE -1518913280,1518914047,SE -1518914048,1518914303,DE -1518914304,1518914559,SE -1518914560,1518915583,DE -1518915584,1518917631,SE -1518917632,1518919679,DE -1518919680,1518920191,SE -1518920192,1518920703,DE -1518920704,1518922751,SE -1518922752,1518924799,DE -1518924800,1518926335,SE -1518926336,1518926591,DE -1518926592,1518964991,SE -1518964992,1518965119,HR -1518965120,1519149055,SE -1519149056,1519157247,RU -1519157248,1519452159,SE +1518883840,1518884351,DE +1518884352,1518884863,SE +1518884864,1518885119,DE +1518885120,1518885887,SE +1518885888,1518886911,DE +1518886912,1518888447,SE +1518888448,1518891007,DE +1518891008,1518891519,SE +1518891520,1518892031,DE +1518892032,1518892287,SE +1518892288,1518892799,DE +1518892800,1518893055,SE +1518893056,1518893567,DE +1518893568,1518894079,SE +1518894080,1518894591,DE +1518894592,1518895615,SE +1518895616,1518895871,DE +1518895872,1518896639,SE +1518896640,1518897663,DE +1518897664,1518898175,SE +1518898176,1518900223,DE +1518900224,1518900991,SE +1518900992,1518902783,DE +1518902784,1518903295,SE +1518903296,1518903807,DE +1518903808,1518904319,SE +1518904320,1518904831,DE +1518904832,1518905343,SE +1518905344,1518906367,DE +1518906368,1518907903,SE +1518907904,1518909439,DE +1518909440,1518909951,SE +1518909952,1518910463,DE +1518910464,1518910719,SE +1518910720,1518910975,DE +1518910976,1518911487,SE +1518911488,1518911743,DE +1518911744,1518912511,SE +1518912512,1518913023,DE +1518913024,1518913535,SE +1518913536,1518914047,DE +1518914048,1518914303,SE +1518914304,1518914559,DE +1518914560,1518914815,SE +1518914816,1518916351,DE +1518916352,1518919679,SE +1518919680,1518920703,DE +1518920704,1518921215,SE +1518921216,1518921727,DE +1518921728,1518921983,SE +1518921984,1518922495,DE +1518922496,1518922751,SE +1518922752,1518923263,DE +1518923264,1518924287,SE +1518924288,1518925311,DE +1518925312,1518925567,SE +1518925568,1518925823,DE +1518925824,1518927359,SE +1518927360,1518927871,DE +1518927872,1518964735,SE +1518964736,1518964991,HR +1518964992,1518965503,SE +1518965504,1518965759,HR +1518965760,1518966015,SE +1518966016,1518966271,HR +1518966272,1518966527,SE +1518966528,1518966783,HR +1518966784,1518968063,SE +1518968064,1518968319,HR +1518968320,1518968831,SE +1518968832,1518969087,HR +1518969088,1519452159,SE 1519452160,1519517695,NL 1519517696,1519583231,AT 1519583232,1519648767,IT 1519648768,1519714303,SA 1519714304,1519779839,NO 1519779840,1519910911,RU -1519910912,1519926015,GB -1519926016,1519926271,US -1519926272,1519927295,GB -1519927296,1519927807,NL -1519927808,1519929343,GB +1519910912,1519927615,GB +1519927616,1519927679,NL +1519927680,1519929343,GB 1519929344,1519931391,NL 1519931392,1519943679,GB 1519943680,1519976447,AT -1519976448,1519980223,DE -1519980224,1519980255,GB -1519980256,1520009215,DE +1519976448,1519980159,DE +1519980160,1519980191,GB +1519980192,1519980199,DE +1519980200,1519980287,GB +1519980288,1520009215,DE 1520009216,1520041983,SY 1520041984,1520074751,RU 1520074752,1520107519,BG @@ -31158,7 +27888,9 @@ 1522270208,1522401279,RU 1522401280,1522532351,EE 1522532352,1524629503,GB -1524629504,1525678079,SE +1524629504,1524886783,SE +1524886784,1524887039,DK +1524887040,1525678079,SE 1525678080,1526726655,GB 1526726656,1531183103,DE 1531183104,1531445247,FR @@ -31232,12 +27964,14 @@ 1533478912,1533480959,RS 1533480960,1533483007,NL 1533483008,1533485055,AM -1533485056,1533486239,GB -1533486240,1533486271,SE -1533486272,1533486303,GB -1533486304,1533486335,SE -1533486336,1533487103,GB -1533487104,1533489151,FR +1533485056,1533486079,GB +1533486080,1533486207,SE +1533486208,1533486335,GB +1533486336,1533486591,NO +1533486592,1533487103,GB +1533487104,1533487359,FR +1533487360,1533487615,US +1533487616,1533489151,FR 1533489152,1533491199,ES 1533491200,1533493247,AM 1533493248,1533499391,RU @@ -31263,31 +27997,35 @@ 1533640704,1533669375,RU 1533669376,1533671423,DE 1533671424,1533673471,FI -1533673472,1533677567,GB +1533673472,1533677567,DE 1533677568,1533679615,ES -1533679616,1533681663,GB +1533679616,1533681663,PL 1533681664,1533689855,IQ -1533689856,1533702143,GB +1533689856,1533698047,IR +1533698048,1533702143,JO 1533702144,1533704191,RU -1533704192,1533712383,DE -1533712384,1533713407,GB -1533713408,1533722623,DE -1533722624,1533724671,GB +1533704192,1533722623,DE +1533722624,1533724671,SE 1533724672,1533726719,RU 1533726720,1533728767,CY 1533728768,1533730815,FR 1533730816,1533732863,NL 1533732864,1533734911,RU 1533734912,1533739007,CZ -1533739008,1533847551,GB +1533739008,1533804543,RU +1533804544,1533837311,DE +1533837312,1533845503,IR +1533845504,1533847551,GB 1533847552,1533849599,RU 1533849600,1533851647,EE 1533851648,1533853695,CH -1533853696,1533878271,GB +1533853696,1533870079,IQ +1533870080,1533874175,GB +1533874176,1533878271,DE 1533878272,1533880319,CZ 1533880320,1533882367,GB 1533882368,1533886463,IT -1533886464,1533894655,GB +1533886464,1533894655,RU 1533894656,1533896703,ES 1533896704,1533900799,PT 1533900800,1533902847,FR @@ -31304,7 +28042,9 @@ 1533933568,1533935615,GI 1533935616,1534066687,GB 1534066688,1534328831,AT -1534328832,1534459903,ES +1534328832,1534363903,ES +1534363904,1534364159,PT +1534364160,1534459903,ES 1534459904,1534590975,AT 1534590976,1534656511,HU 1534656512,1534720003,FR @@ -31329,15 +28069,13 @@ 1534849024,1534853119,NL 1534853120,1534918655,UA 1534918656,1534984191,GB -1534984192,1534985727,ES -1534985728,1534986239,SE -1534986240,1535049727,ES +1534984192,1535049727,ES 1535049728,1535115263,SK 1535115264,1535197183,AT -1535197184,1535205375,SE -1535205376,1535221759,AT -1535221760,1535238143,SE -1535238144,1535242239,AT +1535197184,1535213567,SE +1535213568,1535229951,AT +1535229952,1535238655,SE +1535238656,1535242239,AT 1535242240,1535246335,SE 1535246336,1535377407,AT 1535377408,1535442943,GR @@ -31359,8 +28097,10 @@ 1535631360,1535635455,GB 1535635456,1535639551,AZ 1535639552,1535672319,GB -1535672320,1535705343,DE -1535705344,1535721471,CH +1535672320,1535706111,DE +1535706112,1535715839,CH +1535715840,1535716351,DE +1535716352,1535721471,CH 1535721472,1535721727,DE 1535721728,1535737855,CH 1535737856,1535770623,HU @@ -31369,7 +28109,9 @@ 1535836160,1535868927,HU 1535868928,1535901695,BG 1535901696,1535934463,GR -1535934464,1535963391,KW +1535934464,1535959551,KW +1535959552,1535959807,US +1535959808,1535963391,KW 1535963392,1535963647,US 1535963648,1535967231,KW 1535967232,1535999999,AT @@ -31379,12 +28121,14 @@ 1536040960,1536045055,GB 1536045056,1536045311,IQ 1536045312,1536045567,LB -1536045568,1536049151,DE +1536045568,1536047103,DE +1536047104,1536047359,LB +1536047360,1536049151,DE 1536049152,1536051199,IT 1536051200,1536057343,RU 1536057344,1536061439,IE 1536061440,1536065535,SE -1536065536,1536065791,GB +1536065536,1536065791,DE 1536065792,1536066303,LU 1536066304,1536066815,NL 1536066816,1536067071,RU @@ -31494,20 +28238,12 @@ 1538981888,1538990079,BY 1538990080,1538998271,CZ 1538998272,1539006463,AD -1539006464,1539006719,AL -1539006720,1539006975,US -1539006976,1539011327,AL -1539011328,1539011583,DE -1539011584,1539011839,AL -1539011840,1539012095,RS -1539012096,1539014655,AL +1539006464,1539014655,AL 1539014656,1539022847,RS 1539022848,1539031039,LT 1539031040,1539039231,IT 1539039232,1539047423,PL -1539047424,1539047807,IT -1539047808,1539047935,HR -1539047936,1539055615,IT +1539047424,1539055615,IT 1539055616,1539063807,LV 1539063808,1539071999,FR 1539072000,1539080191,PL @@ -31526,9 +28262,7 @@ 1539135488,1539136255,GB 1539136256,1539136511,US 1539136512,1539137535,GB -1539137536,1539137791,NL -1539137792,1539138047,PL -1539138048,1539139583,NL +1539137536,1539139583,NL 1539139584,1539141631,FR 1539141632,1539143679,RU 1539143680,1539145727,NO @@ -31915,8 +28649,7 @@ 1539567616,1539568127,DE 1539568128,1539568639,NL 1539568640,1539569151,UA -1539569152,1539569407,LV -1539569408,1539569663,EE +1539569152,1539569663,EE 1539569664,1539570175,UA 1539570176,1539570687,PL 1539570688,1539571711,RU @@ -32818,8 +29551,11 @@ 1540217856,1540218879,GB 1540218880,1540219903,RU 1540219904,1540220927,PL -1540220928,1540221951,NL -1540221952,1540223999,RU +1540220928,1540221441,NL +1540221442,1540221569,US +1540221570,1540221825,NL +1540221826,1540222081,US +1540222082,1540223999,RU 1540224000,1540225023,PL 1540225024,1540226047,GB 1540226048,1540227071,RU @@ -32949,7 +29685,9 @@ 1540299776,1540300287,KZ 1540300288,1540300799,RU 1540300800,1540301311,DK -1540301312,1540301823,IL +1540301312,1540301568,IL +1540301569,1540301569,A2 +1540301570,1540301823,IL 1540301824,1540302847,GB 1540302848,1540303871,RU 1540303872,1540304895,UA @@ -33297,8 +30035,7 @@ 1540428288,1540428543,SI 1540428544,1540428799,FR 1540428800,1540429055,PL -1540429056,1540429311,BG -1540429312,1540429823,RO +1540429568,1540429823,RO 1540429824,1540430079,UA 1540430080,1540430335,FR 1540430336,1540430591,DE @@ -33315,7 +30052,8 @@ 1540433152,1540433407,GB 1540433408,1540433663,AM 1540433664,1540433919,DK -1540433920,1540434431,GB +1540433920,1540434175,GB +1540434176,1540434431,CH 1540434432,1540434687,DE 1540434688,1540434943,GB 1540434944,1540435199,FR @@ -33366,7 +30104,6 @@ 1540448256,1540448511,UA 1540448512,1540448767,IT 1540448768,1540449023,CH -1540449024,1540449279,DE 1540449280,1540449535,UA 1540449536,1540449791,CZ 1540449792,1540450047,RO @@ -33410,7 +30147,6 @@ 1540460800,1540461055,SI 1540461056,1540461311,BG 1540461312,1540461823,RU -1540461824,1540462079,RO 1540462080,1540462335,SI 1540462336,1540462591,UA 1540462592,1540463103,PL @@ -33905,7 +30641,7 @@ 1540702464,1540702719,PT 1540702720,1540702975,DK 1540702976,1540703231,RU -1540703232,1540703487,GB +1540703232,1540703487,DE 1540703488,1540703743,NL 1540703744,1540703999,DK 1540704000,1540704255,PL @@ -34163,7 +30899,9 @@ 1540860928,1540861951,KZ 1540861952,1540862975,BY 1540862976,1540865023,GB -1540865024,1540872191,RU +1540865024,1540867071,RU +1540867072,1540868095,KZ +1540868096,1540872191,RU 1540872192,1540873215,BG 1540873216,1540875263,RU 1540875264,1540876287,PL @@ -34535,7 +31273,6 @@ 1541000192,1541000447,PL 1541000448,1541000703,BG 1541000704,1541000959,DE -1541000960,1541001215,RU 1541001216,1541001471,PL 1541001472,1541001727,SE 1541001728,1541001983,NL @@ -34752,7 +31489,6 @@ 1541161984,1541162239,BE 1541162240,1541162495,RU 1541162496,1541162751,GB -1541162752,1541163007,DE 1541163008,1541163263,RO 1541163264,1541163519,PL 1541163520,1541163775,DE @@ -35257,7 +31993,6 @@ 1541383424,1541383679,LV 1541383680,1541383935,SI 1541383936,1541384447,PL -1541384448,1541384703,LV 1541384704,1541384959,RU 1541384960,1541385215,PL 1541385216,1541385471,NL @@ -35378,8 +32113,8 @@ 1541426176,1541426687,RU 1541426688,1541427199,UA 1541427200,1541428223,RU -1541428224,1541428735,UA -1541428736,1541429247,RU +1541428224,1541428991,UA +1541428992,1541429247,RU 1541429248,1541429759,FI 1541429760,1541430271,CZ 1541430272,1541430783,LT @@ -36012,7 +32747,6 @@ 1541831680,1541832191,SA 1541832192,1541833983,SE 1541833984,1541834239,RU -1541834240,1541834495,LV 1541834496,1541834751,RU 1541835776,1541836287,CH 1541836288,1541836543,AT @@ -36182,7 +32916,7 @@ 1541927168,1541927679,PL 1541927680,1541927935,DE 1541927936,1541929983,PL -1541929984,1541931007,TJ +1541929984,1541931007,RU 1541931008,1541932031,UA 1541932032,1541932543,PL 1541932544,1541935103,RU @@ -37435,12 +34169,9 @@ 1546076160,1546080255,RU 1546080256,1546084351,AZ 1546084352,1546088447,RU -1546088448,1546092287,GB -1546092288,1546092543,ZA +1546088448,1546092543,GB 1546092544,1546096639,RU -1546096640,1546097919,IT -1546097920,1546098175,GB -1546098176,1546100735,IT +1546096640,1546100735,IT 1546100736,1546104831,AT 1546104832,1546108927,IE 1546108928,1546113023,IM @@ -37509,28 +34240,31 @@ 1546387456,1546518527,TR 1546518528,1546649599,KZ 1546649600,1546665983,SA -1546665984,1546674175,GB -1546674176,1546674431,AE -1546674432,1546679839,GB +1546665984,1546679839,GB 1546679840,1546679840,HR 1546679841,1546682367,GB 1546682368,1546698751,BE 1546698752,1546715135,NL 1546715136,1546731519,LV -1546731520,1546732543,RE -1546732544,1546733567,FR -1546733568,1546735359,RE -1546735360,1546735615,FR -1546735616,1546736127,RE -1546736128,1546736639,FR -1546736640,1546737663,RE -1546737664,1546739711,FR -1546739712,1546741503,GP -1546741504,1546741631,FR -1546741632,1546742015,GP -1546742016,1546742527,MQ -1546742528,1546743807,GF -1546743808,1546747903,MQ +1546731520,1546733567,RE +1546733568,1546734079,FR +1546734080,1546734591,RE +1546734592,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 +1546743552,1546743807,GF +1546743808,1546744319,FR +1546744320,1546744831,MQ +1546744832,1546747647,FR +1546747648,1546747903,MQ 1546747904,1546764287,RU 1546764288,1546780671,UA 1546780672,1546797055,IR @@ -37605,8 +34339,8 @@ 1547612160,1547616255,IR 1547616256,1547620351,DK 1547620352,1547623167,JE -1547623168,1547623679,NG -1547623680,1547624447,JE +1547623168,1547623423,NG +1547623424,1547624447,JE 1547624448,1547628543,CZ 1547628544,1547632639,BG 1547632640,1547636735,TR @@ -37626,9 +34360,7 @@ 1547694080,1547698175,HU 1547698176,1547846143,NL 1547846144,1547846335,FR -1547846336,1548156995,NL -1548156996,1548156996,SE -1548156997,1548158599,NL +1547846336,1548158599,NL 1548158600,1548158607,GB 1548158608,1548159231,NL 1548159232,1548159235,ES @@ -37644,59 +34376,96 @@ 1550319616,1550581759,CH 1550581760,1550843903,NL 1550843904,1550974975,UA -1550974976,1551022847,RO -1551022848,1551036415,MD -1551036416,1551039999,RO +1550974976,1551011839,RO +1551011840,1551015935,MD +1551015936,1551021567,RO +1551021568,1551023103,MD +1551023104,1551024127,RO +1551024128,1551030271,MD +1551030272,1551034623,RO +1551034624,1551034879,MD +1551034880,1551039999,RO 1551040000,1551040255,MD -1551040256,1551056895,RO -1551056896,1551066111,MD -1551066112,1551076863,RO +1551040256,1551042559,RO +1551042560,1551043583,MD +1551043584,1551046655,RO +1551046656,1551046911,MD +1551046912,1551056895,RO +1551056896,1551058943,MD +1551058944,1551060991,RO +1551060992,1551065599,MD +1551065600,1551071231,RO +1551071232,1551073279,MD +1551073280,1551076863,RO 1551076864,1551077119,MD -1551077120,1551081471,RO -1551081472,1551097855,MD -1551097856,1551101951,RO -1551101952,1551106047,MD +1551077120,1551077375,RO +1551077376,1551081471,MD +1551081472,1551083519,RO +1551083520,1551089663,MD +1551089664,1551090687,RO +1551090688,1551091711,MD +1551091712,1551106047,RO 1551106048,1551237119,DE 1551237120,1551368191,GR 1551368192,1551499263,NL -1551499264,1551531519,EU -1551531520,1551531775,GB -1551531776,1551553023,EU -1551553024,1551553279,GB -1551553280,1551630335,EU +1551499264,1551630335,EU 1551630336,1551892479,RU 1551892480,1553989631,FR -1553989632,1553994239,MQ -1553994240,1553994495,FR -1553994496,1553994751,MQ -1553994752,1553995007,FR -1553995008,1553998335,MQ -1553998336,1553998591,FR -1553998592,1554006015,MQ +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 +1554005248,1554005503,FR +1554005504,1554006015,MQ 1554006016,1554006271,FR -1554006272,1554006527,GP -1554006528,1554007039,FR -1554007040,1554011391,GP -1554011392,1554011647,FR -1554011648,1554013183,GP +1554006272,1554007039,GP +1554007040,1554007295,FR +1554007296,1554008063,GP +1554008064,1554008831,FR +1554008832,1554013183,GP 1554013184,1554013439,FR -1554013440,1554016255,GP -1554016256,1554016511,FR -1554016512,1554019583,GP -1554019584,1554019839,FR -1554019840,1554030591,GP -1554030592,1554032639,MQ -1554032640,1554032895,FR -1554032896,1554034431,MQ +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 +1554032384,1554032639,FR +1554032640,1554034431,MQ 1554034432,1554034687,FR -1554034688,1554038783,MQ -1554038784,1554046975,RE -1554046976,1554047231,FR -1554047232,1554049791,RE -1554049792,1554050303,FR -1554050304,1554053119,RE -1554053120,1554053375,FR -1554053376,1554054911,RE +1554034688,1554036735,MQ +1554036736,1554036991,FR +1554036992,1554038015,MQ +1554038016,1554038271,FR +1554038272,1554038783,MQ +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 @@ -37711,9 +34480,7 @@ 1559271424,1559273471,FI 1559273472,1559281663,CZ 1559281664,1559289855,RU -1559289856,1559296383,SK -1559296384,1559296511,AE -1559296512,1559298047,SK +1559289856,1559298047,SK 1559298048,1559306239,RU 1559306240,1559314431,JO 1559314432,1559322623,GE @@ -37762,24 +34529,23 @@ 1559838720,1559855103,UA 1559855104,1559887871,HU 1559887872,1559920639,PT -1559920640,1559923711,LU -1559923712,1559923967,ES -1559923968,1559924693,LU +1559920640,1559924693,LU 1559924694,1559924694,GB -1559924695,1559925759,LU -1559925760,1559926271,DE -1559926272,1559934975,LU -1559934976,1559937023,DE -1559937024,1559940095,LU -1559940096,1559941119,DE -1559941120,1559941631,LU +1559924695,1559933183,LU +1559933184,1559933439,DE +1559933440,1559934463,LU +1559934464,1559936511,DE +1559936512,1559937535,LU +1559937536,1559938303,DE +1559938304,1559941631,LU 1559941632,1559943167,DE 1559943168,1559947775,LU 1559947776,1559948287,DE -1559948288,1559948799,LU -1559948800,1559949311,DE -1559949312,1559951871,LU -1559951872,1559953407,DE +1559948288,1559951103,LU +1559951104,1559951359,DE +1559951360,1559951871,LU +1559951872,1559952895,DE +1559952896,1559953407,LU 1559953408,1559986175,MT 1559986176,1560018943,IE 1560018944,1560051711,DE @@ -37790,16 +34556,10 @@ 1560182784,1560215551,SE 1560215552,1560281087,RU 1560281088,1562378239,FR -1562378240,1564389631,IT -1564389632,1564389887,US -1564389888,1564474111,IT -1564474112,1564474367,US -1564474368,1564999679,IT +1562378240,1564999679,IT 1564999680,1565523967,UA 1565523968,1565655039,RU -1565655040,1565746147,AT -1565746148,1565746151,NL -1565746152,1565786111,AT +1565655040,1565786111,AT 1565786112,1565917183,BY 1565917184,1566048255,RS 1566048256,1566056447,RU @@ -37897,7 +34657,9 @@ 1566388224,1566390271,HU 1566390272,1566392319,LT 1566392320,1566394367,ES -1566394368,1566396415,NO +1566394368,1566394529,NO +1566394530,1566394534,DK +1566394535,1566396415,NO 1566396416,1566398463,GB 1566398464,1566400511,RU 1566400512,1566402559,NO @@ -37970,8 +34732,9 @@ 1566554112,1566556159,UA 1566556160,1566558207,RU 1566558208,1566560255,JO -1566560256,1566562303,SM -1566562304,1566564351,IT +1566560256,1566560767,IT +1566560768,1566561023,SM +1566561024,1566564351,IT 1566564352,1566566399,IS 1566566400,1566568447,FR 1566568448,1566570495,KZ @@ -37995,56 +34758,67 @@ 1567555584,1567621119,AT 1567621120,1567716607,RO 1567716608,1567716863,MD -1567716864,1567883775,RO +1567716864,1567763521,RO +1567763522,1567763522,EU +1567763523,1567763542,RO +1567763543,1567763543,EU +1567763544,1567883775,RO 1567883776,1567884031,MD -1567884032,1567889407,RO -1567889408,1567891455,MD -1567891456,1567911935,RO -1567911936,1567916031,MD +1567884032,1567890431,RO +1567890432,1567890687,MD +1567890688,1567891455,RO +1567891456,1567895551,MD +1567895552,1567913983,RO +1567913984,1567916031,MD 1567916032,1567932415,RO -1567932416,1567941119,MD -1567941120,1568178175,RO +1567932416,1567940607,MD +1567940608,1567943935,RO +1567943936,1567944191,MD +1567944192,1568178175,RO 1568178176,1568210943,RU 1568210944,1568243711,GB 1568243712,1568245759,GP -1568245760,1568246527,FR +1568245760,1568246015,FR +1568246016,1568246527,GF 1568246528,1568247039,GP -1568247040,1568247295,GF -1568247296,1568247551,FR +1568247040,1568247551,GF 1568247552,1568248831,GP -1568248832,1568249087,FR -1568249088,1568249343,MQ -1568249344,1568250111,FR -1568250112,1568250879,GP -1568250880,1568251007,MQ -1568251008,1568251135,FR -1568251136,1568253951,MQ -1568253952,1568254463,GP +1568248832,1568249087,MQ +1568249088,1568249855,FR +1568249856,1568250879,GP +1568250880,1568251135,MQ +1568251136,1568251391,FR +1568251392,1568251647,GP +1568251648,1568251903,FR +1568251904,1568253951,MQ +1568253952,1568254079,FR +1568254080,1568254463,GP 1568254464,1568254975,FR -1568254976,1568257791,GP -1568257792,1568258303,MQ -1568258304,1568259071,FR -1568259072,1568260351,MQ -1568260352,1568261119,FR +1568254976,1568255743,GP +1568255744,1568255999,FR +1568256000,1568257791,GP +1568257792,1568258047,MQ +1568258048,1568258559,FR +1568258560,1568259071,GF +1568259072,1568260223,MQ +1568260224,1568261119,FR 1568261120,1568264191,MQ -1568264192,1568266239,GP -1568266240,1568266495,FR -1568266496,1568267519,GP -1568267520,1568268543,FR -1568268544,1568269311,GF +1568264192,1568268287,GP +1568268288,1568269311,FR 1568269312,1568269823,MQ -1568269824,1568270079,FR -1568270080,1568270335,MQ -1568270336,1568270847,FR -1568270848,1568271359,GP -1568271360,1568271615,FR -1568271616,1568272639,GP +1568269824,1568270847,FR +1568270848,1568271103,GP +1568271104,1568271359,FR +1568271360,1568272639,GP 1568272640,1568273407,GF -1568273408,1568275967,MQ -1568275968,1568276479,FR -1568276480,1568292939,DE -1568292940,1568292941,GB -1568292942,1568309247,DE +1568273408,1568274687,MQ +1568274688,1568274943,FR +1568274944,1568275199,MQ +1568275200,1568275455,FR +1568275456,1568275967,MQ +1568275968,1568276223,FR +1568276224,1568276479,MQ +1568276480,1568309247,DE 1568309248,1568342015,RO 1568342016,1568374783,BG 1568374784,1568440319,RU @@ -38092,7 +34866,9 @@ 1570627584,1570635775,RU 1570635776,1570644991,FR 1570644992,1570645247,GB -1570645248,1570652159,FR +1570645248,1570647807,FR +1570647808,1570648063,GB +1570648064,1570652159,FR 1570652160,1570655999,SE 1570656000,1570656255,GB 1570656256,1570668543,SE @@ -38122,7 +34898,8 @@ 1571443456,1571443711,UA 1571443712,1571531263,CZ 1571531264,1571531775,UA -1571531776,1571534847,CZ +1571531776,1571534335,CZ +1571534336,1571534847,RU 1571534848,1571535103,LV 1571535104,1571551231,CZ 1571551232,1571552255,UA @@ -38167,26 +34944,28 @@ 1571790848,1571794943,PL 1571794944,1571799039,NL 1571799040,1571815423,UA -1571815424,1571815935,RE -1571815936,1571816447,FR -1571816448,1571817983,RE +1571815424,1571817215,FR +1571817216,1571817983,RE 1571817984,1571818239,FR -1571818240,1571822079,RE -1571822080,1571822335,FR -1571822336,1571823359,RE -1571823360,1571823487,FR -1571823488,1571825919,RE -1571825920,1571826175,FR -1571826176,1571827967,RE -1571827968,1571828223,FR -1571828224,1571829247,RE -1571829248,1571829759,FR -1571829760,1571831807,RE +1571818240,1571818751,RE +1571818752,1571820543,FR +1571820544,1571821311,RE +1571821312,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 1571831808,1571848191,DK 1571848192,1571864575,RU 1571864576,1571880959,PL 1571880960,1571897343,RU -1571897344,1571913727,NO +1571898368,1571898623,NO 1571913728,1571930111,GE 1571930112,1571946495,LV 1571946496,1571962879,SA @@ -38194,7 +34973,9 @@ 1571979264,1571995647,DK 1571995648,1572012031,UA 1572012032,1572028415,SE -1572028416,1572044799,RU +1572028416,1572028927,RU +1572028928,1572029183,UA +1572029184,1572044799,RU 1572044800,1572061183,IT 1572061184,1572077567,PL 1572077568,1572093951,RU @@ -38255,7 +35036,8 @@ 1572462592,1572466687,LB 1572466688,1572470783,EE 1572470784,1572474879,DE -1572474880,1572483071,GB +1572474880,1572475135,ZA +1572475136,1572483071,GB 1572483072,1572487167,RU 1572487168,1572491263,RS 1572491264,1572495359,IT @@ -38269,15 +35051,15 @@ 1572524032,1572528127,GE 1572528128,1572532223,RU 1572532224,1572536319,IT -1572536320,1572537599,JE -1572537600,1572537855,GB -1572537856,1572538367,JE +1572536320,1572538367,JE 1572538368,1572540415,NL 1572540416,1572542463,GB 1572542464,1572544511,IT 1572544512,1572544575,IQ 1572544576,1572544767,US -1572544768,1572546559,IQ +1572544768,1572545279,IQ +1572545280,1572545535,US +1572545536,1572546559,IQ 1572546560,1572548607,FR 1572548608,1572550655,NL 1572550656,1572552703,DE @@ -38291,7 +35073,9 @@ 1572567040,1572569087,RU 1572569088,1572571135,NL 1572571136,1572573183,RO -1572573184,1572574975,GG +1572573184,1572574463,GG +1572574464,1572574719,GB +1572574720,1572574975,GG 1572574976,1572575231,GB 1572575232,1572577279,RU 1572577280,1572579327,AM @@ -38352,10 +35136,11 @@ 1572702208,1572704255,IT 1572704256,1572706303,RU 1572706304,1572708351,DE -1572708352,1572708607,GB -1572708608,1572709375,GG +1572708352,1572708863,GB +1572708864,1572709375,GG 1572709376,1572709887,GB -1572709888,1572710399,GG +1572709888,1572710143,GG +1572710144,1572710399,GB 1572710400,1572712447,DE 1572712448,1572714495,ES 1572714496,1572716543,IT @@ -38459,9 +35244,7 @@ 1578614528,1578631167,FR 1578631168,1578663935,RO 1578663936,1578762239,RU -1578762240,1578768959,BG -1578768960,1578768991,CY -1578768992,1578795007,BG +1578762240,1578795007,BG 1578795008,1578827775,RU 1578827776,1578860543,UA 1578860544,1578893311,HU @@ -38483,16 +35266,8 @@ 1580048384,1580064767,RU 1580064768,1580072959,DE 1580072960,1580134591,PT -1580134592,1580134655,ES -1580134656,1580134663,PT -1580134664,1580134667,ES -1580134668,1580134727,PT -1580134728,1580134735,ES -1580134736,1580134755,PT -1580134756,1580134759,ES -1580134760,1580134766,PT -1580134767,1580134771,ES -1580134772,1580138495,PT +1580134592,1580134911,ES +1580134912,1580138495,PT 1580138496,1580204031,IT 1580204032,1580335103,RO 1580335104,1580466175,RU @@ -38506,8 +35281,8 @@ 1581809664,1581826047,BG 1581826048,1581842431,GB 1581842432,1581858815,BG -1581858816,1581867007,IT -1581867008,1581869055,US +1581858816,1581868287,IT +1581868288,1581869055,US 1581869056,1581875199,IT 1581875200,1581891583,TR 1581891584,1581907967,RU @@ -38523,12 +35298,8 @@ 1582029902,1582039039,NL 1582039040,1582055423,BH 1582055424,1582071807,UA -1582071808,1582084607,ES -1582084608,1582084863,GB -1582084864,1582088191,ES -1582088192,1582099647,GB -1582099648,1582099679,US -1582099680,1582104575,GB +1582071808,1582088191,ES +1582088192,1582104575,GB 1582104576,1582153727,RU 1582153728,1582170111,SA 1582170112,1582186495,CH @@ -38540,16 +35311,15 @@ 1582252032,1582268415,TR 1582268416,1582284799,DE 1582284800,1582301183,BH -1582301184,1583067903,IT -1583067904,1583068159,GB -1583068160,1583176703,IT +1582301184,1583176703,IT 1583176704,1583177727,US 1583177728,1583349759,IT 1583349760,1583611903,SA 1583611904,1583615999,LV 1583616000,1583617844,NL 1583617845,1583617845,NL -1583617846,1583620095,NL +1583617846,1583619839,NL +1583619840,1583620095,US 1583620096,1583624191,IT 1583624192,1583628287,RS 1583628288,1583632383,DE @@ -38601,7 +35371,6 @@ 1583824896,1583828991,SI 1583828992,1583833087,RU 1583833088,1583837183,CH -1583837184,1583841279,GB 1583841280,1583845375,FR 1583845376,1583849471,NL 1583849472,1583853567,DE @@ -38628,12 +35397,12 @@ 1585217536,1585219583,FR 1585219584,1585221631,NL 1585221632,1585223679,SK -1585223680,1585223935,FR -1585223936,1585224191,RE -1585224192,1585224703,FR -1585224704,1585224959,GF +1585223680,1585224447,FR +1585224448,1585224703,GP +1585224704,1585224959,FR 1585224960,1585225215,RE -1585225216,1585225727,FR +1585225216,1585225471,FR +1585225472,1585225727,YT 1585225728,1585227775,UA 1585227776,1585231871,RU 1585231872,1585233919,CZ @@ -38647,7 +35416,9 @@ 1585248256,1585250303,CZ 1585250304,1585254399,RU 1585254400,1585256447,GB -1585256448,1585258495,DE +1585256448,1585256959,DE +1585256960,1585257215,FR +1585257216,1585258495,DE 1585258496,1585260543,GB 1585260544,1585264639,RU 1585264640,1585266687,IM @@ -38691,7 +35462,7 @@ 1585346560,1585348607,GB 1585348608,1585350655,CH 1585350656,1585352703,IT -1585352704,1585354751,GB +1585352704,1585354751,PT 1585354752,1585356799,RU 1585356800,1585358847,FI 1585358848,1585360895,PT @@ -38915,7 +35686,7 @@ 1590073344,1590075391,NL 1590075392,1590077439,BE 1590077440,1590079487,GB -1590079488,1590079743,MQ +1590079488,1590079743,GP 1590079744,1590081535,FR 1590081536,1590083583,GB 1590083584,1590085631,RU @@ -38988,8 +35759,8 @@ 1592078336,1592082431,NL 1592082432,1592086527,GB 1592086528,1592087295,CZ -1592087296,1592087551,PL -1592087552,1592090623,CZ +1592087296,1592087807,PL +1592087808,1592090623,CZ 1592090624,1592094719,RU 1592094720,1592098815,RS 1592098816,1592102911,GB @@ -39147,9 +35918,13 @@ 1596456960,1596588031,PL 1596588032,1596719103,BG 1596719104,1596850175,IE -1596850176,1596901375,CZ +1596850176,1596866559,CZ +1596866560,1596874751,RU +1596874752,1596901375,CZ 1596901376,1596905471,BY -1596905472,1596981247,CZ +1596905472,1596907519,CZ +1596907520,1596915711,RU +1596915712,1596981247,CZ 1596981248,1597243391,PL 1597243392,1597505535,RU 1597505536,1597767679,KZ @@ -39178,9 +35953,11 @@ 1599127552,1599143935,CZ 1599143936,1599160319,UA 1599160320,1599176703,IR -1599176704,1599186959,FR -1599186960,1599187199,ES -1599187200,1599193087,FR +1599176704,1599189247,FR +1599189248,1599189503,DE +1599189504,1599190015,FR +1599190016,1599190271,EU +1599190272,1599193087,FR 1599193088,1599209471,RU 1599209472,1599242239,IR 1599242240,1599258623,CZ @@ -39202,30 +35979,10 @@ 1599567872,1599569919,IT 1599569920,1599586303,SI 1599586304,1599602687,BG -1599602688,1599674367,DE -1599674368,1599675391,US -1599675392,1599675647,DE -1599675648,1599676159,US -1599676160,1599676415,DE -1599676416,1599677439,US -1599677440,1599677695,DE -1599677696,1599677951,US -1599677952,1599680767,DE -1599680768,1599681023,US -1599681024,1599683583,DE -1599683584,1599684607,US -1599684608,1599686911,DE -1599686912,1599687167,US -1599687168,1599699967,DE -1599699968,1599700991,US -1599700992,1599705599,DE -1599705600,1599705855,US -1599705856,1599864831,DE +1599602688,1599864831,DE 1599864832,1600126975,PT 1600126976,1600389119,NL -1600389120,1600451071,EU -1600451072,1600451199,GB -1600451200,1600520191,EU +1600389120,1600520191,EU 1600520192,1600651263,SK 1600651264,1600684031,GE 1600684032,1600749567,RU @@ -39353,8 +36110,7 @@ 1602459648,1602461695,GB 1602461696,1602465791,ES 1602465792,1602467839,RU -1602467840,1602468095,GB -1602468096,1602469887,GI +1602467840,1602469887,GI 1602469888,1602471935,AT 1602471936,1602473983,SE 1602473984,1602476031,RU @@ -39368,36 +36124,44 @@ 1602781184,1602813951,FR 1602813952,1602846719,RU 1602846720,1602879487,GE -1602879488,1602879743,FR -1602879744,1602886399,RE -1602886400,1602886655,FR -1602886656,1602887423,RE -1602887424,1602887679,FR -1602887680,1602891775,RE -1602891776,1602892031,FR -1602892032,1602895359,RE -1602895360,1602895615,FR -1602895616,1602895871,RE -1602895872,1602896127,FR -1602896128,1602896383,MQ -1602896384,1602896639,RE -1602896640,1602896895,FR -1602896896,1602896924,MQ +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 +1602894848,1602895103,RE +1602895104,1602896924,FR 1602896925,1602896925,RE -1602896926,1602897919,MQ -1602897920,1602898431,FR -1602898432,1602901503,MQ -1602901504,1602901759,FR -1602901760,1602904063,MQ -1602904064,1602905087,RE -1602905088,1602906111,FR -1602906112,1602906879,RE -1602906880,1602907135,FR -1602907136,1602907391,RE -1602907392,1602908159,FR -1602908160,1602910207,RE -1602910208,1602910463,FR -1602910464,1602912255,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 1602912256,1602928639,GB 1602928640,1602930687,HU 1602930688,1602932735,GB @@ -39457,7 +36221,9 @@ 1603207168,1603215359,RU 1603215360,1603219455,DE 1603219456,1603223551,CH -1603223552,1603226623,SE +1603223552,1603225087,SE +1603225088,1603225343,FR +1603225344,1603226623,SE 1603226624,1603227647,FR 1603227648,1603231743,AT 1603231744,1603235839,IT @@ -39480,7 +36246,9 @@ 1603895296,1603928063,RU 1603928064,1603944447,DK 1603944448,1603977215,RU -1603977216,1603993599,GB +1603977216,1603979519,GB +1603979520,1603979775,US +1603979776,1603993599,GB 1603993600,1604009983,ME 1604009984,1604026367,PL 1604026368,1604042751,NL @@ -39511,9 +36279,7 @@ 1604853760,1604861951,HU 1604861952,1604870143,RS 1604870144,1604878335,HR -1604878336,1604892415,DE -1604892416,1604892671,RU -1604892672,1604894719,DE +1604878336,1604894719,DE 1604894720,1604902911,CZ 1604902912,1604911103,BG 1604911104,1604919295,UA @@ -39523,11 +36289,7 @@ 1604952064,1604960255,DE 1604960256,1604968447,BG 1604968448,1604976639,ES -1604976640,1604981503,FR -1604981504,1604981759,GB -1604981760,1604982527,FR -1604982528,1604982783,GB -1604982784,1604993023,FR +1604976640,1604993023,FR 1604993024,1605001215,NL 1605001216,1605025791,RU 1605025792,1605033983,IQ @@ -39556,9 +36318,7 @@ 1605132288,1605148671,RU 1605148672,1605156863,PT 1605156864,1605165055,JO -1605165056,1605167412,GB -1605167413,1605167413,US -1605167414,1605169411,GB +1605165056,1605169411,GB 1605169412,1605169412,DE 1605169413,1605173247,GB 1605173248,1605181439,TR @@ -39599,9 +36359,7 @@ 1605632000,1605664767,RS 1605664768,1605697535,MK 1605697536,1605795839,RU -1605795840,1605810175,BE -1605810176,1605810431,FR -1605810432,1605828607,BE +1605795840,1605828607,BE 1605828608,1605861375,RU 1605861376,1605894143,TR 1605894144,1606156287,RO @@ -39611,25 +36369,20 @@ 1606636544,1607467007,SE 1607467008,1607532543,DE 1607532544,1607569407,SE -1607569408,1607571455,DK -1607571456,1607581695,SE -1607581696,1607583743,DK -1607583744,1607585791,SE -1607585792,1607586303,DK -1607586304,1607586431,SE -1607586432,1607587071,DK -1607587072,1607587327,SE -1607587328,1607588607,DK -1607588608,1607588735,SE -1607588736,1607598079,DK +1607569408,1607570431,DK +1607570432,1607573503,SE +1607573504,1607577599,DK +1607577600,1607586815,SE +1607586816,1607587327,DK +1607587328,1607587583,SE +1607587584,1607588607,DK +1607588608,1607588863,SE +1607588864,1607598079,DK 1607598080,1607598335,IT 1607598336,1607598591,EU -1607598592,1607602175,IT -1607602176,1607606271,FR -1607606272,1607607295,IT -1607607296,1607607807,PL -1607607808,1607608831,IT -1607608832,1607609343,GB +1607598592,1607606015,IT +1607606016,1607606271,FR +1607606272,1607609343,IT 1607609344,1607609599,EU 1607609600,1607614463,IT 1607614464,1607616511,FR @@ -39637,23 +36390,14 @@ 1607619072,1607620607,GB 1607620608,1607625983,IT 1607625984,1607626239,EU -1607626240,1607626751,IT -1607626752,1607628543,ES +1607626240,1607628543,IT 1607628544,1607628799,EU -1607628800,1607630847,IT -1607630848,1607632895,IE -1607632896,1607639039,IT +1607628800,1607639039,IT 1607639040,1607647231,EU -1607647232,1607647743,IT -1607647744,1607648511,DE -1607648512,1607649791,IT -1607649792,1607650303,DE -1607650304,1607651327,IT -1607651328,1607651839,FR -1607651840,1607663615,IT -1607663616,1607685887,NL -1607685888,1607686143,FR -1607686144,1607695559,NL +1607647232,1607651583,IT +1607651584,1607652351,FR +1607652352,1607663615,IT +1607663616,1607695559,NL 1607695560,1607695560,NL 1607695561,1607729151,NL 1607729152,1607794687,EG @@ -39759,11 +36503,7 @@ 1613488128,1613492223,CA 1613492224,1613504511,US 1613504512,1613529087,CA -1613529088,1613538122,US -1613538123,1613538125,US -1613538126,1613544799,US -1613544800,1613544807,DE -1613544808,1613545471,US +1613529088,1613545471,US 1613545472,1613545495,CA 1613545496,1613545503,US 1613545504,1613545551,CA @@ -39797,14 +36537,22 @@ 1613552152,1613552159,US 1613552160,1613552199,CA 1613552200,1613552207,US -1613552208,1613565951,CA +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 1613565952,1613606911,US -1613606912,1613615103,CA +1613606912,1613613119,CA +1613613120,1613613151,IE +1613613152,1613615103,CA 1613615104,1613635583,US 1613635584,1613639679,CA -1613639680,1613640703,US -1613640704,1613640831,CA -1613640832,1613676543,US +1613639680,1613676543,US 1613676544,1613680639,CA 1613680640,1613703670,US 1613703671,1613703678,LK @@ -39862,585 +36610,7 @@ 1652481280,1652481791,CN 1652481792,1652487286,US 1652487287,1652487287,TR -1652487288,1652621327,US -1652621328,1652621335,CA -1652621336,1652621343,AU -1652621344,1652621359,CA -1652621360,1652621495,US -1652621496,1652621503,CA -1652621504,1652621663,US -1652621664,1652621671,GB -1652621672,1652621679,US -1652621680,1652621687,CA -1652621688,1652621695,US -1652621696,1652621703,MX -1652621704,1652621911,US -1652621912,1652621919,GB -1652621920,1652622119,US -1652622120,1652622127,GB -1652622128,1652622175,US -1652622176,1652622207,GB -1652622208,1652622271,US -1652622272,1652622279,AU -1652622280,1652622575,US -1652622576,1652622583,GB -1652622584,1652622895,US -1652622896,1652622903,MX -1652622904,1652623903,US -1652623904,1652623935,IN -1652623936,1652624111,US -1652624112,1652624119,MX -1652624120,1652624511,US -1652624512,1652624519,IN -1652624520,1652624527,US -1652624528,1652624535,GB -1652624536,1652624591,US -1652624592,1652624599,IE -1652624600,1652624655,US -1652624656,1652624663,ZA -1652624664,1652625119,US -1652625120,1652625127,ZA -1652625128,1652625303,US -1652625304,1652625311,CA -1652625312,1652625495,US -1652625496,1652625503,CA -1652625504,1652625695,US -1652625696,1652625711,IN -1652625712,1652626055,US -1652626056,1652626063,GB -1652626064,1652626319,US -1652626320,1652626327,GB -1652626328,1652626399,US -1652626400,1652626407,IE -1652626408,1652626487,US -1652626488,1652626495,GB -1652626496,1652626727,US -1652626728,1652626735,IL -1652626736,1652627519,US -1652627520,1652627567,MY -1652627568,1652627575,US -1652627576,1652627583,GB -1652627584,1652628055,US -1652628056,1652628063,IN -1652628064,1652628311,US -1652628312,1652628319,BO -1652628320,1652628351,US -1652628352,1652628359,CA -1652628360,1652629551,US -1652629552,1652629559,NZ -1652629560,1652630031,US -1652630032,1652630039,GB -1652630040,1652630247,US -1652630248,1652630255,AU -1652630256,1652630655,US -1652630656,1652630663,IL -1652630664,1652630887,US -1652630888,1652630895,AU -1652630896,1652631015,US -1652631016,1652631023,IN -1652631024,1652631343,US -1652631344,1652631351,CA -1652631352,1652631535,US -1652631536,1652631551,MY -1652631552,1652631751,US -1652631752,1652631759,GB -1652631760,1652631999,US -1652632000,1652632015,AE -1652632016,1652632255,US -1652632256,1652632263,IL -1652632264,1652632431,US -1652632432,1652632439,CA -1652632440,1652632647,US -1652632648,1652632655,MY -1652632656,1652632671,US -1652632672,1652632751,MY -1652632752,1652632863,US -1652632864,1652632879,CA -1652632880,1652632887,US -1652632888,1652632895,AU -1652632896,1652632911,US -1652632912,1652632919,CA -1652632920,1652632935,US -1652632936,1652632943,PH -1652632944,1652633159,US -1652633160,1652633167,CA -1652633168,1652633999,US -1652634000,1652634007,GB -1652634008,1652634143,US -1652634144,1652634151,AE -1652634152,1652634423,US -1652634424,1652634431,CA -1652634432,1652634647,US -1652634648,1652634655,PH -1652634656,1652634663,AU -1652634664,1652634767,US -1652634768,1652634775,AU -1652634776,1652634791,US -1652634792,1652634799,CA -1652634800,1652634855,US -1652634856,1652634863,CA -1652634864,1652635047,US -1652635048,1652635055,GB -1652635056,1652635295,US -1652635296,1652635311,CA -1652635312,1652635591,US -1652635592,1652635599,CA -1652635600,1652635903,US -1652635904,1652635911,AU -1652635912,1652636423,US -1652636424,1652636431,CA -1652636432,1652636631,US -1652636632,1652636639,IL -1652636640,1652636655,US -1652636656,1652636663,CA -1652636664,1652636839,US -1652636840,1652636847,CA -1652636848,1652637207,US -1652637208,1652637215,FR -1652637216,1652637623,US -1652637624,1652637631,GB -1652637632,1652637887,US -1652637888,1652637895,IL -1652637896,1652638143,US -1652638144,1652638151,CH -1652638152,1652638191,US -1652638192,1652638207,IN -1652638208,1652638215,US -1652638216,1652638223,AU -1652638224,1652638703,US -1652638704,1652638711,IN -1652638712,1652638855,US -1652638856,1652638863,CA -1652638864,1652638895,US -1652638896,1652638903,GB -1652638904,1652639015,US -1652639016,1652639023,MX -1652639024,1652639135,US -1652639136,1652639143,AU -1652639144,1652639455,US -1652639456,1652639471,IN -1652639472,1652639535,US -1652639536,1652639543,CA -1652639544,1652639671,US -1652639672,1652639679,GB -1652639680,1652640631,US -1652640632,1652640639,NL -1652640640,1652641183,US -1652641184,1652641191,BR -1652641192,1652641431,US -1652641432,1652641439,IN -1652641440,1652641879,US -1652641880,1652641887,GB -1652641888,1652641895,US -1652641896,1652641911,GB -1652641912,1652641919,CA -1652641920,1652641983,US -1652641984,1652642015,AE -1652642016,1652642023,CA -1652642024,1652643215,US -1652643216,1652643223,IT -1652643224,1652643351,US -1652643352,1652643359,CA -1652643360,1652643431,US -1652643432,1652643447,CA -1652643448,1652643463,US -1652643464,1652643471,CA -1652643472,1652643575,US -1652643576,1652643583,EG -1652643584,1652643631,US -1652643632,1652643639,IN -1652643640,1652643655,US -1652643656,1652643663,GB -1652643664,1652643679,US -1652643680,1652643687,GB -1652643688,1652643799,US -1652643800,1652643807,GB -1652643808,1652643839,US -1652643840,1652643847,GB -1652643848,1652643879,US -1652643880,1652643887,AU -1652643888,1652643895,CA -1652643896,1652644223,US -1652644224,1652644231,AU -1652644232,1652644247,US -1652644248,1652644255,GB -1652644256,1652644311,US -1652644312,1652644319,CA -1652644320,1652644375,US -1652644376,1652644383,CA -1652644384,1652644591,US -1652644592,1652644639,BD -1652644640,1652644647,US -1652644648,1652644655,BO -1652644656,1652644799,US -1652644800,1652644807,CA -1652644808,1652644863,US -1652644864,1652644871,AU -1652644872,1652645103,US -1652645104,1652645111,CA -1652645112,1652645751,US -1652645752,1652645759,NZ -1652645760,1652645791,US -1652645792,1652645799,IN -1652645800,1652645879,US -1652645880,1652645887,NZ -1652645888,1652645919,US -1652645920,1652645935,AE -1652645936,1652646271,US -1652646272,1652646279,AU -1652646280,1652646487,US -1652646488,1652646495,CA -1652646496,1652646503,US -1652646504,1652646511,CA -1652646512,1652646815,US -1652646816,1652646823,BD -1652646824,1652647199,US -1652647200,1652647207,IL -1652647208,1652647215,GB -1652647216,1652647303,US -1652647304,1652647311,AU -1652647312,1652647319,US -1652647320,1652647327,IL -1652647328,1652647351,US -1652647352,1652647359,GB -1652647360,1652647511,US -1652647512,1652647519,CA -1652647520,1652647647,US -1652647648,1652647655,MX -1652647656,1652647823,US -1652647824,1652647831,CA -1652647832,1652647855,US -1652647856,1652647871,CA -1652647872,1652647919,US -1652647920,1652647935,IE -1652647936,1652648103,US -1652648104,1652648111,MX -1652648112,1652648255,US -1652648256,1652648263,GB -1652648264,1652648399,US -1652648400,1652648407,IN -1652648408,1652648639,US -1652648640,1652648647,MY -1652648648,1652648879,US -1652648880,1652648887,BD -1652648888,1652648983,US -1652648984,1652648991,NZ -1652648992,1652649463,US -1652649464,1652649471,GB -1652649472,1652649519,US -1652649520,1652649527,SE -1652649528,1652649543,US -1652649544,1652649551,CA -1652649552,1652650303,US -1652650304,1652650311,SE -1652650312,1652650335,US -1652650336,1652650343,CA -1652650344,1652650679,US -1652650680,1652650687,CA -1652650688,1652650751,US -1652650752,1652650759,AU -1652650760,1652650791,US -1652650792,1652650799,GB -1652650800,1652651063,US -1652651064,1652651071,SG -1652651072,1652651079,US -1652651080,1652651087,GB -1652651088,1652651111,US -1652651112,1652651119,NZ -1652651120,1652651271,US -1652651272,1652651279,IN -1652651280,1652651351,US -1652651352,1652651359,CA -1652651360,1652651495,US -1652651496,1652651503,AR -1652651504,1652652151,US -1652652152,1652652159,IN -1652652160,1652652327,US -1652652328,1652652335,SG -1652652336,1652652591,US -1652652592,1652652599,BD -1652652600,1652652655,US -1652652656,1652652663,GB -1652652664,1652652895,US -1652652896,1652652927,CA -1652652928,1652653231,US -1652653232,1652653239,CA -1652653240,1652653247,US -1652653248,1652653279,BD -1652653280,1652653343,US -1652653344,1652653359,BD -1652653360,1652653631,US -1652653632,1652653639,CA -1652653640,1652653663,US -1652653664,1652653671,IN -1652653672,1652653679,GB -1652653680,1652653855,US -1652653856,1652653863,AR -1652653864,1652654023,US -1652654024,1652654031,CA -1652654032,1652654527,US -1652654528,1652654535,NZ -1652654536,1652654543,CA -1652654544,1652654719,US -1652654720,1652654727,GB -1652654728,1652654783,US -1652654784,1652654815,BD -1652654816,1652654927,US -1652654928,1652654935,GB -1652654936,1652655007,US -1652655008,1652655015,GB -1652655016,1652655063,US -1652655064,1652655071,GU -1652655072,1652655231,US -1652655232,1652655263,CA -1652655264,1652655303,US -1652655304,1652655311,IN -1652655312,1652655431,US -1652655432,1652655439,GU -1652655440,1652655511,US -1652655512,1652655519,AU -1652655520,1652655727,US -1652655728,1652655743,GB -1652655744,1652655871,US -1652655872,1652655879,CA -1652655880,1652655887,US -1652655888,1652655895,IN -1652655896,1652655903,GB -1652655904,1652655943,US -1652655944,1652655951,JM -1652655952,1652655983,US -1652655984,1652655999,GB -1652656000,1652656063,US -1652656064,1652656071,GB -1652656072,1652656383,US -1652656384,1652656391,CA -1652656392,1652656431,US -1652656432,1652656439,ZA -1652656440,1652656447,CA -1652656448,1652656671,US -1652656672,1652656679,GB -1652656680,1652656703,US -1652656704,1652656711,CA -1652656712,1652656719,US -1652656720,1652656727,NZ -1652656728,1652656759,US -1652656760,1652656767,CN -1652656768,1652656799,US -1652656800,1652656807,GB -1652656808,1652656855,US -1652656856,1652656863,PH -1652656864,1652656927,US -1652656928,1652656935,GB -1652656936,1652657295,US -1652657296,1652657311,AU -1652657312,1652657439,US -1652657440,1652657447,MX -1652657448,1652657567,US -1652657568,1652657575,JM -1652657576,1652657863,US -1652657864,1652657871,GB -1652657872,1652658223,US -1652658224,1652658231,GB -1652658232,1652658367,US -1652658368,1652658375,MX -1652658376,1652658431,US -1652658432,1652658439,GB -1652658440,1652658535,US -1652658536,1652658543,GB -1652658544,1652658559,US -1652658560,1652658567,CA -1652658568,1652658687,US -1652658688,1652658695,NZ -1652658696,1652658727,US -1652658728,1652658735,IN -1652658736,1652659151,US -1652659152,1652659159,GB -1652659160,1652659367,US -1652659368,1652659375,CA -1652659376,1652660007,US -1652660008,1652660015,CA -1652660016,1652660127,US -1652660128,1652660135,CA -1652660136,1652660183,US -1652660184,1652660191,MX -1652660192,1652660287,US -1652660288,1652660295,IN -1652660296,1652660303,MX -1652660304,1652660551,US -1652660552,1652660559,GB -1652660560,1652660639,US -1652660640,1652660663,AU -1652660664,1652660959,US -1652660960,1652660967,BR -1652660968,1652661087,US -1652661088,1652661095,MY -1652661096,1652661135,US -1652661136,1652661143,GB -1652661144,1652661151,US -1652661152,1652661159,IL -1652661160,1652661191,US -1652661192,1652661199,CA -1652661200,1652662735,US -1652662736,1652662751,GB -1652662752,1652662919,US -1652662920,1652662927,AU -1652662928,1652663039,US -1652663040,1652663047,MX -1652663048,1652663135,US -1652663136,1652663143,CA -1652663144,1652664527,US -1652664528,1652664543,CA -1652664544,1652665079,US -1652665080,1652665087,CA -1652665088,1652665103,US -1652665104,1652665111,CA -1652665112,1652665319,US -1652665320,1652665327,BR -1652665328,1652665335,PR -1652665336,1652665455,US -1652665456,1652665463,CA -1652665464,1652665479,US -1652665480,1652665487,GB -1652665488,1652665671,US -1652665672,1652665679,MX -1652665680,1652665687,IE -1652665688,1652665807,US -1652665808,1652665815,GB -1652665816,1652665863,US -1652665864,1652665871,AU -1652665872,1652665951,US -1652665952,1652665959,IT -1652665960,1652665983,US -1652665984,1652665991,CA -1652665992,1652666175,US -1652666176,1652666183,CA -1652666184,1652666207,US -1652666208,1652666215,GB -1652666216,1652666327,US -1652666328,1652666335,MX -1652666336,1652666495,US -1652666496,1652666511,CA -1652666512,1652666527,US -1652666528,1652666543,GB -1652666544,1652668951,US -1652668952,1652668959,IE -1652668960,1652668967,US -1652668968,1652668975,AU -1652668976,1652669191,US -1652669192,1652669199,IN -1652669200,1652669231,US -1652669232,1652669239,CA -1652669240,1652669567,US -1652669568,1652669575,GB -1652669576,1652670015,US -1652670016,1652670023,CA -1652670024,1652670311,US -1652670312,1652670319,BR -1652670320,1652670327,US -1652670328,1652670335,BR -1652670336,1652670463,CA -1652670464,1652670871,US -1652670872,1652670879,CA -1652670880,1652671167,US -1652671168,1652671175,NL -1652671176,1652671207,US -1652671208,1652671215,NL -1652671216,1652671271,US -1652671272,1652671279,GB -1652671280,1652671343,US -1652671344,1652671351,GB -1652671352,1652671359,MX -1652671360,1652671375,US -1652671376,1652671383,CA -1652671384,1652671407,US -1652671408,1652671415,GB -1652671416,1652671783,US -1652671784,1652671791,NL -1652671792,1652672023,US -1652672024,1652672031,MX -1652672032,1652672063,US -1652672064,1652672071,GB -1652672072,1652672159,US -1652672160,1652672167,JP -1652672168,1652672191,US -1652672192,1652672199,PK -1652672200,1652672295,US -1652672296,1652672303,MT -1652672304,1652672335,US -1652672336,1652672343,MT -1652672344,1652672439,US -1652672440,1652672447,CA -1652672448,1652672455,GB -1652672456,1652672463,US -1652672464,1652672471,IN -1652672472,1652672479,ZA -1652672480,1652672487,IN -1652672488,1652673279,US -1652673280,1652673535,CA -1652673536,1652674063,US -1652674064,1652674071,CA -1652674072,1652674135,US -1652674136,1652674143,MX -1652674144,1652674327,US -1652674328,1652674335,GB -1652674336,1652674343,US -1652674344,1652674351,NA -1652674352,1652674367,US -1652674368,1652674375,GB -1652674376,1652674879,US -1652674880,1652674887,CA -1652674888,1652674919,US -1652674920,1652674927,CH -1652674928,1652674943,US -1652674944,1652674951,CA -1652674952,1652675047,US -1652675048,1652675055,MX -1652675056,1652675103,US -1652675104,1652675111,GB -1652675112,1652675391,US -1652675392,1652675399,IN -1652675400,1652675487,US -1652675488,1652675495,NZ -1652675496,1652675951,US -1652675952,1652675959,KE -1652675960,1652676031,US -1652676032,1652676047,IN -1652676048,1652676191,US -1652676192,1652676199,IN -1652676200,1652676615,US -1652676616,1652676623,AU -1652676624,1652676679,US -1652676680,1652676687,CA -1652676688,1652677007,US -1652677008,1652677015,IN -1652677016,1652677039,US -1652677040,1652677047,MT -1652677048,1652677335,US -1652677336,1652677343,KE -1652677344,1652677367,US -1652677368,1652677375,GB -1652677376,1652677407,US -1652677408,1652677415,IN -1652677416,1652677575,US -1652677576,1652677583,CH -1652677584,1652678999,US -1652679000,1652679007,SG -1652679008,1652679031,US -1652679032,1652679039,BR -1652679040,1652679103,US -1652679104,1652679111,MX -1652679112,1652679119,NO -1652679120,1652680743,US -1652680744,1652680751,CA -1652680752,1652681047,US -1652681048,1652681055,GB -1652681056,1652681455,US -1652681456,1652681463,CA -1652681464,1652681471,US -1652681472,1652681479,GB -1652681480,1652681511,US -1652681512,1652681519,IL -1652681520,1653500927,US +1652487288,1653500927,US 1653500928,1653501183,FR 1653501184,1653501439,IL 1653501440,1653501695,HK @@ -40462,14 +36632,18 @@ 1654542336,1654546431,CA 1654546432,1654550527,VG 1654550528,1654554623,US -1654554624,1654558719,CA +1654554624,1654558207,CA +1654558208,1654558463,US +1654558464,1654558719,CA 1654558720,1654583103,US 1654583104,1654583135,CA 1654583136,1654597647,US 1654597648,1654597655,PL 1654597656,1654648831,US 1654648832,1654652927,CA -1654652928,1673527295,US +1654652928,1663444375,US +1663444376,1663444383,CA +1663444384,1673527295,US 1673527296,1673560063,CA 1673560064,1673562207,US 1673562208,1673562239,CR @@ -40758,9 +36932,7 @@ 1728161792,1728162815,CN 1728162816,1728163839,SG 1728163840,1728164863,LK -1728164864,1728165104,FJ -1728165105,1728165105,AU -1728165106,1728165887,FJ +1728164864,1728165887,FJ 1728165888,1728168959,AU 1728168960,1728169983,IN 1728169984,1728171007,VN @@ -40971,7 +37143,6 @@ 1728437248,1728438271,HK 1728438272,1728439295,NZ 1728439296,1728439807,NP -1728439808,1728440319,AU 1728440320,1728441343,BD 1728441344,1728442367,MY 1728442368,1728443391,SG @@ -41386,7 +37557,7 @@ 1728827392,1728828415,JP 1728828416,1728829439,AU 1728829440,1728830463,KH -1728830464,1728830719,US +1728830464,1728830719,SG 1728830720,1728830975,JP 1728830976,1728831487,ID 1728831488,1728832511,IN @@ -41994,7 +38165,7 @@ 1729946624,1729949695,JP 1729949696,1729950207,IN 1729950208,1729950719,KH -1729950720,1729952767,JP +1729951744,1729952767,JP 1729952768,1729953791,IN 1729953792,1729954815,MY 1729954816,1729955839,ID @@ -42058,7 +38229,7 @@ 1730010112,1730011135,IN 1730011136,1730012159,BT 1730012160,1730013183,ID -1730013184,1730015231,IN +1730013184,1730014207,IN 1730015232,1730016255,MY 1730016256,1730017279,PH 1730017280,1730017791,IN @@ -42181,8 +38352,67 @@ 1730145280,1730146303,BD 1730146304,1730147327,HK 1730147328,1730148351,JP -1730148352,1730148863,ID +1730148352,1730149375,ID 1730149376,1730150399,JP +1744044032,1744045055,HK +1744045056,1744047103,SG +1744047104,1744048127,BD +1744048128,1744049151,CN +1744049152,1744050175,BD +1744050176,1744051199,HK +1744051200,1744052223,PH +1744052224,1744053247,MN +1744053248,1744054271,ID +1744054272,1744055295,KR +1744055296,1744056319,HK +1744056320,1744056575,IN +1744056576,1744056831,MY +1744057088,1744057343,ID +1744057344,1744058367,HK +1744058368,1744067583,CN +1744067584,1744068607,JP +1744068608,1744069631,ID +1744069632,1744070655,SG +1744070656,1744071679,JP +1744071680,1744072703,KR +1744072704,1744074751,JP +1744074752,1744076799,IN +1744076800,1744077823,AU +1744077824,1744078847,PK +1744078848,1744079871,VN +1744079872,1744080895,BD +1744080896,1744081919,AF +1744081920,1744082943,CN +1744082944,1744083967,IN +1744083968,1744084991,HK +1744084992,1744085503,ID +1744085504,1744085759,BD +1744085760,1744086015,MY +1744086016,1744087039,CN +1744087040,1744088063,IN +1744088064,1744090111,PK +1744090112,1744091135,NZ +1744091136,1744092159,BD +1744092160,1744092671,MY +1744092672,1744092927,IN +1744092928,1744093183,MY +1744093184,1744096255,AU +1744096256,1744097279,ID +1744097280,1744098303,JP +1744098304,1744099327,NZ +1744099328,1744101375,JP +1744101376,1744102399,HK +1744102400,1744103423,FJ +1744103424,1744104447,CN +1744104448,1744105471,AU +1744105472,1744106751,IN +1744106752,1744107007,ID +1744107008,1744107519,SG +1744107520,1744108543,KH +1744108544,1744109567,CN +1744109568,1744109823,IN +1744110592,1744111615,JP +1744111616,1744113663,IN 1744175104,1744176127,ID 1744176128,1744177151,AU 1744177152,1744179199,CN @@ -42329,6 +38559,9 @@ 1744304128,1744305151,AU 1744305152,1744306175,PH 1769996288,1772093439,MA +1772093440,1772617727,KE +1772617728,1773142015,AO +1774190592,1774452735,EG 1774452736,1774714879,NG 1774714880,1775239167,EG 1775239168,1776680959,ZA @@ -42371,7 +38604,13 @@ 1784676352,1785200639,KR 1785200640,1785462783,TW 1785462784,1786773503,CN -1786773504,1790967807,JP +1786773504,1790595071,JP +1790595072,1790597119,US +1790597120,1790648319,JP +1790648320,1790649007,CN +1790649008,1790649008,JP +1790649009,1790650367,CN +1790650368,1790967807,JP 1790967808,1793064959,IN 1793064960,1794113535,CN 1794113536,1795162111,KR @@ -42417,13 +38656,11 @@ 1795559808,1795560447,US 1795560448,1795560959,CA 1795560960,1795561215,US -1795561216,1795561359,CA -1795561360,1795561375,US -1795561376,1795562239,CA +1795561216,1795562239,CA 1795562240,1795563263,US 1795563264,1795563519,CA -1795563520,1795564287,US -1795564288,1795564543,CA +1795563520,1795564031,US +1795564032,1795564543,CA 1795564544,1795565631,US 1795565632,1795565719,CA 1795565720,1795565759,US @@ -42497,17 +38734,21 @@ 1815951248,1815951263,US 1815951264,1815951407,US 1815951408,1815951423,US -1815951424,1816001791,US +1815951424,1815957823,US +1815957824,1815957887,US +1815957888,1815996159,US +1815996160,1815996415,CA +1815996416,1816001791,US 1816001792,1816002559,NL 1816002560,1816005799,US 1816005800,1816005807,LK -1816005808,1816007663,US +1816005808,1816007167,US +1816007168,1816007175,CA +1816007176,1816007663,US 1816007664,1816007671,CA 1816007672,1816008959,US 1816008960,1816009215,IN -1816009216,1816018471,US -1816018472,1816018479,CA -1816018480,1816024319,US +1816009216,1816024319,US 1816024320,1816024575,CA 1816024576,1816031343,US 1816031344,1816031351,CA @@ -42522,7 +38763,9 @@ 1822433280,1822445567,US 1822445568,1822451199,CA 1822451200,1822486527,US -1822486528,1822490623,CA +1822486528,1822489111,CA +1822489112,1822489119,US +1822489120,1822490623,CA 1822490624,1822498815,US 1822498816,1822502911,CA 1822502912,1822519295,US @@ -42535,152 +38778,39 @@ 1822552528,1822552535,GB 1822552536,1822572543,US 1822572544,1822605311,CA -1822605312,1822613759,US -1822613760,1822614015,AU -1822614016,1822654463,US +1822605312,1822654463,US 1822654464,1822670847,CA -1822670848,1822818367,US -1822818368,1822818375,CA -1822818376,1822818999,US -1822819000,1822819007,CA -1822819008,1822819031,US -1822819032,1822819039,IL -1822819040,1822819215,US -1822819216,1822819223,CA -1822819224,1822819347,US -1822819348,1822819351,NO -1822819352,1822819563,US -1822819564,1822819567,AU -1822819568,1822819839,US -1822819840,1822819843,PE -1822819844,1822819891,US -1822819892,1822819895,CA -1822819896,1822820147,US -1822820148,1822820151,AU -1822820152,1822820195,US -1822820196,1822820199,AU -1822820200,1822820327,US -1822820328,1822820331,AU -1822820332,1822820553,US -1822820554,1822820555,NL -1822820556,1822820569,US -1822820570,1822820571,BG -1822820572,1822820641,US -1822820642,1822820643,FR -1822820644,1822820689,US -1822820690,1822820691,FR -1822820692,1822820761,US -1822820762,1822820763,IL -1822820764,1822820767,US -1822820768,1822820769,IL -1822820770,1822820771,US -1822820772,1822820773,IN -1822820774,1822820805,US -1822820806,1822820807,IL -1822820808,1822820837,US -1822820838,1822820839,IE -1822820840,1822820861,US -1822820862,1822820863,KY -1822820864,1822821183,US -1822821184,1822821199,IN -1822821200,1822822175,US -1822822176,1822822183,IL -1822822184,1822822239,US -1822822240,1822822247,IN -1822822248,1822822863,US -1822822864,1822822871,CA -1822822872,1822823423,US -1822823424,1822823431,CA -1822823432,1822823671,US -1822823672,1822823679,CY -1822823680,1822825003,US -1822825004,1822825007,AU -1822825008,1822825119,US -1822825120,1822825123,CA -1822825124,1822825135,US -1822825136,1822825139,CY -1822825140,1822825143,NZ -1822825144,1822825211,US -1822825212,1822825215,NO -1822825216,1822825783,US -1822825784,1822825791,AU -1822825792,1822825895,US -1822825896,1822825903,NZ -1822825904,1822826151,US -1822826152,1822826175,IL -1822826176,1822826207,US -1822826208,1822826215,AU -1822826216,1822826559,US -1822826560,1822826575,MX -1822826576,1822826975,US -1822826976,1822827007,IL -1822827008,1822827055,US -1822827056,1822827063,DK -1822827064,1822827167,US -1822827168,1822827175,IL -1822827176,1822827183,US -1822827184,1822827191,DK -1822827192,1822827311,US -1822827312,1822827319,IN -1822827320,1822827407,US -1822827408,1822827415,GT -1822827416,1822827463,US -1822827464,1822827471,AU -1822827472,1822827687,US -1822827688,1822827691,CZ -1822827692,1822827727,US -1822827728,1822827731,CA -1822827732,1822827771,US -1822827772,1822827775,AU -1822827776,1822827871,US -1822827872,1822827879,AU -1822827880,1822829103,US -1822829104,1822829111,BG -1822829112,1822830223,US -1822830224,1822830239,CA -1822830240,1822830939,US -1822830940,1822830943,CA -1822830944,1822830951,US -1822830952,1822830955,CA -1822830956,1822831003,US -1822831004,1822831007,CA -1822831008,1822831407,US -1822831408,1822831415,CO -1822831416,1822831559,US -1822831560,1822831567,IL -1822831568,1822949375,US +1822670848,1822949375,US 1822949376,1822982143,CA 1822982144,1823081975,US 1823081976,1823081983,ID 1823081984,1823082199,US 1823082200,1823082207,TR -1823082208,1823084799,US +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,1823090775,US +1823084808,1823085855,US +1823085856,1823085863,PE +1823085864,1823087287,US +1823087288,1823087295,BG +1823087296,1823090367,US +1823090368,1823090431,BG +1823090432,1823090775,US 1823090776,1823090783,EG -1823090784,1823113215,US +1823090784,1823092511,US +1823092512,1823092527,IN +1823092528,1823093063,US +1823093064,1823093071,QA +1823093072,1823113215,US 1823113216,1823129599,CA 1823129600,1823162367,US 1823162368,1823170559,CA -1823170560,1823187975,US -1823187976,1823187983,FI -1823187984,1823188279,US -1823188280,1823188287,MX -1823188288,1823188311,US -1823188312,1823188319,IN -1823188320,1823188927,US -1823188928,1823188935,CA -1823188936,1823189011,US -1823189012,1823189015,AU -1823189016,1823189047,US -1823189048,1823189075,KY -1823189076,1823189155,US -1823189156,1823189159,AU -1823189160,1823189251,US -1823189252,1823189255,CY -1823189256,1823189387,US -1823189388,1823189391,CA -1823189392,1823211519,US +1823170560,1823211519,US 1823211520,1823342591,CA 1823342592,1823346687,US 1823346688,1823350783,CA @@ -42719,7 +38849,9 @@ 1823358520,1823358527,CA 1823358528,1823358575,US 1823358576,1823358583,GB -1823358584,1823358743,US +1823358584,1823358591,US +1823358592,1823358599,GB +1823358600,1823358743,US 1823358744,1823358751,CA 1823358752,1823358783,US 1823358784,1823358791,SE @@ -42791,7 +38923,9 @@ 1823424128,1823424159,CA 1823424160,1823428607,US 1823428608,1823432703,CA -1823432704,1823449247,US +1823432704,1823440895,US +1823440896,1823444991,CA +1823444992,1823449247,US 1823449248,1823449255,MK 1823449256,1823449311,US 1823449312,1823449327,BO @@ -42822,26 +38956,32 @@ 1831862272,1832124415,PT 1832124416,1832386559,IT 1832386560,1832517631,DK -1832517632,1832583167,SE -1832583168,1832639487,DK -1832639488,1832639743,SE -1832639744,1832648703,DK +1832517632,1832607743,SE +1832607744,1832615935,DK +1832615936,1832648703,SE 1832648704,1832681471,HR 1832681472,1832714239,RU 1832714240,1832747007,HU 1832747008,1832779775,RU -1832779776,1832780799,MQ -1832780800,1832782335,FR -1832782336,1832783871,MQ -1832783872,1832786431,GP -1832786432,1832786687,FR -1832786688,1832786943,GP -1832786944,1832787967,GF -1832787968,1832792063,FR -1832792064,1832792575,RE +1832779776,1832782591,FR +1832782592,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,1832794623,GP -1832794624,1832796927,FR +1832794112,1832796159,GP +1832796160,1832796415,FR +1832796416,1832796671,RE +1832796672,1832796927,FR 1832796928,1832797183,MQ 1832797184,1832812543,FR 1832812544,1832845311,RU @@ -42879,9 +39019,7 @@ 1833232384,1833234431,TJ 1833234432,1833236479,GB 1833236480,1833238527,FI -1833238528,1833239807,AL -1833239808,1833240063,IT -1833240064,1833240575,AL +1833238528,1833240575,AL 1833240576,1833242623,ES 1833242624,1833246719,RU 1833246720,1833248767,FI @@ -42919,16 +39057,12 @@ 1833315328,1833316351,GB 1833316352,1833318399,DK 1833318400,1833320447,GB -1833320448,1833320703,IQ -1833320704,1833320959,AE +1833320448,1833320959,AE 1833320960,1833321215,IQ 1833321216,1833321282,US 1833321283,1833321283,AE 1833321284,1833321471,US -1833321472,1833321727,IQ -1833321728,1833321983,AE -1833321984,1833322239,IQ -1833322240,1833322495,AE +1833321472,1833322495,AE 1833322496,1833324543,IT 1833324544,1833326591,NO 1833326592,1833328639,US @@ -43027,9 +39161,7 @@ 1833639936,1833644031,AM 1833644032,1833648127,TJ 1833648128,1833652223,LB -1833652224,1833656063,DE -1833656064,1833656319,GB -1833656320,1833660415,DE +1833652224,1833660415,DE 1833660416,1833664511,IT 1833664512,1833668607,RU 1833668608,1833672703,CZ @@ -43090,7 +39222,9 @@ 1835597824,1835606015,HU 1835606016,1835614207,CZ 1835614208,1835622399,RU -1835622400,1835630591,SE +1835622400,1835624959,SE +1835624960,1835625215,DK +1835625216,1835630591,SE 1835630592,1835646975,RU 1835646976,1835655167,BA 1835655168,1835663359,CY @@ -43143,13 +39277,11 @@ 1836048384,1836056575,RS 1836056576,1836580863,IT 1836580864,1836597247,RU -1836597248,1836597759,LU -1836597760,1836598271,DE -1836598272,1836601343,LU -1836601344,1836603391,DE -1836603392,1836605439,LU -1836605440,1836605695,DE -1836605696,1836613631,LU +1836597248,1836600831,LU +1836600832,1836604415,DE +1836604416,1836605439,LU +1836605440,1836605951,DE +1836605952,1836613631,LU 1836613632,1836630015,RU 1836630016,1836646399,BG 1836646400,1836679167,RS @@ -43159,22 +39291,46 @@ 1836744704,1836745983,FR 1836745984,1836746239,RE 1836746240,1836746495,FR -1836746496,1836747519,RE -1836747520,1836747775,FR -1836747776,1836750335,RE -1836750336,1836750591,FR -1836750592,1836756991,RE +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 1836756992,1836758015,FR -1836758016,1836759551,RE -1836759552,1836759807,FR -1836759808,1836761087,RE +1836758016,1836758783,RE +1836758784,1836759039,FR +1836759040,1836759551,RE +1836759552,1836760063,FR +1836760064,1836760319,RE +1836760320,1836760575,FR +1836760576,1836761087,RE 1836761088,1836777471,IR 1836777472,1836793855,SI 1836793856,1836810239,GB 1836810240,1836826623,RU 1836826624,1836843007,CZ 1836843008,1836875775,RU -1836875776,1836892159,SE +1836875776,1836876543,SE +1836876544,1836876639,RU +1836876640,1836892159,SE 1836892160,1836908543,RU 1836908544,1836924927,IE 1836924928,1836941311,DE @@ -43193,7 +39349,9 @@ 1839202304,1839235071,BG 1839235072,1839267839,IL 1839267840,1839300607,RU -1839300608,1839333375,BH +1839300608,1839330303,BH +1839330304,1839330559,US +1839330560,1839333375,BH 1839333376,1839366143,UA 1839366144,1839398911,IR 1839398912,1839431679,NO @@ -43300,9 +39458,7 @@ 1841799168,1841807359,DE 1841807360,1841815551,NO 1841815552,1841823743,BG -1841823744,1841829850,GB -1841829851,1841829851,FR -1841829852,1841831935,GB +1841823744,1841831935,GB 1841831936,1841840127,MT 1841840128,1841848319,PL 1841848320,1841856511,RU @@ -43334,15 +39490,11 @@ 1842053120,1842061311,ES 1842061312,1842069503,IR 1842069504,1842077695,RU -1842077696,1842079743,MQ -1842079744,1842080255,GP -1842080256,1842080511,MQ +1842077696,1842080511,MQ 1842080512,1842082047,GP -1842082048,1842082815,MQ -1842082816,1842083839,GP -1842083840,1842084351,MQ -1842084352,1842084863,GP -1842084864,1842085887,MQ +1842082048,1842082303,MQ +1842082304,1842082815,GP +1842082816,1842085887,MQ 1842085888,1842118655,GB 1842118656,1842151423,FI 1842151424,1842153471,FR @@ -43359,13 +39511,11 @@ 1842173952,1842175999,RO 1842176000,1842178047,FI 1842178048,1842180095,IT -1842180096,1842180403,IQ -1842180404,1842180407,US -1842180408,1842180607,IQ -1842180608,1842180863,US -1842180864,1842181399,IQ -1842181400,1842181407,US -1842181408,1842182143,IQ +1842180096,1842180607,IQ +1842180608,1842180791,US +1842180792,1842180799,IQ +1842180800,1842180863,US +1842180864,1842182143,IQ 1842182144,1842184191,LV 1842184192,1842186239,DE 1842186240,1842188287,ES @@ -43407,13 +39557,7 @@ 1842339840,1842343935,RU 1842343936,1842348031,UZ 1842348032,1843396607,FR -1843396608,1843403519,IQ -1843403520,1843403775,GB -1843403776,1843404287,IQ -1843404288,1843404543,US -1843404544,1843408895,IQ -1843408896,1843409919,US -1843409920,1843412991,IQ +1843396608,1843412991,IQ 1843412992,1843429375,CZ 1843429376,1843462143,GB 1843462144,1843478527,RU @@ -43533,9 +39677,7 @@ 1844115456,1844117503,DE 1844117504,1844119551,CZ 1844119552,1844121599,UA -1844121600,1844122111,ES -1844122112,1844122367,US -1844122368,1844123647,ES +1844121600,1844123647,ES 1844123648,1844125695,RU 1844125696,1844127743,NL 1844127744,1844129791,DE @@ -43549,11 +39691,7 @@ 1844144128,1844146175,SM 1844146176,1844148223,NO 1844148224,1844150271,GB -1844150272,1844151167,ES -1844151168,1844151295,GB -1844151296,1844151551,ES -1844151552,1844151807,GB -1844151808,1844152319,ES +1844150272,1844152319,ES 1844152320,1844154367,DE 1844154368,1844156415,GB 1844156416,1844158463,IT @@ -43562,11 +39700,13 @@ 1844162560,1844164607,CZ 1844164608,1844166655,RU 1844166656,1844168703,AZ -1844168704,1844169471,GI -1844169472,1844169727,US -1844169728,1844169759,GI -1844169760,1844169943,US -1844169944,1844169983,GI +1844168704,1844169503,GI +1844169504,1844169519,US +1844169520,1844169567,GI +1844169568,1844169583,US +1844169584,1844169769,GI +1844169770,1844169770,US +1844169771,1844169983,GI 1844169984,1844170239,US 1844170240,1844170751,GI 1844170752,1844174847,RU @@ -43613,9 +39753,7 @@ 1844359168,1844363263,IR 1844363264,1844367359,RU 1844367360,1844371455,CZ -1844371456,1844371711,GE -1844371712,1844371967,US -1844371968,1844375551,GE +1844371456,1844375551,GE 1844375552,1844379647,RU 1844379648,1844383743,IR 1844383744,1844387839,AZ @@ -43654,9 +39792,7 @@ 1845766144,1845768191,MY 1845768192,1845772287,JP 1845772288,1845788671,KR -1845788672,1845809919,JP -1845809920,1845810175,US -1845810176,1845837823,JP +1845788672,1845837823,JP 1845837824,1845839871,PH 1845839872,1845841919,IN 1845841920,1845846015,AU @@ -43896,13 +40032,13 @@ 1870462976,1870479359,JP 1870479360,1870480895,PH 1870480896,1870481151,US -1870481152,1870495743,PH +1870481152,1870487551,PH +1870487552,1870487807,US +1870487808,1870495743,PH 1870495744,1870497791,TW 1870497792,1870499839,IN 1870499840,1870501887,JP -1870501888,1870502655,AF -1870502656,1870502911,US -1870502912,1870503935,AF +1870501888,1870503935,AF 1870503936,1870512127,AU 1870512128,1870528511,IN 1870528512,1873281023,CN @@ -43988,9 +40124,7 @@ 1886224384,1886257151,CN 1886257152,1886322687,IN 1886322688,1886781439,CN -1886781440,1886846975,HK -1886846976,1886847231,CA -1886847232,1886978047,HK +1886781440,1886978047,HK 1886978048,1886986239,KR 1886986240,1886990335,TW 1886990336,1886994431,IN @@ -44011,8 +40145,7 @@ 1888038912,1888040959,CN 1888040960,1888059391,JP 1888059392,1888063487,VN -1888063488,1888067071,JP -1888067072,1888067583,US +1888063488,1888067583,JP 1888067584,1888071679,MY 1888071680,1888073727,KR 1888073728,1888239615,JP @@ -44034,9 +40167,7 @@ 1891958784,1892024319,VN 1892024320,1892122623,PH 1892122624,1892155391,SG -1892155392,1892480511,PH -1892480512,1892480639,AU -1892480640,1892941823,PH +1892155392,1892941823,PH 1892941824,1893015551,KR 1893015552,1893019647,AU 1893019648,1893023743,TW @@ -44190,9 +40321,7 @@ 1909161984,1909194751,PK 1909194752,1909456895,CN 1909456896,1909473279,JP -1909473280,1909475327,HK -1909475328,1909475583,US -1909475584,1909479939,HK +1909473280,1909479939,HK 1909479940,1909479940,US 1909479941,1909481471,HK 1909481472,1909587967,CN @@ -44301,10 +40430,9 @@ 1921388544,1921392639,PG 1921392640,1921400831,JP 1921400832,1921404927,ID -1921404928,1921405695,HK -1921405696,1921405823,SG +1921404928,1921405823,HK 1921405824,1921405855,MM -1921405856,1921405919,SG +1921405856,1921405919,HK 1921405920,1921405951,MM 1921405952,1921406975,HK 1921406976,1921409023,BD @@ -44335,7 +40463,9 @@ 1921945600,1921949695,HK 1921949696,1921953791,AU 1921953792,1921957887,JP -1921957888,1921974271,GU +1921957888,1921964031,GU +1921964032,1921964287,US +1921964288,1921974271,GU 1921974272,1922039807,IN 1922039808,1925447679,JP 1925447680,1925578751,CN @@ -44408,9 +40538,7 @@ 1934929920,1934931967,VN 1934931968,1934934015,JP 1934934016,1934942207,CN -1934942208,1934955007,PH -1934955008,1934955263,AU -1934955264,1934966783,PH +1934942208,1934966783,PH 1934966784,1934974975,ID 1934974976,1934983167,JP 1934983168,1934983423,MY @@ -44476,7 +40604,9 @@ 1940357120,1940389887,JP 1940389888,1940914175,CN 1940914176,1941045247,JP -1941045248,1941049343,HK +1941045248,1941046783,HK +1941046784,1941047295,AU +1941047296,1941049343,HK 1941049344,1941051391,AU 1941051392,1941052415,KH 1941052416,1941053439,AU @@ -44591,9 +40721,7 @@ 1951399936,1951662079,JP 1951662080,1951727615,KR 1951727616,1951793151,CN -1951793152,1952018431,SG -1952018432,1952018943,IN -1952018944,1952022527,SG +1951793152,1952022527,SG 1952022528,1952026623,TW 1952026624,1952030719,CN 1952030720,1952038911,KR @@ -44656,8 +40784,9 @@ 1959104512,1959106559,AU 1959106560,1959108607,JP 1959110656,1959112703,JP -1959112704,1959113727,IN -1959113728,1959116799,HK +1959112704,1959113215,HK +1959113216,1959113471,IN +1959113472,1959116799,HK 1959116800,1959133183,SG 1959133184,1959239679,CN 1959239680,1959241727,KR @@ -44826,7 +40955,8 @@ 1970798592,1970800639,SG 1970800640,1970803711,AU 1970803712,1970804223,HK -1970804224,1970804735,AU +1970804224,1970804479,AU +1970804480,1970804735,SG 1970804736,1970806783,KH 1970806784,1970808831,NZ 1970808832,1970810879,AU @@ -44848,7 +40978,9 @@ 1970962432,1970995199,CN 1970995200,1971060735,KR 1971060736,1975517183,CN -1975517184,1979711487,IN +1975517184,1976195839,IN +1976195840,1976196095,US +1976196096,1979711487,IN 1979711488,1981284351,JP 1981284352,1981546494,CN 1981546495,1981546495,SG @@ -44919,9 +41051,7 @@ 1986772992,1986789375,MY 1986789376,1987051519,JP 1987051520,1988034559,CN -1988034560,1988035071,AU -1988035072,1988035327,NZ -1988035328,1988067327,AU +1988034560,1988067327,AU 1988067328,1988075519,CN 1988075520,1988083711,AU 1988083712,1988158975,KR @@ -45017,7 +41147,9 @@ 1997723648,1997725695,JP 1997725696,1998061567,CN 1998061568,1998258175,JP -1998258176,1998274559,SG +1998258176,1998274047,SG +1998274048,1998274303,US +1998274304,1998274559,SG 1998274560,1998454783,CN 1998454784,1998456831,AU 1998456832,1998458879,JP @@ -45059,11 +41191,7 @@ 1999298560,1999306751,CN 1999306752,1999372287,IN 1999372288,1999503359,CN -1999503360,1999535359,TH -1999535360,1999535615,AU -1999535616,1999538175,TH -1999538176,1999540223,SG -1999540224,1999568895,TH +1999503360,1999568895,TH 1999568896,1999589375,JP 1999589376,1999591423,HK 1999591424,1999593471,ID @@ -45079,7 +41207,9 @@ 2000373760,2000375807,HK 2000375808,2000376319,AF 2000376320,2000376575,US -2000376576,2000377855,AF +2000376576,2000377087,AF +2000377088,2000377343,US +2000377344,2000377855,AF 2000377856,2000379903,JP 2000379904,2000388095,TH 2000388096,2000617471,CN @@ -45198,13 +41328,12 @@ 2013065216,2014314495,CN 2014314496,2014838783,AU 2014838784,2015100927,CN -2015100928,2015118847,PH -2015118848,2015119103,US -2015119104,2015166463,PH +2015100928,2015166463,PH 2015166464,2015182847,AU 2015182848,2015199231,PH 2015199232,2015203327,KR -2015203328,2015205375,US +2015203328,2015203839,JP +2015203840,2015205375,US 2015205376,2015207423,ID 2015207424,2015215615,JP 2015215616,2015219711,IN @@ -45243,8 +41372,8 @@ 2019035136,2019037183,CN 2019037184,2019041279,JP 2019041280,2019045375,IN -2019045376,2019045631,US -2019045632,2019049471,JP +2019045376,2019046399,US +2019046400,2019049471,JP 2019049472,2019078143,AU 2019078144,2019082239,IN 2019082240,2019098623,HK @@ -45265,9 +41394,7 @@ 2022184960,2022187007,KH 2022187008,2022187663,HK 2022187664,2022187679,US -2022187680,2022189055,HK -2022189056,2022189311,AU -2022189312,2022189651,HK +2022187680,2022189651,HK 2022189652,2022189652,HK 2022189653,2022191103,HK 2022191104,2022195199,NZ @@ -45348,12 +41475,7 @@ 2033664000,2033696767,KR 2033696768,2033708799,GU 2033708800,2033709055,US -2033709056,2033710591,GU -2033710592,2033710847,US -2033710848,2033712383,GU -2033712384,2033712639,US -2033712640,2033712895,GU -2033712896,2033713151,US +2033709056,2033713151,GU 2033713152,2033876991,CN 2033876992,2033879039,JP 2033879040,2033887231,CN @@ -45382,9 +41504,7 @@ 2036598784,2036600831,JP 2036600832,2036604927,ID 2036604928,2036609023,SG -2036609024,2036610047,AF -2036610048,2036610303,US -2036610304,2036611071,AF +2036609024,2036611071,AF 2036611072,2036613119,JP 2036613120,2036629503,KR 2036629504,2036678655,CN @@ -45443,7 +41563,8 @@ 2047082496,2047475711,CN 2047475712,2047492095,HK 2047492096,2047496191,KR -2047496192,2047526911,CN +2047496192,2047508479,HK +2047508480,2047526911,CN 2047526912,2047531007,HK 2047531008,2047574015,CN 2047574016,2047606783,SG @@ -45464,7 +41585,8 @@ 2050097152,2050099199,SG 2050099200,2050101247,IN 2050101248,2050113535,JP -2050113536,2050129919,SG +2050113536,2050129663,SG +2050129664,2050129919,JP 2050129920,2050162687,IN 2050162688,2050228223,CN 2050228224,2050490367,PH @@ -45491,8 +41613,9 @@ 2053515264,2053519359,ID 2053519360,2053521407,JP 2053521408,2053529599,CN -2053529600,2053532671,AU -2053532672,2053533695,NZ +2053529600,2053532927,AU +2053532928,2053533183,NZ +2053533184,2053533695,AU 2053533696,2053534719,VN 2053534720,2053537791,IN 2053537792,2053636095,JP @@ -45530,13 +41653,7 @@ 2056265728,2056273919,TW 2056273920,2056290303,PH 2056290304,2056323071,CN -2056323072,2056340991,JP -2056340992,2056341247,US -2056341248,2056341503,JP -2056341504,2056341759,US -2056341760,2056342271,JP -2056342272,2056342527,US -2056342528,2056388607,JP +2056323072,2056388607,JP 2056388608,2056519679,TW 2056519680,2056781823,AU 2056781824,2056794111,JP @@ -45564,7 +41681,6 @@ 2059931648,2059933695,IN 2059933696,2059935743,AU 2059935744,2059937791,JP -2059937792,2059939839,BD 2059939840,2059941887,ID 2059941888,2059943935,AU 2059943936,2059960319,CN @@ -45577,13 +41693,9 @@ 2059976704,2059995135,JP 2059995136,2059997183,VN 2059997184,2060001279,MN -2060001280,2060001535,HK -2060001536,2060001791,US -2060001792,2060002303,HK -2060002304,2060002559,US +2060001280,2060002559,HK 2060002560,2060002815,ID -2060002816,2060003071,US -2060003072,2060004351,HK +2060002816,2060004351,HK 2060004352,2060004607,US 2060004608,2060005119,HK 2060005120,2060005375,US @@ -45609,26 +41721,26 @@ 2063081472,2063085567,ID 2063085568,2063089663,CN 2063089664,2063097855,JP -2063097856,2063106047,MM +2063097856,2063098367,MM +2063098368,2063098495,SG +2063098496,2063106047,MM 2063106048,2063107071,JP 2063107072,2063107327,AP 2063107328,2063107623,JP 2063107624,2063107631,AU 2063107632,2063111679,JP 2063111680,2063112191,AU -2063112192,2063113215,JP -2063113216,2063114239,AU -2063114240,2063114495,JP +2063112192,2063114495,JP 2063114496,2063114751,IN 2063114752,2063115007,JP 2063115008,2063115263,IN 2063115264,2063118335,JP 2063118336,2063118591,IN 2063118592,2063119871,JP -2063119872,2063120383,IN -2063120384,2063120895,JP -2063120896,2063121151,AU -2063121152,2063122431,JP +2063119872,2063119999,IN +2063120000,2063120383,JP +2063120384,2063121407,AU +2063121408,2063122431,JP 2063122432,2063138815,SG 2063138816,2063335423,JP 2063335424,2063341567,AU @@ -45636,8 +41748,7 @@ 2063343616,2063351807,JP 2063351808,2063368191,KR 2063368192,2063372287,JP -2063372288,2063372543,AU -2063372544,2063374335,AP +2063372288,2063374335,AP 2063374336,2063376383,NZ 2063376384,2063380479,TW 2063380480,2063382527,KH @@ -45833,12 +41944,11 @@ 2082324480,2082340863,PK 2082340864,2082406399,IN 2082406400,2082471935,CN -2082471936,2083004415,JP -2083004416,2083012607,US +2082471936,2083007231,JP +2083007232,2083012607,US 2083012608,2083024895,JP 2083024896,2083053567,CN 2083053568,2083057663,TH -2083057664,2083058687,AU 2083058688,2083059711,IN 2083059712,2083061759,ID 2083061760,2083110911,JP @@ -45879,9 +41989,7 @@ 2087462912,2087464959,CN 2087464960,2087467007,KH 2087467008,2087469055,JP -2087469056,2087477759,HK -2087477760,2087478015,AU -2087478016,2087485439,HK +2087469056,2087485439,HK 2087485440,2087501823,TW 2087501824,2087518207,JP 2087518208,2087519231,TH @@ -45956,7 +42064,9 @@ 2093383680,2093416447,NZ 2093416448,2093432831,KR 2093432832,2093445119,TW -2093445120,2093449215,AF +2093445120,2093448447,AF +2093448448,2093448703,US +2093448704,2093449215,AF 2093449216,2093481983,KR 2093481984,2094006271,CN 2094006272,2094530559,JP @@ -45996,11 +42106,7 @@ 2097545216,2097610751,JP 2097610752,2097643519,AU 2097643520,2097676287,KR -2097676288,2098114815,JP -2098114816,2098115071,US -2098115072,2098122495,JP -2098122496,2098122751,US -2098122752,2098200575,JP +2097676288,2098200575,JP 2098200576,2098623239,IN 2098623240,2098623240,PG 2098623241,2098724863,IN @@ -46011,9 +42117,7 @@ 2099216384,2099232767,KR 2099232768,2100297727,CN 2100297728,2100854783,JP -2100854784,2100874495,US -2100874496,2100874751,AU -2100874752,2100887551,US +2100854784,2100887551,US 2100887552,2100953087,KR 2100953088,2100969471,VN 2100969472,2100985855,JP @@ -46059,19 +42163,15 @@ 2111111168,2111143935,CN 2111143936,2111152127,ID 2111152128,2111160319,AU -2111160320,2111161855,AF -2111161856,2111162111,US -2111162112,2111164159,AF -2111164160,2111164415,US -2111164416,2111168511,AF +2111160320,2111161599,AF +2111161600,2111161855,US +2111161856,2111168511,AF 2111168512,2111176703,TH 2111176704,2111193087,VN 2111193088,2111201279,AU 2111201280,2111209471,CN 2111209472,2111217663,JP -2111217664,2111225343,LK -2111225344,2111225599,SG -2111225600,2111225855,LK +2111217664,2111225855,LK 2111225856,2111242239,HK 2111242240,2111258623,CN 2111258624,2111275007,JP @@ -46081,13 +42181,15 @@ 2112487424,2112618495,VN 2112618496,2112880639,NZ 2112880640,2113683455,KR -2113683456,2113687551,MY -2113687552,2113688575,AU -2113688576,2113688831,MY -2113688832,2113691647,AU -2113691648,2113692671,JP -2113692672,2113692927,HK -2113692928,2113716223,JP +2113683456,2113685247,JP +2113685248,2113685311,PH +2113685312,2113685759,JP +2113685760,2113686015,MY +2113686016,2113687807,JP +2113687808,2113688063,AU +2113688064,2113693695,JP +2113693696,2113693951,HK +2113693952,2113716223,JP 2113716224,2113732607,SG 2113732608,2113761279,AU 2113761280,2113765375,VN @@ -46103,7 +42205,7 @@ 2147485696,2147487743,DK 2147487744,2147489791,NO 2147489792,2147491839,RU -2147491840,2147500031,RO +2147491840,2147500031,DE 2147500032,2147502079,NL 2147502080,2147504127,DK 2147504128,2147508223,RU @@ -46205,9 +42307,7 @@ 2156716032,2156718079,RO 2156718080,2156720127,IS 2156720128,2156724223,BY -2156724224,2156760063,CH -2156760064,2156761087,FR -2156761088,2156855295,CH +2156724224,2156855295,CH 2156855296,2156920831,US 2156920832,2156986367,CA 2156986368,2159017983,US @@ -46270,11 +42370,11 @@ 2166575360,2166575615,GB 2166575616,2166598655,US 2166598656,2166598911,FR -2166598912,2166606079,US -2166606080,2166606335,DE -2166606336,2166606847,US -2166606848,2166607103,DE -2166607104,2166613759,US +2166598912,2166606335,US +2166606336,2166606591,FR +2166606592,2166607009,US +2166607010,2166607011,DE +2166607012,2166613759,US 2166613760,2166614015,DE 2166614016,2168193023,US 2168193024,2168258559,JP @@ -46348,17 +42448,13 @@ 2178351104,2178416639,GB 2178416640,2178482175,US 2178482176,2178547711,DE -2178547712,2178826239,US -2178826240,2178830335,BR -2178830336,2179173887,US -2179173888,2179174143,SE -2179174144,2179348479,US -2179348480,2179348735,DE -2179348736,2179379199,US +2178547712,2179379199,US 2179379200,2179395583,GB 2179395584,2179397632,US 2179397633,2179397633,GB -2179397634,2179465215,US +2179397634,2179398143,US +2179398144,2179398399,GB +2179398400,2179465215,US 2179530752,2179596287,DE 2179596288,2179661823,GB 2179661824,2179989503,US @@ -46435,9 +42531,9 @@ 2184577024,2184642559,JP 2184642560,2184708095,US 2184708096,2184773631,AU -2184773632,2184781311,US -2184781312,2184781567,AU -2184781568,2184904703,US +2184773632,2184803839,US +2184803840,2184804351,GB +2184804352,2184904703,US 2184904704,2185035775,CH 2185035776,2185166847,US 2185166848,2185232383,CA @@ -46508,22 +42604,28 @@ 2188706103,2188706453,EU 2188706454,2188706454,DK 2188706455,2188707839,EU -2188707840,2188708351,FR -2188708352,2188711800,EU +2188707840,2188708863,FR +2188708864,2188711800,EU 2188711801,2188711801,DE -2188711802,2188717055,EU -2188717056,2188717183,FR -2188717184,2188718581,EU +2188711802,2188716031,EU +2188716032,2188718079,FR +2188718080,2188718581,EU 2188718582,2188718582,DE 2188718583,2188724463,EU 2188724464,2188724464,NL -2188724465,2188726783,EU +2188724465,2188724991,EU +2188724992,2188725247,IL +2188725248,2188726783,EU 2188726784,2188727039,GB 2188727040,2188728319,EU 2188728320,2188728575,GB 2188728576,2188734463,EU -2188734464,2188738559,GB -2188738560,2188768767,EU +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 @@ -46578,10 +42680,11 @@ 2193184768,2193186815,ES 2193186816,2193188863,PL 2193188864,2193190911,DE -2193190912,2193195007,RU 2193195008,2193199103,DK 2193199104,2193201151,GB -2193201152,2193203199,SE +2193201152,2193202175,SE +2193202176,2193202431,US +2193202432,2193203199,SE 2193203200,2193205247,GB 2193205248,2193207295,FR 2193207296,2193209343,CZ @@ -46623,9 +42726,7 @@ 2195069437,2195069437,AP 2195069438,2195073023,US 2195073024,2195073279,EU -2195073280,2195079167,US -2195079168,2195079423,IN -2195079424,2195193855,US +2195073280,2195193855,US 2195193856,2195324927,NZ 2195324928,2195455999,US 2195456000,2195521535,AU @@ -46828,9 +42929,9 @@ 2226716672,2226782207,GB 2226782208,2226847743,AE 2226847744,2226913279,DE -2226913280,2226921571,US -2226921572,2226921572,EU -2226921573,2227052543,US +2226913280,2226921471,US +2226921472,2226921727,EU +2226921728,2227052543,US 2227052544,2227052609,EU 2227052610,2227052610,CH 2227052611,2227052799,EU @@ -46911,15 +43012,7 @@ 2250047488,2250113023,US 2250113024,2250178559,DE 2250178560,2250244095,CA -2250244096,2250249471,US -2250249472,2250249727,GB -2250249728,2250254335,US -2250254336,2250256383,GB -2250256384,2250268671,US -2250268672,2250272767,GB -2250272768,2250285055,US -2250285056,2250293247,GB -2250293248,2250375167,US +2250244096,2250375167,US 2250375168,2250440703,DE 2250440704,2250506239,US 2250506240,2250571775,GB @@ -47011,19 +43104,26 @@ 2258594816,2258596095,AU 2258596096,2258596351,HK 2258596352,2258596863,AP -2258596864,2258597293,AU -2258597294,2258597294,PG -2258597295,2258597375,AU +2258596864,2258597119,AU +2258597120,2258597375,PG 2258597376,2258597439,HK -2258597440,2258601471,AU +2258597440,2258598079,AU +2258598080,2258598087,TW +2258598088,2258598639,AU +2258598640,2258598655,TW +2258598656,2258601471,AU 2258601472,2258601983,JP -2258601984,2258604799,AU +2258601984,2258602431,AU +2258602432,2258602447,HK +2258602448,2258602879,AU +2258602880,2258603263,HK +2258603264,2258604799,AU 2258604800,2258605055,AP -2258605056,2258607871,AU +2258605056,2258606079,AU +2258606080,2258606335,HK +2258606336,2258607871,AU 2258607872,2258608639,HK -2258608640,2258608842,AU -2258608843,2258608843,US -2258608844,2258609663,AU +2258608640,2258609663,AU 2258609664,2258610175,HK 2258610176,2258610431,IN 2258610432,2258610687,AU @@ -47050,9 +43150,7 @@ 2260598784,2260664319,CA 2260664320,2260723711,GB 2260723712,2260723967,IL -2260723968,2260726783,GB -2260726784,2260727039,IE -2260727040,2260729343,GB +2260723968,2260729343,GB 2260729344,2260729599,IL 2260729600,2260729855,GB 2260729856,2260991999,US @@ -47062,11 +43160,7 @@ 2261254144,2261385215,US 2261385216,2261450751,PR 2261450752,2261516287,NL -2261516288,2261569535,US -2261569536,2261569791,TH -2261569792,2261573631,US -2261573632,2261573887,GB -2261573888,2261647359,US +2261516288,2261647359,US 2261647360,2261712895,FR 2261712896,2261778431,US 2261778432,2261843967,TW @@ -47151,11 +43245,9 @@ 2292842496,2292908031,GB 2292908032,2292973567,US 2292973568,2293039103,DE -2293039104,2293080575,LU -2293080576,2293080831,BE -2293080832,2293085183,LU -2293085184,2293085439,BE -2293085440,2293104639,LU +2293039104,2293080063,LU +2293080064,2293088255,BE +2293088256,2293104639,LU 2293104640,2293891071,US 2293891072,2293956607,AU 2293956608,2294022143,JP @@ -47179,13 +43271,7 @@ 2297626624,2297692159,DE 2297692160,2298118655,US 2298118656,2298118911,GB -2298118912,2298142719,US -2298142720,2298150911,GB -2298150912,2298362879,US -2298362880,2298363903,GB -2298363904,2298370047,US -2298370048,2298372095,GB -2298372096,2298395903,US +2298118912,2298395903,US 2298395904,2298396159,GB 2298396160,2299461631,US 2299461632,2299527167,CA @@ -47211,9 +43297,9 @@ 2302541824,2302607359,CH 2302672896,2302935039,US 2302935040,2303000575,KR -2303000576,2303189503,US -2303189504,2303189759,IE -2303189760,2303190527,US +2303000576,2303189557,US +2303189558,2303189558,IE +2303189559,2303190527,US 2303190528,2303190783,AP 2303190784,2303262719,US 2303262720,2303328255,GB @@ -47247,13 +43333,7 @@ 2307129344,2307194879,SG 2307194880,2307260415,NO 2307260416,2307522559,US -2307522560,2307530751,CH -2307530752,2307534847,FR -2307534848,2307536895,CH -2307536896,2307538943,FR -2307538944,2307545087,CH -2307545088,2307547135,FR -2307547136,2307588095,CH +2307522560,2307588095,CH 2307588096,2308112383,US 2308112384,2308177919,AU 2308177920,2308243455,US @@ -47315,7 +43395,9 @@ 2315649024,2315714559,SE 2315714560,2315780095,AU 2315780096,2315911167,US -2315911168,2316042239,CA +2315911168,2315976703,CA +2315976704,2315976959,US +2315976960,2316042239,CA 2316042240,2316173311,US 2316173312,2316238847,SE 2316238848,2316500991,US @@ -47331,11 +43413,10 @@ 2317395968,2317396223,NO 2317396224,2317398015,US 2317398016,2317398271,GB -2317398272,2317412351,US -2317412352,2317413375,CA +2317398272,2317413119,US +2317413120,2317413375,CA 2317413376,2317413631,ID -2317413632,2317414399,CA -2317414400,2317414655,US +2317413632,2317414655,US 2317414656,2317414911,AU 2317414912,2317417983,US 2317417984,2317418239,AP @@ -47402,13 +43483,10 @@ 2328231936,2328297471,GB 2328297472,2328314367,EU 2328314368,2328314623,NL -2328314624,2328316159,EU -2328316160,2328316415,FR -2328316416,2328316671,EU -2328316672,2328316927,FR -2328316928,2328317439,EU +2328314624,2328317439,EU 2328317440,2328317695,NL -2328317696,2328363007,EU +2328317696,2328317951,FR +2328317952,2328363007,EU 2328363008,2328494079,DE 2328494080,2328559615,US 2328559616,2328625151,BE @@ -47425,7 +43503,9 @@ 2329477120,2329542655,AU 2329542656,2329608191,CA 2329673728,2329739263,US -2329739264,2330180863,CH +2329739264,2330084351,CH +2330084352,2330084607,US +2330084608,2330180863,CH 2330180864,2330181119,SE 2330181120,2330263551,CH 2330263552,2330267647,US @@ -47561,13 +43641,9 @@ 2344353792,2344419327,AU 2344419328,2344484863,CN 2344484864,2344550399,PK -2344550400,2344554495,EU -2344554496,2344554751,IT -2344554752,2344570879,EU -2344570880,2344574975,IT -2344574976,2344583167,EU -2344583168,2344591359,ES -2344591360,2344615935,EU +2344550400,2344566783,EU +2344566784,2344574975,IT +2344574976,2344615935,EU 2344615936,2344878079,ID 2344878080,2346188799,CN 2346188800,2346450943,AU @@ -47675,18 +43751,14 @@ 2365456384,2365521919,US 2365521920,2365587455,CN 2365587456,2365589503,JO -2365589504,2365589643,US -2365589644,2365589645,AU -2365589646,2365590527,US +2365589504,2365590527,US 2365590528,2365591039,NO 2365591040,2365591455,US 2365591456,2365591551,NO 2365591552,2365593599,DE 2365593600,2365595647,NL 2365595648,2365603839,GB -2365603840,2365623497,NO -2365623498,2365623498,SE -2365623499,2365624319,NO +2365603840,2365624319,NO 2365624320,2365630463,GB 2365630464,2365632511,NL 2365632512,2365634559,RU @@ -47710,7 +43782,9 @@ 2366308352,2366368255,GB 2366368256,2366368511,FR 2366368512,2366369791,GB -2366369792,2366373887,FR +2366369792,2366370815,FR +2366370816,2366371071,GB +2366371072,2366373887,FR 2366373888,2370579746,DE 2370579747,2370579747,DE 2370579748,2370895871,DE @@ -47756,9 +43830,7 @@ 2372796416,2372993023,US 2372993024,2373025791,DE 2373025792,2373026047,SG -2373026048,2373034239,DE -2373034240,2373034495,BR -2373034496,2373058559,DE +2373026048,2373058559,DE 2373058560,2373124095,US 2373124096,2373189631,FR 2373189632,2373255167,US @@ -47807,9 +43879,9 @@ 2374688768,2374696959,GB 2374696960,2374959103,US 2374959104,2375352319,SE -2375352320,2376079615,US -2376079616,2376079871,GB -2376079872,2376269823,US +2375352320,2376233215,US +2376233216,2376233471,AU +2376233472,2376269823,US 2376269824,2376335359,GB 2376335360,2376597503,US 2376597504,2376663039,AU @@ -47886,8 +43958,8 @@ 2382168064,2382233599,BE 2382233600,2382299135,US 2382299136,2382331903,GR -2382331904,2382338303,FR -2382338304,2382340095,NL +2382331904,2382335999,FR +2382336000,2382340095,NL 2382340096,2382342143,CH 2382342144,2382344191,AT 2382344192,2382346239,NL @@ -48033,14 +44105,14 @@ 2382684160,2382692351,US 2382692352,2383085567,CA 2383085568,2383151103,US -2383151104,2385193983,CA -2385193984,2385194239,GB -2385194240,2385903615,CA +2383151104,2385903615,CA 2385903616,2385915903,US 2385915904,2385919999,CA 2385920000,2385945007,US 2385945008,2385945015,MX -2385945016,2385969151,US +2385945016,2385968127,US +2385968128,2385968383,CA +2385968384,2385969151,US 2385969152,2386067455,CA 2386067456,2386083839,US 2386083840,2386624511,CA @@ -48081,13 +44153,9 @@ 2394947584,2395013119,US 2395013120,2395209727,CA 2395209728,2395340799,US -2395340800,2395804159,CA -2395804160,2395804415,GB -2395804416,2395814911,CA -2395814912,2395815423,US -2395815424,2395841279,CA -2395841280,2395841535,GB -2395841536,2398748671,CA +2395340800,2397700095,CA +2397700096,2397765631,US +2397765632,2398748671,CA 2398748672,2398879743,US 2398945280,2399010815,CA 2399010816,2399109119,US @@ -48104,8 +44172,8 @@ 2402549760,2402680831,GB 2402680832,2402746367,BR 2402746368,2402945023,US -2402945024,2402946047,GB -2402946048,2403401727,US +2402945024,2402945279,GB +2402945280,2403401727,US 2403401728,2403467263,GB 2403467264,2404974591,US 2404974592,2405040127,HK @@ -48121,9 +44189,7 @@ 2405629952,2405695487,CH 2405695488,2406088703,US 2406088704,2406285311,BR -2406285312,2406808575,US -2406808576,2406808831,IN -2406808832,2406809599,US +2406285312,2406809599,US 2406809600,2406875135,GB 2406875136,2406940671,SE 2406940672,2407006207,AU @@ -48208,26 +44274,24 @@ 2417688576,2417754111,SE 2417754112,2418016255,US 2418016256,2418081791,GB -2418081792,2418309119,US -2418309120,2418309375,PL -2418309376,2418311167,US +2418081792,2418311167,US 2418311168,2418313215,IN 2418313216,2418315263,US -2418315264,2418317311,IN -2418317312,2418323007,US +2418315264,2418315775,IN +2418315776,2418323007,US 2418323008,2418323008,PH 2418323009,2418323455,US 2418323456,2418331647,IN 2418331648,2418332159,US -2418332160,2418332671,IN -2418332672,2418333183,US -2418333184,2418333695,IN -2418333696,2418336767,US -2418336768,2418337279,IN -2418337280,2418337791,US -2418337792,2418338815,IN -2418338816,2418339839,US -2418339840,2418343935,IN +2418332160,2418332415,IN +2418332416,2418336767,US +2418336768,2418337535,IN +2418337536,2418337791,US +2418337792,2418338047,IN +2418338048,2418338303,US +2418338304,2418338815,IN +2418338816,2418341887,US +2418341888,2418343935,IN 2418343936,2418606079,US 2418606080,2418671615,DE 2418671616,2418737151,US @@ -48264,9 +44328,7 @@ 2422210560,2422276095,US 2422276096,2422341631,AU 2422341632,2422407167,GB -2422407168,2422605823,US -2422605824,2422606079,DE -2422606080,2423128063,US +2422407168,2423128063,US 2423128064,2423193599,AU 2423193600,2423717887,US 2423717888,2423783423,NL @@ -48291,18 +44353,14 @@ 2427536896,2427537151,US 2427537152,2427544575,NO 2427544576,2427544831,AP -2427544832,2427551999,NO -2427552000,2427552255,AU -2427552256,2427584511,NO +2427544832,2427584511,NO 2427584512,2427650047,GB 2427650048,2427846655,NO 2427846656,2428174335,US 2428174336,2428178431,GB 2428178432,2428183562,US 2428183563,2428183563,EU -2428183564,2428212223,US -2428212224,2428212479,IN -2428212480,2428567551,US +2428183564,2428567551,US 2428567552,2428633087,NO 2428633088,2428696831,CA 2428696832,2428697087,EU @@ -48323,13 +44381,16 @@ 2429943808,2430009343,HK 2430009344,2432172031,US 2432172032,2432237567,BE -2432237568,2432573439,US -2432573440,2432575999,GB -2432576000,2432576511,DE -2432576512,2432581631,GB -2432581632,2432602879,US +2432237568,2432575487,US +2432575488,2432576511,DE +2432576512,2432577535,US +2432577536,2432579583,GB +2432579584,2432602879,US 2432602880,2432603135,PL -2432603136,2432614399,US +2432603136,2432604159,US +2432604160,2432606207,GB +2432606208,2432610303,US +2432610304,2432614399,IT 2432614400,2432616447,NL 2432616448,2432616448,US 2432616449,2432617472,NL @@ -48337,19 +44398,13 @@ 2432630784,2432696319,CN 2432696320,2433247231,NL 2433247232,2433247487,GB -2433247488,2435091455,NL -2435091456,2435091967,IN -2435091968,2435115775,NL +2433247488,2435115775,NL 2435115776,2435116031,GB 2435116032,2436767743,NL 2436767744,2436767874,EU 2436767875,2436767875,DE 2436767876,2436767999,EU -2436768000,2436924927,NL -2436924928,2436925183,DE -2436925184,2437813503,NL -2437813504,2437813759,GB -2437813760,2446983167,NL +2436768000,2446983167,NL 2446983168,2447048703,EU 2447048704,2447376383,NL 2447376384,2447441919,GB @@ -48364,7 +44419,9 @@ 2447966208,2448031743,GB 2448031744,2448097279,CH 2448097280,2448162815,SE -2448162816,2448228351,HU +2448162816,2448174591,HU +2448174592,2448174847,RO +2448174848,2448228351,HU 2448228352,2448293887,PL 2448293888,2448359423,FR 2448359424,2448424959,GB @@ -48421,11 +44478,7 @@ 2451031040,2451031295,AP 2451031296,2451035135,US 2451035136,2451035391,EU -2451035392,2451042815,US -2451042816,2451043071,ZA -2451043072,2451044863,US -2451044864,2451045119,TH -2451045120,2451986959,US +2451035392,2451986959,US 2451986960,2451986960,GB 2451986961,2452619263,US 2452619264,2452684799,IT @@ -48513,7 +44566,9 @@ 2457075712,2457141247,AU 2457206784,2457272319,AU 2457272320,2457337855,FI -2457337856,2457403391,CZ +2457337856,2457398271,CZ +2457398272,2457400319,RU +2457400320,2457403391,CZ 2457403392,2457599999,US 2457600000,2457665535,GR 2457665536,2458058751,US @@ -48536,7 +44591,9 @@ 2459893760,2459959295,CH 2459959296,2460024831,US 2460024832,2460090367,FI -2460090368,2460155903,GB +2460090368,2460152319,GB +2460152320,2460152831,FR +2460152832,2460155903,GB 2460155904,2460221439,US 2460221440,2460286975,BR 2460286976,2460549119,US @@ -48563,7 +44620,9 @@ 2461609984,2461611575,BE 2461611576,2461611583,NL 2461611584,2461612031,BE -2461612032,2461614079,IL +2461612032,2461613567,IL +2461613568,2461613823,PS +2461613824,2461614079,IL 2461614080,2461630463,TR 2461630464,2461663231,RU 2461663232,2461794303,US @@ -48667,15 +44726,11 @@ 2469855232,2470182911,US 2470182912,2470183167,CH 2470183168,2470183423,AP -2470183424,2470197759,CH -2470197760,2470198015,SG -2470198016,2470248447,CH +2470183424,2470248447,CH 2470248448,2470510591,US 2470510592,2470576127,BR 2470576128,2470641663,AU -2470641664,2470642687,LU -2470642688,2470642943,BE -2470642944,2470707199,LU +2470641664,2470707199,LU 2470707200,2470772735,GB 2470772736,2470838271,AU 2470838272,2471165951,US @@ -48698,7 +44753,9 @@ 2472673280,2472869887,FR 2472869888,2472935423,US 2472935424,2473000959,GR -2473000960,2473394175,US +2473000960,2473344255,US +2473344256,2473344511,GB +2473344512,2473394175,US 2473394176,2473459711,AU 2473459712,2473525247,ZA 2473525248,2473656319,NO @@ -48779,7 +44836,9 @@ 2481455104,2481520639,SK 2481520640,2481848319,IL 2481848320,2482175999,US -2482176000,2482236415,FI +2482176000,2482231295,FI +2482231296,2482231551,CN +2482231552,2482236415,FI 2482236416,2482236671,CN 2482236672,2482241535,FI 2482241536,2482634751,US @@ -48807,11 +44866,9 @@ 2488401920,2488532991,NO 2488532992,2488795135,US 2488795136,2488860671,GB -2488860672,2489995519,US -2489995520,2489995544,AU +2488860672,2489995544,US 2489995545,2489995545,AP -2489995546,2489995775,AU -2489995776,2490007551,US +2489995546,2490007551,US 2490007552,2490007807,GB 2490007808,2490041599,US 2490041600,2490041855,AP @@ -48821,9 +44878,7 @@ 2490236928,2490302463,LU 2490302464,2490695679,US 2490695680,2490761215,CA -2490761216,2491070463,NO -2491070464,2491070719,US -2491070720,2491154431,NO +2490761216,2491154431,NO 2491154432,2491875327,US 2491875328,2492006399,SE 2492006400,2492071935,US @@ -48845,19 +44900,15 @@ 2494103552,2494169087,FR 2494169088,2494562303,US 2494562304,2494627839,GB -2494627840,2494655487,US -2494655488,2494655743,MX -2494655744,2494660607,US +2494627840,2494650367,US +2494650368,2494652415,BR +2494652416,2494660607,US 2494660608,2494661119,EU -2494661120,2494675199,US -2494675200,2494675455,JP -2494675456,2494676991,US +2494661120,2494676991,US 2494676992,2494681087,AU 2494681088,2494683391,US 2494683392,2494683647,AP -2494683648,2494689023,US -2494689024,2494689279,PH -2494689280,2494689791,US +2494683648,2494689791,US 2494689792,2494690047,IN 2494690048,2494889983,US 2494889984,2494955519,GB @@ -48867,12 +44918,16 @@ 2495217664,2495283199,US 2495283200,2495348735,CH 2495348736,2495348991,US -2495348992,2495349247,DE +2495348992,2495349051,DE +2495349052,2495349052,EU +2495349053,2495349247,DE 2495349248,2495351039,US 2495351040,2495351295,EU 2495351296,2495353143,US 2495353144,2495353144,EU -2495353145,2495412223,US +2495353145,2495410943,US +2495410944,2495411199,AU +2495411200,2495412223,US 2495412224,2495412479,AP 2495412480,2495807487,US 2495807488,2495873023,AU @@ -48902,40 +44957,39 @@ 2500141312,2500141471,US 2500141472,2500141503,IE 2500141504,2500141823,US -2500141824,2500144127,IE +2500141824,2500142847,IE +2500142848,2500142975,US +2500142976,2500144127,IE 2500144128,2500144895,US 2500144896,2500145151,IE 2500145152,2500149247,US -2500149248,2500149503,GB -2500149504,2500158463,US -2500158464,2500158975,GB -2500158976,2500161023,US -2500161024,2500161535,GB -2500161536,2500162047,US -2500162048,2500162303,GB -2500162304,2500175871,US +2500149248,2500149759,GB +2500149760,2500157439,US +2500157440,2500165631,GB +2500165632,2500175871,US 2500175872,2500175879,RO -2500175880,2500188159,US -2500188160,2500188671,CH -2500188672,2500198911,US +2500175880,2500198911,US 2500198912,2500199167,GB 2500199168,2500199423,US -2500199424,2500199679,IE -2500199680,2500225553,US +2500199424,2500199935,IE +2500199936,2500218879,US +2500218880,2500220927,DE +2500220928,2500225553,US 2500225554,2500225561,ES 2500225562,2500227071,US 2500227072,2500229119,FR -2500229120,2500231679,US +2500229120,2500231167,GB +2500231168,2500231679,US 2500231680,2500231935,ES -2500231936,2500232703,US -2500232704,2500233215,BE -2500233216,2500235775,US +2500231936,2500235775,US 2500235776,2500236031,GB 2500236032,2500236837,US 2500236838,2500236838,ES 2500236839,2500238047,US 2500238048,2500238055,FR -2500238056,2500238383,US +2500238056,2500238079,US +2500238080,2500238335,YT +2500238336,2500238383,US 2500238384,2500238399,DE 2500238400,2500238463,US 2500238464,2500238527,DE @@ -48945,21 +44999,22 @@ 2500240896,2500241407,FR 2500241408,2500245503,US 2500245504,2500245759,GB -2500245760,2500246015,US -2500246016,2500246271,GB -2500246272,2500272127,US +2500245760,2500272127,US 2500272128,2500280319,GB 2500280320,2500288511,US 2500288512,2500288767,FR -2500288768,2500292607,US -2500292608,2500292863,DE -2500292864,2500392959,US +2500288768,2500296703,DE +2500296704,2500392959,US 2500392960,2500393215,IN 2500393216,2500393983,US 2500393984,2500394239,GB 2500394240,2500535295,US 2500535296,2500535551,IE -2500535552,2500616191,US +2500535552,2500537343,US +2500537344,2500537599,GB +2500537600,2500555263,US +2500555264,2500555519,FR +2500555520,2500616191,US 2500616192,2500616703,IT 2500616704,2500636735,US 2500636736,2500636799,GB @@ -48969,7 +45024,9 @@ 2500647936,2500648959,FR 2500648960,2500719615,US 2500719616,2500720639,IE -2500720640,2501574655,US +2500720640,2500723711,US +2500723712,2500723967,ES +2500723968,2501574655,US 2501574656,2501640191,KZ 2501640192,2503016447,US 2503016448,2503081983,IL @@ -48988,9 +45045,7 @@ 2503911424,2503915519,ES 2503915520,2503917567,IT 2503917568,2503933951,BG -2503933952,2504892415,US -2504892416,2504900607,IN -2504900608,2506293247,US +2503933952,2506293247,US 2506293248,2506358783,CA 2506358784,2507124735,US 2507124736,2507124991,IN @@ -49122,9 +45177,7 @@ 2524971008,2525036543,ES 2525102080,2525233151,US 2525233152,2525298687,SE -2525298688,2525331455,US -2525331456,2525333503,AU -2525333504,2525626367,US +2525298688,2525626367,US 2525626368,2525757439,CN 2525757440,2525822975,GR 2525822976,2526085119,US @@ -49203,9 +45256,7 @@ 2543583232,2543648767,SE 2543648768,2543714303,NO 2543714304,2543779839,JP -2543779840,2544046847,US -2544046848,2544047103,GB -2544047104,2544500735,US +2543779840,2544500735,US 2544500736,2544566271,GB 2544566272,2544631807,US 2544697344,2544828415,US @@ -49229,8 +45280,8 @@ 2546039040,2547187711,US 2547187712,2547318783,GB 2547318784,2547515391,US -2547515392,2547523583,DE -2547531776,2547548159,FR +2547523584,2547531775,IT +2547580928,2547646463,DE 2548039680,2548563967,GB 2548563968,2548826111,IR 2548826112,2548834303,AT @@ -49291,7 +45342,9 @@ 2549929984,2549932031,DE 2549932032,2549940223,HR 2549940224,2550136831,RO -2550136832,2554227967,US +2550136832,2554211383,US +2554211384,2554211387,AP +2554211388,2554227967,US 2554227968,2554228223,EU 2554228224,2554462207,US 2554462208,2554527743,HU @@ -49343,7 +45396,9 @@ 2557673472,2557739007,DK 2557739008,2557870079,US 2557870080,2557935615,ID -2557935616,2558789571,US +2557935616,2558658499,US +2558658500,2558658500,PR +2558658501,2558789571,US 2558789572,2558789572,PR 2558789573,2558918655,US 2558918656,2558984191,GB @@ -49393,9 +45448,7 @@ 2570190848,2572681215,US 2572681216,2572746751,SE 2572746752,2572943359,US -2572943360,2573353983,DE -2573353984,2573354239,BE -2573354240,2573402111,DE +2572943360,2573402111,DE 2573402112,2573467647,CN 2573467648,2573533183,DE 2573533184,2573598719,CN @@ -49404,11 +45457,7 @@ 2573991936,2574123007,CH 2574123008,2574188543,NO 2574188544,2574254079,NZ -2574254080,2574286847,SE -2574286848,2574287103,AU -2574287104,2574311423,SE -2574311424,2574311679,CN -2574311680,2574319615,SE +2574254080,2574319615,SE 2574319616,2574647295,US 2574647296,2574778367,CN 2574778368,2583691263,JP @@ -49424,15 +45473,29 @@ 2584739840,2585001983,US 2585001984,2585067519,CA 2585067520,2585788415,US -2585788416,2585828351,GB -2585828352,2585828607,JE -2585828608,2585853951,GB +2585788416,2585853951,GB 2585853952,2585985023,JP -2585985024,2586619903,US +2585985024,2586607615,US +2586607616,2586610687,GB +2586610688,2586611199,ES +2586611200,2586615807,GB +2586615808,2586619903,US 2586619904,2586620415,FR -2586620416,2587018239,US +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 2587018240,2587018495,IE -2587018496,2587067647,US +2587018496,2587066879,US +2587066880,2587067135,GB +2587067136,2587067647,US 2587067648,2587067903,GB 2587067904,2587951103,US 2600534016,2600665087,US @@ -49488,9 +45551,7 @@ 2609119232,2609184767,FR 2609184768,2609250303,DE 2609250304,2609381375,US -2609381376,2609428479,GB -2609428480,2609428735,IN -2609428736,2609446911,GB +2609381376,2609446911,GB 2609446912,2609512447,DK 2609512448,2609643519,US 2609643520,2609677815,GB @@ -49547,7 +45608,9 @@ 2616770304,2616770559,EU 2616770560,2616786943,US 2616786944,2616852479,GB -2616852480,2616885527,DE +2616852480,2616885247,DE +2616885248,2616885503,FR +2616885504,2616885527,DE 2616885528,2616885529,EU 2616885530,2616918015,DE 2616983552,2617049087,US @@ -49607,9 +45670,7 @@ 2622750720,2623602687,US 2623602688,2623668223,CL 2623668224,2624192511,US -2624192512,2624256255,CH -2624256256,2624256511,FR -2624256512,2624258047,CH +2624192512,2624258047,CH 2624258048,2624266495,US 2624266496,2624266751,AP 2624266752,2624391696,US @@ -49726,7 +45787,9 @@ 2647326720,2647392255,GB 2647392256,2647457791,US 2647457792,2647523327,JP -2647523328,2647851007,US +2647523328,2647687167,US +2647687168,2647687423,CA +2647687424,2647851007,US 2647851008,2647916543,AU 2647916544,2648899583,US 2648899584,2648965119,IN @@ -49776,9 +45839,7 @@ 2654644224,2654646271,IT 2654646272,2654648319,FR 2654648320,2654650367,IR -2654650368,2654658559,BG -2654658560,2654659583,GB -2654659584,2654666751,BG +2654650368,2654666751,BG 2654666752,2654994431,US 2654994432,2655059967,LU 2655059968,2655125503,US @@ -49809,9 +45870,7 @@ 2658009088,2658074623,IT 2658074624,2658140159,US 2658140160,2658205695,NO -2658205696,2658451455,US -2658451456,2658451711,MY -2658451712,2658459648,US +2658205696,2658459648,US 2658459649,2658459649,EU 2658459650,2658598911,US 2658598912,2658664447,GB @@ -49904,7 +45963,10 @@ 2667536384,2667544575,FR 2667544576,2667560959,RU 2667560960,2667565055,IT -2667565056,2667567103,AT +2667565056,2667566335,AT +2667566336,2667566591,US +2667566592,2667566847,DE +2667566848,2667567103,AT 2667567104,2667569151,SE 2667569152,2667571199,GB 2667571200,2667573247,ES @@ -50023,11 +46085,9 @@ 2677407744,2677473279,US 2677473280,2677538815,FR 2677538816,2677604351,FI -2677604352,2677639679,US -2677639680,2677639935,CA -2677639936,2677641215,US -2677641216,2677641471,CA -2677641472,2677644287,US +2677604352,2677639167,US +2677639168,2677640191,CA +2677640192,2677644287,US 2677644288,2677644347,GB 2677644348,2677644348,EU 2677644349,2677644543,GB @@ -50035,11 +46095,7 @@ 2677669888,2677735423,DE 2677735424,2677800959,US 2677800960,2677866495,CH -2677866496,2677924863,US -2677924864,2677925119,GB -2677925120,2677931519,US -2677931520,2677931775,SG -2677931776,2677997567,US +2677866496,2677997567,US 2677997568,2678063103,CA 2678063104,2678128639,UA 2678128640,2678194175,US @@ -50081,7 +46137,9 @@ 2679242752,2679308287,US 2679308288,2679373823,CH 2679373824,2679439359,GB -2679439360,2680029183,US +2679439360,2679525631,US +2679525632,2679525887,BR +2679525888,2680029183,US 2680029184,2680094719,SE 2680094720,2680225791,US 2680225792,2680356863,SE @@ -50105,7 +46163,9 @@ 2681798656,2681864191,FR 2681864192,2681929727,US 2681929728,2681995263,GB -2681995264,2682257407,US +2681995264,2682107903,US +2682107904,2682108159,GB +2682108160,2682257407,US 2682257408,2682322943,UA 2682322944,2682388479,US 2682388480,2682454015,CN @@ -50188,7 +46248,9 @@ 2687299120,2687299127,US 2687299128,2687301375,DE 2687301376,2687301631,NL -2687301632,2687762431,DE +2687301632,2687560191,DE +2687560192,2687560447,ZA +2687560448,2687762431,DE 2687762432,2687827967,AT 2687827968,2687893503,CH 2687893504,2688221183,DE @@ -50239,9 +46301,7 @@ 2689802240,2689810431,GB 2689810432,2689818623,US 2689818624,2689819135,IN -2689819136,2689820927,US -2689820928,2689821183,HK -2689821184,2689826815,US +2689819136,2689826815,US 2689826816,2689835007,JP 2689835008,2689843199,AU 2689843200,2689925119,US @@ -50260,9 +46320,7 @@ 2691301376,2691366911,CA 2691366912,2691760127,US 2691825664,2691891199,HU -2691891200,2692489727,ZA -2692489728,2692489983,SZ -2692489984,2692546559,ZA +2691891200,2692546559,ZA 2692546560,2694840319,US 2696151040,2696216575,IT 2696413184,2697789439,JP @@ -50325,9 +46383,7 @@ 2704277504,2704343039,FR 2704343040,2704408575,US 2704408576,2704474111,AU -2704474112,2704478207,US -2704478208,2704478463,SG -2704478464,2704485119,US +2704474112,2704485119,US 2704485120,2704485375,AU 2704485376,2704539647,US 2704539648,2704605183,SE @@ -50344,9 +46400,7 @@ 2705522688,2705588223,ES 2705588224,2705596159,US 2705596160,2705596415,CA -2705596416,2705621759,US -2705621760,2705622015,CH -2705622016,2705691647,US +2705596416,2705691647,US 2705691648,2705692671,GB 2705692672,2705710079,US 2705710080,2705711103,IN @@ -50360,7 +46414,11 @@ 2706243584,2706309119,CH 2706309120,2706374655,BR 2706374656,2706571263,US -2706571264,2707226623,NL +2706571264,2706694911,NL +2706694912,2706695167,US +2706695168,2706964223,NL +2706964224,2706964479,US +2706964480,2707226623,NL 2707226624,2707488767,JP 2707488768,2707619839,US 2707619840,2707947519,GB @@ -50397,9 +46455,7 @@ 2710700032,2710765567,AU 2710765568,2710831103,IT 2710831104,2710896639,BR -2710896640,2711042047,US -2711042048,2711042303,JP -2711042304,2711093247,US +2710896640,2711093247,US 2711093248,2711158783,AU 2711158784,2711486463,US 2711486464,2711551999,NL @@ -50448,26 +46504,20 @@ 2719481856,2719547391,US 2719547392,2719612927,AT 2719612928,2719678463,CH -2719678464,2719719423,US -2719719424,2719719935,PL -2719719936,2720399359,US +2719678464,2720399359,US 2720399360,2720464895,FR 2720464896,2721382399,US 2721382400,2721447935,CA 2721447936,2722627583,US -2722693120,2722754559,CA -2722754560,2722754815,GB -2722754816,2722758655,CA -2722758656,2722812415,US -2722812416,2722812671,BR -2722812672,2723479551,US +2722693120,2722758655,CA +2722758656,2723479551,US 2723479552,2723545087,CA 2723545088,2723610623,CH 2723610624,2723832575,US 2723832576,2723832831,GB -2723832832,2724293375,US -2724293376,2724293631,HK -2724293632,2724724735,US +2723832832,2723852287,US +2723852288,2723852543,GB +2723852544,2724724735,US 2724790272,2724855807,CN 2724855808,2724921343,CA 2724921344,2725249023,US @@ -50542,11 +46592,7 @@ 2746351616,2746417151,CR 2746417152,2746482687,CN 2746482688,2746548223,KR -2746548224,2746749695,US -2746749696,2746749951,SG -2746749952,2747037695,US -2747037696,2747037951,CA -2747037952,2747072511,US +2746548224,2747072511,US 2747072512,2747138047,AU 2747138048,2747465727,US 2747465728,2748055551,ZA @@ -50610,9 +46656,7 @@ 2754150400,2754215935,BR 2754215936,2754281471,PR 2754281472,2754347007,JP -2754347008,2754366207,US -2754366208,2754366463,CA -2754366464,2754478079,US +2754347008,2754478079,US 2754478080,2754543615,JP 2754543616,2754609151,US 2754609152,2754674687,SE @@ -50691,9 +46735,7 @@ 2760566784,2760568831,IQ 2760568832,2760570879,FR 2760570880,2760572927,NL -2760572928,2760574719,DE -2760574720,2760574975,PL -2760574976,2760638463,DE +2760572928,2760638463,DE 2760638464,2760703999,NL 2760704000,2760769535,FI 2760769536,2760835071,IT @@ -50753,9 +46795,7 @@ 2773010688,2773024767,US 2773090304,2773221375,US 2773221376,2773286911,JP -2773286912,2773352447,US -2773352448,2773417983,CA -2773417984,2773745663,US +2773286912,2773745663,US 2773745664,2773811199,NZ 2773811200,2773876735,US 2773876736,2773942271,AU @@ -50770,15 +46810,14 @@ 2775318528,2775384063,JP 2775384064,2775711743,US 2775711744,2775777279,NL -2775777280,2775806335,CA -2775806336,2775806463,US +2775777280,2775806207,CA +2775806208,2775806463,US 2775806464,2775842815,CA 2775842816,2775973887,US 2775973888,2776039423,AU 2776039424,2776478207,US 2776478208,2776478463,EU -2776478464,2776478719,ZA -2776478720,2776478975,US +2776478464,2776478975,US 2776478976,2776479231,AU 2776479232,2776697614,US 2776697615,2776697615,EU @@ -50971,18 +47010,12 @@ 2789148360,2789148367,CN 2789148368,2789148399,US 2789148400,2789148407,PA -2789148408,2789187583,US -2789187584,2789191679,GB -2789191680,2789212159,US +2789148408,2789212159,US 2789212160,2789277695,AU 2789277696,2789343231,NZ 2789343232,2789933055,US 2789933056,2789998591,CL -2789998592,2790148145,US -2790148146,2790148147,MY -2790148148,2790148353,US -2790148354,2790148355,MY -2790148356,2790195199,US +2789998592,2790195199,US 2790195200,2790260735,KR 2790260736,2790326271,US 2790391808,2790457343,US @@ -51009,17 +47042,27 @@ 2793209856,2793275391,KR 2793275392,2796748799,US 2796748800,2796814335,NZ -2796814336,2798412543,US +2796814336,2798393343,US +2798393344,2798394367,PR +2798394368,2798412543,US 2798412544,2798412799,PR -2798412800,2798452223,US +2798412800,2798429439,US +2798429440,2798430207,PR +2798430208,2798452223,US 2798452224,2798452479,PR -2798452480,2798838015,US +2798452480,2798784511,US +2798784512,2798786559,CO +2798786560,2798821375,US +2798821376,2798829567,CO +2798829568,2798838015,US 2798838016,2798838271,CO -2798838272,2800566271,US -2800566272,2800568319,PA -2800568320,2800587263,US -2800587264,2800587519,PA -2800587520,2800600319,US +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 @@ -51027,31 +47070,9 @@ 2800609024,2800609791,PA 2800609792,2800610303,US 2800610304,2800610559,PA -2800610560,2800611327,US -2800611328,2800611839,PA -2800611840,2800612095,US -2800612096,2800612351,PA -2800612352,2800613887,US -2800613888,2800614143,PA -2800614144,2800617983,US -2800617984,2800618239,CO -2800618240,2800618495,US -2800618496,2800619519,CO -2800619520,2800623615,US -2800623616,2800627711,CO -2800627712,2800646143,US -2800646144,2800648191,CO -2800648192,2800652287,US -2800652288,2800656383,CO -2800656384,2800658431,US -2800658432,2800660479,CO -2800660480,2800662783,US -2800662784,2800663039,CO -2800663040,2800664575,US -2800664576,2800668671,CO -2800668672,2800669183,US -2800669184,2800669695,CO -2800669696,2802386186,US +2800610560,2800637951,US +2800637952,2800639999,CO +2800640000,2802386186,US 2802386187,2802386187,EU 2802386188,2802515967,US 2802515968,2802581503,CA @@ -51071,9 +47092,7 @@ 2807236864,2807237119,EU 2807237120,2807259647,US 2807259648,2807260159,AP -2807260160,2807262463,US -2807262464,2807262719,AT -2807262720,2807267327,US +2807260160,2807267327,US 2807267328,2807275519,AU 2807275520,2807824383,US 2807824384,2807889919,CA @@ -51125,7 +47144,7 @@ 2813329408,2813526015,US 2813526016,2813591551,NZ 2813591552,2813908479,US -2813908480,2813908735,AU +2813908480,2813908735,SG 2813908736,2814181375,US 2814181376,2814246911,AU 2814246912,2814377215,US @@ -51171,13 +47190,15 @@ 2817061120,2817062911,LU 2817062912,2817325055,US 2817325056,2817325311,EU -2817325312,2817933056,US -2817933057,2817933058,CA -2817933059,2817986303,US +2817325312,2817933055,US +2817933056,2817933311,CA +2817933312,2817986303,US 2817986304,2817986559,AP -2817986560,2818003722,US +2817986560,2818003711,US +2818003712,2818003722,GB 2818003723,2818003723,EU -2818003724,2818038537,US +2818003724,2818003967,GB +2818003968,2818038537,US 2818038538,2818038538,AP 2818038539,2818310143,US 2818310144,2818375679,AR @@ -51185,9 +47206,7 @@ 2818637824,2818703359,CH 2818703360,2822848997,US 2822848998,2822848998,EU -2822848999,2822960639,US -2822960640,2822960895,GB -2822960896,2823159807,US +2822848999,2823159807,US 2823159808,2823225343,HK 2823225344,2823553023,US 2823553024,2823618559,ZA @@ -51197,9 +47216,11 @@ 2823815168,2823946239,ZA 2823946240,2824011775,US 2824011776,2824077311,AR -2824077312,2824274720,US +2824077312,2824274687,US +2824274688,2824274720,CH 2824274721,2824274721,EU -2824274722,2824289279,US +2824274722,2824274943,CH +2824274944,2824289279,US 2824289280,2824289535,GB 2824289536,2824357375,US 2824357376,2824357631,GB @@ -51246,11 +47267,7 @@ 2827991488,2827991503,US 2827991504,2827991519,US 2827991520,2828009471,US -2828009472,2828034047,CA -2828034048,2828042239,US -2828042240,2828055295,CA -2828055296,2828055551,FR -2828055552,2828075007,CA +2828009472,2828075007,CA 2828075008,2828533759,US 2828533760,2828664831,AU 2828664832,2828730367,KR @@ -51283,11 +47300,9 @@ 2829385728,2829451263,MX 2829451264,2829516799,US 2829516800,2829582335,BW -2829582336,2829590783,US -2829590784,2829591033,GB +2829582336,2829591033,US 2829591034,2829591034,EU -2829591035,2829591039,GB -2829591040,2829593343,US +2829591035,2829593343,US 2829593344,2829593599,EU 2829593600,2829844479,US 2829844480,2829910015,ZA @@ -51302,7 +47317,13 @@ 2830761984,2830827519,AU 2830827520,2830830335,KW 2830830336,2830830591,US -2830830592,2830853887,KW +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 @@ -51318,15 +47339,13 @@ 2832793600,2832859135,AU 2832859136,2832924671,US 2832924672,2832990207,KR -2832990208,2833252607,US -2833252608,2833252863,GB -2833252864,2833293311,US +2832990208,2833252621,US +2833252622,2833252622,GB +2833252623,2833293311,US 2833293312,2833293567,EU 2833293568,2833383423,US 2833383424,2833448959,AR -2833580032,2833646079,US -2833646080,2833646335,IN -2833646336,2833707007,US +2833580032,2833707007,US 2833707008,2833707263,GB 2833707264,2833711103,US 2833711104,2833776639,CL @@ -51354,9 +47373,7 @@ 2844902656,2844902911,SG 2844902912,2844912639,US 2844912640,2844912895,JP -2844912896,2845411327,US -2845411328,2845411583,CA -2845411584,2845704191,US +2844912896,2845704191,US 2845704192,2845755391,CU 2845755392,2845755647,EU 2845755648,2845769727,CU @@ -51369,21 +47386,13 @@ 2850029568,2851995647,US 2852126720,2852716653,US 2852716654,2852716654,AU -2852716655,2852765695,US -2852765696,2852765823,GB -2852765824,2853041663,US -2853041664,2853041919,GB -2853041920,2853306367,US +2852716655,2853306367,US 2853306368,2853371903,CL 2853371904,2853765119,US 2853765120,2853830655,MX 2853830656,2854617087,US 2854617088,2854682623,MY -2854748160,2854811647,US -2854811648,2854812159,IN -2854812160,2854812415,TH -2854812416,2854812671,IN -2854812672,2855469055,US +2854748160,2855469055,US 2855469056,2855483391,PY 2855483392,2855485439,AR 2855485440,2855501823,UY @@ -51394,9 +47403,9 @@ 2855811584,2855811839,DE 2855811840,2856058879,US 2856058880,2856124415,CH -2856124416,2856189439,US -2856189440,2856189695,AU -2856189696,2856452095,US +2856124416,2856184831,US +2856184832,2856185855,GB +2856185856,2856452095,US 2856452096,2856517631,BR 2856517632,2856714239,US 2856714240,2856779775,MX @@ -51419,9 +47428,7 @@ 2861876992,2861881087,US 2861881088,2861881343,GB 2861881344,2861957119,US -2862022656,2862153727,US -2862153728,2862154239,CA -2862154240,2862284799,US +2862022656,2862284799,US 2862284800,2862350335,AR 2862350336,2862415871,US 2862415872,2862481407,AU @@ -51446,29 +47453,22 @@ 2865954816,2867593215,US 2867593216,2867724287,CH 2867855360,2868117503,US -2868379648,2868383743,IN -2868383744,2868585983,US -2868585984,2868586239,GB -2868586240,2868605183,US -2868605184,2868605439,NO -2868605440,2868658175,US +2868379648,2868605376,US +2868605377,2868605377,NO +2868605378,2868658175,US 2868658176,2868660223,GB 2868660224,2868660479,EU 2868660480,2868662271,US 2868662272,2868662527,EU -2868662528,2868673023,US -2868673024,2868673279,FR +2868662528,2868673279,US 2868673280,2868673535,ZA -2868673536,2868674559,US +2868673536,2868674336,US +2868674337,2868674337,EU +2868674338,2868674559,US 2868674560,2868682751,AU -2868682752,2868682752,PH +2868682752,2868682752,US 2868682753,2868682753,AP -2868682754,2868683007,PH -2868683008,2868689407,US -2868689408,2868689663,AU -2868689664,2868689919,US -2868689920,2868690175,SG -2868690176,2868772863,US +2868682754,2868772863,US 2868838400,2868903935,BE 2868903936,2869035007,SG 2869035008,2869166079,JP @@ -51476,9 +47476,11 @@ 2869428224,2869952511,CN 2869952512,2870018047,FR 2870018048,2870083583,DE -2870083584,2870090495,FR +2870083584,2870089727,FR +2870089728,2870090495,DE 2870090496,2870090751,BE -2870090752,2870149119,FR +2870090752,2870091775,DE +2870091776,2870149119,FR 2870149120,2870214655,HU 2870214656,2870280191,DK 2870280192,2870345727,NL @@ -51543,13 +47545,13 @@ 2871132160,2872049663,CN 2872049664,2873098239,IN 2873098240,2873368575,US -2873368576,2873376767,IN +2873368576,2873368831,IN +2873368832,2873369087,US +2873369088,2873376767,IN 2873376768,2873884671,US 2873884672,2874146815,IN 2874146816,2875195391,CN -2875195392,2875390719,TH -2875390720,2875390975,NO -2875390976,2875719679,TH +2875195392,2875719679,TH 2875719680,2877292543,CN 2877292544,2879332607,US 2879332608,2879332863,GB @@ -51594,7 +47596,29 @@ 2899968000,2900099071,CA 2900099072,2900361215,US 2902458368,2902462463,US -2902462464,2902475263,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 @@ -51622,38 +47646,20 @@ 2905045248,2905045503,SG 2905045504,2905350729,US 2905350730,2905350730,US -2905350731,2905376119,US -2905376120,2905376127,MX -2905376128,2905376199,US -2905376200,2905376207,PH -2905376208,2905376223,GB -2905376224,2905376231,PH -2905376232,2905376391,US +2905350731,2905376391,US 2905376392,2905376399,PK 2905376400,2905376415,US -2905376416,2905376423,AZ +2905376416,2905376423,CN 2905376424,2905376431,TW 2905376432,2905376447,US 2905376448,2905376455,HK 2905376456,2905376463,PK -2905376464,2905376471,HK -2905376472,2905376511,US -2905376512,2905376575,HK -2905376576,2905376607,CN +2905376464,2905376607,US 2905376608,2905376615,CA -2905376616,2905376735,US -2905376736,2905376743,PH -2905376744,2905377023,US -2905377024,2905377223,CA -2905377224,2905377231,US -2905377232,2905377255,CA -2905377256,2905377503,US +2905376616,2905377503,US 2905377504,2905377511,ID 2905377512,2905377519,MY -2905377520,2905378495,US -2905378496,2905378503,GB -2905378504,2905378511,US -2905378512,2905378559,GB +2905377520,2905378559,US 2905378560,2905378815,CA 2905378816,2905379071,US 2905379072,2905379327,CA @@ -51661,9 +47667,7 @@ 2905380608,2905380863,CA 2905380864,2905382559,US 2905382560,2905382591,EE -2905382592,2905384959,US -2905384960,2905385215,CA -2905385216,2905385879,US +2905382592,2905385879,US 2905385880,2905385887,PH 2905385888,2905385911,US 2905385912,2905385919,VN @@ -51685,14 +47689,20 @@ 2905391616,2905394175,US 2905394176,2905394687,CA 2905394688,2905404703,US -2905404704,2905404799,IN +2905404704,2905404759,IN +2905404760,2905404767,MY +2905404768,2905404799,IN 2905404800,2905404943,US 2905404944,2905404951,MY -2905404952,2905405055,US +2905404952,2905404975,US +2905404976,2905404983,MY +2905404984,2905405055,US 2905405056,2905405063,CN 2905405064,2905405071,US 2905405072,2905405079,HK -2905405080,2905405439,US +2905405080,2905405167,US +2905405168,2905405199,MY +2905405200,2905405439,US 2905405440,2905405447,MY 2905405448,2905405679,US 2905405680,2905405687,CN @@ -51705,8 +47715,8 @@ 2905415936,2905446655,US 2905446656,2905446911,DE 2905446912,2905449983,US -2905449984,2905451007,CA -2905451008,2905451487,US +2905449984,2905450495,CA +2905450496,2905451487,US 2905451488,2905451503,CW 2905451504,2905451519,US 2905451520,2905451647,PA @@ -51741,299 +47751,13 @@ 2915527680,2915528715,NL 2915528716,2915528719,US 2915528720,2915528783,NL -2915528784,2915765279,US -2915765280,2915765287,IN -2915765288,2915765367,US -2915765368,2915765375,ZA -2915765376,2915765431,US -2915765432,2915765439,MX -2915765440,2915765471,US -2915765472,2915765479,CA -2915765480,2915765671,US -2915765672,2915765679,AU -2915765680,2915766079,US -2915766080,2915766095,BR -2915766096,2915766447,US -2915766448,2915766463,GB -2915766464,2915766559,US -2915766560,2915766591,GB -2915766592,2915766839,US -2915766840,2915766847,DE -2915766848,2915767663,US -2915767664,2915767679,NZ -2915767680,2915767695,GB -2915767696,2915767743,US -2915767744,2915767775,GB -2915767776,2915767895,US -2915767896,2915767903,KW -2915767904,2915768191,US -2915768192,2915768199,GB -2915768200,2915768303,US -2915768304,2915768311,MX -2915768312,2915768359,US -2915768360,2915768367,GB -2915768368,2915768431,US -2915768432,2915768439,IE -2915768440,2915768703,US -2915768704,2915768767,GB -2915768768,2915768903,US -2915768904,2915768911,GR -2915768912,2915769095,US -2915769096,2915769103,BB -2915769104,2915769111,US -2915769112,2915769119,BB -2915769120,2915769239,US -2915769240,2915769247,CA -2915769248,2915769295,US -2915769296,2915769303,BR -2915769304,2915770167,US -2915770168,2915770175,BR -2915770176,2915770255,US -2915770256,2915770263,CA -2915770264,2915770279,JE -2915770280,2915770311,US -2915770312,2915770319,MX -2915770320,2915771103,US -2915771104,2915771135,CA -2915771136,2915772671,US -2915772672,2915772679,IN -2915772680,2915772711,US -2915772712,2915772719,GB -2915772720,2915772751,US -2915772752,2915772759,DE -2915772760,2915773023,US -2915773024,2915773039,IN -2915773040,2915773175,US -2915773176,2915773183,KW -2915773184,2915773791,US -2915773792,2915773807,CA -2915773808,2915773839,JE -2915773840,2915794959,US -2915794960,2915794975,MX -2915794976,2915795007,US -2915795008,2915795023,MX -2915795024,2915795263,US -2915795264,2915795279,NZ -2915795280,2915795343,US -2915795344,2915795359,NZ -2915795360,2915795535,US -2915795536,2915795551,CA -2915795552,2915795727,US -2915795728,2915795743,CA -2915795744,2915795967,US -2915795968,2915795975,GB -2915795976,2915795983,US -2915795984,2915795991,AE -2915795992,2915796039,US -2915796040,2915796047,MX -2915796048,2915796055,US -2915796056,2915796063,MX -2915796064,2915796135,US -2915796136,2915796143,CA -2915796144,2915796151,US -2915796152,2915796159,AR -2915796160,2915796199,US -2915796200,2915796207,IL -2915796208,2915796303,US -2915796304,2915796311,MX -2915796312,2915796351,US -2915796352,2915796359,CA -2915796360,2915796399,US -2915796400,2915796407,PE -2915796408,2915796431,US -2915796432,2915796439,AU -2915796440,2915796495,US -2915796496,2915796503,IL -2915796504,2915796631,US -2915796632,2915796639,BR -2915796640,2915796647,US -2915796648,2915796655,AU -2915796656,2915796711,US -2915796712,2915796719,GB -2915796720,2915796815,US -2915796816,2915796823,CA -2915796824,2915796919,US -2915796920,2915796927,BR -2915796928,2915796967,US -2915796968,2915796975,BR -2915796976,2915797151,US -2915797152,2915797159,MX -2915797160,2915797447,US -2915797448,2915797455,CA -2915797456,2915797463,MX -2915797464,2915797543,US -2915797544,2915797551,CA -2915797552,2915797559,IN -2915797560,2915797727,US -2915797728,2915797735,IL -2915797736,2915797767,US -2915797768,2915797775,MX -2915797776,2915797871,US -2915797872,2915797879,IN -2915797880,2915797895,US -2915797896,2915797903,MX -2915797904,2915798079,US -2915798080,2915798111,IN -2915798112,2915798687,US -2915798688,2915798719,BR -2915798720,2915798943,US -2915798944,2915798975,PH -2915798976,2915799007,US -2915799008,2915799039,CA -2915799040,2915799047,US -2915799048,2915799055,ES -2915799056,2915799167,US -2915799168,2915799175,GB -2915799176,2915799183,US -2915799184,2915799191,GB -2915799192,2915799199,JE -2915799200,2915799215,US -2915799216,2915799223,MX -2915799224,2915799327,US -2915799328,2915799335,TH -2915799336,2915799431,US -2915799432,2915799439,TH -2915799440,2915799535,US -2915799536,2915799543,JP -2915799544,2915799591,US -2915799592,2915799599,IN -2915799600,2915799775,US -2915799776,2915799791,PR -2915799792,2915799807,CA -2915799808,2915799903,US -2915799904,2915799911,CA -2915799912,2915799935,US -2915799936,2915799943,AR -2915799944,2915800055,US -2915800056,2915800063,NZ -2915800064,2915800231,US -2915800232,2915800239,AU -2915800240,2915800271,US -2915800272,2915800279,AU -2915800280,2915800415,US -2915800416,2915800423,GB -2915800424,2915800519,US -2915800520,2915800527,PH -2915800528,2915800543,US -2915800544,2915800551,IN -2915800552,2915800631,US -2915800632,2915800639,TH -2915800640,2915800663,US -2915800664,2915800679,BG -2915800680,2915800711,US -2915800712,2915800719,CA -2915800720,2915800735,US -2915800736,2915800743,CA -2915800744,2915800751,US -2915800752,2915800759,CL -2915800760,2915800903,US -2915800904,2915800911,IL -2915800912,2915800951,US -2915800952,2915800959,GB -2915800960,2915801679,US -2915801680,2915801687,MX -2915801688,2915801871,US -2915801872,2915801879,BR -2915801880,2915801991,US -2915801992,2915801999,IL -2915802000,2915802319,US -2915802320,2915802327,AW -2915802328,2915802351,US -2915802352,2915802359,AW -2915802360,2915802375,US -2915802376,2915802383,CA -2915802384,2915802415,US -2915802416,2915802423,CA -2915802424,2915802551,US -2915802552,2915802559,AU -2915802560,2915802711,US -2915802712,2915802719,ZA -2915802720,2915802895,US -2915802896,2915802903,PH -2915802904,2915802999,US -2915803000,2915803007,RU -2915803008,2915803191,US -2915803192,2915803199,CA -2915803200,2915803207,GB -2915803208,2915803239,US -2915803240,2915803247,BR -2915803248,2915803295,US -2915803296,2915803311,CA -2915803312,2915803327,ID -2915803328,2915803783,US -2915803784,2915803791,CN -2915803792,2915803815,US -2915803816,2915803823,PE -2915803824,2915804375,US -2915804376,2915804383,BR -2915804384,2915804519,US -2915804520,2915804527,CN -2915804528,2915804591,US -2915804592,2915804599,CA -2915804600,2915804679,US -2915804680,2915804687,CA -2915804688,2915804759,US -2915804760,2915804767,NZ -2915804768,2915804791,US -2915804792,2915804799,GB -2915804800,2915804807,US -2915804808,2915804815,NZ -2915804816,2915804847,US -2915804848,2915804855,CO -2915804856,2915805055,US -2915805056,2915805063,GB -2915805064,2915805375,US -2915805376,2915805391,PH -2915805392,2915805439,US -2915805440,2915805455,BR -2915805456,2915806735,US -2915806736,2915806751,IT -2915806752,2915806823,US -2915806824,2915806831,IN -2915806832,2915806863,US -2915806864,2915806871,IN -2915806872,2915806895,US -2915806896,2915806903,CA -2915806904,2915806967,US -2915806968,2915806975,CA -2915806976,2915807271,US -2915807272,2915807279,GB -2915807280,2915807287,US -2915807288,2915807295,ZA -2915807296,2915807439,US -2915807440,2915807447,CA -2915807448,2915807455,US -2915807456,2915807463,PT -2915807464,2915807559,US -2915807560,2915807567,CA -2915807568,2915807607,US -2915807608,2915807615,IL -2915807616,2915808095,US -2915808096,2915808103,CA -2915808104,2915808183,US -2915808184,2915808191,CA -2915808192,2915808247,US -2915808248,2915808255,DE -2915808256,2915810335,US -2915810336,2915810343,GB -2915810344,2915810351,MX -2915810352,2915810431,US -2915810432,2915810439,AU -2915810440,2915810471,US -2915810472,2915810479,GB -2915810480,2915811135,US -2915811136,2915811199,IN -2915811200,2915821791,US -2915821792,2915821823,IL -2915821824,2915958783,US +2915528784,2915795013,US +2915795014,2915795014,MX +2915795015,2915958783,US 2915958784,2916024319,CA 2916024320,2916098191,US 2916098192,2916098207,CA -2916098208,2916101535,US -2916101536,2916101543,CA -2916101544,2916101615,US -2916101616,2916101623,CA -2916101624,2916104703,US +2916098208,2916104703,US 2916104704,2916104719,ZA 2916104720,2916110399,US 2916110400,2916110407,LK @@ -52043,13 +47767,7 @@ 2916111328,2916111343,CA 2916111344,2916111687,US 2916111688,2916111695,CA -2916111696,2916112175,US -2916112176,2916112191,CA -2916112192,2916112367,US -2916112368,2916112383,CA -2916112384,2916118223,US -2916118224,2916118231,LK -2916118232,2916120823,US +2916111696,2916120823,US 2916120824,2916120831,CA 2916120832,2916121367,US 2916121368,2916121375,CA @@ -52092,9 +47810,7 @@ 2916441120,2916441151,CA 2916441152,2916443151,US 2916443152,2916443159,GB -2916443160,2916443614,US -2916443615,2916443615,CA -2916443616,2916515839,US +2916443160,2916515839,US 2916515840,2916519935,CA 2916519936,2916525087,US 2916525088,2916525103,PE @@ -52113,16 +47829,17 @@ 2916544960,2916547839,US 2916547840,2916547871,BZ 2916547872,2916581375,US -2916581376,2916614143,PR +2916581376,2916594687,PR +2916594688,2916594943,US +2916594944,2916614143,PR 2916614144,2917167299,US -2917167300,2917167302,TR +2917167300,2917167302,CA 2917167303,2917167311,US 2917167312,2917167312,CA 2917167313,2917167313,US 2917167314,2917167316,CA 2917167317,2917167317,US -2917167318,2917167318,TR -2917167319,2917167322,CA +2917167318,2917167322,CA 2917167323,2917167325,US 2917167326,2917167326,CA 2917167327,2917167327,BR @@ -52142,7 +47859,8 @@ 2917167680,2917167711,BR 2917167712,2917167714,US 2917167715,2917167743,BR -2917167744,2917167775,US +2917167744,2917167773,US +2917167774,2917167775,BR 2917167776,2917167807,LT 2917167808,2917167839,US 2917167840,2917167871,TR @@ -52155,10 +47873,9 @@ 2917168032,2917168095,US 2917168096,2917168127,GB 2917168128,2917168223,US -2917168224,2917168230,CA +2917168224,2917168230,BR 2917168231,2917168232,US -2917168233,2917168233,CA -2917168234,2917168255,BR +2917168233,2917168255,BR 2917168256,2917168319,US 2917168320,2917168351,AR 2917168352,2917168352,US @@ -52167,25 +47884,29 @@ 2917168384,2917168415,BR 2917168416,2917168447,US 2917168448,2917168479,BR -2917168480,2917168959,US +2917168480,2917168607,US +2917168608,2917168608,AU +2917168609,2917168615,US +2917168616,2917168618,BR +2917168619,2917168632,US +2917168633,2917168633,BR +2917168634,2917168959,US 2917168960,2917169023,DE 2917169024,2917169096,US -2917169097,2917169098,TR +2917169097,2917169098,CA 2917169099,2917169100,BR 2917169101,2917169101,US 2917169102,2917169102,BR -2917169103,2917169106,TR +2917169103,2917169106,CA 2917169107,2917169109,US -2917169110,2917169110,TR +2917169110,2917169110,CA 2917169111,2917169113,BR -2917169114,2917169114,TR +2917169114,2917169114,CA 2917169115,2917169120,US 2917169121,2917169123,BR -2917169124,2917169124,TR +2917169124,2917169124,CA 2917169125,2917169125,US -2917169126,2917169131,BR -2917169132,2917169134,US -2917169135,2917169144,BR +2917169126,2917169144,BR 2917169145,2917169145,US 2917169146,2917169147,BR 2917169148,2917169149,US @@ -52197,19 +47918,37 @@ 2917170048,2917170079,BR 2917170080,2917170111,US 2917170112,2917170143,TR -2917170144,2917170758,US +2917170144,2917170246,US +2917170247,2917170248,BR +2917170249,2917170255,US +2917170256,2917170256,BR +2917170257,2917170257,US +2917170258,2917170258,BR +2917170259,2917170264,US +2917170265,2917170265,BR +2917170266,2917170266,US +2917170267,2917170268,BR +2917170269,2917170272,US +2917170273,2917170276,BR +2917170277,2917170281,US +2917170282,2917170285,BR +2917170286,2917170286,US +2917170287,2917170287,BR +2917170288,2917170758,US 2917170759,2917170761,BR 2917170762,2917170764,CA 2917170765,2917170771,US 2917170772,2917170772,CA 2917170773,2917170774,US -2917170775,2917170777,CA +2917170775,2917170776,CA +2917170777,2917170777,BR 2917170778,2917170785,US -2917170786,2917170800,CA +2917170786,2917170786,CA +2917170787,2917170800,BR 2917170801,2917170801,US -2917170802,2917170806,CA +2917170802,2917170806,BR 2917170807,2917170809,US -2917170810,2917170812,CA +2917170810,2917170812,BR 2917170813,2917170819,US 2917170820,2917170820,BR 2917170821,2917170821,US @@ -52222,12 +47961,14 @@ 2917170846,2917170846,PH 2917170847,2917170847,PK 2917170848,2917170848,PH -2917170849,2917170852,US +2917170849,2917170850,US +2917170851,2917170851,BR +2917170852,2917170852,US 2917170853,2917170853,BR 2917170854,2917170854,PH 2917170855,2917170860,US 2917170861,2917170861,PH -2917170862,2917170862,EC +2917170862,2917170862,CA 2917170863,2917170863,US 2917170864,2917170864,MX 2917170865,2917170869,US @@ -52271,8 +48012,7 @@ 2917171095,2917171120,US 2917171121,2917171121,BR 2917171122,2917171167,US -2917171168,2917171175,BR -2917171176,2917171199,TR +2917171168,2917171199,BR 2917171200,2917195775,US 2917195776,2917196031,A2 2917196032,2917196415,CA @@ -52293,9 +48033,7 @@ 2917268480,2917269503,JM 2917269504,2917449727,US 2917449728,2917466111,PR -2917466112,2917571071,US -2917571072,2917571327,CN -2917571328,2917572607,US +2917466112,2917572607,US 2917572608,2917580799,CA 2917580800,2917591807,US 2917591808,2917591823,RO @@ -52370,9 +48108,7 @@ 2917661696,2917661823,ZA 2917661824,2917661951,PK 2917661952,2917662079,CN -2917662080,2917663231,US -2917663232,2917663263,EG -2917663264,2917663391,US +2917662080,2917663391,US 2917663392,2917663423,EG 2917663424,2917663455,US 2917663456,2917663487,EG @@ -52390,7 +48126,9 @@ 2917672192,2917672223,CA 2917672224,2917672319,US 2917672320,2917672351,EG -2917672352,2917676031,US +2917672352,2917672927,US +2917672928,2917672959,EG +2917672960,2917676031,US 2917676032,2917676287,CA 2917676288,2917681423,US 2917681424,2917681439,MY @@ -52423,14 +48161,11 @@ 2917713920,2917714431,CA 2917714432,2917715967,US 2917715968,2917716223,DE -2917716224,2917724159,US -2917724160,2917724415,CA -2917724416,2917724943,US +2917716224,2917724943,US 2917724944,2917724959,MY 2917724960,2917724991,US 2917724992,2917725007,MY -2917725008,2917726207,US -2917726208,2917726463,CA +2917725008,2917726463,US 2917726464,2917726495,CR 2917726496,2917795951,US 2917795952,2917795959,CA @@ -52498,15 +48233,11 @@ 2917828352,2917828479,IN 2917828480,2917829727,US 2917829728,2917829743,CA -2917829744,2917834143,US -2917834144,2917834151,CA -2917834152,2917835679,US +2917829744,2917835679,US 2917835680,2917835687,CA 2917835688,2917835815,US 2917835816,2917835823,CA -2917835824,2917837663,US -2917837664,2917837671,CA -2917837672,2917842175,US +2917835824,2917842175,US 2917842176,2917842431,CA 2917842432,2917847063,US 2917847064,2917847071,CA @@ -52555,13 +48286,9 @@ 2918051840,2918121471,CA 2918121472,2918154239,US 2918154240,2918170623,CA -2918170624,2918187263,US -2918187264,2918187519,CA -2918187520,2918199679,US +2918170624,2918199679,US 2918199680,2918199743,CA -2918199744,2918200287,US -2918200288,2918200303,CA -2918200304,2918201551,US +2918199744,2918201551,US 2918201552,2918201567,CA 2918201568,2918202079,US 2918202080,2918202087,CA @@ -52586,8 +48313,8 @@ 2918264832,2918277119,US 2918277120,2918281215,CA 2918281216,2918286335,US -2918286336,2918286591,CA -2918286592,2918286879,US +2918286336,2918286719,CA +2918286720,2918286879,US 2918286880,2918286895,GB 2918286896,2918287103,US 2918287104,2918287359,CR @@ -52605,9 +48332,9 @@ 2918375424,2918391807,US 2918391808,2918395903,CA 2918395904,2918404095,US -2918404096,2918407167,PR -2918407168,2918407295,US -2918407296,2918408191,PR +2918404096,2918406911,PR +2918406912,2918407167,US +2918407168,2918408191,PR 2918408192,2918412903,US 2918412904,2918412911,ES 2918412912,2918412927,US @@ -52622,9 +48349,7 @@ 2918473216,2918473727,CA 2918473728,2918477823,US 2918477824,2918481919,CA -2918481920,2918495231,US -2918495232,2918495487,SA -2918495488,2918502078,US +2918481920,2918502078,US 2918502079,2918502079,US 2918502080,2918514943,US 2918514944,2918515079,CA @@ -52632,7 +48357,9 @@ 2918515200,2918515327,CA 2918515328,2918515599,US 2918515600,2918515607,NL -2918515608,2918532111,US +2918515608,2918532095,US +2918532096,2918532103,US +2918532104,2918532111,US 2918532112,2918532119,CN 2918532120,2918532143,US 2918532144,2918532151,PK @@ -52653,15 +48380,13 @@ 2918534816,2918534879,CN 2918534880,2918534943,US 2918534944,2918534975,CN -2918534976,2918534983,US -2918534984,2918534991,ID -2918534992,2918536183,US +2918534976,2918536031,US +2918536032,2918536063,US +2918536064,2918536183,US 2918536184,2918536187,US 2918536188,2918536447,US 2918536448,2918536703,US -2918536704,2918536719,US -2918536720,2918536727,CA -2918536728,2918580223,US +2918536704,2918580223,US 2918580224,2918588415,CA 2918588416,2918596607,US 2918596608,2918604287,CA @@ -53073,9 +48798,7 @@ 2919171088,2919171095,TR 2919171096,2919171103,US 2919171104,2919171111,PL -2919171112,2919171143,US -2919171144,2919171151,TR -2919171152,2919171159,US +2919171112,2919171159,US 2919171160,2919171167,AU 2919171168,2919171183,US 2919171184,2919171191,ZA @@ -53108,9 +48831,9 @@ 2919206912,2919211007,CA 2919211008,2919211263,US 2919211264,2919211519,US -2919211520,2919231999,US -2919232000,2919232255,CN -2919232256,2919235583,US +2919211520,2919218687,US +2919218688,2919218943,US +2919218944,2919235583,US 2919235584,2919759871,CA 2919759872,2921496895,US 2921496896,2921496903,IN @@ -53120,7 +48843,11 @@ 2921497416,2921497423,IN 2921497424,2921497471,US 2921497472,2921497599,IN -2921497600,2921498215,US +2921497600,2921497855,US +2921497856,2921497863,CA +2921497864,2921498031,US +2921498032,2921498039,CA +2921498040,2921498215,US 2921498216,2921498223,CA 2921498224,2921498383,US 2921498384,2921498391,ID @@ -53128,9 +48855,7 @@ 2921498432,2921498439,CA 2921498440,2921501167,US 2921501168,2921501175,CA -2921501176,2921503695,US -2921503696,2921503703,ID -2921503704,2921504431,US +2921501176,2921504431,US 2921504432,2921504439,GB 2921504440,2921505951,US 2921505952,2921505983,IN @@ -53156,7 +48881,9 @@ 2921511392,2921512703,US 2921512704,2921512959,CA 2921512960,2921562111,US -2921562112,2921594879,CA +2921562112,2921589759,CA +2921589760,2921590015,US +2921590016,2921594879,CA 2921594880,2921658191,US 2921658192,2921658199,US 2921658200,2925002751,US @@ -53169,9 +48896,7 @@ 2927152176,2927152183,CH 2927152184,2927154847,US 2927154848,2927154855,CH -2927154856,2927207423,US -2927207424,2927207679,CY -2927207680,2927242751,US +2927154856,2927242751,US 2927242752,2927243263,AE 2927243264,2927254783,US 2927254784,2927255039,AE @@ -53264,7 +48989,21 @@ 2928265056,2928265103,US 2928265104,2928265143,CA 2928265144,2928265215,US -2928265216,2928265727,CA +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 @@ -53282,12 +49021,42 @@ 2928266360,2928266367,US 2928266368,2928266407,CA 2928266408,2928266415,US -2928266416,2928272775,CA +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,2928273151,CA -2928273152,2928273183,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 @@ -53295,8 +49064,22 @@ 2928273304,2928273311,CA 2928273312,2928273367,US 2928273368,2928273383,CA -2928273384,2928273407,US -2928273408,2928274175,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 @@ -53308,14 +49091,28 @@ 2928274336,2928274359,US 2928274360,2928274367,CA 2928274368,2928274391,US -2928274392,2928275455,CA +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,2928276223,CA -2928276224,2928276231,US +2928275608,2928276071,CA +2928276072,2928276079,US +2928276080,2928276191,CA +2928276192,2928276231,US 2928276232,2928276287,CA 2928276288,2928276319,US 2928276320,2928276367,CA @@ -53330,7 +49127,19 @@ 2928276696,2928276711,US 2928276712,2928276727,CA 2928276728,2928276735,US -2928276736,2928278791,CA +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 @@ -53370,9 +49179,7 @@ 2928452352,2928455679,US 2928455680,2928459775,CA 2928459776,2928541695,US -2928541696,2928551023,CA -2928551024,2928551031,US -2928551032,2928553303,CA +2928541696,2928553303,CA 2928553304,2928553311,HU 2928553312,2928558943,CA 2928558944,2928558951,PE @@ -53385,495 +49192,9 @@ 2928583744,2928595959,CA 2928595960,2928595967,US 2928595968,2928607231,CA -2928607232,2928607287,US -2928607288,2928607303,NO -2928607304,2928607343,US -2928607344,2928607351,GB -2928607352,2928607567,US -2928607568,2928607575,CA -2928607576,2928607711,US -2928607712,2928607719,CA -2928607720,2928607815,US -2928607816,2928607823,CA -2928607824,2928608751,US -2928608752,2928608783,GB -2928608784,2928609471,US -2928609472,2928609983,BD -2928609984,2928610143,US -2928610144,2928610175,GB -2928610176,2928610383,US -2928610384,2928610391,VG -2928610392,2928610615,US -2928610616,2928610623,IL -2928610624,2928610655,US -2928610656,2928610663,MX -2928610664,2928610703,US -2928610704,2928610711,IN -2928610712,2928610823,US -2928610824,2928610831,CA -2928610832,2928610839,GB -2928610840,2928610935,US -2928610936,2928610943,GB -2928610944,2928611303,US -2928611304,2928611311,IL -2928611312,2928611351,US -2928611352,2928611359,ZA -2928611360,2928611375,US -2928611376,2928611383,ZA -2928611384,2928611591,US -2928611592,2928611599,CA -2928611600,2928611695,US -2928611696,2928611703,BB -2928611704,2928611791,US -2928611792,2928611807,GB -2928611808,2928611839,US -2928611840,2928611847,CA -2928611848,2928612135,US -2928612136,2928612143,AU -2928612144,2928612231,US -2928612232,2928612239,GB -2928612240,2928612279,US -2928612280,2928612287,GB -2928612288,2928612319,US -2928612320,2928612327,CA -2928612328,2928612343,US -2928612344,2928612351,CA -2928612352,2928612415,US -2928612416,2928612447,CA -2928612448,2928612735,US -2928612736,2928612799,CA -2928612800,2928615455,US -2928615456,2928615463,GB -2928615464,2928615735,US -2928615736,2928615743,GB -2928615744,2928615759,CA -2928615760,2928615871,US -2928615872,2928615879,MY -2928615880,2928615983,US -2928615984,2928615991,AU -2928615992,2928616863,US -2928616864,2928616879,ZA -2928616880,2928617023,US -2928617024,2928617039,IN -2928617040,2928617199,US -2928617200,2928617215,IL -2928617216,2928617359,US -2928617360,2928617375,CA -2928617376,2928617623,US -2928617624,2928617631,IN -2928617632,2928617639,US -2928617640,2928617647,JP -2928617648,2928617895,US -2928617896,2928617903,IN -2928617904,2928617951,US -2928617952,2928617959,GB -2928617960,2928618231,US -2928618232,2928618239,IL -2928618240,2928618247,US -2928618248,2928618255,GB -2928618256,2928618271,US -2928618272,2928618279,IL -2928618280,2928618367,US -2928618368,2928618375,GB -2928618376,2928618383,US -2928618384,2928618399,CA -2928618400,2928618479,US -2928618480,2928618487,CA -2928618488,2928618559,US -2928618560,2928618591,IN -2928618592,2928619071,US -2928619072,2928619103,BD -2928619104,2928619391,US -2928619392,2928619423,CA -2928619424,2928620135,US -2928620136,2928620143,IN -2928620144,2928620151,CA -2928620152,2928620183,US -2928620184,2928620191,FR -2928620192,2928620231,US -2928620232,2928620239,SE -2928620240,2928620303,US -2928620304,2928620311,GB -2928620312,2928620359,US -2928620360,2928620367,IN -2928620368,2928620439,US -2928620440,2928620447,NL -2928620448,2928620615,US -2928620616,2928620623,AU -2928620624,2928620855,US -2928620856,2928620863,ZA -2928620864,2928620991,US -2928620992,2928620999,GB -2928621000,2928621135,US -2928621136,2928621143,GB -2928621144,2928621215,US -2928621216,2928621223,GB -2928621224,2928621551,US -2928621552,2928621559,FR -2928621560,2928621567,GB -2928621568,2928621823,US -2928621824,2928621839,CA -2928621840,2928621903,US -2928621904,2928621911,AE -2928621912,2928621935,US -2928621936,2928621943,NZ -2928621944,2928621951,IN -2928621952,2928622047,US -2928622048,2928622055,CA -2928622056,2928622175,US -2928622176,2928622183,GB -2928622184,2928622231,US -2928622232,2928622239,AU -2928622240,2928622327,US -2928622328,2928622335,CN -2928622336,2928622623,US -2928622624,2928622639,NZ -2928622640,2928622703,US -2928622704,2928622719,GB -2928622720,2928622799,US -2928622800,2928622815,CA -2928622816,2928622927,US -2928622928,2928622959,CA -2928622960,2928623239,US -2928623240,2928623247,CA -2928623248,2928623263,US -2928623264,2928623271,MX -2928623272,2928623495,US -2928623496,2928623503,CA -2928623504,2928623807,US -2928623808,2928623815,AU -2928623816,2928623831,US -2928623832,2928623839,NO -2928623840,2928623855,US -2928623856,2928623863,NZ -2928623864,2928623999,US -2928624000,2928624007,CA -2928624008,2928624127,US -2928624128,2928624135,CY -2928624136,2928624143,CA -2928624144,2928624151,US -2928624152,2928624159,CA -2928624160,2928624303,US -2928624304,2928624311,NL -2928624312,2928624319,US -2928624320,2928624327,CA -2928624328,2928624479,US -2928624480,2928624487,MX -2928624488,2928624711,US -2928624712,2928624719,AU -2928624720,2928624791,US -2928624792,2928624799,AU -2928624800,2928625175,US -2928625176,2928625183,AU -2928625184,2928625231,US -2928625232,2928625239,CA -2928625240,2928626175,US -2928626176,2928626191,CA -2928626192,2928626431,US -2928626432,2928626447,HU -2928626448,2928626479,CA -2928626480,2928626607,US -2928626608,2928626623,IN -2928626624,2928626831,US -2928626832,2928626839,MX -2928626840,2928626871,US -2928626872,2928626879,AU -2928626880,2928626903,US -2928626904,2928626911,GB -2928626912,2928626975,US -2928626976,2928626983,CA -2928626984,2928627055,US -2928627056,2928627063,AU -2928627064,2928627071,GB -2928627072,2928627095,US -2928627096,2928627103,AU -2928627104,2928627167,US -2928627168,2928627175,GB -2928627176,2928627183,IE -2928627184,2928627383,US -2928627384,2928627391,AU -2928627392,2928627415,US -2928627416,2928627423,AU -2928627424,2928627431,IL -2928627432,2928627439,GB -2928627440,2928627463,US -2928627464,2928627471,TW -2928627472,2928627487,US -2928627488,2928627495,IN -2928627496,2928627543,US -2928627544,2928627551,GB -2928627552,2928628783,US -2928628784,2928628791,GB -2928628792,2928628799,US -2928628800,2928628807,CA -2928628808,2928628879,US -2928628880,2928628887,AU -2928628888,2928629007,US -2928629008,2928629015,CA -2928629016,2928629031,US -2928629032,2928629039,HK -2928629040,2928629183,US -2928629184,2928629191,GB -2928629192,2928629199,CA -2928629200,2928629207,US -2928629208,2928629215,IL -2928629216,2928629239,US -2928629240,2928629247,GB -2928629248,2928629511,US -2928629512,2928629519,MX -2928629520,2928629607,US -2928629608,2928629615,GB -2928629616,2928629655,US -2928629656,2928629663,IL -2928629664,2928629671,US -2928629672,2928629679,JP -2928629680,2928629695,US -2928629696,2928629703,CA -2928629704,2928629887,US -2928629888,2928629951,BD -2928629952,2928630527,US -2928630528,2928630559,CA -2928630560,2928630791,US -2928630792,2928630807,GB -2928630808,2928630895,US -2928630896,2928630903,MX -2928630904,2928630911,HU -2928630912,2928631079,US -2928631080,2928631087,GB -2928631088,2928631111,US -2928631112,2928631119,AU -2928631120,2928631135,US -2928631136,2928631143,CA -2928631144,2928631239,US -2928631240,2928631247,CA -2928631248,2928631311,US -2928631312,2928631319,CA -2928631320,2928631423,US -2928631424,2928631431,MX -2928631432,2928631551,US -2928631552,2928631559,SG -2928631560,2928631567,US -2928631568,2928631575,CA -2928631576,2928631743,US -2928631744,2928631751,MX -2928631752,2928631775,US -2928631776,2928631783,IL -2928631784,2928631855,US -2928631856,2928631863,CA -2928631864,2928631871,AU -2928631872,2928631887,US -2928631888,2928631895,FR -2928631896,2928631951,US -2928631952,2928631959,SG -2928631960,2928631975,US -2928631976,2928631983,IN -2928631984,2928632031,US -2928632032,2928632039,NO -2928632040,2928632055,US -2928632056,2928632063,MX -2928632064,2928632223,US -2928632224,2928632231,GB -2928632232,2928632367,US -2928632368,2928632375,IN -2928632376,2928632399,US -2928632400,2928632407,CA -2928632408,2928632519,US -2928632520,2928632527,IN -2928632528,2928633087,US -2928633088,2928633103,CA -2928633104,2928633119,US -2928633120,2928633135,CA -2928633136,2928633199,US +2928607232,2928633199,US 2928633200,2928633215,CA -2928633216,2928633423,US -2928633424,2928633439,IN -2928633440,2928633583,US -2928633584,2928633599,GB -2928633600,2928633879,US -2928633880,2928633887,IL -2928633888,2928633895,CA -2928633896,2928633959,US -2928633960,2928633967,GB -2928633968,2928634191,US -2928634192,2928634199,CH -2928634200,2928634247,US -2928634248,2928634255,CA -2928634256,2928634479,US -2928634480,2928634487,CA -2928634488,2928634495,US -2928634496,2928634503,CN -2928634504,2928634511,US -2928634512,2928634519,CA -2928634520,2928634543,US -2928634544,2928634551,IN -2928634552,2928634639,US -2928634640,2928634647,VG -2928634648,2928634655,US -2928634656,2928634663,IN -2928634664,2928634839,US -2928634840,2928634847,GB -2928634848,2928634903,US -2928634904,2928634911,MX -2928634912,2928634935,US -2928634936,2928634943,PH -2928634944,2928634959,US -2928634960,2928634967,CA -2928634968,2928635111,US -2928635112,2928635119,IN -2928635120,2928635127,US -2928635128,2928635135,IE -2928635136,2928635191,US -2928635192,2928635199,IN -2928635200,2928635207,US -2928635208,2928635215,IN -2928635216,2928635271,US -2928635272,2928635279,IL -2928635280,2928635303,US -2928635304,2928635311,CA -2928635312,2928635343,US -2928635344,2928635351,ZA -2928635352,2928635663,US -2928635664,2928635671,AU -2928635672,2928635815,US -2928635816,2928635823,BR -2928635824,2928635831,GB -2928635832,2928635863,US -2928635864,2928635871,AU -2928635872,2928636191,US -2928636192,2928636199,CA -2928636200,2928636375,US -2928636376,2928636383,CA -2928636384,2928636479,US -2928636480,2928636487,SE -2928636488,2928636527,US -2928636528,2928636535,CA -2928636536,2928636655,US -2928636656,2928636663,NZ -2928636664,2928636927,US -2928636928,2928636935,IL -2928636936,2928637007,US -2928637008,2928637015,BG -2928637016,2928637039,US -2928637040,2928637047,CA -2928637048,2928637487,US -2928637488,2928637495,CA -2928637496,2928637983,US -2928637984,2928637991,IN -2928637992,2928638047,US -2928638048,2928638055,BE -2928638056,2928638095,US -2928638096,2928638103,IN -2928638104,2928638119,US -2928638120,2928638127,IN -2928638128,2928638207,US -2928638208,2928638215,GB -2928638216,2928638359,US -2928638360,2928638367,CA -2928638368,2928638375,IN -2928638376,2928638455,US -2928638456,2928638463,MX -2928638464,2928638847,US -2928638848,2928638855,CA -2928638856,2928639527,US -2928639528,2928639535,GB -2928639536,2928639615,US -2928639616,2928639623,CA -2928639624,2928639679,US -2928639680,2928639687,GB -2928639688,2928639767,US -2928639768,2928639775,CA -2928639776,2928641087,US -2928641088,2928641151,CA -2928641152,2928641383,US -2928641384,2928641391,ID -2928641392,2928642599,US -2928642600,2928642607,IN -2928642608,2928648319,US -2928648320,2928648383,BD -2928648384,2928648415,US -2928648416,2928648447,BD -2928648448,2928648479,US -2928648480,2928648575,BD -2928648576,2928648607,US -2928648608,2928648639,BD -2928648640,2928649255,US -2928649256,2928649263,ZA -2928649264,2928649271,IL -2928649272,2928649287,US -2928649288,2928649295,RO -2928649296,2928649303,GR -2928649304,2928649311,IN -2928649312,2928649351,US -2928649352,2928649359,JP -2928649360,2928649375,US -2928649376,2928649383,IN -2928649384,2928649415,US -2928649416,2928649423,CA -2928649424,2928649447,US -2928649448,2928649455,GB -2928649456,2928649551,US -2928649552,2928649559,BO -2928649560,2928650087,US -2928650088,2928650095,CZ -2928650096,2928650111,US -2928650112,2928650119,IN -2928650120,2928650151,US -2928650152,2928650159,AU -2928650160,2928650207,US -2928650208,2928650215,IL -2928650216,2928655895,US -2928655896,2928655903,CA -2928655904,2928655927,US -2928655928,2928655935,NZ -2928655936,2928655943,US -2928655944,2928655951,NZ -2928655952,2928655983,US -2928655984,2928655991,GB -2928655992,2928656639,US -2928656640,2928656647,CA -2928656648,2928656655,US -2928656656,2928656663,PK -2928656664,2928656823,US -2928656824,2928656831,ZA -2928656832,2928656879,US -2928656880,2928656895,GB -2928656896,2928657983,US -2928657984,2928658015,NO -2928658016,2928662671,US -2928662672,2928662687,GB -2928662688,2928662879,US -2928662880,2928662895,IL -2928662896,2928662959,US -2928662960,2928662975,IN -2928662976,2928663103,US -2928663104,2928663119,MX -2928663120,2928663759,US -2928663760,2928663775,GB -2928663776,2928664159,US -2928664160,2928664175,GB -2928664176,2928664191,US -2928664192,2928664207,GB -2928664208,2928664527,US -2928664528,2928664543,CA -2928664544,2928664639,US -2928664640,2928664671,GB -2928664672,2928665471,US -2928665472,2928665503,GB -2928665504,2928665535,US -2928665536,2928665567,GB -2928665568,2928665855,US -2928665856,2928665871,GB -2928665872,2928666031,US -2928666032,2928666047,SG -2928666048,2928666159,US -2928666160,2928666175,GB -2928666176,2928666303,US -2928666304,2928666319,AU -2928666320,2928666335,US -2928666336,2928666351,GB -2928666352,2928666591,US -2928666592,2928666607,AU -2928666608,2936012799,US +2928633216,2936012799,US 2936012800,2937847807,CN 2937847808,2937848831,KH 2937848832,2937849855,JP @@ -53906,7 +49227,6 @@ 2939002880,2939004927,KR 2939004928,2939006975,JP 2939006976,2939007999,KP -2939008000,2939009023,IN 2939009024,2939011071,ID 2939011072,2939027455,KR 2939027456,2942304255,CN @@ -53967,15 +49287,19 @@ 2947579904,2947583999,KR 2947584000,2947586047,TO 2947588096,2947590143,ID -2947590144,2947592191,SG +2947590144,2947590655,JP +2947590656,2947592191,SG 2947596288,2947597311,IN 2947597312,2947598335,JP 2947598336,2947602431,AU 2947602432,2947603455,NZ 2947603456,2947604479,TH -2947604480,2947609599,HK -2947609600,2947609855,US -2947609856,2947612671,HK +2947604480,2947609855,HK +2947609856,2947610111,US +2947610112,2947610367,HK +2947610368,2947610623,PH +2947610624,2947611647,AU +2947611648,2947612671,HK 2947612672,2947678207,JP 2947678208,2947743743,CN 2947743744,2947809279,JP @@ -54026,11 +49350,13 @@ 2954756096,2954821631,TR 2954821632,2954827799,FR 2954827800,2954827807,DE -2954827808,2954828287,FR -2954828288,2954828543,DE -2954828544,2954829843,FR +2954827808,2954828291,FR +2954828292,2954828299,DE +2954828300,2954829843,FR 2954829844,2954829847,DE -2954829848,2954835451,FR +2954829848,2954832343,FR +2954832344,2954832347,CH +2954832348,2954835451,FR 2954835452,2954835455,ES 2954835456,2954837071,FR 2954837072,2954837075,ES @@ -54079,7 +49405,10 @@ 2956230656,2956238847,SI 2956238848,2956242943,ES 2956242944,2956244991,SE -2956244992,2956247039,FR +2956244992,2956245247,FR +2956245248,2956245503,RO +2956245504,2956245759,GB +2956245760,2956247039,FR 2956247040,2956251135,DE 2956251136,2956253183,GB 2956253184,2956255231,IE @@ -54124,7 +49453,9 @@ 2956599296,2956607487,RU 2956607488,2956611583,PS 2956611584,2956613631,IT -2956613632,2956615679,EU +2956613632,2956614143,EU +2956614144,2956614399,FR +2956614400,2956615679,EU 2956615680,2956623871,GB 2956623872,2956656639,GR 2956656640,2956722175,RU @@ -54170,14 +49501,7 @@ 2957195264,2957197311,PS 2957197312,2957201407,IR 2957201408,2957202431,US -2957202432,2957202511,US -2957202512,2957202527,NO -2957202528,2957202543,SE -2957202544,2957202599,US -2957202600,2957202607,BG -2957202608,2957202615,GR -2957202616,2957202623,TR -2957202624,2957202943,US +2957202432,2957202943,US 2957202944,2957203455,US 2957203456,2957205503,FR 2957205504,2957213695,PS @@ -54218,16 +49542,45 @@ 2957901824,2958032895,PT 2958032896,2958557183,ES 2958557184,2958819327,TR -2958819328,2958823423,GR -2958823424,2958824447,CY -2958824448,2958838015,GR -2958838016,2958838783,CY -2958838784,2958850047,GR -2958850048,2958851583,CY -2958851584,2958851839,GR -2958851840,2958856191,CY -2958856192,2958872575,GR -2958872576,2958884863,CY +2958819328,2958825471,GR +2958825472,2958825727,CY +2958825728,2958825983,GR +2958825984,2958826239,CY +2958826240,2958826751,GR +2958826752,2958829055,CY +2958829056,2958836735,GR +2958836736,2958837247,CY +2958837248,2958838015,GR +2958838016,2958839295,CY +2958839296,2958839551,GR +2958839552,2958839807,CY +2958839808,2958841855,GR +2958841856,2958842879,CY +2958842880,2958843903,GR +2958843904,2958844671,CY +2958844672,2958844927,GR +2958844928,2958845183,CY +2958845184,2958846975,GR +2958846976,2958848255,CY +2958848256,2958848511,GR +2958848512,2958848767,CY +2958848768,2958850047,GR +2958850048,2958851071,CY +2958851072,2958851839,GR +2958851840,2958852095,CY +2958852096,2958853119,GR +2958853120,2958853631,CY +2958853632,2958853887,GR +2958853888,2958854143,CY +2958854144,2958855167,GR +2958855168,2958856191,CY +2958856192,2958858239,GR +2958858240,2958860287,CY +2958860288,2958870527,GR +2958870528,2958871551,CY +2958871552,2958872575,GR +2958872576,2958876671,CY +2958876672,2958884863,GR 2958884864,2958950399,FI 2958950400,2959081471,DE 2959081472,2959089663,RU @@ -54267,7 +49620,6 @@ 2959208448,2959210495,CZ 2959210496,2959212543,PL 2959212544,2959220735,UA -2959220736,2959224831,RO 2959224832,2959226879,UA 2959226880,2959228927,RO 2959228928,2959237119,UA @@ -54344,7 +49696,6 @@ 2959663104,2959704063,UA 2959704064,2959708159,PL 2959712256,2959728639,UA -2959728640,2959736831,RO 2959736832,2959738879,UA 2959738880,2959745023,RU 2959745024,2959747071,PL @@ -54357,8 +49708,8 @@ 2959767552,2959769599,RS 2959769600,2959777791,RU 2959777792,2959783935,LV -2959783936,2959788031,SK -2959788032,2959794175,UA +2959783936,2959785983,SK +2959785984,2959794175,UA 2959794176,2959796223,IL 2959796224,2959806463,RU 2959806464,2959810559,SK @@ -54444,10 +49795,8 @@ 2960162816,2960171007,CZ 2960171008,2960175103,RU 2960175104,2960179199,SK -2960179200,2960205823,RU -2960205824,2960207871,RO -2960207872,2960211967,RU -2960211968,2960224255,RO +2960179200,2960211967,RU +2960220160,2960224255,RO 2960224256,2960228351,RU 2960228352,2960232447,TJ 2960232448,2960240639,UA @@ -54507,7 +49856,7 @@ 2960558080,2960560127,PL 2960560128,2960562175,UA 2960562176,2960564223,BY -2960564224,2960576511,RO +2960574464,2960576511,RO 2960576512,2960580607,CZ 2960580608,2960588799,RU 2960588800,2960592895,UA @@ -54529,7 +49878,7 @@ 2960678912,2960685055,UA 2960685056,2960687103,PL 2960687104,2960695295,FR -2960695296,2960697343,RU +2960695296,2960697343,AT 2960697344,2960699391,ES 2960699392,2960719871,RU 2960719872,2960723967,CZ @@ -54707,9 +50056,7 @@ 2968647680,2968649727,FR 2968649728,2969042943,IT 2969042944,2969567231,GB -2969567232,2978457087,BR -2978457088,2978457599,AR -2978457600,2984247295,BR +2969567232,2986344447,BR 2986344448,2987393023,DE 2987393024,2987397119,IM 2987397120,2987401215,LV @@ -54904,9 +50251,9 @@ 2988444209,2988444209,FI 2988444210,2988444671,FR 2988444672,2988444679,ES -2988444680,2988454655,FR -2988454656,2988454911,US -2988454912,2988455935,FR +2988444680,2988452095,FR +2988452096,2988452351,BE +2988452352,2988455935,FR 2988455936,2988457983,GB 2988457984,2988459119,FR 2988459120,2988459127,IT @@ -54920,9 +50267,7 @@ 2988462608,2988463999,FR 2988464000,2988464007,IE 2988464008,2988464015,LT -2988464016,2988476671,FR -2988476672,2988476927,AE -2988476928,2988478579,FR +2988464016,2988478579,FR 2988478580,2988478583,DE 2988478584,2988478587,FR 2988478588,2988478591,DE @@ -54932,17 +50277,13 @@ 2988482112,2988482143,DE 2988482144,2988484831,FR 2988484832,2988484847,GB -2988484848,2988499699,FR -2988499700,2988499711,DE -2988499712,2988499729,FR +2988484848,2988499729,FR 2988499730,2988499730,GB -2988499731,2988502051,FR +2988499731,2988499756,FR +2988499757,2988499757,ES +2988499758,2988502051,FR 2988502052,2988502055,PL -2988502056,2988502839,FR -2988502840,2988502843,NL -2988502844,2988502847,FR -2988502848,2988502855,CH -2988502856,2988504371,FR +2988502056,2988504371,FR 2988504372,2988504375,PL 2988504376,2988548095,FR 2988548096,2988550143,ES @@ -54965,7 +50306,9 @@ 2989228032,2989490175,RU 2989490176,2989555711,HU 2989555712,2989621247,RU -2989621248,2989752319,BE +2989621248,2989640447,BE +2989640448,2989640703,FR +2989640704,2989752319,BE 2989752320,2989817855,SY 2989817856,2989883391,KW 2989883392,2989948927,UA @@ -54973,25 +50316,45 @@ 2990014464,2990079999,PL 2990080000,2990145535,RU 2990145536,2990211071,SI -2990211072,2990271487,GR -2990271488,2990273023,CY -2990273024,2990273535,GR -2990273536,2990275583,CY -2990275584,2990276607,GR +2990211072,2990223359,GR +2990223360,2990223871,CY +2990223872,2990235903,GR +2990235904,2990236159,CY +2990236160,2990236671,GR +2990236672,2990239743,CY +2990239744,2990256383,GR +2990256384,2990256639,CY +2990256640,2990259711,GR +2990259712,2990260223,CY +2990260224,2990262271,GR +2990262272,2990262783,CY +2990262784,2990269439,GR +2990269440,2990269951,CY +2990269952,2990271487,GR +2990271488,2990273535,CY +2990273536,2990274559,GR +2990274560,2990276351,CY +2990276352,2990276607,GR 2990276608,2990342143,ES -2990342144,2990407679,KW +2990342144,2990385919,KW +2990385920,2990386175,US +2990386176,2990386687,KW +2990386688,2990386943,US +2990386944,2990407679,KW 2990407680,2990473215,RU -2990473216,2990500113,DE +2990473216,2990475674,DE +2990475675,2990475675,HR +2990475676,2990500113,DE 2990500114,2990500115,PL 2990500116,2990538751,DE 2990538752,2991063039,RU -2991063040,2991068159,SE -2991068160,2991068415,DK -2991068416,2991068671,SE -2991068672,2991068927,DK -2991068928,2991069695,SE -2991069696,2991070975,DK -2991070976,2991079423,SE +2991063040,2991068415,SE +2991068416,2991068671,DK +2991068672,2991069183,SE +2991069184,2991069695,DK +2991069696,2991070207,SE +2991070208,2991071231,DK +2991071232,2991079423,SE 2991079424,2991095807,RU 2991095808,2991112191,AM 2991112192,2991128575,CZ @@ -55027,9 +50390,7 @@ 2991718400,2991849471,CH 2991849472,2991980543,NL 2991980544,2992111615,UA -2992111616,2992244735,KZ -2992244736,2992245503,RU -2992245504,2992373759,KZ +2992111616,2992373759,KZ 2992373760,2992635903,UA 2992635904,2993684479,GB 2993684480,2993946623,AT @@ -55054,9 +50415,10 @@ 2995044352,2995046399,ES 2995046400,2995048447,RU 2995048448,2995050495,NL -2995050496,2995050561,AL +2995050496,2995050561,AT 2995050562,2995050562,RS -2995050563,2995052543,AL +2995050563,2995050751,AT +2995050752,2995052543,AL 2995052544,2995056639,DK 2995056640,2995058687,DE 2995058688,2995060735,SE @@ -55107,9 +50469,7 @@ 2996996074,2996996074,DE 2996996075,2997004607,DE 2997004608,2997004671,RU -2997004672,2997008127,DE -2997008128,2997008383,AE -2997008384,2997026815,DE +2997004672,2997026815,DE 2997026816,2997059583,RU 2997059584,2997092351,BY 2997092352,2997125119,NO @@ -55133,24 +50493,24 @@ 2997747712,2997780479,DE 2997780480,2997813247,SE 2997813248,2997817343,ME -2997817344,2997818879,RS -2997818880,2997826559,ME -2997826560,2997827583,RS -2997827584,2997833727,ME +2997817344,2997819391,RS +2997819392,2997832447,ME +2997832448,2997832703,RS +2997832704,2997833727,ME 2997833728,2997833983,RS 2997833984,2997834239,ME -2997834240,2997836287,RS -2997836288,2997838847,ME -2997838848,2997839359,RS +2997834240,2997834751,RS +2997834752,2997835775,ME +2997835776,2997836287,RS +2997836288,2997838591,ME +2997838592,2997839359,RS 2997839360,2997846015,ME 2997846016,2997878783,MD 2997878784,2998140927,RU 2998140928,2998403071,PL 2998403072,2998665215,RU 2998665216,2998927359,AT -2998927360,2999392511,CH -2999392512,2999392767,IT -2999392768,2999451647,CH +2998927360,2999451647,CH 2999451648,2999713791,DE 2999713792,2999975935,RU 2999975936,2999984127,FR @@ -55250,7 +50610,7 @@ 3000506368,3000508415,PL 3000508416,3000510463,UA 3000510464,3000512511,PL -3000512512,3000514559,EE +3000512512,3000514559,SE 3000514560,3000516607,SI 3000516608,3000520703,RU 3000520704,3000522751,CZ @@ -55311,7 +50671,9 @@ 3000700928,3000705023,PL 3000705024,3000709119,RU 3000709120,3000713215,AM -3000713216,3000717311,IT +3000713216,3000715519,IT +3000715520,3000715775,US +3000715776,3000717311,IT 3000717312,3000721407,UA 3000721408,3000733695,PL 3000733696,3000737791,RU @@ -55335,15 +50697,17 @@ 3001831424,3001835519,BA 3001835520,3001839615,RU 3001839616,3001843711,ES -3001843712,3001846271,RU -3001846272,3001846783,GB +3001843712,3001845759,RU +3001845760,3001846783,GB 3001846784,3001847807,RU 3001847808,3001851903,GB 3001851904,3001855999,IT 3001856000,3001860095,NL -3001860096,3001863167,EE -3001863168,3001863423,LT -3001863424,3001864191,EE +3001860096,3001861887,EE +3001861888,3001862143,LT +3001862144,3001863167,EE +3001863168,3001863679,LT +3001863680,3001864191,EE 3001864192,3001868287,RU 3001868288,3001872383,FR 3001872384,3001876479,RU @@ -55351,7 +50715,14 @@ 3001880576,3001884671,RU 3001884672,3001888767,NL 3001888768,3001892863,BH -3001892864,3001896959,AZ +3001892864,3001893247,AZ +3001893248,3001893631,RU +3001893632,3001894399,AZ +3001894400,3001894655,RU +3001894656,3001894911,AZ +3001894912,3001895167,RU +3001895168,3001896191,AZ +3001896192,3001896959,RU 3001896960,3001901055,CH 3001901056,3001905151,FR 3001905152,3001909247,GB @@ -55442,9 +50813,7 @@ 3002699776,3002701823,SE 3002701824,3002703871,NL 3002703872,3002705919,DE -3002705920,3002706431,BG -3002706432,3002706943,MK -3002706944,3002707967,BG +3002705920,3002707967,MK 3002707968,3002710015,KW 3002710016,3002712063,IT 3002712064,3002714111,LU @@ -55537,7 +50906,6 @@ 3003076608,3003080703,GB 3003080704,3003082751,FR 3003082752,3003084799,ES -3003084800,3003086847,IT 3003086848,3003088895,RU 3003088896,3003090943,FR 3003090944,3003092991,DE @@ -55613,23 +50981,20 @@ 3026069504,3026071551,JP 3026071552,3026073599,HK 3026073600,3026075647,CN -3026075648,3026077183,AF -3026077184,3026077439,US -3026077440,3026078719,AF -3026078720,3026078975,US -3026078976,3026079999,AF -3026080000,3026080767,US -3026080768,3026080769,AF -3026080770,3026080770,US -3026080771,3026081535,AF -3026081536,3026081791,US -3026081792,3026083839,AF +3026075648,3026076927,AF +3026076928,3026077183,IT +3026077184,3026079743,US +3026079744,3026079999,AF +3026080000,3026080511,US +3026080512,3026080767,AF +3026080768,3026081279,US +3026081280,3026083839,AF 3026083840,3026087935,CN 3026087936,3026089983,AU 3026092032,3026108415,MO 3026108416,3026114559,JP -3026114560,3026115071,SG -3026115072,3026116607,JP +3026114560,3026115583,SG +3026115584,3026116607,AU 3026116608,3026118655,HK 3026118656,3026120703,AU 3026120704,3026124799,JP @@ -55709,13 +51074,7 @@ 3031695360,3031760895,TH 3031760896,3031826431,AU 3031826432,3031891967,KR -3031891968,3031910911,TH -3031910912,3031911167,GB -3031911168,3031911295,TH -3031911296,3031911423,FR -3031911424,3031934719,TH -3031934720,3031934975,DK -3031934976,3031957503,TH +3031891968,3031957503,TH 3031957504,3032252415,CN 3032252416,3032271871,HK 3032271872,3032272895,AU @@ -55783,8 +51142,8 @@ 3034472448,3034478591,IN 3034478592,3034480639,JP 3034480640,3034482687,SG -3034482688,3034483711,AF -3034483712,3034483967,US +3034482688,3034483199,AF +3034483200,3034483967,US 3034483968,3034484735,AF 3034484736,3034488831,TH 3034488832,3034492927,NZ @@ -55847,9 +51206,13 @@ 3044147200,3044155391,GT 3044163584,3044171775,BO 3044188160,3044196351,BO -3044196352,3044204543,AR +3044196352,3044206591,AR +3044208640,3044212735,BZ 3044212736,3044245503,HN -3044278272,3044540415,AR +3044278272,3044343807,AR +3044409344,3044505599,AR +3044505600,3044507647,US +3044507648,3044540415,AR 3044802560,3045064703,PY 3045064704,3047161855,CO 3047161856,3047423999,CL @@ -55863,7 +51226,10 @@ 3049078272,3049078527,MX 3049078528,3049095167,CR 3049095168,3049103359,GT +3049103360,3049107455,AR +3049111552,3049119743,AR 3049119744,3049127935,HN +3049127936,3049193471,CL 3049193472,3049259007,PA 3049259008,3049521151,CR 3049652224,3049717759,EC @@ -55874,10 +51240,15 @@ 3051356160,3051372543,CR 3051380736,3051388927,AR 3051388928,3051397119,PA +3051405312,3051407359,CR +3051407360,3051408383,PE +3051409408,3051411455,AR 3051413504,3051421695,PE 3051487232,3051552767,CL 3051618304,3051749375,AR 3051880448,3051913215,CO +3051945984,3051962367,CR +3051995136,3052011519,PE 3052142592,3052273663,CO 3052273664,3052404735,AR 3052404736,3053453311,CO @@ -55999,8 +51370,8 @@ 3064811520,3064823807,KR 3064823808,3064831999,JP 3064832000,3064840191,KR -3064840192,3064854271,GU -3064854272,3064854527,US +3064840192,3064852479,GU +3064852480,3064854527,US 3064854528,3064856575,GU 3064856576,3064987647,CN 3064987648,3066036223,PK @@ -56073,11 +51444,7 @@ 3075866624,3075915775,JP 3075915776,3075932159,KR 3075932160,3075997695,IN -3075997696,3076018303,TH -3076018304,3076018431,GB -3076018432,3076066047,TH -3076066048,3076066303,CA -3076066304,3076128767,TH +3075997696,3076128767,TH 3076128768,3076161535,SG 3076161536,3076169727,KR 3076169728,3076171775,VN @@ -56125,9 +51492,7 @@ 3091955712,3091959807,CA 3091959808,3091976191,US 3091976192,3091980287,CA -3091980288,3092569343,US -3092569344,3092569599,AU -3092569600,3092569855,US +3091980288,3092569855,US 3092569856,3092570111,AU 3092570112,3092700671,US 3092700672,3092700927,AU @@ -56157,15 +51522,9 @@ 3093245576,3093245583,BR 3093245584,3093245719,US 3093245720,3093245727,AU -3093245728,3093245999,US -3093246000,3093246007,AU -3093246008,3093246431,US -3093246432,3093246439,AU -3093246440,3093247327,US +3093245728,3093247327,US 3093247328,3093247335,AU -3093247336,3093247511,US -3093247512,3093247519,AU -3093247520,3093248375,US +3093247336,3093248375,US 3093248376,3093248399,AU 3093248400,3093248415,US 3093248416,3093248431,AU @@ -56193,137 +51552,7 @@ 3093850112,3093855487,DE 3093855488,3093908991,US 3093908992,3093909247,PR -3093909248,3093954759,US -3093954760,3093954767,AR -3093954768,3093954975,US -3093954976,3093954983,AU -3093954984,3093955023,US -3093955024,3093955031,CA -3093955032,3093955079,US -3093955080,3093955087,CA -3093955088,3093955127,US -3093955128,3093955135,CA -3093955136,3093955175,US -3093955176,3093955183,AU -3093955184,3093955231,US -3093955232,3093955247,AU -3093955248,3093955359,US -3093955360,3093955367,GB -3093955368,3093955439,US -3093955440,3093955447,CA -3093955448,3093955455,GB -3093955456,3093955663,US -3093955664,3093955679,CA -3093955680,3093956415,US -3093956416,3093956423,VE -3093956424,3093956479,US -3093956480,3093956495,IE -3093956496,3093956543,US -3093956544,3093956551,AU -3093956552,3093956567,US -3093956568,3093956575,MX -3093956576,3093956895,US -3093956896,3093956943,CA -3093956944,3093957103,US -3093957104,3093957119,CA -3093957120,3093957143,US -3093957144,3093957151,IL -3093957152,3093957703,US -3093957704,3093957711,BE -3093957712,3093957887,US -3093957888,3093957895,CA -3093957896,3093957903,US -3093957904,3093957911,CA -3093957912,3093958111,US -3093958112,3093958119,CA -3093958120,3093958175,US -3093958176,3093958183,GB -3093958184,3093958231,US -3093958232,3093958239,AU -3093958240,3093958503,US -3093958504,3093958511,CA -3093958512,3093958623,US -3093958624,3093958631,MX -3093958632,3093958663,US -3093958664,3093958667,MX -3093958668,3093958721,US -3093958722,3093958723,IL -3093958724,3093958745,US -3093958746,3093958747,FR -3093958748,3093959559,US -3093959560,3093959567,CA -3093959568,3093959751,US -3093959752,3093959759,GB -3093959760,3093959911,US -3093959912,3093959919,CA -3093959920,3093960063,US -3093960064,3093960095,CA -3093960096,3093960191,US -3093960192,3093960207,CA -3093960208,3093960351,US -3093960352,3093960383,CA -3093960384,3093960447,US -3093960448,3093960463,CA -3093960464,3093962259,US -3093962260,3093962263,CA -3093962264,3093962287,US -3093962288,3093962291,MX -3093962292,3093962375,US -3093962376,3093962379,CA -3093962380,3093962475,US -3093962476,3093962479,CA -3093962480,3093962559,US -3093962560,3093962575,GB -3093962576,3093962807,US -3093962808,3093962815,AU -3093962816,3093962943,US -3093962944,3093962951,GB -3093962952,3093963359,US -3093963360,3093963367,CA -3093963368,3093963487,US -3093963488,3093963495,IE -3093963496,3093963599,US -3093963600,3093963607,CA -3093963608,3093965039,US -3093965040,3093965055,GB -3093965056,3093965663,US -3093965664,3093965671,KW -3093965672,3093965879,US -3093965880,3093965881,CA -3093965882,3093965885,US -3093965886,3093965887,MX -3093965888,3093965965,US -3093965966,3093965967,MX -3093965968,3093966319,US -3093966320,3093966323,AU -3093966324,3093967191,US -3093967192,3093967199,CA -3093967200,3093968911,US -3093968912,3093968927,CA -3093968928,3093968943,US -3093968944,3093968951,MX -3093968952,3093969007,US -3093969008,3093969015,IE -3093969016,3093969031,US -3093969032,3093969035,CA -3093969036,3093969131,US -3093969132,3093969135,MX -3093969136,3093970503,US -3093970504,3093970507,GB -3093970508,3093970511,US -3093970512,3093970515,IE -3093970516,3093973583,US -3093973584,3093973599,BG -3093973600,3093977159,US -3093977160,3093977163,AU -3093977164,3093977167,IL -3093977168,3093977863,US -3093977864,3093977871,CO -3093977872,3093986367,US -3093986368,3093986431,DE -3093986432,3093986463,US -3093986464,3093986495,GB -3093986496,3094020095,US +3093909248,3094020095,US 3094020096,3094085631,CA 3094085632,3096444927,US 3096444928,3096969215,CA @@ -56371,9 +51600,7 @@ 3098255400,3098255407,BR 3098255408,3098255903,US 3098255904,3098255911,MV -3098255912,3098258671,US -3098258672,3098258679,MV -3098258680,3098263551,US +3098255912,3098263551,US 3098263552,3098271743,CA 3098271744,3098275944,US 3098275945,3098275945,CL @@ -56487,9 +51714,7 @@ 3098376864,3098376895,BR 3098376896,3098377727,US 3098377728,3098377759,AR -3098377760,3098379479,US -3098379480,3098379487,TR -3098379488,3098380047,US +3098377760,3098380047,US 3098380048,3098380063,IN 3098380064,3098380527,US 3098380528,3098380535,IN @@ -56698,7 +51923,9 @@ 3104075776,3104076799,NL 3104076800,3104077823,GB 3104077824,3104078847,AT -3104078848,3104079871,LU +3104078848,3104079103,LU +3104079104,3104079359,FR +3104079360,3104079871,LU 3104079872,3104080895,GB 3104080896,3104081919,GR 3104081920,3104082943,DK @@ -57139,6 +52366,7 @@ 3104563200,3104564223,IT 3104564224,3104565247,RU 3104565248,3104566271,IT +3104566272,3104567295,ES 3104567296,3104568319,GB 3104568320,3104569343,RU 3104569344,3104570367,TR @@ -57152,6 +52380,155 @@ 3104577536,3104578559,IQ 3104578560,3104579583,RU 3104579584,3104580607,FR +3104580608,3104581631,GB +3104581632,3104582655,ME +3104582656,3104583679,EU +3104583680,3104584703,FR +3104584704,3104585727,RU +3104585728,3104586751,NO +3104586752,3104587775,IR +3104587776,3104588799,DE +3104588800,3104589823,RU +3104589824,3104590847,NO +3104590848,3104591871,BA +3104591872,3104592895,EU +3104592896,3104593919,RU +3104593920,3104594943,DE +3104594944,3104595967,RU +3104595968,3104596991,FR +3104596992,3104598015,IR +3104598016,3104599039,ES +3104599040,3104600063,TR +3104600064,3104601087,UA +3104601088,3104602111,PT +3104602112,3104603135,NL +3104603136,3104604159,RU +3104604160,3104605183,CH +3104605184,3104606207,NL +3104606208,3104607231,GB +3104607232,3104608255,UA +3104608256,3104609279,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 +3104617472,3104618495,AT +3104618496,3104619519,PS +3104619520,3104621567,GB +3104621568,3104622591,CZ +3104622592,3104623615,GB +3104623616,3104624639,FR +3104624640,3104625663,RU +3104625664,3104626687,BY +3104626688,3104627711,NL +3104627712,3104628735,LB +3104628736,3104629759,TR +3104629760,3104630783,RU +3104630784,3104631807,GB +3104631808,3104632831,EE +3104632832,3104633855,AT +3104633856,3104634879,JO +3104634880,3104635903,SE +3104635904,3104637951,RU +3104637952,3104638975,UA +3104638976,3104639999,RS +3104640000,3104641023,GB +3104641024,3104642047,EE +3104642048,3104643071,KZ +3104643072,3104644095,RU +3104644096,3104645119,DE +3104645120,3104646143,RU +3104646144,3104647167,FR +3104647168,3104648191,MT +3104648192,3104649215,RU +3104649216,3104650239,GB +3104650240,3104651263,SI +3104651264,3104652287,TR +3104652288,3104653311,ES +3104653312,3104654335,FR +3104654336,3104655359,DE +3104655360,3104656383,GB +3104656384,3104657407,ES +3104657408,3104658431,GB +3104658432,3104659455,JO +3104659456,3104660479,LU +3104660480,3104661503,NO +3104661504,3104662527,SE +3104662528,3104663551,FR +3104663552,3104665599,GB +3104665600,3104668671,RU +3104668672,3104669695,NO +3104669696,3104670719,GB +3104670720,3104672767,RU +3104672768,3104673791,GB +3104673792,3104674815,PL +3104674816,3104675839,DE +3104675840,3104676863,LV +3104676864,3104677887,DE +3104677888,3104678911,RU +3104678912,3104679935,IT +3104679936,3104681983,PL +3104681984,3104683007,RU +3104683008,3104684031,FR +3104684032,3104685055,PL +3104685056,3104686079,GB +3104686080,3104687103,IL +3104687104,3104688127,AM +3104688128,3104689151,ES +3104689152,3104690175,GB +3104690176,3104691199,DE +3104691200,3104693247,FR +3104693248,3104694271,IT +3104694272,3104695295,NL +3104695296,3104696319,IR +3104696320,3104697343,PL +3104697344,3104698367,MK +3104698368,3104699391,BA +3104699392,3104700415,GB +3104700416,3104701439,UA +3104701440,3104702463,IT +3104702464,3104703487,FR +3104703488,3104704511,RU +3104704512,3104705535,IT +3104705536,3104706559,DE +3104706560,3104707583,UA +3104707584,3104708607,TR +3104708608,3104709631,ES +3104709632,3104710655,UA +3104710656,3104711679,RU +3104711680,3104712703,ES +3104712704,3104714751,RU +3104714752,3104715775,DE +3104715776,3104716799,AT +3104716800,3104717823,ES +3104717824,3104718847,GB +3104718848,3104719871,TR +3104719872,3104720895,RU +3104720896,3104721919,PL +3104721920,3104722943,IT +3104722944,3104723967,IR +3104723968,3104724991,GB +3104724992,3104726015,RU +3104726016,3104727039,DE +3104727040,3104728063,CY +3104728064,3104729087,KZ +3104729088,3104730111,FR +3104730112,3104731135,CH +3104731136,3104732159,PL +3104732160,3104733183,SK +3104733184,3104734207,FR +3104734208,3104735231,BA +3104735232,3104736255,FR +3104737280,3104738303,GB +3104738304,3104739327,KW +3104739328,3104740351,GB +3104740352,3104741375,PL +3104741376,3104742399,GB +3104742400,3104743423,CH 3120562176,3120594943,CO 3120594944,3120599039,AR 3120599040,3120601087,EC @@ -57165,7 +52542,8 @@ 3120660480,3120668671,PA 3120668672,3120676863,CO 3120676864,3120680959,HT -3120680960,3120693247,AR +3120680960,3120691199,AR +3120691200,3120693247,CO 3120693248,3120726015,BO 3120726016,3120734207,HN 3120734208,3120738303,BZ @@ -57213,9 +52591,13 @@ 3122732032,3122733055,US 3122733056,3122734079,AR 3122734080,3122734591,US -3122734592,3122737919,AR +3122734592,3122737407,AR +3122737408,3122737663,US +3122737664,3122737919,AR 3122737920,3122738175,US -3122738176,3122741247,AR +3122738176,3122739199,AR +3122739200,3122739455,US +3122739456,3122741247,AR 3122741248,3122757631,DO 3122757632,3122774015,EC 3122774016,3122790399,AR @@ -57230,8 +52612,10 @@ 3123707904,3124232191,UY 3124232192,3124760751,AR 3124760752,3124760759,MX -3124760760,3124781055,AR -3124785152,3124789247,CL +3124760760,3124783103,AR +3124783104,3124785151,GT +3124785152,3124788223,CL +3124788224,3124789247,PE 3124789248,3124822015,CR 3124822016,3124838399,EC 3124838400,3124840447,AR @@ -57283,7 +52667,7 @@ 3130458112,3130523647,GT 3130523648,3130654719,AR 3130654720,3130785791,CO -3130785792,3130818559,CL +3130785792,3130851327,CL 3130851328,3130982399,AR 3130982400,3131006975,CO 3131006976,3131011071,CW @@ -57314,7 +52698,9 @@ 3133073408,3133074431,CW 3133074432,3133075455,CL 3133075456,3133079551,CW -3133079552,3133145087,AR +3133079552,3133083647,AR +3133083648,3133087743,UY +3133087744,3133145087,AR 3133145088,3145727999,BR 3145728000,3154116607,MX 3154116608,3154124799,RU @@ -57343,7 +52729,9 @@ 3156475904,3156541439,HU 3156541440,3156606975,PT 3156606976,3156672511,TR -3156672512,3156738047,GB +3156672512,3156676863,GB +3156676864,3156677119,ES +3156677120,3156738047,GB 3156738048,3156759431,DE 3156759432,3156759432,GB 3156759433,3156803583,DE @@ -57529,9 +52917,7 @@ 3160287232,3160289279,GB 3160289280,3160291327,RU 3160291328,3160293375,ES -3160293376,3160294399,FI -3160294400,3160294655,SE -3160294656,3160295423,FI +3160293376,3160295423,FI 3160295424,3160297471,GB 3160297472,3160299519,MD 3160299520,3160301567,RU @@ -57557,9 +52943,7 @@ 3160348672,3160350719,PL 3160350720,3160352767,SE 3160352768,3160354815,GB -3160354816,3160355839,NL -3160355840,3160356095,UA -3160356096,3160356863,NL +3160354816,3160356863,NL 3160356864,3160358911,CZ 3160358912,3160360959,JO 3160360960,3160363007,IT @@ -57583,9 +52967,7 @@ 3160401920,3160403967,DE 3160403968,3160406015,NO 3160406016,3160408063,ES -3160408064,3161406719,DE -3161406720,3161406975,US -3161406976,3161456639,DE +3160408064,3161456639,DE 3161456640,3161473023,PL 3161473024,3161489407,SK 3161489408,3161505791,LV @@ -57601,13 +52983,34 @@ 3161620480,3161636863,DK 3161636864,3161653247,RU 3161653248,3161669631,LU -3161669632,3161676031,RE -3161676032,3161676287,FR -3161676288,3161677823,RE -3161677824,3161679871,MQ -3161679872,3161681919,GP -3161681920,3161682943,GF -3161682944,3161686015,MQ +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 +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 3161686016,3161702399,UA 3161702400,3161718783,AM 3161718784,3161735167,PL @@ -57641,8 +53044,10 @@ 3162087424,3162095615,SK 3162095616,3162103807,GE 3162103808,3162104831,NL -3162104832,3162109951,FR -3162109952,3162111999,NL +3162104832,3162107903,FR +3162107904,3162108415,NL +3162108416,3162108671,FR +3162108672,3162111999,NL 3162112000,3162120191,PL 3162120192,3162128383,GB 3162128384,3162136575,NL @@ -57699,10 +53104,10 @@ 3162603520,3162636287,GE 3162636288,3162669055,FR 3162669056,3162681343,RU -3162681344,3162681919,UA -3162681920,3162682111,RU -3162682112,3162682367,UA -3162682368,3162701823,RU +3162681344,3162682367,UA +3162682368,3162685439,RU +3162685440,3162687487,UA +3162687488,3162701823,RU 3162701824,3162734591,MD 3162734592,3162767359,RU 3162767360,3162800127,SA @@ -57758,13 +53163,17 @@ 3164923904,3164925951,DE 3164925952,3164927999,PL 3164928000,3164930047,NL -3164930048,3164952224,FR +3164930048,3164936499,FR +3164936500,3164936500,LT +3164936501,3164952224,FR 3164952225,3164952231,GB 3164952232,3164952233,FR 3164952234,3164952235,GB 3164952236,3164952236,FR 3164952237,3164952237,GB -3164952238,3164995583,FR +3164952238,3164965575,FR +3164965576,3164965576,FI +3164965577,3164995583,FR 3164995584,3165061119,RU 3165061120,3165126655,SK 3165126656,3165192191,RU @@ -57774,8 +53183,10 @@ 3165388800,3165519871,RO 3165519872,3165585407,DE 3165585408,3165650943,CZ -3165650944,3165938175,DK -3165938176,3165938431,US +3165650944,3165938239,DK +3165938240,3165938367,US +3165938368,3165938375,DK +3165938376,3165938431,US 3165938432,3166175231,DK 3166175232,3166306303,CH 3166306304,3166437375,RU @@ -57829,27 +53240,19 @@ 3169054720,3169056767,GB 3169056768,3169058815,EE 3169058816,3169091583,DK -3169091584,3169099775,IT -3169099776,3169101823,US -3169101824,3169107967,IT -3169107968,3169112063,US -3169112064,3169124351,IT +3169091584,3169124351,IT 3169124352,3169157119,RO 3169157120,3169189887,SY 3169189888,3169222655,UA 3169222656,3169255423,SI 3169255424,3169264127,KW 3169264128,3169264383,US -3169264384,3169265407,KW -3169265408,3169265663,US -3169265664,3169288191,KW +3169264384,3169288191,KW 3169288192,3169320959,UA 3169320960,3169583103,RU 3169583104,3169648639,KW 3169648640,3169714175,MD -3169714176,3169752575,FI -3169752576,3169752831,AX -3169752832,3169779711,FI +3169714176,3169779711,FI 3169779712,3169845247,UA 3169845248,3169976319,RO 3169976320,3170111487,RU @@ -57898,7 +53301,7 @@ 3187732480,3187734527,CO 3187734528,3187736575,BO 3187736576,3187752959,AR -3187752960,3187761151,CO +3187752960,3187761151,VE 3187761152,3187769343,AR 3187769344,3187802111,CO 3187802112,3187818495,AR @@ -57915,15 +53318,20 @@ 3187910656,3187914751,CL 3187914752,3187916799,BO 3187916800,3187933183,CO -3187933184,3187945471,HN -3187945472,3187946111,GT +3187933184,3187935607,GT +3187935608,3187935615,HN +3187935616,3187936711,GT +3187936712,3187936719,HN +3187936720,3187937279,GT +3187937280,3187939327,HN +3187939328,3187940351,GT +3187940352,3187941375,HN +3187941376,3187946111,GT 3187946112,3187946239,HN 3187946240,3187947983,GT 3187947984,3187947987,HN 3187947988,3187949567,GT -3187949568,3187950079,CW -3187950080,3187950335,NL -3187950336,3187953663,CW +3187949568,3187953663,CW 3187953664,3187955711,CL 3187955712,3187957759,CR 3187957760,3187961855,CL @@ -57940,7 +53348,8 @@ 3188056064,3188064255,PA 3188064256,3188080639,VE 3188080640,3188088831,CU -3188088832,3188097023,AR +3188088832,3188094975,AR +3188094976,3188097023,CL 3188097024,3188105215,DO 3188105216,3188113407,CO 3188113408,3188117503,HN @@ -58043,9 +53452,7 @@ 3191193600,3191209983,HN 3191209984,3191275519,CL 3191275520,3191341055,AR -3191341056,3191405951,GT -3191405952,3191406079,HN -3191406080,3191406591,GT +3191341056,3191406591,GT 3191406592,3191439359,SV 3191439360,3191455743,EC 3191455744,3191472127,AR @@ -58054,21 +53461,29 @@ 3191607808,3191608319,CL 3191608320,3191611391,CO 3191611392,3191619583,VE -3191619584,3191650559,CO +3191619584,3191649279,CO +3191649280,3191649791,US +3191649792,3191650559,CO 3191650560,3191650815,US 3191650816,3191651071,CO 3191651072,3191651327,US 3191651328,3191676927,CO -3191676928,3191685119,AR +3191676928,3191679487,AR +3191679488,3191679743,US +3191679744,3191684351,AR +3191684352,3191684607,US +3191684608,3191685119,AR 3191685120,3191685631,CO 3191685632,3191685887,US 3191685888,3191688959,CO -3191688960,3191689727,US -3191689728,3191691263,CO -3191691264,3191693311,US -3191693312,3191699455,CO -3191699456,3191701503,US -3191701504,3191727103,CO +3191688960,3191693311,US +3191693312,3191697407,CO +3191697408,3191701503,US +3191701504,3191705599,CO +3191705600,3191705855,US +3191705856,3191721983,CO +3191721984,3191722495,AR +3191722496,3191727103,CO 3191727104,3191727359,AR 3191727360,3191730943,CO 3191730944,3191731199,AR @@ -58087,10 +53502,10 @@ 3193143296,3193176063,TT 3193176064,3193307135,CO 3193307136,3193438207,SV -3193438208,3193469951,CW -3193469952,3193470207,US -3193470208,3193569279,CW -3193569280,3193606143,CO +3193438208,3193569279,CW +3193569280,3193582847,CO +3193582848,3193583103,EC +3193583104,3193606143,CO 3193606144,3193606399,EC 3193606400,3193622527,CO 3193622528,3193623039,EC @@ -58107,9 +53522,13 @@ 3193737472,3193737727,US 3193737728,3193737983,AR 3193737984,3193738239,US -3193738240,3193739263,AR +3193738240,3193738751,AR +3193738752,3193739007,US +3193739008,3193739263,AR 3193739264,3193739519,US -3193739520,3193741311,AR +3193739520,3193740031,AR +3193740032,3193740287,US +3193740288,3193741311,AR 3193741312,3193741567,US 3193741568,3193743231,AR 3193743232,3193743359,US @@ -58119,7 +53538,15 @@ 3193746752,3193746815,US 3193746816,3193747839,AR 3193747840,3193748223,US -3193748224,3193754623,AR +3193748224,3193749503,AR +3193749504,3193749759,US +3193749760,3193750015,AR +3193750016,3193750271,US +3193750272,3193751807,AR +3193751808,3193752063,US +3193752064,3193753215,AR +3193753216,3193753343,US +3193753344,3193754623,AR 3193754624,3193754751,US 3193754752,3193765887,AR 3193765888,3193774079,TT @@ -58157,7 +53584,7 @@ 3194077184,3194085375,CO 3194085376,3194093567,VE 3194093568,3194126335,SR -3194126336,3194127359,AR +3194126336,3194127359,GT 3194127360,3194129407,PE 3194129408,3194129663,AR 3194129664,3194129671,BR @@ -58165,8 +53592,8 @@ 3194130432,3194134527,BR 3194134528,3194135551,AR 3194135552,3194136575,GT -3194136576,3194140415,AR -3194140416,3194142719,CR +3194136576,3194140671,AR +3194140672,3194142719,CR 3194142720,3194159103,CL 3194159104,3194165247,HN 3194165248,3194175487,SV @@ -58211,9 +53638,7 @@ 3194494976,3194507263,AR 3194511360,3194515455,AW 3194515456,3194519551,GT -3194519552,3194526207,PY -3194526208,3194527743,AR -3194527744,3194535935,PY +3194519552,3194535935,PY 3194535936,3194585087,AR 3194585088,3194589183,HN 3194589184,3194591231,AR @@ -58264,7 +53689,7 @@ 3194740736,3194742783,CL 3194742784,3194744831,EC 3194744832,3194746879,AR -3194746880,3194748927,CW +3194746880,3194748927,US 3194748928,3194757119,UY 3194757120,3194765311,AR 3194765312,3194767359,EC @@ -58299,7 +53724,9 @@ 3194977280,3194978303,AR 3194978304,3194982911,PA 3194982912,3194983039,US -3194983040,3194985471,PA +3194983040,3194984191,PA +3194984192,3194984319,US +3194984320,3194985471,PA 3194985472,3194985599,US 3194985600,3194994687,PA 3194994688,3195011071,AR @@ -58331,8 +53758,8 @@ 3195206656,3195207679,CL 3195207680,3195211775,GT 3195215872,3195224063,AR -3195224064,3195232255,PA -3195232256,3195234559,CR +3195224064,3195232511,PA +3195232512,3195234559,CR 3195234560,3195234815,PA 3195234816,3195236351,CR 3195236352,3195240447,AR @@ -58349,7 +53776,7 @@ 3195576320,3195580415,CL 3195580416,3195584511,AR 3195584512,3195592703,HT -3195592704,3195596799,ID +3195592704,3195596799,PA 3195596800,3195597823,CR 3195597824,3195598847,AR 3195598848,3195600895,VE @@ -58428,13 +53855,12 @@ 3198550016,3198681087,DO 3198681088,3198877695,VE 3198877696,3198894079,CR +3198894080,3198902271,CO 3198910464,3198926847,CL 3198926848,3198943231,BO 3198943232,3199467519,AR 3199504384,3199505407,AR -3199533056,3199542271,BO -3199542272,3199542783,BR -3199542784,3199549439,BO +3199533056,3199549439,BO 3199549440,3199565823,AR 3199565824,3199582207,NI 3199582208,3199598591,HN @@ -58464,7 +53890,9 @@ 3200614400,3200647167,AR 3200647168,3201302527,VE 3201302528,3201433599,CL -3201433600,3201499135,AR +3201433600,3201441791,AR +3201441792,3201442047,US +3201442048,3201499135,AR 3201499136,3201515519,CL 3201515520,3201522687,AR 3201522688,3201531903,CR @@ -58485,11 +53913,17 @@ 3201761280,3201826815,CL 3201826816,3201859583,AR 3201859584,3201863679,CO -3201863680,3201869823,AR -3201869824,3201875967,PE +3201863680,3201865727,CL +3201865728,3201868287,AR +3201868288,3201868543,PE +3201868544,3201871871,AR +3201871872,3201875967,PE 3201875968,3201880063,CO -3201880064,3201882111,EC -3201882112,3201884159,AR +3201880064,3201880071,AR +3201880072,3201880079,EC +3201880080,3201880831,AR +3201880832,3201881087,EC +3201881088,3201884159,AR 3201884160,3201892351,VE 3201892352,3201925119,AR 3201925120,3201957887,CL @@ -58525,9 +53959,7 @@ 3203661824,3203923967,AR 3203923968,3204448255,CO 3221226496,3221227519,KY -3221227520,3221229567,US -3221233664,3221237759,US -3221241856,3221258239,US +3221227520,3221258239,US 3221258240,3221291007,CA 3221291008,3221334269,US 3221334270,3221334270,DZ @@ -58575,11 +54007,9 @@ 3221656832,3221657087,AU 3221657088,3221664255,US 3221664256,3221664511,EU -3221664512,3221761535,US -3221761536,3221762047,PL -3221762048,3221800959,US -3221800960,3221803007,IN -3221803008,3221803775,US +3221664512,3221801983,US +3221801984,3221802239,IN +3221802240,3221803775,US 3221803776,3221804031,IN 3221804032,3221806079,US 3221806080,3221806335,IN @@ -58587,9 +54017,7 @@ 3221806592,3221806847,IN 3221806848,3221843967,US 3221843968,3221844223,EU -3221844224,3221991167,US -3221991168,3221991423,NZ -3221991424,3221993727,US +3221844224,3221993727,US 3221993728,3221993983,EU 3221993984,3222003967,US 3222003968,3222004223,AP @@ -58708,8 +54136,7 @@ 3223077376,3223201791,US 3223201792,3223202815,PR 3223202816,3223203071,US -3223203840,3223207935,US -3223212032,3223214079,US +3223203840,3223214079,US 3223214848,3223215103,US 3223215104,3223215359,AU 3223215360,3223215871,US @@ -58717,8 +54144,7 @@ 3223227904,3223228159,CA 3223229184,3223229695,US 3223229696,3223229951,CA -3223230464,3223232511,US -3223236608,3223243007,US +3223230464,3223243007,US 3223243264,3223243519,CA 3223244288,3223248895,US 3223249408,3223249663,CA @@ -58749,7 +54175,7 @@ 3223286272,3223286527,IN 3223286528,3223286783,US 3223286784,3223289855,JP -3223293952,3223299327,US +3223289856,3223299327,US 3223299584,3223301119,NL 3223301120,3223303167,US 3223303168,3223303423,CA @@ -58798,6 +54224,7 @@ 3223449600,3223452671,US 3223452928,3223453183,US 3223453184,3223453439,DE +3223453696,3223457791,US 3223458560,3223458815,GB 3223458816,3223461887,US 3223462656,3223462911,US @@ -58816,8 +54243,7 @@ 3223481088,3223481343,SE 3223481344,3223483391,US 3223483392,3223483647,NL -3223484416,3223486463,US -3223490560,3223498751,US +3223484416,3223498751,US 3223499520,3223499775,FI 3223499776,3223504895,CA 3223504896,3223508991,US @@ -58826,9 +54252,7 @@ 3223519232,3223523583,DE 3223523584,3223523615,EU 3223523616,3223524351,DE -3223524352,3223528231,US -3223528232,3223528232,CA -3223528233,3223528233,US +3223524352,3223528233,US 3223528234,3223528234,GB 3223528235,3223534335,US 3223534336,3223534591,AU @@ -58882,15 +54306,15 @@ 3223865344,3223867391,FI 3223867392,3223867647,GB 3223868416,3223869439,BM -3223871488,3223879679,US +3223869440,3223871487,US +3223871488,3223873535,CA +3223873536,3223881727,US 3223881728,3223882751,CA -3223883520,3223883775,US -3223885824,3223896063,US -3223898112,3223900159,US +3223883520,3223902207,US 3223902464,3223902719,CA 3223903232,3223905279,US 3223905280,3223905535,FI -3223908352,3223909375,CA +3223906304,3223909375,CA 3223909376,3223910911,US 3223911936,3223912191,CA 3223912448,3223938559,US @@ -59001,8 +54425,10 @@ 3224367616,3224368127,US 3224368128,3224369663,CH 3224369664,3224373247,US -3224373248,3224374271,AU -3224374272,3224379135,US +3224373248,3224373503,AU +3224373504,3224373759,US +3224373760,3224374015,AU +3224374016,3224379135,US 3224379136,3224379391,DE 3224379392,3224398079,US 3224398336,3224398591,US @@ -59013,8 +54439,7 @@ 3224407296,3224407551,CA 3224407808,3224408319,US 3224408320,3224408575,DE -3224408576,3224408831,GB -3224408832,3224428543,US +3224408576,3224428543,US 3224428544,3224428799,DE 3224428800,3224430079,US 3224430336,3224430591,DE @@ -59043,8 +54468,7 @@ 3224675072,3224675839,US 3224676864,3224677119,US 3224677120,3224678655,AU -3224678656,3224681471,US -3224682496,3224689919,US +3224678656,3224689919,US 3224689920,3224690687,NL 3224690688,3224692735,US 3224692736,3224692991,DZ @@ -59101,9 +54525,7 @@ 3224828672,3224828927,AU 3224829184,3224829439,US 3224829440,3224829695,DE -3224829952,3224831487,US -3224831488,3224831743,MY -3224831744,3224833535,US +3224829952,3224833535,US 3224833536,3224833791,SG 3224833792,3224834047,US 3224834048,3224834303,SG @@ -59166,8 +54588,7 @@ 3224892160,3224892415,CA 3224892416,3224892671,DE 3224892928,3224893183,US -3224893440,3224893951,US -3224895488,3224899071,US +3224893440,3224899071,US 3224899072,3224899327,AT 3224899328,3224908543,US 3224908544,3224908799,CA @@ -59183,11 +54604,12 @@ 3225034240,3225034751,FI 3225034752,3225035775,BG 3225035776,3225037055,US -3225037056,3225051135,FI -3225051136,3225057535,US +3225037056,3225049599,FI +3225050112,3225057535,US 3225057536,3225057791,CA 3225057792,3225060351,US 3225060352,3225061631,AU +3225062400,3225063423,VC 3225063424,3225075967,US 3225076224,3225076479,CA 3225076480,3225076991,US @@ -59207,18 +54629,26 @@ 3225091584,3225091839,US 3225092096,3225314303,US 3225314304,3225314559,GB -3225314560,3225419775,US -3225420032,3225420287,US -3225423872,3225424383,US +3225314560,3225421823,US +3225421824,3225423871,CA +3225423872,3225426943,US 3225426944,3225427199,AT +3225427968,3225428991,US 3225429504,3225429759,CA +3225430016,3225431039,CA 3225431040,3225431551,CZ -3225431552,3225433087,US +3225431552,3225434111,US +3225434112,3225436159,CA 3225436160,3225444607,US 3225445376,3225446399,BE +3225446400,3225450495,US +3225450496,3225451519,AG 3225451776,3225452031,SE +3225456640,3225459711,US 3225459968,3225460479,US 3225460480,3225462783,CA +3225462784,3225464831,US +3225468928,3225469951,CA 3225470464,3225470719,US 3225471488,3225471743,DE 3225471744,3225472511,US @@ -59241,6 +54671,8 @@ 3225522944,3225524223,US 3225524224,3225524479,VE 3225524480,3225524735,GB +3225525248,3225526271,US +3225526272,3225528319,BB 3225528320,3225530367,US 3225530368,3225530623,PR 3225530624,3225530879,US @@ -59251,6 +54683,7 @@ 3225540864,3225541119,AU 3225541120,3225541375,US 3225541376,3225544703,GB +3225544704,3225546751,CA 3225546752,3225550847,US 3225550848,3225616383,DK 3225617152,3225617407,IE @@ -59260,7 +54693,8 @@ 3225618688,3225618943,CA 3225619200,3225619455,US 3225619456,3225619711,AU -3225619712,3225622527,US +3225619712,3225624575,US +3225624576,3225625599,CA 3225626368,3225626623,GB 3225626880,3225627391,US 3225627392,3225627647,GB @@ -59291,7 +54725,7 @@ 3225643264,3225643775,CA 3225643776,3225650943,US 3225650944,3225651199,GB -3225651200,3225657343,US +3225651200,3225658367,US 3225658624,3225659135,US 3225659136,3225659391,DE 3225659904,3225660159,DE @@ -59361,21 +54795,25 @@ 3225745920,3225746687,NL 3225746688,3225746943,US 3225746944,3225747199,DE -3225747456,3225763839,US +3225747456,3225757695,US +3225757696,3225758719,CA +3225759232,3225759487,US 3225763840,3225764095,BE +3225764864,3225765887,CA 3225766400,3225766655,CA -3225767936,3225769983,US +3225766912,3225769983,US +3225772032,3225773055,US 3225773312,3225773567,CA 3225776128,3225776383,US 3225777152,3225777407,AU 3225777408,3225777663,US -3225780224,3225784319,US -3225784320,3225788415,CA -3225796096,3225796351,US -3225796608,3225804799,US -3225805824,3225806847,US +3225780224,3225780479,US +3225781248,3225782271,CA +3225782272,3225785343,US +3225785344,3225788415,CA +3225794560,3225806847,US 3225807360,3225807615,DE -3225808896,3225812991,US +3225807872,3225812991,US 3225812992,3225843711,FR 3225843712,3225847039,US 3225847040,3225847551,TR @@ -59436,21 +54874,19 @@ 3226075136,3226107903,US 3226110208,3226110719,US 3226110720,3226128639,AU -3226128640,3226131455,US -3226132480,3226140671,US +3226128640,3226140671,US 3226140672,3226157567,CA 3226157568,3226157823,US -3226157824,3226161151,CA -3226161152,3226161407,US -3226161408,3226189823,CA -3226191360,3226191615,US +3226157824,3226189823,CA +3226189824,3226191871,US 3226191872,3226201087,CA 3226201344,3226201855,CA 3226201856,3226202111,US 3226202112,3226205439,CA 3226205440,3226205695,AE 3226205696,3226205951,CA -3226206208,3226215423,GB +3226206208,3226207231,US +3226207744,3226215423,GB 3226215424,3226236927,US 3226237184,3226237439,US 3226237440,3226237695,AU @@ -59503,17 +54939,19 @@ 3226480384,3226481407,US 3226481408,3226481663,DE 3226481664,3226492927,US -3226521344,3226521855,US +3226501120,3226517503,US +3226519552,3226521855,US 3226521856,3226522111,BR 3226522112,3226533887,US 3226535936,3226536191,US +3226536960,3226537983,CA 3226546176,3226546431,US +3226547200,3226548223,CA 3226548992,3226549247,BE 3226549248,3226550271,GB -3226550272,3226554367,US +3226550272,3226555391,US 3226555648,3226555903,CA -3226556416,3226556671,US -3226558720,3226558975,US +3226556416,3226560511,US 3226561792,3226562047,NO 3226563072,3226563327,US 3226564864,3226565119,DE @@ -59724,11 +55162,7 @@ 3227027456,3227035135,US 3227035136,3227035391,EU 3227035392,3227035647,AP -3227035648,3227035903,US -3227035904,3227036159,IN -3227036160,3227036671,US -3227036672,3227036927,FR -3227036928,3227038207,US +3227035648,3227038207,US 3227039744,3227040255,US 3227040512,3227040767,AU 3227040768,3227041279,US @@ -59745,9 +55179,7 @@ 3227053824,3227054079,DE 3227054080,3227056639,US 3227056640,3227058175,PT -3227058176,3227092735,FI -3227092736,3227092991,GB -3227092992,3227123711,FI +3227058176,3227123711,FI 3227123712,3227204617,US 3227204618,3227204619,EU 3227204620,3227225087,US @@ -59872,6 +55304,10 @@ 3227448576,3227448831,US 3227448832,3227449087,ZA 3227449088,3227450367,US +3227451392,3227451423,US +3227451424,3227455487,CA +3227455488,3227456255,US +3227456256,3227467775,CA 3227468032,3227468287,US 3227484160,3227516927,CA 3227516928,3227568127,ZA @@ -59908,9 +55344,9 @@ 3227804928,3227805183,CA 3227805184,3227805695,FI 3227805696,3227805951,US -3227805952,3227806216,FI -3227806217,3227806217,US -3227806218,3227806463,FI +3227805952,3227806247,FI +3227806248,3227806248,US +3227806249,3227806463,FI 3227806464,3227806719,GB 3227806720,3227809023,FI 3227809024,3227809279,IN @@ -59966,7 +55402,9 @@ 3227893760,3227894015,FI 3227894016,3227895039,US 3227895040,3227895551,DE -3227895552,3227909631,US +3227895552,3227909119,US +3227909120,3227909375,BE +3227909376,3227909631,US 3227909632,3227909887,AU 3227910400,3227910655,AT 3227910656,3227911679,US @@ -59989,9 +55427,7 @@ 3227934464,3227934719,CH 3227934720,3227947519,US 3227947520,3227955711,DE -3227955712,3227962367,US -3227962368,3227962623,CN -3227962624,3227964927,US +3227955712,3227964927,US 3227964928,3227965183,GB 3227965184,3227967487,US 3227967488,3227967743,FR @@ -60252,7 +55688,7 @@ 3229024256,3229057023,US 3229058816,3229059071,US 3229061120,3229065215,CA -3229089792,3229092095,US +3229073408,3229092095,US 3229092096,3229093887,AU 3229093888,3229104895,US 3229104896,3229105151,ES @@ -60525,7 +55961,7 @@ 3230168832,3230177791,US 3230177792,3230178303,GB 3230178304,3230178559,CH -3230203904,3230210047,US +3230187520,3230210047,US 3230210048,3230210303,CA 3230210304,3230211839,US 3230211840,3230212095,CN @@ -60618,9 +56054,7 @@ 3230333184,3230333695,US 3230333696,3230333951,NZ 3230333952,3230334975,US -3230334976,3230353151,CA -3230353152,3230353407,US -3230353408,3230354943,CA +3230334976,3230354943,CA 3230354944,3230355199,FR 3230355200,3230365183,CA 3230365184,3230365439,US @@ -60629,11 +56063,7 @@ 3230370304,3230370559,CA 3230370816,3230400511,CA 3230681088,3230683135,FR -3230789632,3230794751,US -3230794752,3230795007,JP -3230795008,3230796543,US -3230796544,3230796799,BE -3230796800,3230823679,US +3230789632,3230823679,US 3230823680,3230823935,DK 3230824192,3230824447,FR 3230824448,3230825215,US @@ -60818,10 +56248,7 @@ 3231049984,3231050239,US 3231050496,3231051263,US 3231051264,3231051519,GB -3231051776,3231056895,US -3231056896,3231057407,CA -3231057408,3231057663,US -3231057664,3231057919,CA +3231051776,3231057919,US 3231057920,3231058175,EU 3231058176,3231060991,US 3231060992,3231061247,EU @@ -61022,9 +56449,7 @@ 3231416320,3231424511,US 3231449088,3231475199,US 3231475200,3231475455,PL -3231475456,3231477759,US -3231477760,3231478015,CA -3231478016,3231482879,US +3231475456,3231482879,US 3231482880,3231483135,BE 3231483136,3231484927,US 3231484928,3231490047,JP @@ -61170,9 +56595,7 @@ 3231739136,3231739391,GB 3231739392,3231739647,PL 3231739648,3231739903,BR -3231739904,3231740287,US -3231740288,3231740319,GB -3231740320,3231742719,US +3231739904,3231742719,US 3231742720,3231742975,FR 3231742976,3231743487,US 3231743488,3231743743,NO @@ -61281,13 +56704,12 @@ 3231973376,3232038911,AT 3232038912,3232052991,SE 3232052992,3232053247,US -3232053248,3232071167,SE -3232071168,3232071423,ZA -3232071424,3232079871,SE +3232053248,3232079871,SE 3232079872,3232080895,GB -3232080896,3232093675,SE +3232080896,3232093439,SE +3232093440,3232093675,GB 3232093676,3232093676,EU -3232093677,3232093695,SE +3232093677,3232093695,GB 3232093696,3232093951,AP 3232093952,3232102144,SE 3232102145,3232102145,EU @@ -61323,10 +56745,9 @@ 3232309248,3232313343,SG 3232313344,3232325631,US 3232366592,3232432127,US -3232432384,3232432639,EU -3232432640,3232433151,DE +3232432128,3232433151,EU 3232433152,3232433407,FR -3232433408,3232433663,IT +3232433408,3232433663,EU 3232433920,3232436735,US 3232448512,3232464895,US 3232464896,3232483327,GB @@ -61667,9 +57088,9 @@ 3233914880,3233915135,AP 3233915136,3233915903,US 3233915904,3233916159,AP -3233916160,3233926143,US -3233926144,3233926399,MX -3233926400,3233936639,US +3233916160,3233926294,US +3233926295,3233926295,MX +3233926296,3233936639,US 3233936640,3233936895,EU 3233936896,3233939455,US 3233939456,3234004991,FI @@ -61764,9 +57185,7 @@ 3234400680,3234400687,NA 3234400688,3234401511,US 3234401512,3234401519,NA -3234401520,3234543871,US -3234543872,3234544127,IN -3234544128,3234549759,US +3234401520,3234549759,US 3234549760,3234550015,RU 3234553856,3234556415,US 3234556416,3234556927,CA @@ -61888,11 +57307,11 @@ 3234988032,3234992127,CA 3234992128,3235004415,US 3235004416,3235020799,CA -3235053568,3235086335,US -3235119104,3235184639,US +3235020800,3235184639,US 3235184640,3235184895,CA 3235184896,3235275007,US 3235278848,3235282943,BB +3235282944,3235315711,CA 3235315712,3235389439,US 3235389440,3235389951,VE 3235389952,3235417215,US @@ -61903,11 +57322,10 @@ 3235643392,3235774463,US 3235774464,3235778559,CA 3235778560,3235807231,US +3235807232,3235839999,CA 3235840000,3235856383,US 3235856384,3235872767,BR -3235872768,3235875839,US -3235875840,3235876095,IN -3235876096,3235876607,US +3235872768,3235876607,US 3235876608,3235876863,AP 3235876864,3235880447,US 3235880448,3235880703,GB @@ -62178,13 +57596,11 @@ 3237478400,3237511167,LK 3237511168,3237548031,US 3237548032,3237552127,KR -3237552128,3237553151,US -3237553152,3237553407,GB -3237553408,3237553919,US -3237553920,3237553922,FR +3237552128,3237553154,US +3237553155,3237553155,GB +3237553156,3237553922,US 3237553923,3237553923,EU -3237553924,3237554175,FR -3237554176,3237554434,US +3237553924,3237554434,US 3237554435,3237554435,AP 3237554436,3237557247,US 3237609472,3237613567,US @@ -62770,8 +58186,7 @@ 3239583232,3239583487,UA 3239583488,3239583743,RO 3239583744,3239591935,DE -3239591936,3239592191,FI -3239592192,3239592447,AU +3239591936,3239592447,FI 3239592448,3239592703,US 3239592704,3239592959,FI 3239592960,3239593215,EU @@ -62790,7 +58205,7 @@ 3239635968,3239636991,DE 3239636992,3239638015,BG 3239638016,3239639039,PL -3239639040,3239640063,CZ +3239639040,3239640063,SI 3239640064,3239641087,DE 3239641088,3239643135,PL 3239643136,3239645183,RU @@ -62826,7 +58241,8 @@ 3239690496,3239690751,PL 3239691008,3239691263,FR 3239691264,3239691519,IT -3239691520,3239692031,FR +3239691520,3239691775,FR +3239691776,3239692031,EU 3239692032,3239692287,AT 3239692288,3239697407,DE 3239697408,3239697663,HR @@ -63447,9 +58863,11 @@ 3240420096,3240420351,DE 3240420352,3240420607,RO 3240420608,3240420863,NL -3240420864,3240436991,GB -3240436992,3240437759,IE -3240437760,3240460287,GB +3240420864,3240436735,GB +3240436736,3240437759,IE +3240437760,3240454911,GB +3240454912,3240455167,IN +3240455168,3240460287,GB 3240460288,3240461055,IL 3240461056,3240461567,DE 3240461568,3240461823,UA @@ -63541,7 +58959,6 @@ 3240700928,3240701183,PL 3240701184,3240701439,LV 3240701440,3240701695,ES -3240701696,3240701951,FR 3240701952,3240702975,UA 3240702976,3240703999,DE 3240704000,3240705023,GR @@ -63671,11 +59088,9 @@ 3240812544,3240813567,IT 3240813568,3240814591,PL 3240814592,3240818687,IT -3240818688,3240819711,NL -3240819712,3240819715,CH +3240818688,3240819715,NL 3240819716,3240819716,EU -3240819717,3240819727,CH -3240819728,3240820735,NL +3240819717,3240820735,NL 3240820736,3240820799,FR 3240820800,3240820831,CY 3240820832,3240820863,GB @@ -63927,7 +59342,9 @@ 3241856000,3241857279,NL 3241857280,3241857535,CH 3241857536,3241859071,AT -3241859072,3241860863,US +3241859072,3241859651,US +3241859652,3241859652,MY +3241859653,3241860863,US 3241860864,3241861119,FR 3241861120,3241863167,BE 3241863168,3241863423,PL @@ -63955,10 +59372,7 @@ 3241869312,3241934847,PL 3241934848,3242196991,GB 3242196992,3242393599,FI -3242393600,3242393855,FR -3242393856,3242399743,NL -3242399744,3242399999,GB -3242400000,3242419967,NL +3242393600,3242419967,NL 3242419968,3242420223,EU 3242420224,3242426113,NL 3242426114,3242426114,EU @@ -64117,9 +59531,7 @@ 3244143616,3244144639,FR 3244144640,3244146687,UA 3244146688,3244147711,RU -3244147712,3244148223,GB -3244148224,3244148479,JO -3244148480,3244149759,GB +3244147712,3244149759,GB 3244149760,3244150783,PL 3244150784,3244151807,CH 3244151808,3244152831,KZ @@ -64133,9 +59545,7 @@ 3244161024,3244163071,NO 3244163072,3244228607,FI 3244228608,3244261375,TN -3244261376,3244267807,IE -3244267808,3244268031,GB -3244268032,3244277759,IE +3244261376,3244277759,IE 3244277760,3244294143,SI 3244294144,3244343807,DE 3244343808,3244344063,EU @@ -64342,7 +59752,7 @@ 3244873216,3244873471,SE 3244873472,3244873727,EU 3244873728,3244873983,DE -3244873984,3244874239,SE +3244873984,3244874239,FI 3244874240,3244874495,ES 3244874496,3244874751,FR 3244874752,3244875007,DE @@ -64724,10 +60134,10 @@ 3245079552,3245080575,CZ 3245080576,3245082623,SE 3245082624,3245084927,DE -3245084928,3245085183,FR +3245084928,3245085183,BE 3245085184,3245085439,GB 3245085440,3245085695,DE -3245085696,3245086207,FR +3245085952,3245086207,FR 3245086208,3245086463,AT 3245086464,3245086719,GH 3245086720,3245086975,BG @@ -64987,7 +60397,7 @@ 3245243392,3245244415,UA 3245244416,3245244671,ES 3245244672,3245244927,AT -3245244928,3245245183,US +3245244928,3245245183,BE 3245245184,3245245439,CH 3245245440,3245245695,BG 3245245696,3245245951,DE @@ -65153,16 +60563,16 @@ 3245339648,3245340671,LV 3245340672,3245341695,UA 3245341696,3245342719,RU -3245342720,3245867007,GB +3245342720,3245442685,GB +3245442686,3245442686,FR +3245442687,3245867007,GB 3245867008,3245932543,IE 3245932544,3245998079,BE 3245998080,3246129151,GB 3246129152,3246260223,RU 3246260224,3246325759,PT -3246325760,3246377983,EU -3246377984,3246378239,ES -3246378240,3246378495,EU -3246378496,3246379007,ES +3246325760,3246378751,EU +3246378752,3246379007,ES 3246379008,3246381567,EU 3246381568,3246381823,ES 3246381824,3246391295,EU @@ -65201,7 +60611,7 @@ 3247066880,3247067135,RU 3247067136,3247067647,DE 3247067648,3247067903,RU -3247067904,3247068159,FR +3247067904,3247068159,CH 3247068160,3247068415,UA 3247068416,3247068671,RO 3247068672,3247068927,GB @@ -65256,8 +60666,7 @@ 3247091712,3247092735,RU 3247092736,3247093759,DE 3247093760,3247094783,UA -3247094784,3247095551,LV -3247095552,3247095807,LT +3247094784,3247095807,LV 3247095808,3247097855,RO 3247097856,3247098879,FI 3247098880,3247099903,NL @@ -65273,9 +60682,13 @@ 3247111168,3247112191,DE 3247112192,3247177727,FR 3247177728,3247243263,TR -3247243264,3247273471,DE -3247273472,3247273727,NL -3247273728,3247286783,DE +3247243264,3247266303,DE +3247266304,3247266559,NL +3247266560,3247277055,DE +3247277056,3247277311,NL +3247277312,3247280639,DE +3247280640,3247280895,NL +3247280896,3247286783,DE 3247286784,3247287039,NL 3247287040,3247299363,DE 3247299364,3247299364,EU @@ -65396,12 +60809,16 @@ 3247794439,3247794439,EU 3247794440,3247800319,FR 3247800320,3247816703,DK -3247816704,3247833087,EU +3247816704,3247831551,EU +3247831552,3247831807,BE +3247831808,3247833087,EU 3247833088,3247833599,RU 3247833600,3247834111,PL 3247834112,3247834623,DE 3247834624,3247835135,UA -3247835136,3247836159,EU +3247835136,3247835391,EU +3247835392,3247835647,GB +3247835648,3247836159,EU 3247836160,3247837183,CZ 3247837184,3247838207,ES 3247838208,3247838463,RU @@ -65499,19 +60916,9 @@ 3247963136,3247964159,UA 3247964160,3248095231,ES 3248095232,3248160767,AT -3248160768,3248220159,DE -3248220160,3248220415,US -3248220416,3248226303,DE +3248160768,3248226303,DE 3248226304,3248357375,NO -3248357376,3248416351,DE -3248416352,3248416367,CH -3248416368,3248464895,DE -3248464896,3248465407,US -3248465408,3248481791,DE -3248481792,3248482047,US -3248482048,3248482175,DE -3248482176,3248482303,US -3248482304,3248488447,DE +3248357376,3248488447,DE 3248488448,3248488703,FR 3248488704,3248491519,NO 3248491520,3248492031,RU @@ -65587,9 +60994,7 @@ 3248790784,3248791039,PL 3248791040,3248791295,BE 3248791296,3248791551,DE -3248791552,3248792063,EU -3248792064,3248792319,GB -3248792320,3248799743,EU +3248791552,3248799743,EU 3248799744,3248800255,NL 3248800256,3248800767,RU 3248800768,3248801279,FR @@ -65634,8 +61039,7 @@ 3249078784,3249079295,CH 3249079296,3249079807,RU 3249079808,3249080831,RO -3249080832,3249081087,GB -3249081088,3249081343,DE +3249080832,3249081343,DE 3249081344,3249081855,LV 3249081856,3249082367,GB 3249082368,3249082879,HU @@ -65913,8 +61317,7 @@ 3250331648,3250335743,MT 3250335744,3250339839,KW 3250339840,3250348031,JO -3250348032,3250348287,US -3250348288,3250356223,BH +3250348032,3250356223,BH 3250356224,3250357247,LB 3250357248,3250357823,GB 3250357824,3250357855,FR @@ -66052,7 +61455,6 @@ 3250695168,3250695679,IT 3250695680,3250697471,DE 3250697472,3250697727,PL -3250697728,3250697983,BG 3250697984,3250698239,IT 3250698240,3250698751,GR 3250698752,3250699263,RU @@ -66230,7 +61632,7 @@ 3251157248,3251157503,BE 3251157504,3251158015,PL 3251158016,3251158271,TR -3251158272,3251158527,KZ +3251158272,3251158527,RU 3251158528,3251158783,UA 3251158784,3251159295,GB 3251159296,3251159551,DE @@ -66448,9 +61850,7 @@ 3251257856,3251258111,BE 3251258112,3251259903,EU 3251259904,3251260159,FR -3251260160,3251260927,EU -3251260928,3251261183,FR -3251261184,3251261439,EU +3251260160,3251261439,EU 3251261440,3251264255,CH 3251264256,3251265535,FR 3251265536,3251267839,NL @@ -66519,7 +61919,8 @@ 3251347456,3251355647,DE 3251355648,3251356159,GB 3251356160,3251356671,AT -3251356672,3251357183,EE +3251356672,3251356927,LV +3251356928,3251357183,EE 3251357184,3251357695,BG 3251357696,3251358207,ES 3251358208,3251358719,RU @@ -66542,9 +61943,9 @@ 3251372032,3251634175,IT 3251634176,3251896319,FI 3251896320,3252158463,NO -3252158464,3252197119,SE -3252197120,3252197375,NO -3252197376,3252289535,SE +3252158464,3252204287,SE +3252204288,3252204543,NO +3252204544,3252289535,SE 3252289536,3252289791,BG 3252289792,3252291327,GR 3252291328,3252291583,SK @@ -66638,31 +62039,15 @@ 3252387072,3252387327,RU 3252387328,3252387583,PL 3252387584,3252387839,RU -3252387840,3252405247,LT -3252405248,3252406271,NO -3252406272,3252415487,LT +3252387840,3252415487,LT 3252415488,3252415743,US -3252415744,3252417279,LT -3252417280,3252417327,US -3252417328,3252417343,AF -3252417344,3252417439,US -3252417440,3252417455,AF -3252417456,3252417471,US -3252417472,3252417479,AF -3252417480,3252417535,US -3252417536,3252433663,LT -3252433664,3252433919,SO -3252433920,3252435199,LT -3252435200,3252435359,ZA -3252435360,3252435375,BF -3252435376,3252435455,ZA -3252435456,3252449791,LT +3252415744,3252432127,LT +3252432128,3252432383,LR +3252432384,3252449791,LT 3252449792,3252450047,DK 3252450048,3252455679,LT -3252455680,3252455807,BI -3252455808,3252456959,LT -3252456960,3252457471,NG -3252457472,3252486143,LT +3252455680,3252455935,BI +3252455936,3252486143,LT 3252486144,3252490239,BE 3252490240,3252496127,SE 3252496128,3252496383,AU @@ -66737,9 +62122,7 @@ 3252588032,3252600319,CH 3252600320,3252600575,NL 3252600576,3252600831,RU -3252600832,3252613119,CH -3252613120,3252613375,DE -3252613376,3252616703,CH +3252600832,3252616703,CH 3252616704,3252616959,ES 3252616960,3252617215,CH 3252617216,3252617471,PL @@ -66785,7 +62168,6 @@ 3252909568,3252909823,GB 3252909824,3252910335,UA 3252910336,3252910591,NL -3252910592,3252910847,CH 3252910848,3252911103,PL 3252911104,3252911359,DE 3252911360,3252911615,RU @@ -66815,7 +62197,7 @@ 3252937728,3252938239,FR 3252938240,3252938751,UA 3252938752,3252939263,RU -3252939264,3252939775,EU +3252939264,3252939775,DE 3252939776,3252940287,RO 3252940288,3252940799,PT 3252940800,3252941311,RU @@ -66857,13 +62239,9 @@ 3253207040,3253338111,RU 3253338112,3253401343,SE 3253401344,3253401599,EU -3253401600,3253405439,SE -3253405440,3253405563,DK +3253401600,3253405563,SE 3253405564,3253405564,EU -3253405565,3253405695,DK -3253405696,3253430783,SE -3253430784,3253431039,BE -3253431040,3253454335,SE +3253405565,3253454335,SE 3253454336,3253454591,EU 3253454592,3253469183,SE 3253469184,3253534719,PT @@ -66930,8 +62308,7 @@ 3253665792,3253666815,CZ 3253666816,3253667839,EU 3253667840,3253668863,GB -3253668864,3253669119,BE -3253669120,3253669887,ES +3253668864,3253669887,ES 3253669888,3253670911,DE 3253670912,3253671935,CH 3253671936,3253672959,UA @@ -66970,7 +62347,6 @@ 3253703680,3253704191,HU 3253704192,3253704703,RU 3253704704,3253705215,UA -3253705216,3253705727,NO 3253705728,3253706239,DE 3253706240,3253706751,RO 3253707264,3253708287,DE @@ -67131,32 +62507,32 @@ 3254067712,3254067967,CZ 3254067968,3254124543,BE 3254124544,3254255615,CH -3254255616,3254256127,FR +3254255616,3254255871,FR +3254255872,3254256127,RE 3254256128,3254256639,GP -3254256640,3254266367,FR -3254266368,3254266623,RE -3254266624,3254274047,FR -3254274048,3254274303,GF -3254274304,3254275327,FR +3254256640,3254261247,FR +3254261248,3254261503,YT +3254261504,3254261759,FR +3254261760,3254262015,YT +3254262016,3254275327,FR 3254275328,3254275583,MQ 3254275584,3254276607,FR -3254276608,3254276863,YT -3254276864,3254277887,FR -3254277888,3254278143,YT +3254276608,3254278143,YT 3254278144,3254291711,FR 3254291712,3254291967,RE -3254291968,3254488831,FR -3254488832,3254489087,US -3254489088,3254493951,FR -3254493952,3254494207,GF -3254494208,3254509157,FR -3254509158,3254509159,GQ -3254509160,3254521855,FR +3254291968,3254493695,FR +3254493696,3254493951,GP +3254493952,3254494207,MQ +3254494208,3254508415,FR +3254508416,3254508543,GQ +3254508544,3254521855,FR 3254521856,3254522111,GB 3254522112,3254607871,FR 3254607872,3254608383,RE 3254608384,3254608639,FR -3254608640,3254610687,RE +3254608640,3254610175,RE +3254610176,3254610431,FR +3254610432,3254610687,RE 3254610688,3254611455,FR 3254611456,3254611456,YT 3254611457,3254611711,FR @@ -67206,7 +62582,6 @@ 3254709760,3254710271,PL 3254710272,3254710783,IT 3254710784,3254711295,RO -3254711296,3254711807,FR 3254711808,3254712319,PL 3254712320,3254712831,RU 3254712832,3254713343,KZ @@ -67463,7 +62838,9 @@ 3255172352,3255172607,DE 3255172608,3255173119,FR 3255173120,3255173631,SH -3255173632,3255197695,EU +3255173632,3255174143,EU +3255174144,3255174399,GB +3255174400,3255197695,EU 3255197696,3255205887,GB 3255205888,3255214079,FR 3255214080,3255222271,CH @@ -67502,17 +62879,11 @@ 3255237888,3255238143,ES 3255238144,3255238399,GB 3255238400,3255238655,QA -3255238656,3255254783,BE -3255254784,3255255039,LU -3255255040,3255274015,BE +3255238656,3255274015,BE 3255274016,3255274047,US 3255274048,3255280018,BE 3255280019,3255280019,EU -3255280020,3255283711,BE -3255283712,3255283967,LU -3255283968,3255291135,BE -3255291136,3255291391,LU -3255291392,3255304191,BE +3255280020,3255304191,BE 3255304192,3255304447,DE 3255304448,3255305215,LV 3255305216,3255305471,BG @@ -67638,7 +63009,6 @@ 3255418880,3255422975,DE 3255422976,3255423999,RO 3255424000,3255425023,LV -3255425024,3255426047,RO 3255426048,3255426559,IT 3255426560,3255426815,FR 3255426816,3255427071,PL @@ -67671,9 +63041,9 @@ 3255558400,3255558655,UA 3255558656,3255564031,CH 3255564032,3255564287,RU -3255564288,3255565823,CH -3255565824,3255566079,PL -3255566080,3255566335,CH +3255564288,3255565955,CH +3255565956,3255565956,EU +3255565957,3255566335,CH 3255566336,3255574527,SE 3255574528,3255578623,CZ 3255578624,3255582719,SE @@ -67690,7 +63060,9 @@ 3255743232,3255743487,IT 3255743488,3255743743,SE 3255743744,3255743999,US -3255744000,3255762943,SE +3255744000,3255745535,SE +3255745536,3255745791,DK +3255745792,3255762943,SE 3255762944,3255791615,DE 3255791616,3255792639,UA 3255792640,3255793663,RU @@ -67750,13 +63122,9 @@ 3256416768,3256417279,GB 3256417280,3256417791,NO 3256417792,3256418303,GB -3256418304,3256442143,DE -3256442144,3256442151,US -3256442152,3256444415,DE +3256418304,3256444415,DE 3256444416,3256444671,EU -3256444672,3256461311,DE -3256461312,3256461567,FR -3256461568,3256483839,DE +3256444672,3256483839,DE 3256483840,3256489471,NL 3256489472,3256489983,GR 3256489984,3256490239,BE @@ -67828,14 +63196,18 @@ 3256693760,3256694783,IT 3256694784,3256695807,CH 3256695808,3256696831,UA -3256696832,3256705023,EU +3256696832,3256698367,EU +3256698368,3256698623,NL +3256698624,3256698879,GB +3256698880,3256701439,EU +3256701440,3256701695,GB +3256701696,3256705023,EU 3256705024,3256705279,IE -3256705280,3256705535,BE -3256705536,3256705791,EU +3256705280,3256705791,BE 3256705792,3256706047,AT -3256706048,3256710655,EU -3256710656,3256710911,SE -3256710912,3256711167,EU +3256706048,3256709631,EU +3256709632,3256709887,AT +3256709888,3256711167,EU 3256711168,3256711423,DE 3256711424,3256713215,EU 3256713216,3256727551,PL @@ -67869,7 +63241,6 @@ 3256790016,3256790271,UA 3256790272,3256790783,DE 3256790784,3256791039,NL -3256791040,3256791295,CH 3256791296,3256791551,RO 3256791552,3256791807,GR 3256791808,3256792063,PL @@ -67941,7 +63312,6 @@ 3256963328,3256963839,RU 3256963840,3256964095,PL 3256964096,3256965119,RU -3256965120,3256966143,RO 3256966144,3256967167,RU 3256967168,3256967423,NL 3256967424,3256967679,RU @@ -68008,9 +63378,7 @@ 3257294848,3257303039,HU 3257303040,3257311231,PT 3257311232,3257335807,CH -3257335808,3257336063,DE -3257336064,3257336319,GB -3257336320,3257357311,DE +3257335808,3257357311,DE 3257357312,3257357567,PT 3257357568,3257357823,SI 3257357824,3257371903,DE @@ -68101,17 +63469,27 @@ 3257588736,3257589759,NL 3257589760,3257663487,GB 3257663488,3257729023,UA -3257729024,3257769727,DE +3257729024,3257731071,DE +3257731072,3257731327,NL +3257731328,3257750783,DE +3257750784,3257751039,NL +3257751040,3257762303,DE +3257762304,3257762559,NL +3257762560,3257769727,DE 3257769728,3257769983,NL 3257769984,3257794559,DE 3257794560,3257835519,GB -3257835520,3257836031,IE -3257836032,3257837311,GB -3257837312,3257843711,IE +3257835520,3257837311,IE +3257837312,3257837567,GB +3257837568,3257843711,IE 3257843712,3257845759,GB -3257845760,3257846271,IE -3257846272,3257851903,GB -3257851904,3257860095,IE +3257845760,3257847807,IE +3257847808,3257851903,GB +3257851904,3257854207,IE +3257854208,3257854335,GB +3257854336,3257854463,IE +3257854464,3257854719,GB +3257854720,3257860095,IE 3257860096,3257925631,SE 3257925632,3257925887,AT 3257925888,3257926143,SE @@ -68332,9 +63710,7 @@ 3258364928,3258365951,RS 3258365952,3258366975,UA 3258366976,3258367999,PL -3258368000,3258379263,KW -3258379264,3258379519,US -3258379520,3258384383,KW +3258368000,3258384383,KW 3258384384,3258427647,DE 3258427648,3258427903,RO 3258427904,3258449919,DE @@ -68442,7 +63818,9 @@ 3259039744,3259105279,PT 3259105280,3259170815,GB 3259170816,3259236351,RU -3259236352,3259250722,SE +3259236352,3259236863,SE +3259236864,3259237119,CH +3259237120,3259250722,SE 3259250723,3259250723,EU 3259250724,3259252479,SE 3259252480,3259252735,EU @@ -68455,9 +63833,7 @@ 3259310080,3259318271,EU 3259318272,3259334655,GB 3259334656,3259338751,DE -3259338752,3259344383,EU -3259344384,3259344639,CH -3259344640,3259351039,EU +3259338752,3259351039,EU 3259351040,3259351551,IT 3259351552,3259352063,FR 3259352064,3259352575,CH @@ -68476,11 +63852,7 @@ 3259435520,3259454719,SE 3259454720,3259454975,EU 3259454976,3259498495,SE -3259498496,3259516519,GB -3259516520,3259516527,US -3259516528,3259590399,GB -3259590400,3259590655,DE -3259590656,3259760639,GB +3259498496,3259760639,GB 3259760640,3259814399,DE 3259814400,3259814655,AT 3259814656,3259821823,DE @@ -68492,7 +63864,9 @@ 3259824128,3259891711,DE 3259891712,3259893503,BE 3259893504,3259893759,EU -3259893760,3259957247,BE +3259893760,3259900866,BE +3259900867,3259900867,EU +3259900868,3259957247,BE 3259957248,3259958271,DE 3259958272,3259959295,RU 3259959296,3259960319,UA @@ -68622,21 +63996,15 @@ 3261213203,3261213203,EU 3261213204,3261213439,FR 3261213440,3261213695,AF -3261213696,3261239039,FR -3261239040,3261239237,GB +3261213696,3261239237,FR 3261239238,3261239238,EU -3261239239,3261239295,GB -3261239296,3261267967,FR -3261267968,3261280511,DE -3261280512,3261280512,FR +3261239239,3261267967,FR +3261267968,3261280512,DE 3261280513,3261280513,EU -3261280514,3261280767,FR -3261280768,3261297663,DE +3261280514,3261297663,DE 3261297664,3261297919,RU 3261297920,3261298175,PL -3261298176,3261323263,DE -3261323264,3261323519,RU -3261323520,3261333503,DE +3261298176,3261333503,DE 3261333504,3261399039,FI 3261399040,3261472767,GB 3261472768,3261530111,RO @@ -68658,12 +64026,9 @@ 3261690353,3261690354,SG 3261690355,3261690355,EU 3261690356,3261691903,GB -3261691904,3261692159,NL -3261692160,3261692997,EU +3261691904,3261692997,EU 3261692998,3261692998,US -3261692999,3261693439,EU -3261693440,3261693695,SG -3261693696,3261693951,EU +3261692999,3261693951,EU 3261693952,3261694463,NL 3261694464,3261694975,RU 3261694976,3261695487,PL @@ -68714,11 +64079,9 @@ 3261797632,3261797887,RU 3261797888,3261798143,TR 3261798144,3261798399,RU -3261798400,3261798655,DE -3261798656,3261812735,AT +3261798400,3261812735,AT 3261812736,3261812991,RU -3261812992,3261816319,AT -3261816320,3261816575,GB +3261812992,3261816575,AT 3261816576,3261816831,DE 3261816832,3261820927,AT 3261820928,3261821183,RO @@ -68835,8 +64198,9 @@ 3262053632,3262053887,RU 3262053888,3262054143,UA 3262054144,3262054399,RU -3262054400,3262119935,FI -3262119936,3262124031,AX +3262054400,3262121727,FI +3262121728,3262121983,AX +3262121984,3262124031,FI 3262124032,3262128127,DE 3262128128,3262136319,GB 3262136320,3262152703,EU @@ -68957,59 +64321,59 @@ 3262611456,3262627839,GB 3262627840,3262636031,IT 3262636032,3262644223,BE -3262644224,3262645679,DE -3262645680,3262645695,NL -3262645696,3262648319,DE +3262644224,3262645503,DE +3262645504,3262645759,NL +3262645760,3262648319,DE 3262648320,3262648575,EU 3262648576,3262651647,DE 3262651648,3262651903,NL 3262651904,3262655999,DE 3262656000,3262656511,NL -3262656512,3262665727,DE +3262656512,3262662911,DE +3262662912,3262663167,NL +3262663168,3262665727,DE 3262665728,3262665983,EU 3262665984,3262666751,DE 3262666752,3262667007,EU -3262667008,3262679039,DE -3262679040,3262679295,NL -3262679296,3262728959,DE +3262667008,3262728959,DE 3262728960,3262729215,NL -3262729216,3262734591,DE -3262734592,3262734847,NL -3262734848,3262757631,DE -3262757632,3262757887,NL -3262757888,3262765823,DE +3262729216,3262739199,DE +3262739200,3262739455,NL +3262739456,3262765823,DE 3262765824,3262766079,NL 3262766080,3262790655,DE 3262790656,3262790911,NL -3262790912,3262814975,DE -3262814976,3262815231,NL -3262815232,3262842879,DE +3262790912,3262804735,DE +3262804736,3262804991,NL +3262804992,3262812159,DE +3262812160,3262812415,NL +3262812416,3262812671,DE +3262812672,3262812927,NL +3262812928,3262842879,DE 3262842880,3262843135,NL -3262843136,3262857727,DE -3262857728,3262858239,NL +3262843136,3262846975,DE +3262846976,3262847231,NL +3262847232,3262857983,DE +3262857984,3262858239,NL 3262858240,3262860031,DE 3262860032,3262860287,NL -3262860288,3262863871,DE +3262860288,3262863103,DE +3262863104,3262863359,NL +3262863360,3262863871,DE 3262863872,3262864127,NL 3262864128,3262873599,DE 3262873600,3262873855,NL 3262873856,3262878207,DE 3262878208,3262878463,NL -3262878464,3262881535,DE -3262881536,3262881791,NL -3262881792,3262888191,DE +3262878464,3262888191,DE 3262888192,3262888447,NL -3262888448,3262891007,DE -3262891008,3262891263,NL -3262891264,3262897663,DE +3262888448,3262891079,DE +3262891080,3262891087,NL +3262891088,3262897663,DE 3262897664,3262897919,NL -3262897920,3262904079,DE -3262904080,3262904087,NL -3262904088,3262904111,DE -3262904112,3262904119,NL -3262904120,3262904263,DE -3262904264,3262904271,NL -3262904272,3262906367,DE +3262897920,3262904063,DE +3262904064,3262904319,NL +3262904320,3262906367,DE 3262906368,3262964991,CH 3262964992,3262965247,DE 3262965248,3262971903,CH @@ -69117,7 +64481,9 @@ 3263138552,3263138815,AT 3263138816,3263168511,DE 3263168512,3263430655,GB -3263430656,3263478015,SE +3263430656,3263458303,SE +3263458304,3263458559,DE +3263458560,3263478015,SE 3263478016,3263478271,AU 3263478272,3263496191,SE 3263496192,3263499775,EU @@ -69144,9 +64510,7 @@ 3263878146,3263878146,US 3263878147,3263886079,DE 3263886080,3263886335,SG -3263886336,3263915007,DE -3263915008,3263915263,US -3263915264,3263954943,DE +3263886336,3263954943,DE 3263954944,3263979519,ES 3263979520,3263987711,DE 3263987712,3264004095,ES @@ -69369,11 +64733,15 @@ 3264607488,3264610303,DE 3264610304,3264612351,GB 3264612352,3264612607,FR -3264612608,3264613887,GB -3264613888,3264614143,NL -3264614144,3264614911,GB +3264612608,3264613119,GB +3264613120,3264613375,FR +3264613376,3264613904,GB +3264613905,3264613905,NL +3264613906,3264614911,GB 3264614912,3264615167,SE -3264615168,3264624639,GB +3264615168,3264615679,GB +3264615680,3264615935,CH +3264615936,3264624639,GB 3264624640,3264624671,US 3264624672,3264626687,GB 3264626688,3264627711,EE @@ -69465,10 +64833,10 @@ 3264806912,3264815103,GB 3264815104,3264825343,SE 3264825344,3264825599,NO -3264825856,3264826879,GB +3264825856,3264826111,NL +3264826112,3264826879,GB 3264826880,3264827135,NL 3264827136,3264827391,LV -3264827392,3264827647,FR 3264827648,3264828159,GR 3264828160,3264828415,EU 3264828416,3264828671,SE @@ -69555,11 +64923,7 @@ 3264897024,3264905215,GB 3264905216,3264913407,CY 3264913408,3264921599,GB -3264921600,3264926343,LU -3264926344,3264926351,FR -3264926352,3264929279,LU -3264929280,3264929535,FR -3264929536,3264929791,LU +3264921600,3264929791,LU 3264929792,3264937983,SK 3264937984,3265003519,GB 3265003520,3265015807,DE @@ -69768,8 +65132,8 @@ 3266781184,3266789375,PL 3266789376,3266797567,SM 3266797568,3266797823,GB -3266797824,3266797871,ES -3266797872,3266805759,GB +3266797824,3266797951,ES +3266797952,3266805759,GB 3266805760,3266813951,AT 3266813952,3266822143,UA 3266822144,3266830335,FR @@ -69839,11 +65203,9 @@ 3267166208,3267231743,GB 3267231744,3267297279,RU 3267297280,3267362815,CH -3267362816,3267368447,DK -3267368448,3267368480,SE +3267362816,3267368480,DK 3267368481,3267368481,EU -3267368482,3267368703,SE -3267368704,3267428351,DK +3267368482,3267428351,DK 3267428352,3267493887,GB 3267493888,3267559423,EU 3267559424,3267624959,DE @@ -69856,9 +65218,13 @@ 3267681536,3267685375,EU 3267685376,3267685631,NL 3267685632,3267690495,EU -3267690496,3267756031,FI +3267690496,3267710847,FI +3267710848,3267710975,SE +3267710976,3267756031,FI 3267756032,3267821567,SE -3267821568,3267845375,FR +3267821568,3267824639,FR +3267824640,3267824895,MQ +3267824896,3267845375,FR 3267845376,3267845631,GP 3267845632,3267846655,FR 3267846656,3267846911,MQ @@ -69875,24 +65241,20 @@ 3268173824,3268182015,MT 3268182016,3268198399,PL 3268198400,3268214783,MA -3268214784,3268226559,EU +3268214784,3268218111,EU +3268218112,3268218367,GB +3268218368,3268226559,EU 3268226560,3268226815,GB 3268226816,3268238335,EU 3268238336,3268238847,GB -3268238848,3268240895,EU -3268240896,3268241151,GB -3268241152,3268243756,EU -3268243757,3268243757,GB -3268243758,3268251135,EU +3268238848,3268251135,EU 3268251136,3268251647,GB -3268251648,3268259583,EU -3268259584,3268259839,GB -3268259840,3268280319,EU +3268251648,3268259817,EU +3268259818,3268259819,GB +3268259820,3268280319,EU 3268280320,3268345855,FR 3268345856,3268411391,GB -3268411392,3268458495,AT -3268458496,3268458879,DE -3268458880,3268464127,AT +3268411392,3268464127,AT 3268464128,3268464383,LI 3268464384,3268476927,AT 3268476928,3268537087,CH @@ -69990,7 +65352,6 @@ 3270643712,3270644223,AT 3270644224,3270644735,NL 3270644736,3270645247,DE -3270645248,3270645759,PL 3270645760,3270646271,IL 3270646272,3270647807,RU 3270647808,3270648063,TR @@ -70014,7 +65375,6 @@ 3270653184,3270653439,UA 3270653440,3270653695,NL 3270653696,3270653951,GB -3270653952,3270654207,ES 3270654208,3270654463,RO 3270654464,3270654719,BE 3270654720,3270655231,UA @@ -70126,19 +65486,13 @@ 3271024640,3271032831,GB 3271032832,3271098367,NO 3271098368,3271163903,SI -3271163904,3271184211,FR -3271184212,3271184212,GF -3271184213,3271193343,FR -3271193344,3271193599,GF -3271193600,3271224319,FR +3271163904,3271224319,FR 3271224320,3271224575,MQ 3271224576,3271229439,FR 3271229440,3271360511,FI 3271360512,3271426047,EU 3271426048,3271491583,FR -3271491584,3271502591,DK -3271502592,3271502847,SE -3271502848,3271513343,DK +3271491584,3271513343,DK 3271513344,3271513599,EU 3271513600,3271557119,DK 3271557120,3271589887,BE @@ -70328,38 +65682,25 @@ 3272138240,3272138751,BG 3272138752,3272146943,DE 3272146944,3272212479,RU -3272212480,3272212735,US -3272212736,3272214271,EU +3272212480,3272214271,EU 3272214272,3272214527,GB 3272214528,3272217855,EU 3272217856,3272217875,ES 3272217876,3272218111,EU 3272218112,3272218623,GB -3272218624,3272221951,EU -3272221952,3272222207,US -3272222208,3272223999,EU +3272218624,3272223999,EU 3272224000,3272224255,GB -3272224256,3272227327,EU -3272227328,3272227583,GB -3272227584,3272228863,EU +3272224256,3272227491,EU +3272227492,3272227492,GB +3272227493,3272228863,EU 3272228864,3272237055,LU 3272237056,3272237823,GB 3272237824,3272238079,IM 3272238080,3272238591,GB 3272238592,3272238847,IM -3272238848,3272239615,GB -3272239616,3272239871,IM -3272239872,3272240127,GB -3272240128,3272240383,IM -3272240384,3272240895,GB -3272240896,3272241151,IM -3272241152,3272241407,GB +3272238848,3272241407,GB 3272241408,3272241919,IM -3272241920,3272242431,GB -3272242432,3272242943,IM -3272242944,3272243199,GB -3272243200,3272243455,IM -3272243456,3272245247,GB +3272241920,3272245247,GB 3272245248,3272261631,FI 3272261632,3272261887,MT 3272261888,3272262143,BG @@ -70391,7 +65732,9 @@ 3272268800,3272269055,IL 3272269056,3272269311,GB 3272269312,3272269567,IL -3272269568,3272351743,GB +3272269568,3272293631,GB +3272293632,3272293887,AU +3272293888,3272351743,GB 3272351744,3272352767,PL 3272352768,3272353791,UA 3272353792,3272355839,CH @@ -70456,11 +65799,7 @@ 3272482304,3272482559,PL 3272482560,3272482815,BE 3272482816,3272491007,RU -3272491008,3272491263,GB -3272491264,3272491327,DE -3272491328,3272491391,GB -3272491392,3272491519,DE -3272491520,3272499199,GB +3272491008,3272499199,GB 3272499200,3272499711,RU 3272499712,3272500223,US 3272500224,3272500735,RU @@ -70630,7 +65969,9 @@ 3273193984,3273194495,EU 3273194496,3273195007,UA 3273195008,3273195519,RU -3273195520,3273261055,FR +3273195520,3273225727,FR +3273225728,3273225983,GF +3273225984,3273261055,FR 3273261056,3273261567,NO 3273261568,3273262079,BE 3273262080,3273262591,LU @@ -70662,23 +66003,19 @@ 3273327360,3273327615,IE 3273327616,3273329663,EU 3273329664,3273329919,GB -3273329920,3273330511,EU -3273330512,3273330519,GB -3273330520,3273330943,EU +3273329920,3273330431,EU +3273330432,3273330687,GB +3273330688,3273330943,EU 3273330944,3273331199,GB 3273331200,3273331935,EU 3273331936,3273331967,GB 3273331968,3273335295,EU 3273335296,3273335551,GB -3273335552,3273336831,EU -3273336832,3273337087,DE -3273337088,3273340031,EU -3273340032,3273340095,GB -3273340096,3273340111,EU -3273340112,3273340119,GB -3273340120,3273340370,EU -3273340371,3273340371,GB -3273340372,3273344511,EU +3273335552,3273336881,EU +3273336882,3273336882,DE +3273336883,3273339903,EU +3273339904,3273340415,GB +3273340416,3273344511,EU 3273344512,3273344767,DE 3273344768,3273382143,EU 3273382144,3273382399,GB @@ -70720,29 +66057,33 @@ 3273440768,3273441279,AT 3273441280,3273443327,GB 3273443328,3273443583,FR -3273443584,3273449471,GB -3273449472,3273457663,CH +3273443584,3273449727,GB +3273449728,3273457663,CH 3273457664,3273523199,HR 3273523200,3273588735,DE 3273588736,3273687039,IT 3273687040,3273719807,DE 3273719808,3273720831,NL 3273720832,3273720847,IE -3273720848,3273726909,NL -3273726910,3273726910,GB -3273726911,3273727119,NL +3273720848,3273726719,NL +3273726720,3273726975,GB +3273726976,3273727119,NL 3273727120,3273727127,PT 3273727128,3273728590,NL 3273728591,3273728592,EU -3273728593,3273734184,NL -3273734185,3273734185,GB -3273734186,3273744895,NL +3273728593,3273744895,NL 3273744896,3273745151,GB 3273745152,3273746943,NL 3273746944,3273747199,EU -3273747200,3273749120,NL -3273749121,3273749121,GB -3273749122,3273752831,NL +3273747200,3273748991,NL +3273748992,3273749247,GB +3273749248,3273749631,NL +3273749632,3273749759,FR +3273749760,3273750271,NL +3273750272,3273750527,GB +3273750528,3273750783,NL +3273750784,3273751295,GB +3273751296,3273752831,NL 3273752832,3273753087,EU 3273753088,3273753343,NL 3273753344,3273753599,EU @@ -70802,7 +66143,6 @@ 3273875968,3273876223,DE 3273876224,3273876479,IT 3273876480,3273876991,SE -3273876992,3273877247,CH 3273877248,3273877503,DE 3273877536,3273877567,AT 3273877568,3273877759,IT @@ -70851,9 +66191,7 @@ 3274150912,3274151167,US 3274151168,3274152447,KW 3274152448,3274152703,US -3274152704,3274156256,KW -3274156257,3274156286,US -3274156287,3274162175,KW +3274152704,3274162175,KW 3274162176,3274162687,GB 3274162688,3274163199,DE 3274163200,3274163711,UA @@ -71156,10 +66494,13 @@ 3275399168,3275407359,AT 3275407360,3275415551,GB 3275415552,3275423743,UA -3275423744,3275423999,GB -3275424000,3275424255,EU -3275424256,3275425023,GB -3275425024,3275426815,EU +3275423744,3275423999,EU +3275424000,3275424511,GB +3275424512,3275424767,EU +3275424768,3275425023,GB +3275425024,3275425791,EU +3275425792,3275426047,GB +3275426048,3275426815,EU 3275426816,3275427327,GB 3275427328,3275427583,EU 3275427584,3275427839,GB @@ -71167,55 +66508,50 @@ 3275429888,3275430143,GB 3275430144,3275432703,EU 3275432704,3275432959,GB -3275432960,3275435263,EU +3275432960,3275434751,EU +3275434752,3275435007,GB +3275435008,3275435263,EU 3275435264,3275435519,GB -3275435520,3275443199,EU +3275435520,3275435775,EU +3275435776,3275436031,GB +3275436032,3275439615,EU +3275439616,3275439871,GB +3275439872,3275443199,EU 3275443200,3275443455,GB 3275443456,3275446783,EU -3275446784,3275447295,GB -3275447296,3275449343,EU +3275446784,3275447039,GB +3275447040,3275449343,EU 3275449344,3275449855,GB -3275449856,3275449871,EU -3275449872,3275449887,US -3275449888,3275450047,EU +3275449856,3275449919,EU +3275449920,3275449927,GB +3275449928,3275450047,EU 3275450048,3275450111,GB 3275450112,3275452927,EU -3275452928,3275453247,GB -3275453248,3275453695,EU -3275453696,3275453951,GB -3275453952,3275454047,EU -3275454048,3275454063,GB -3275454064,3275454111,EU -3275454112,3275454127,GB -3275454128,3275454207,EU -3275454208,3275454463,GB +3275452928,3275453439,GB +3275453440,3275453695,EU +3275453696,3275454463,GB 3275454464,3275455487,EU 3275455488,3275455743,GB -3275455744,3275460863,EU -3275460864,3275461119,GB -3275461120,3275461631,EU -3275461632,3275461887,GB -3275461888,3275462399,EU -3275462400,3275462655,GB -3275462656,3275462847,EU -3275462848,3275463167,GB -3275463168,3275463423,EU -3275463424,3275463935,GB -3275463936,3275464959,EU +3275455744,3275461631,EU +3275461632,3275462143,GB +3275462144,3275462399,EU +3275462400,3275462911,GB +3275462912,3275463423,EU +3275463424,3275464191,GB +3275464192,3275464959,EU 3275464960,3275465215,GB -3275465216,3275465567,EU -3275465568,3275465583,IE -3275465584,3275465599,GB -3275465600,3275465695,EU -3275465696,3275465711,GB -3275465712,3275466495,EU +3275465216,3275465471,EU +3275465472,3275465727,GB +3275465728,3275466495,EU 3275466496,3275467007,GB -3275467008,3275468543,EU -3275468544,3275468799,IE -3275468800,3275469055,EU -3275469056,3275470079,GB -3275470080,3275470335,EU -3275470336,3275470591,GB +3275467008,3275467519,EU +3275467520,3275467775,GB +3275467776,3275468740,EU +3275468741,3275468741,IE +3275468742,3275469055,EU +3275469056,3275469567,GB +3275469568,3275469823,EU +3275469824,3275470591,GB 3275470592,3275471359,EU 3275471360,3275471615,GB 3275471616,3275472639,EU @@ -71224,10 +66560,10 @@ 3275473152,3275473407,GB 3275473408,3275473663,EU 3275473664,3275474175,GB -3275474176,3275474687,EU -3275474688,3275474943,GB -3275474944,3275477247,EU -3275477248,3275477503,GB +3275474176,3275474431,EU +3275474432,3275474943,GB +3275474944,3275476991,EU +3275476992,3275477503,GB 3275477504,3275489279,EU 3275489280,3275497471,GB 3275497472,3275505663,DE @@ -71361,9 +66697,7 @@ 3275661312,3275669503,IT 3275669504,3275677695,GB 3275677696,3275685887,IT -3275685888,3275742207,DE -3275742208,3275742463,FR -3275742464,3275751423,DE +3275685888,3275751423,DE 3275751424,3275751679,AT 3275751680,3275751935,EU 3275751936,3275759615,AT @@ -71485,32 +66819,50 @@ 3275923456,3275931647,ME 3275931648,3275939839,UA 3275939840,3275948031,GB -3275948032,3275952639,SE -3275952640,3275952767,GB -3275952768,3275952775,SE -3275952776,3275952895,GB -3275952896,3276013567,SE +3275948032,3276013567,SE 3276013568,3276014335,GB 3276014336,3276015103,FR -3276015104,3276015359,GB -3276015360,3276018431,FR -3276018432,3276018687,GB -3276018688,3276018943,FR -3276018944,3276019199,GB -3276019200,3276023551,FR -3276023552,3276026367,GB -3276026368,3276026879,FR -3276026880,3276027135,GB -3276027136,3276027647,FR +3276015104,3276015871,GB +3276015872,3276016127,FR +3276016128,3276016639,GB +3276016640,3276016895,FR +3276016896,3276017919,GB +3276017920,3276018431,FR +3276018432,3276019967,GB +3276019968,3276020479,FR +3276020480,3276020991,GB +3276020992,3276021247,FR +3276021248,3276021503,GB +3276021504,3276022015,FR +3276022016,3276022527,GB +3276022528,3276023039,FR +3276023040,3276023295,GB +3276023296,3276023551,FR +3276023552,3276024575,GB +3276024576,3276024831,FR +3276024832,3276026367,GB +3276026368,3276026623,FR +3276026624,3276027391,GB +3276027392,3276027647,FR 3276027648,3276030207,GB -3276030208,3276030463,FR -3276030464,3276031231,GB -3276031232,3276037887,FR -3276037888,3276038143,GB -3276038144,3276039423,FR +3276030208,3276030719,FR +3276030720,3276031231,GB +3276031232,3276031487,FR +3276031488,3276033919,GB +3276033920,3276034047,FR +3276034048,3276036095,GB +3276036096,3276036351,FR +3276036352,3276037119,GB +3276037120,3276037375,FR +3276037376,3276039167,GB +3276039168,3276039423,FR 3276039424,3276042239,GB -3276042240,3276046079,FR -3276046080,3276046335,GB +3276042240,3276043007,FR +3276043008,3276044799,GB +3276044800,3276045055,FR +3276045056,3276045917,GB +3276045918,3276045918,FR +3276045919,3276046335,GB 3276046336,3276062719,RU 3276062720,3276063231,PL 3276063232,3276063743,FR @@ -71617,11 +66969,11 @@ 3276316672,3276324863,GB 3276324864,3276333055,IT 3276333056,3276341247,RU -3276341248,3276349183,DE +3276341248,3276345343,DE +3276345344,3276345599,NL +3276345600,3276349183,DE 3276349184,3276349439,NL -3276349440,3276364799,DE -3276364800,3276365055,NL -3276365056,3276380927,DE +3276349440,3276380927,DE 3276380928,3276381183,NL 3276381184,3276390143,DE 3276390144,3276390399,NL @@ -71668,22 +67020,20 @@ 3276447744,3276455935,EU 3276455936,3276464127,BE 3276464128,3276472319,GR -3276472320,3276478719,EU -3276478720,3276479743,FR -3276479744,3276479999,EU +3276472320,3276479999,EU 3276480000,3276480255,FR 3276480256,3276485631,EU 3276485632,3276485887,GB -3276485888,3276491007,EU -3276491008,3276491263,SE -3276491264,3276494351,EU +3276485888,3276493567,EU +3276493568,3276493823,GB +3276493824,3276494351,EU 3276494352,3276494543,GB -3276494544,3276517887,EU -3276517888,3276518143,NL -3276518144,3276536319,EU -3276536320,3276536575,ES -3276536576,3276537855,EU -3276537856,3276668927,ES +3276494544,3276534527,EU +3276534528,3276534783,AU +3276534784,3276537855,EU +3276537856,3276627711,ES +3276627712,3276627967,PT +3276627968,3276668927,ES 3276668928,3276677119,MC 3276677120,3276678143,HR 3276678144,3276678655,SE @@ -71769,49 +67119,70 @@ 3276866304,3276866559,EU 3276866560,3276866815,IT 3276866816,3276867071,EU -3276867072,3276868607,IT +3276867072,3276867583,IT +3276867584,3276868095,GB +3276868096,3276868607,IT 3276868608,3276868863,GB -3276868864,3276868927,IT -3276868928,3276870143,GB +3276868864,3276869119,IT +3276869120,3276870143,GB 3276870144,3276870399,IT 3276870400,3276870655,GB -3276870656,3276871423,IT -3276871424,3276881919,GB -3276881920,3276882943,IT -3276882944,3276883711,GB +3276870656,3276870911,IT +3276870912,3276871167,GB +3276871168,3276871423,IT +3276871424,3276882175,GB +3276882176,3276883199,IT +3276883200,3276883711,GB 3276883712,3276883967,IT 3276883968,3276886783,GB 3276886784,3276887039,DE -3276887040,3276890111,GB +3276887040,3276888575,GB +3276888576,3276888831,IT +3276888832,3276890111,GB 3276890112,3276890367,US 3276890368,3276892415,GB -3276892416,3276893695,IT -3276893696,3276895743,GB +3276892416,3276892927,IT +3276892928,3276893439,GB +3276893440,3276893951,IT +3276893952,3276894207,GB +3276894208,3276894463,IT +3276894464,3276895743,GB 3276895744,3276895999,IT -3276896000,3276901083,GB -3276901084,3276901084,CH -3276901085,3276901119,GB -3276901120,3276901375,CH -3276901376,3276903423,GB -3276903424,3276903679,SE -3276903680,3276907263,GB -3276907264,3276907519,DK -3276907520,3276908543,GB -3276908544,3276908687,SE +3276896000,3276898559,GB +3276898560,3276899327,CH +3276899328,3276899839,GB +3276899840,3276900095,CH +3276900096,3276900863,GB +3276900864,3276901375,CH +3276901376,3276901631,GB +3276901632,3276901887,CH +3276901888,3276903167,GB +3276903168,3276903679,SE +3276903680,3276907519,GB +3276907520,3276907775,NL +3276907776,3276908543,GB +3276908544,3276908671,SE +3276908672,3276908687,NL 3276908688,3276908703,GB 3276908704,3276908799,SE 3276908800,3276910847,GB 3276910848,3276911103,IT -3276911104,3276911359,GB -3276911360,3276912127,IT -3276912128,3276912639,GB -3276912640,3276913151,IT +3276911104,3276911615,GB +3276911616,3276912127,IT +3276912128,3276912895,GB +3276912896,3276913151,IT 3276913152,3276917231,GB 3276917232,3276917247,FR -3276917248,3276919487,GB -3276919488,3276919535,DE -3276919536,3276922879,GB -3276922880,3276923903,FR +3276917248,3276917759,GB +3276917760,3276918015,ES +3276918016,3276919295,GB +3276919296,3276919551,DE +3276919552,3276920831,GB +3276920832,3276921087,DE +3276921088,3276922879,GB +3276922880,3276923135,FR +3276923136,3276923391,GB +3276923392,3276923903,FR 3276923904,3276924039,GB 3276924040,3276924071,FR 3276924072,3276931071,GB @@ -71891,7 +67262,7 @@ 3277191936,3277192191,DK 3277192192,3277192447,PL 3277192448,3277192703,DK -3277192704,3277192959,IL +3277192704,3277192959,DE 3277192960,3277193215,TR 3277193216,3277258751,NL 3277258752,3277324287,TR @@ -72010,9 +67381,7 @@ 3277388544,3277388799,HU 3277388800,3277389311,RU 3277389312,3277389823,AM -3277389824,3277399359,GB -3277399360,3277399423,FR -3277399424,3277455359,GB +3277389824,3277455359,GB 3277455360,3277463551,DE 3277463552,3277467135,EU 3277467136,3277467391,US @@ -72043,9 +67412,7 @@ 3277680640,3277684735,GB 3277684736,3277685247,RU 3277685248,3277685759,DE -3277685760,3277685815,IE -3277685816,3277685816,GB -3277685817,3277686271,IE +3277685760,3277686271,IE 3277686272,3277686783,PL 3277686784,3277687295,RO 3277687296,3277687807,UA @@ -72073,9 +67440,7 @@ 3277699072,3277699583,UA 3277699584,3277700607,RU 3277700608,3277701119,UA -3277701120,3277701313,DK -3277701314,3277701314,NO -3277701315,3277701631,DK +3277701120,3277701631,DK 3277701632,3277702143,AT 3277702144,3277702655,EU 3277702656,3277703679,DE @@ -72215,9 +67580,13 @@ 3278036992,3278045183,FR 3278045184,3278110719,GB 3278110720,3278176255,SE -3278176256,3278241791,FR +3278176256,3278221091,FR +3278221092,3278221093,GB +3278221094,3278241791,FR 3278241792,3278307327,GB -3278307328,3278372863,IT +3278307328,3278358527,IT +3278358528,3278358783,US +3278358784,3278372863,IT 3278372864,3278635007,GB 3278635008,3278635263,NL 3278635264,3278635519,EU @@ -72394,9 +67763,7 @@ 3280009728,3280010239,GB 3280010240,3280010751,UA 3280010752,3280011263,TR -3280011264,3280019967,EU -3280019968,3280020223,CH -3280020224,3280076799,EU +3280011264,3280076799,EU 3280076800,3280084991,GB 3280084992,3280093183,BA 3280093184,3280109567,GR @@ -72597,7 +67964,11 @@ 3280796672,3280797695,CZ 3280797696,3280863231,CH 3280863232,3280928767,TR -3280928768,3280994559,GB +3280928768,3280933365,GB +3280933366,3280933366,DE +3280933367,3280936191,GB +3280936192,3280936447,DE +3280936448,3280994559,GB 3280994560,3280994815,RU 3280994816,3280995071,NL 3280995072,3280995327,DE @@ -72635,7 +68006,19 @@ 3281043456,3281059839,RU 3281059840,3281062911,DE 3281062912,3281063167,EU -3281063168,3281125375,DE +3281063168,3281068543,DE +3281068544,3281068647,US +3281068648,3281068655,DE +3281068656,3281068751,US +3281068752,3281068759,DE +3281068760,3281068799,US +3281068800,3281116927,DE +3281116928,3281117007,PL +3281117008,3281117023,DE +3281117024,3281117119,PL +3281117120,3281117135,DE +3281117136,3281117183,PL +3281117184,3281125375,DE 3281125376,3281133567,SK 3281133568,3281141759,IR 3281141760,3281149951,RU @@ -72713,9 +68096,7 @@ 3281385472,3281387519,BG 3281387520,3281453055,PL 3281453056,3281518591,RU -3281518592,3281532415,GB -3281532416,3281532671,IN -3281532672,3281649663,GB +3281518592,3281649663,GB 3281649664,3281715199,FR 3281715200,3281780735,TR 3281780736,3281846271,FI @@ -72740,9 +68121,7 @@ 3281975296,3281976319,RU 3281976320,3281976831,DE 3281976832,3281977343,RU -3281977344,3281996577,NO -3281996578,3281996578,SE -3281996579,3282042879,NO +3281977344,3282042879,NO 3282042880,3282083839,CH 3282083840,3282084351,DE 3282084352,3282084863,RO @@ -72801,14 +68180,14 @@ 3282194432,3282195455,UA 3282195456,3282196479,IE 3282196480,3282197503,UA -3282197504,3282198015,RU -3282198016,3282198271,KG -3282198272,3282198527,RU +3282197504,3282198527,RU 3282198528,3282206719,GB 3282206720,3282223103,CH 3282223104,3282231295,BE 3282231296,3282239487,DE -3282239488,3282305023,SE +3282239488,3282287615,SE +3282287616,3282287871,FI +3282287872,3282305023,SE 3282305024,3282370559,PL 3282370560,3282436095,FI 3282436096,3282477055,GB @@ -72862,9 +68241,7 @@ 3282747392,3282763775,RU 3282763776,3282772991,GB 3282772992,3282773247,EU -3282773248,3282942210,GB -3282942211,3282942211,US -3282942212,3282960383,GB +3282773248,3282960383,GB 3282960384,3283091455,TR 3283091456,3283156991,CH 3283156992,3283173375,DE @@ -72891,10 +68268,9 @@ 3283209728,3283210239,TR 3283210240,3283210751,UA 3283210752,3283211263,PL -3283211264,3283211488,FR +3283211264,3283211488,GB 3283211489,3283211489,EU -3283211490,3283211519,FR -3283211520,3283211775,GB +3283211490,3283211775,GB 3283211776,3283212287,NL 3283212288,3283212799,PL 3283212800,3283213311,BG @@ -73174,7 +68550,9 @@ 3284016384,3284016639,CH 3284016640,3284017151,DK 3284017152,3284025343,GR -3284025344,3284033535,GB +3284025344,3284032701,GB +3284032702,3284032702,DE +3284032703,3284033535,GB 3284033536,3284041727,RU 3284041728,3284041983,DK 3284041984,3284042239,SI @@ -73529,20 +68907,27 @@ 3285446656,3285447679,UA 3285447680,3285449727,RU 3285449728,3285450751,UA -3285450752,3285450879,EU -3285450880,3285450991,GB -3285450992,3285452287,EU +3285450752,3285451007,GB +3285451008,3285452287,EU 3285452288,3285452543,GB -3285452544,3285457919,EU +3285452544,3285454079,EU +3285454080,3285454335,GB +3285454336,3285457919,EU 3285457920,3285458175,GB -3285458176,3285467647,EU -3285467648,3285467903,DE -3285467904,3285472255,EU +3285458176,3285459967,EU +3285459968,3285460223,FI +3285460224,3285470975,EU +3285470976,3285471231,IN +3285471232,3285472255,EU 3285472256,3285472511,US -3285472512,3285498623,EU +3285472512,3285476029,EU +3285476030,3285476030,AT +3285476031,3285498623,EU 3285498624,3285498879,CH 3285498880,3285501695,EU -3285501696,3285501951,CH +3285501696,3285501823,GB +3285501824,3285501887,CZ +3285501888,3285501951,GB 3285501952,3285516287,EU 3285516288,3285544959,BE 3285544960,3285545215,EU @@ -73618,9 +69003,9 @@ 3285860352,3285868543,FI 3285868544,3285876735,IE 3285876736,3285909503,RU -3285909504,3285910431,EU -3285910432,3285910463,NG -3285910464,3285922047,EU +3285909504,3285910439,EU +3285910440,3285910447,NG +3285910448,3285922047,EU 3285922048,3285922303,FR 3285922304,3285927423,EU 3285927424,3285927679,GB @@ -73631,11 +69016,15 @@ 3285935872,3285936127,GB 3285936128,3285939743,EU 3285939744,3285939759,GB -3285939760,3285946111,EU +3285939760,3285943551,EU +3285943552,3285943647,GB +3285943648,3285943679,NG +3285943680,3285943807,GB +3285943808,3285946111,EU 3285946112,3285946367,ES -3285946368,3285948927,EU -3285948928,3285949183,NG -3285949184,3285953535,EU +3285946368,3285951487,EU +3285951488,3285951743,GB +3285951744,3285953535,EU 3285953536,3285954047,PK 3285954048,3285975039,EU 3285975040,3286013695,FR @@ -73720,22 +69109,20 @@ 3286367232,3286368255,BG 3286368256,3286376447,CH 3286376448,3286384639,GB -3286384640,3286399935,DE -3286399936,3286399999,GB +3286384640,3286399759,DE +3286399760,3286399807,GB +3286399808,3286399815,DE +3286399816,3286399831,GB +3286399832,3286399839,DE +3286399840,3286399999,GB 3286400000,3286401023,DE -3286401024,3286401279,GB -3286401280,3286401535,GG -3286401536,3286403071,GB -3286403072,3286403327,GG -3286403328,3286403839,GB -3286403840,3286404351,GG -3286404352,3286404607,GB -3286404608,3286405375,GG +3286401024,3286404095,GB +3286404096,3286405375,GG 3286405376,3286405887,GB 3286405888,3286407167,GG 3286407168,3286407679,GB -3286407680,3286408191,GG -3286408192,3286409215,GB +3286407680,3286407935,GG +3286407936,3286409215,GB 3286409216,3286417407,DE 3286417408,3286417663,UA 3286417664,3286417919,IT @@ -73767,20 +69154,10 @@ 3286424832,3286425087,TR 3286425088,3286425343,RU 3286425344,3286425599,IT -3286425600,3286425855,KW -3286425856,3286426111,US -3286426112,3286426367,KW -3286426368,3286426623,US -3286426624,3286433791,KW +3286425600,3286433791,KW 3286433792,3286499327,DE 3286499328,3286564863,HU -3286564864,3286566911,AE -3286566912,3286567167,US -3286567168,3286568191,AE -3286568192,3286568703,US -3286568704,3286571263,AE -3286571264,3286571519,US -3286571520,3286630399,AE +3286564864,3286630399,AE 3286630400,3286638591,BG 3286638592,3286646783,AT 3286646784,3286654975,RU @@ -73885,7 +69262,7 @@ 3286926592,3286926847,DE 3286926848,3286927103,PT 3286927104,3286927359,FI -3286927360,3286927615,NL +3286927360,3286927615,DE 3286927616,3286927871,SI 3286927872,3286928127,BG 3286928128,3286928383,DE @@ -74114,11 +69491,7 @@ 3287481344,3287482367,PL 3287482368,3287524095,DE 3287524096,3287524351,GB -3287524352,3287533695,DE -3287533696,3287533727,PL -3287533728,3287535663,DE -3287535664,3287535679,FR -3287535680,3287548927,DE +3287524352,3287548927,DE 3287548928,3287549439,UA 3287549440,3287549951,SE 3287549952,3287550463,UA @@ -74158,8 +69531,7 @@ 3287639552,3287640063,RU 3287640064,3287640575,PL 3287640576,3287641087,SI -3287641088,3287641343,GB -3287641344,3287641599,EU +3287641088,3287641599,EU 3287641600,3287642111,FI 3287642112,3287642623,UA 3287642624,3287643135,BE @@ -74372,8 +69744,7 @@ 3288072192,3288088575,SE 3288088576,3288104959,RS 3288104960,3288236031,DE -3288236032,3288236287,LI -3288236288,3288236543,AT +3288236032,3288236543,LI 3288236544,3288237055,FR 3288237056,3288238591,RO 3288238592,3288239103,PL @@ -74384,7 +69755,6 @@ 3288241152,3288241663,ES 3288241664,3288242175,UA 3288242176,3288242687,RO -3288242688,3288243199,FR 3288243200,3288243711,PL 3288243712,3288244735,FR 3288244736,3288245247,DE @@ -74411,7 +69781,9 @@ 3288401152,3288401407,RU 3288401408,3288401663,SA 3288401664,3288401919,MU -3288401920,3288406527,ZA +3288401920,3288403711,ZA +3288403712,3288403967,AO +3288403968,3288406527,ZA 3288406528,3288407039,KE 3288407040,3288408063,NA 3288408064,3288413183,ZA @@ -74439,7 +69811,9 @@ 3288433920,3288434175,NG 3288434176,3288434431,IN 3288434432,3288434687,CU -3288434688,3288435711,JM +3288434688,3288434943,JM +3288434944,3288435199,CD +3288435200,3288435711,JM 3288435712,3288435967,US 3288435968,3288436223,PR 3288436224,3288436479,US @@ -74459,8 +69833,8 @@ 3288467456,3288469503,BI 3288469504,3288481791,ZA 3288481792,3288482303,ZW -3288482304,3288483839,ZA -3288483840,3288485887,ZW +3288482304,3288485631,ZA +3288485632,3288485887,ZW 3288485888,3288489983,MA 3288489984,3288514559,ZA 3288514560,3288522751,EG @@ -74470,17 +69844,15 @@ 3288535040,3288539135,CW 3288539136,3288543487,US 3288543488,3288543743,AP -3288543744,3288543996,US +3288543744,3288543996,CH 3288543997,3288543997,EU -3288543998,3288543998,CH -3288543999,3288544498,US +3288543998,3288543999,CH +3288544000,3288544498,US 3288544499,3288544499,EU 3288544500,3288544767,US 3288544768,3288545023,MX 3288545024,3288545279,FR -3288545280,3288545379,US -3288545380,3288545380,AU -3288545381,3288545535,US +3288545280,3288545535,AU 3288545536,3288545791,ZA 3288545792,3288546303,KE 3288546304,3288547327,NG @@ -74512,8 +69884,7 @@ 3288578048,3288580095,JM 3288580096,3288588287,BB 3288588288,3288608255,ZA -3288608256,3288608511,DE -3288608512,3288614655,US +3288608256,3288614655,US 3288614656,3288616959,ZA 3288616960,3288617215,ZW 3288617216,3288661759,ZA @@ -74730,7 +70101,6 @@ 3291216128,3291216383,LS 3291216384,3291216639,AO 3291216640,3291216895,NG -3291216896,3291217919,MU 3291217920,3291230207,ZA 3291230208,3291234303,GH 3291234304,3291242495,ZA @@ -74802,8 +70172,8 @@ 3291432448,3291432703,ZA 3291432704,3291432959,NA 3291432960,3291433471,ZA -3291433472,3291433983,NA -3291433984,3291434239,ZA +3291433472,3291433727,NA +3291433728,3291434239,ZA 3291434240,3291434751,A2 3291434752,3291435007,ZA 3291435008,3291439103,A2 @@ -74813,9 +70183,11 @@ 3300917248,3300921343,MU 3300925440,3300929535,MG 3300933632,3300950015,MU -3301048320,3301179391,ZA +3300982784,3301179391,ZA 3301179392,3301244927,SC -3301244928,3301441567,ZA +3301244928,3301375999,ZA +3301376000,3301441535,SC +3301441536,3301441567,ZA 3301441568,3301441575,NG 3301441576,3301441655,ZA 3301441656,3301441663,NG @@ -74891,17 +70263,14 @@ 3301513216,3301515263,EG 3301515264,3301523455,GH 3301523456,3301531647,CI -3301539840,3301540863,KE -3301540864,3301541119,A2 -3301541120,3301541631,KE -3301541632,3301541887,A2 -3301541888,3301544959,KE +3301539840,3301543935,A2 +3301543936,3301544959,KE 3301544960,3301545215,A2 3301545216,3301548031,KE 3301548032,3301556223,GH 3301556224,3301557759,DJ -3301557760,3301558271,US -3301558272,3301560319,DJ +3301557760,3301558015,US +3301558016,3301560319,DJ 3301560320,3301566463,KE 3301568512,3301570559,EG 3301570560,3301572607,KE @@ -74918,11 +70287,7 @@ 3301900288,3301902663,NG 3301902664,3301902671,CM 3301902672,3301904383,NG -3301904384,3301904895,KE -3301904896,3301904913,CA -3301904914,3301904914,KE -3301904915,3301905407,CA -3301905408,3301908479,KE +3301904384,3301908479,KE 3301908480,3301912575,ZA 3301912576,3301916671,MU 3301949440,3301965823,SN @@ -74959,6 +70324,7 @@ 3302540800,3302541311,AO 3302541312,3302542335,NG 3302543360,3302544383,NG +3302548480,3302548991,GH 3302548992,3302549503,ZA 3302549504,3302550015,KE 3302550016,3302550527,TZ @@ -74980,13 +70346,7 @@ 3302555648,3302621183,MA 3302621184,3302684671,EG 3302684672,3302686719,JO -3302686720,3302696959,EG -3302696960,3302697983,SA -3302697984,3302746623,EG -3302746624,3302746879,US -3302746880,3302748927,EG -3302748928,3302749183,US -3302749184,3302752255,EG +3302686720,3302752255,EG 3302752256,3302753359,NG 3302753360,3302753363,CM 3302753364,3302753607,NG @@ -75120,17 +70480,20 @@ 3315589120,3315597311,CM 3315597312,3316121599,EG 3316121600,3316645887,ZA -3316645888,3316680703,KE -3316680704,3316682751,US -3316682752,3317170175,KE +3316645888,3317170175,KE +3317170176,3317301247,ZA +3317301248,3317432319,TZ 3317694464,3318218751,EG 3318218752,3318743039,DZ +3318743040,3318874111,SD +3318947840,3318956031,NG +3318988800,3319005183,ZW 3319005184,3319136255,ZM 3319136256,3319152639,NE 3319152640,3319156735,GQ +3319160832,3319164927,NG 3319164928,3319166975,ZA 3319201792,3319234559,SL -3319234560,3319267327,TZ 3319267328,3319398399,AO 3319398400,3319529471,MZ 3319529472,3319537663,ZM @@ -75149,6 +70512,14 @@ 3319652352,3319660543,ZW 3319660544,3319791615,EG 3319791616,3320053759,MU +3320381440,3320446975,NA +3320479744,3320500223,ZA +3320500224,3320502271,BW +3320504320,3320505343,TZ +3320505344,3320506367,NG +3320506368,3320507391,ZA +3320507392,3320508415,KE +3320508416,3320509439,SC 3320512512,3320578047,MZ 3320578048,3320643583,ZA 3320643584,3320709119,KE @@ -75156,6 +70527,7 @@ 3320774656,3320791039,UG 3320791040,3320807423,BF 3320807424,3320823807,ZA +3320823808,3320840191,KE 3320840192,3320905727,NG 3320905728,3320938495,DJ 3320938496,3320971263,AO @@ -75320,12 +70692,9 @@ 3323203584,3323207679,US 3323207680,3323215871,CA 3323215872,3323232255,US -3323267072,3323270399,US -3323270400,3323270420,GB +3323267072,3323270420,US 3323270421,3323270421,CH -3323270422,3323270655,GB -3323270656,3323289599,US -3323297792,3323330559,US +3323270422,3323330559,US 3323330816,3323331071,US 3323331072,3323331839,CA 3323331840,3323342335,US @@ -75358,8 +70727,7 @@ 3323434240,3323434303,BG 3323434304,3323462655,US 3323462656,3323463167,BR -3323463168,3323469823,US -3323478016,3323659263,US +3323463168,3323659263,US 3323659264,3323660543,NZ 3323662336,3323674623,US 3323674624,3323681279,CA @@ -75384,7 +70752,9 @@ 3324266496,3324266751,AP 3324266752,3324270079,US 3324270080,3324270591,EU -3324270592,3324379135,US +3324270592,3324354559,US +3324354560,3324362751,CA +3324362752,3324379135,US 3324379136,3324380159,CA 3324380160,3324470271,US 3324470272,3324474367,GB @@ -75488,6 +70858,7 @@ 3325145088,3325169663,US 3325169664,3325171711,BR 3325171712,3325190143,US +3325190144,3325198335,CA 3325231104,3325232127,US 3325233152,3325234175,US 3325234176,3325234431,SA @@ -75513,7 +70884,7 @@ 3325304832,3325307647,CA 3325307648,3325307903,BB 3325307904,3325313023,CA -3325313024,3325321215,US +3325313024,3325329407,US 3325362176,3325427711,CA 3325427712,3325452287,ZA 3325452800,3325453311,ZA @@ -75539,8 +70910,7 @@ 3325497344,3325501439,PR 3325501440,3325505535,US 3325505536,3325509631,CA -3325509632,3325517823,US -3325526016,3325591551,US +3325509632,3325591551,US 3325624320,3325640703,US 3325640704,3325644799,CA 3325644800,3325648895,US @@ -75550,74 +70920,7 @@ 3325691904,3325693951,BR 3325693952,3325722623,US 3325722624,3325755391,CA -3325755392,3325919407,US -3325919408,3325919423,IL -3325919424,3325919431,US -3325919432,3325919435,IL -3325919436,3325919455,US -3325919456,3325919487,IL -3325919488,3325919735,US -3325919736,3325919743,AU -3325919744,3325920199,US -3325920200,3325920207,IN -3325920208,3325920231,US -3325920232,3325920239,BG -3325920240,3325920247,BR -3325920248,3325920415,US -3325920416,3325920431,IE -3325920432,3325920687,US -3325920688,3325920695,MX -3325920696,3325920895,US -3325920896,3325920899,AU -3325920900,3325921287,US -3325921288,3325921295,CA -3325921296,3325921439,US -3325921440,3325921447,FI -3325921448,3325921695,US -3325921696,3325921703,NO -3325921704,3325921727,US -3325921728,3325921735,MX -3325921736,3325922191,US -3325922192,3325922195,BR -3325922196,3325922295,US -3325922296,3325922303,CA -3325922304,3325922639,US -3325922640,3325922647,CA -3325922648,3325922999,US -3325923000,3325923007,GT -3325923008,3325923075,US -3325923076,3325923079,CA -3325923080,3325923179,US -3325923180,3325923183,CH -3325923184,3325923215,US -3325923216,3325923263,GB -3325923264,3325923455,US -3325923456,3325923519,NO -3325923520,3325923823,US -3325923824,3325923839,CA -3325923840,3325924039,US -3325924040,3325924047,AU -3325924048,3325924343,US -3325924344,3325924347,BG -3325924348,3325924351,US -3325924352,3325924355,CA -3325924356,3325925455,US -3325925456,3325925487,IL -3325925488,3325925519,US -3325925520,3325925535,NO -3325925536,3325926791,US -3325926792,3325926793,BR -3325926794,3325926823,US -3325926824,3325926827,BG -3325926828,3325926863,US -3325926864,3325926867,BR -3325926868,3325947983,US -3325947984,3325947999,CA -3325948000,3325948271,US -3325948272,3325948279,AR -3325948280,3325948415,US -3325948416,3325948447,AT -3325948448,3325956095,US +3325755392,3325956095,US 3325956096,3325960191,CA 3325960192,3325976063,US 3325976064,3325976319,CA @@ -75649,13 +70952,13 @@ 3326420992,3326423039,PR 3326423040,3326492239,US 3326492240,3326492255,CA -3326492256,3326499327,US -3326499328,3326499583,IN -3326499584,3326526463,US +3326492256,3326526463,US 3326526464,3326526719,CA 3326526720,3326613503,US 3326613504,3326615551,CA -3326615552,3326631935,US +3326615552,3326619647,US +3326619648,3326623743,CA +3326623744,3326631935,US 3326631936,3326640127,CA 3326640128,3326676991,US 3326680832,3326682623,CA @@ -75712,18 +71015,15 @@ 3328202752,3328204799,US 3328204800,3328214783,CA 3328214784,3328215295,GB -3328215296,3328224255,CA -3328224256,3328224511,US -3328224512,3328235007,CA +3328215296,3328223231,CA +3328223232,3328225279,US +3328225280,3328235007,CA 3328235008,3328235263,US 3328235520,3328241663,CA 3328241664,3328242943,US 3328242944,3328243199,GB 3328243200,3328245759,CA -3328245760,3328323839,US -3328323840,3328327679,CA -3328327680,3328360447,US -3328376832,3328393727,US +3328245760,3328393727,US 3328393728,3328393983,GB 3328393984,3328394239,US 3328394240,3328394495,GB @@ -75741,71 +71041,7 @@ 3328477184,3328479231,US 3328479232,3328481279,CA 3328481280,3328483327,US -3328491520,3328542675,US -3328542676,3328542679,NO -3328542680,3328542879,US -3328542880,3328542887,CA -3328542888,3328542927,US -3328542928,3328542935,AU -3328542936,3328544031,US -3328544032,3328544039,CA -3328544040,3328544135,US -3328544136,3328544143,IL -3328544144,3328549119,US -3328549120,3328549123,BG -3328549124,3328550591,US -3328550592,3328550655,IL -3328550656,3328550847,US -3328550848,3328550879,CA -3328550880,3328550919,US -3328550920,3328550927,IL -3328550928,3328550975,US -3328550976,3328550983,PE -3328550984,3328551031,US -3328551032,3328551039,GB -3328551040,3328551127,US -3328551128,3328551135,CA -3328551136,3328551167,US -3328551168,3328551175,IN -3328551176,3328551191,US -3328551192,3328551199,FR -3328551200,3328551231,US -3328551232,3328551239,DO -3328551240,3328551319,US -3328551320,3328551327,AW -3328551328,3328551623,US -3328551624,3328551627,GB -3328551628,3328551631,CA -3328551632,3328551871,US -3328551872,3328551903,FR -3328551904,3328552159,US -3328552160,3328552163,CA -3328552164,3328552727,US -3328552728,3328552735,IL -3328552736,3328555127,US -3328555128,3328555135,GB -3328555136,3328555199,US -3328555200,3328555207,CA -3328555208,3328555255,US -3328555256,3328555263,CA -3328555264,3328555971,US -3328555972,3328555975,CA -3328555976,3328556215,US -3328556216,3328556223,IL -3328556224,3328556295,US -3328556296,3328556303,MX -3328556304,3328556487,US -3328556488,3328556495,MX -3328556496,3328556583,US -3328556584,3328556587,CA -3328556588,3328556695,US -3328556696,3328556699,AU -3328556700,3328556863,US -3328556864,3328556867,IE -3328556868,3328556871,CA -3328556872,3328557027,US -3328557028,3328557031,CA -3328557032,3328617983,US +3328491520,3328617983,US 3328617984,3328618239,CA 3328618240,3328629503,US 3328629504,3328629759,EU @@ -75815,9 +71051,7 @@ 3328638976,3328704511,CA 3328704512,3328774399,US 3328774400,3328775935,CA -3328775936,3328776191,US -3328776192,3328776447,CA -3328776448,3328776703,US +3328775936,3328776703,US 3328778240,3328788479,US 3328788480,3328789503,FR 3328789504,3328790015,AP @@ -75851,7 +71085,9 @@ 3330664192,3330664447,CA 3330664448,3330677759,US 3330677760,3330678783,CA -3330678784,3330714367,US +3330678784,3330684927,US +3330684928,3330685183,IN +3330685184,3330714367,US 3330714368,3330714623,CA 3330714624,3330726655,US 3330726656,3330726911,CA @@ -75924,12 +71160,8 @@ 3331372352,3331372367,ES 3331372368,3331374079,US 3331374080,3331374335,CA -3331374336,3331523583,US -3331523584,3331523839,GB -3331523840,3331524095,US -3331524096,3331524607,SG -3331524608,3331527423,US -3331527424,3331527679,GB +3331374336,3331527167,US +3331527168,3331527679,GB 3331527680,3331563519,US 3331563520,3331563775,CH 3331563776,3331617855,US @@ -76018,9 +71250,7 @@ 3332083968,3332084223,AP 3332084224,3332095231,US 3332095232,3332095487,EU -3332095488,3332405247,US -3332405248,3332405503,AU -3332405504,3332440063,US +3332095488,3332440063,US 3332440064,3332460543,CA 3332460544,3332460799,US 3332460800,3332461311,CA @@ -76036,7 +71266,9 @@ 3332554752,3332558847,US 3332558848,3332562943,CA 3332562944,3332563455,US -3332563456,3332590079,CA +3332563456,3332579327,CA +3332579328,3332581375,US +3332581376,3332590079,CA 3332590080,3332590591,US 3332590592,3332616191,CA 3332616192,3332616959,US @@ -76078,29 +71310,22 @@ 3333213696,3333214079,US 3333214080,3333246505,US 3333246506,3333246506,US -3333246507,3333374975,US -3333374976,3333375231,IN -3333375232,3333385983,US +3333246507,3333385983,US 3333385984,3333386239,JP -3333386240,3333396223,US -3333396224,3333396479,HK -3333396480,3333396735,GB -3333396736,3333427967,US +3333386240,3333427967,US 3333427968,3333428007,GB 3333428008,3333428008,EU 3333428009,3333428223,GB 3333428224,3333429759,US -3333431296,3333471999,US -3333472000,3333472255,AT -3333472256,3333480191,US +3333431296,3333480191,US 3333480192,3333481471,DE -3333481472,3333603328,US +3333481472,3333603327,US +3333603328,3333603328,GB 3333603329,3333603329,EU -3333603330,3333609733,US +3333603330,3333603583,GB +3333603584,3333609733,US 3333609734,3333609734,AU -3333609735,3333614591,US -3333614592,3333614847,GB -3333614848,3333701887,US +3333609735,3333701887,US 3333701888,3333702143,GB 3333702144,3333702399,US 3333702400,3333702655,CH @@ -76123,9 +71348,9 @@ 3333781504,3333783551,CA 3333783552,3333825791,US 3333825792,3333826047,EU -3333826048,3333829631,US -3333829632,3333829887,IN -3333829888,3333859839,US +3333826048,3333829657,US +3333829658,3333829658,IN +3333829659,3333859839,US 3333859840,3333860095,BM 3333860096,3333870847,US 3333871104,3333871359,CA @@ -76133,9 +71358,9 @@ 3333988608,3333988863,BR 3333988864,3333997823,US 3333997824,3333998079,CA -3333998080,3334006527,US -3334006528,3334006783,NL -3334006784,3334007551,US +3333998080,3334006781,US +3334006782,3334006782,NL +3334006783,3334007551,US 3334007552,3334007807,EU 3334007808,3334019583,US 3334020096,3334021119,CA @@ -76143,7 +71368,10 @@ 3334138624,3334138879,BM 3334138880,3334187775,US 3334187776,3334188031,BM -3334188032,3334995967,US +3334188032,3334932223,US +3334932224,3334932479,CA +3334932480,3334946815,US +3334963200,3334995967,US 3334995968,3334998527,PH 3334999040,3335004159,US 3335028736,3335057407,US @@ -76197,17 +71425,15 @@ 3337055232,3337060351,CA 3337060352,3337069055,US 3337069056,3337069119,GB -3337069120,3337106687,US -3337106688,3337106943,SG -3337106944,3337289983,US +3337069120,3337289983,US 3337289984,3337292799,CA 3337292800,3337293823,US 3337293824,3337297919,CA 3337297920,3337302015,US 3337302016,3337303551,CA 3337303552,3337304063,US -3337304064,3337304575,CA -3337304576,3337305599,US +3337304064,3337304319,CA +3337304320,3337305599,US 3337305600,3337322495,CA 3337322496,3337322751,US 3337322752,3337323007,CA @@ -76222,8 +71448,8 @@ 3337650251,3337650251,EU 3337650252,3337650431,GB 3337650432,3337650687,CH -3337650688,3337650943,US -3337650944,3337651455,CH +3337650688,3337651199,US +3337651200,3337651455,CH 3337651456,3337651711,SG 3337651712,3337653503,CH 3337653504,3337653759,JP @@ -76348,9 +71574,7 @@ 3338770432,3338772479,PR 3338772480,3338825727,US 3338825728,3338827775,AW -3338827776,3338849615,US -3338849616,3338849631,FR -3338849632,3338912767,US +3338827776,3338912767,US 3338912768,3338913023,EC 3338913024,3338916351,US 3338916352,3338916479,CN @@ -76500,7 +71724,9 @@ 3339937280,3339937535,MX 3339937536,3339937816,US 3339937817,3339937879,CN -3339937880,3339938595,US +3339937880,3339937922,US +3339937923,3339937983,PL +3339937984,3339938595,US 3339938596,3339938622,ID 3339938623,3339938652,TH 3339938653,3339938817,US @@ -76524,9 +71750,7 @@ 3339952128,3339956223,CA 3339956224,3339965439,US 3339965440,3339968511,CA -3339968512,3339991807,US -3339991808,3339992063,CA -3339992064,3340059343,US +3339968512,3340059343,US 3340059344,3340059359,CA 3340059360,3340071679,US 3340071680,3340071743,ES @@ -76576,13 +71800,7 @@ 3340677120,3340679167,CA 3340679168,3340694783,US 3340694784,3340695039,CA -3340695040,3340845567,US -3340846080,3340846111,US -3340846112,3340846119,CA -3340846120,3340846127,GB -3340846128,3340846131,MX -3340846132,3340846139,BR -3340846140,3340857343,US +3340695040,3340857343,US 3340857344,3340858015,CA 3340858016,3340858047,US 3340858048,3340858367,CA @@ -76593,11 +71811,7 @@ 3340925104,3340925159,US 3340925160,3340925167,FR 3340925168,3340925175,BE -3340925176,3340925247,US -3340925248,3340925255,AR -3340925256,3340925279,US -3340925280,3340925287,CA -3340925288,3340925335,US +3340925176,3340925335,US 3340925336,3340925343,DK 3340925344,3340925383,US 3340925384,3340925391,RU @@ -76614,9 +71828,7 @@ 3340925528,3340925535,US 3340925536,3340925543,RU 3340925544,3340925551,GB -3340925552,3340925607,US -3340925608,3340925615,AU -3340925616,3340925631,US +3340925552,3340925631,US 3340925632,3340925639,FR 3340925640,3340925647,CO 3340925648,3340925679,US @@ -76655,12 +71867,10 @@ 3340926160,3340926175,AR 3340926176,3340926191,US 3340926192,3340926199,BR -3340926200,3340926207,DE -3340926208,3340926215,US +3340926200,3340926215,US 3340926216,3340926223,SE 3340926224,3340926231,PT -3340926232,3340926239,CA -3340926240,3340926247,US +3340926232,3340926247,US 3340926248,3340926255,AR 3340926256,3340926263,AU 3340926264,3340926271,US @@ -76671,9 +71881,7 @@ 3340926320,3340926327,RU 3340926328,3340926343,US 3340926344,3340926351,DE -3340926352,3340926407,US -3340926408,3340926415,GB -3340926416,3340926439,US +3340926352,3340926439,US 3340926440,3340926447,NO 3340926448,3340926455,DE 3340926456,3340926463,US @@ -76689,14 +71897,12 @@ 3340926600,3340926607,BR 3340926608,3340926615,US 3340926616,3340926623,NO -3340926624,3340926655,GB +3340926624,3340926655,US 3340926656,3340926663,CA 3340926664,3340926671,BR 3340926672,3340926679,US 3340926680,3340926687,RO -3340926688,3340926791,US -3340926792,3340926799,GB -3340926800,3340926815,US +3340926688,3340926815,US 3340926816,3340926823,CA 3340926824,3340926887,US 3340926888,3340926895,BR @@ -76792,9 +71998,7 @@ 3341479936,3341480447,DE 3341480448,3341484287,US 3341484288,3341485055,CA -3341485056,3341487103,US -3341487104,3341487615,GB -3341487616,3341488895,US +3341485056,3341488895,US 3341488896,3341489151,AP 3341489152,3341511679,US 3341511680,3341517823,CA @@ -76868,9 +72072,7 @@ 3342139392,3342204927,CH 3342204928,3342487551,US 3342487552,3342488575,CA -3342488576,3342488639,US -3342488640,3342488703,GB -3342488704,3342488831,SC +3342488576,3342488831,US 3342488832,3342488863,GB 3342488864,3342488872,US 3342488873,3342488882,BG @@ -76933,9 +72135,7 @@ 3342831104,3342831359,IN 3342831360,3342878971,US 3342878972,3342878972,EU -3342878973,3342928383,US -3342928384,3342928639,CA -3342928640,3343013887,US +3342878973,3343013887,US 3343013888,3343015935,CA 3343015936,3343046919,US 3343046920,3343046923,IT @@ -76973,10 +72173,10 @@ 3343055872,3343056895,CA 3343056896,3343108863,US 3343108864,3343109119,EU -3343109120,3343127551,US -3343127552,3343127807,GB -3343127808,3343153407,US -3343153408,3343155199,CA +3343109120,3343153151,US +3343153152,3343153167,CA +3343153168,3343153175,US +3343153176,3343155199,CA 3343155200,3343167487,US 3343167488,3343169535,CA 3343169536,3343171583,US @@ -77038,9 +72238,7 @@ 3344242176,3344242687,US 3344242688,3344255999,CA 3344256000,3344261631,US -3344261888,3344263423,CA -3344263424,3344263679,US -3344263680,3344266239,CA +3344261888,3344266239,CA 3344266240,3344266751,US 3344266752,3344268543,CA 3344268544,3344268799,GB @@ -77090,9 +72288,7 @@ 3344486400,3344488447,NL 3344488448,3344552959,US 3344552960,3344553215,GB -3344553216,3344631807,US -3344631808,3344632063,AU -3344632064,3344633855,US +3344553216,3344633855,US 3344633856,3344637951,CH 3344637952,3344649215,US 3344649216,3344650239,PR @@ -77132,11 +72328,7 @@ 3345299456,3345301503,CA 3345301504,3345309855,US 3345309856,3345309871,BR -3345309872,3345309959,US -3345309960,3345309967,ES -3345309968,3345310079,US -3345310080,3345310143,PL -3345310144,3345310207,US +3345309872,3345310207,US 3345310208,3345310231,CA 3345310232,3345310287,US 3345310288,3345310295,AR @@ -77404,9 +72596,7 @@ 3346332104,3346332111,GB 3346332112,3346497535,US 3346497536,3346498559,CA -3346498560,3346499839,US -3346499840,3346500095,CN -3346500096,3346505783,US +3346498560,3346505783,US 3346505784,3346505791,GB 3346505792,3346505895,US 3346505896,3346505903,AU @@ -77428,9 +72618,7 @@ 3346506280,3346506287,CA 3346506288,3346506311,US 3346506312,3346506319,CO -3346506320,3346506391,US -3346506392,3346506399,GB -3346506400,3346506415,US +3346506320,3346506415,US 3346506416,3346506423,IN 3346506424,3346506447,US 3346506448,3346506455,CA @@ -77517,8 +72705,8 @@ 3349545216,3349545727,CA 3349545728,3349545983,US 3349545984,3349551103,CA -3349551104,3349553407,US -3349553408,3349608447,CA +3349551104,3349553663,US +3349553664,3349608447,CA 3349608448,3349609215,US 3349609216,3349610239,CA 3349610240,3349614591,US @@ -77529,17 +72717,11 @@ 3349640192,3349641215,CA 3349641216,3349643263,US 3349643264,3349644287,CA -3349644288,3349644656,US -3349644657,3349644672,GB -3349644673,3349645215,US -3349645216,3349645231,ID -3349645232,3349645311,US +3349644288,3349645311,US 3349645312,3349647359,CA 3349647360,3349649407,US 3349649408,3349653503,CA -3349653504,3349711474,US -3349711475,3349711508,GB -3349711509,3349711539,US +3349653504,3349711539,US 3349711540,3349711547,GB 3349711548,3349723260,US 3349723261,3349723265,CA @@ -77600,19 +72782,7 @@ 3350491648,3350491903,PL 3350491904,3350492961,US 3350492962,3350492990,GB -3350492991,3350495577,US -3350495578,3350495585,GB -3350495586,3350495602,US -3350495603,3350495604,BD -3350495605,3350495873,US -3350495874,3350495874,IN -3350495875,3350495881,US -3350495882,3350495882,IN -3350495883,3350496305,US -3350496306,3350496317,PT -3350496318,3350496447,US -3350496448,3350496455,PT -3350496456,3350496532,US +3350492991,3350496532,US 3350496533,3350496533,IN 3350496534,3350496721,US 3350496722,3350496723,IN @@ -77781,7 +72951,7 @@ 3351074728,3351074729,CA 3351074730,3351074730,US 3351074731,3351074731,IL -3351074732,3351074732,US +3351074732,3351074732,BR 3351074733,3351074733,EG 3351074734,3351074735,US 3351074736,3351074738,PE @@ -77789,7 +72959,7 @@ 3351074743,3351074746,AU 3351074747,3351074751,US 3351074752,3351074783,DE -3351074784,3351074815,TR +3351074784,3351074815,BR 3351074816,3351076863,CA 3351076864,3351080959,US 3351080960,3351081983,AG @@ -77825,8 +72995,7 @@ 3351197920,3351197951,GB 3351197952,3351197983,US 3351197984,3351198015,MX -3351198016,3351198031,AL -3351198032,3351198047,US +3351198016,3351198047,US 3351198048,3351198063,GB 3351198064,3351198095,US 3351198096,3351198103,CA @@ -78005,9 +73174,7 @@ 3351501824,3351502847,JM 3351502848,3351503871,US 3351503872,3351504895,CA -3351504896,3351508991,US -3351508992,3351511039,CA -3351511040,3351524095,US +3351504896,3351524095,US 3351524096,3351524351,GB 3351524352,3351642111,US 3351642112,3351695871,CA @@ -78026,9 +73193,7 @@ 3351869440,3351871487,CA 3351871488,3351895551,US 3351895552,3351895807,CA -3351895808,3351896575,US -3351896576,3351896831,GB -3351896832,3351904255,US +3351895808,3351904255,US 3351912448,3351927551,CA 3351927552,3351927807,US 3351927808,3351959551,CA @@ -78036,9 +73201,7 @@ 3351961600,3351969791,CA 3351969792,3352035327,IL 3352035328,3352036351,CA -3352036352,3352037887,US -3352037888,3352038143,GB -3352038144,3352046591,US +3352036352,3352046591,US 3352046592,3352049663,CA 3352049664,3352051711,US 3352051712,3352055807,CA @@ -78071,44 +73234,44 @@ 3352887296,3352911903,US 3352911904,3352911911,JP 3352911912,3352911919,US -3352911920,3352911935,CA +3352911920,3352911935,SG 3352911936,3352912031,US 3352912032,3352912063,SG 3352912064,3352912095,US -3352912096,3352912111,CA +3352912096,3352912111,SG 3352912112,3352912159,US 3352912160,3352912167,JP 3352912168,3352912175,US -3352912176,3352912191,CA +3352912176,3352912191,SG 3352912192,3352912351,US -3352912352,3352912367,CA +3352912352,3352912367,SG 3352912368,3352912415,US 3352912416,3352912423,JP 3352912424,3352912511,US 3352912512,3352912575,SG 3352912576,3352912607,US -3352912608,3352912623,CA +3352912608,3352912623,SG 3352912624,3352912655,US 3352912656,3352912671,CY 3352912672,3352912679,JP 3352912680,3352912687,US -3352912688,3352912703,CA +3352912688,3352912703,SG 3352912704,3352912863,US -3352912864,3352912879,CA +3352912864,3352912879,SG 3352912880,3352912959,US 3352912960,3352912967,JP 3352912968,3352912975,US -3352912976,3352912991,CA +3352912976,3352912991,SG 3352912992,3352913071,US -3352913072,3352913087,CA +3352913072,3352913087,SG 3352913088,3352913215,US 3352913216,3352913223,JP 3352913224,3352913231,CN -3352913232,3352913247,CA +3352913232,3352913247,SG 3352913248,3352913471,US 3352913472,3352913479,JP 3352913480,3352913487,US -3352913488,3352913503,CA +3352913488,3352913503,SG 3352913504,3352913599,US 3352913600,3352913663,SG 3352913664,3352913679,US @@ -78116,7 +73279,7 @@ 3352913688,3352913727,US 3352913728,3352913735,JP 3352913736,3352913823,US -3352913824,3352913839,CA +3352913824,3352913839,SG 3352913840,3352913855,US 3352913856,3352913919,SG 3352913920,3352916479,US @@ -78138,13 +73301,9 @@ 3352918016,3352919039,CA 3352919040,3353335349,US 3353335350,3353335353,IN -3353335354,3353384191,US -3353384192,3353384447,IN -3353384448,3353633279,US -3353633280,3353633535,IN -3353633536,3353652735,US -3353652736,3353652991,DE -3353652992,3353653503,US +3353335354,3353652735,US +3353652736,3353652863,DE +3353652864,3353653503,US 3353653504,3353653759,GB 3353653760,3353722367,US 3353722368,3353722623,GB @@ -78161,8 +73320,8 @@ 3353752678,3353752681,ES 3353752682,3353752716,US 3353752717,3353752720,IT -3353752721,3353752828,US -3353752829,3353752830,FR +3353752721,3353752829,US +3353752830,3353752830,GB 3353752831,3353752916,US 3353752917,3353752917,GB 3353752918,3353752969,US @@ -78232,7 +73391,9 @@ 3354501120,3354503167,CA 3354503168,3354507327,US 3354507328,3354507335,CY -3354507336,3354507403,US +3354507336,3354507367,US +3354507368,3354507375,CA +3354507376,3354507403,US 3354507404,3354507407,TH 3354507408,3354507439,US 3354507440,3354507443,ID @@ -78242,9 +73403,9 @@ 3354507536,3354507551,IE 3354507552,3354507599,US 3354507600,3354507607,BR -3354507608,3354507647,US -3354507648,3354507679,PT -3354507680,3354507711,US +3354507608,3354507687,US +3354507688,3354507691,CA +3354507692,3354507711,US 3354507712,3354507719,IN 3354507720,3354507759,US 3354507760,3354507775,AU @@ -78254,7 +73415,9 @@ 3354507816,3354507823,CY 3354507824,3354507879,US 3354507880,3354507887,ID -3354507888,3354507927,US +3354507888,3354507915,US +3354507916,3354507919,CA +3354507920,3354507927,US 3354507928,3354507931,CA 3354507932,3354507983,US 3354507984,3354507999,CN @@ -78283,7 +73446,8 @@ 3354508328,3354508367,US 3354508368,3354508375,GB 3354508376,3354508383,MY -3354508384,3354508655,US +3354508384,3354508391,CA +3354508392,3354508655,US 3354508656,3354508671,CY 3354508672,3354508735,US 3354508736,3354508767,IN @@ -78306,9 +73470,7 @@ 3354731520,3354731775,AP 3354731776,3354737663,US 3354737664,3354737919,HK -3354737920,3354751487,US -3354751488,3354751743,GB -3354751744,3354770687,US +3354737920,3354770687,US 3354770688,3354770943,CA 3354770944,3354788095,US 3354788096,3354806399,CA @@ -78338,9 +73500,7 @@ 3355260928,3355262719,CA 3355262720,3355272189,US 3355272190,3355272190,EU -3355272191,3355309567,US -3355309568,3355309823,GB -3355309824,3355310591,US +3355272191,3355310591,US 3355310592,3355311103,CA 3355311104,3355319295,US 3355319296,3355320319,CA @@ -78375,7 +73535,8 @@ 3355447552,3355447807,AR 3355447808,3355448063,HT 3355448064,3355448319,AR -3355448320,3355449343,CW +3355448320,3355448831,CW +3355448832,3355449343,SX 3355449344,3355450367,CU 3355450368,3355451391,EC 3355451392,3355459071,BR @@ -78798,8 +73959,8 @@ 3356340224,3356341247,HN 3356341248,3356341759,SV 3356341760,3356342015,HN -3356342016,3356343295,SV -3356343296,3356343551,HN +3356342016,3356343039,SV +3356343040,3356343551,HN 3356343552,3356344319,SV 3356344320,3356360703,CO 3356360704,3356362751,CL @@ -79006,11 +74167,12 @@ 3357605888,3357736959,MX 3357736960,3357745151,VE 3357745152,3357753343,CO -3357753344,3357773823,VE +3357753344,3357757487,VE +3357757488,3357757495,BO +3357757496,3357773823,VE 3357773824,3357775871,PA 3357775872,3357776895,UY -3357777920,3357785087,GT -3357785088,3357786111,SV +3357777920,3357786111,GT 3357786112,3357802495,VE 3357802496,3357868031,MX 3357868032,3357933567,PE @@ -79019,7 +74181,9 @@ 3358130176,3358131199,EC 3358131200,3358131327,AR 3358131328,3358131455,CO -3358131456,3358131983,AR +3358131456,3358131839,AR +3358131840,3358131967,CO +3358131968,3358131983,AR 3358131984,3358131999,CO 3358132000,3358132087,AR 3358132088,3358132095,CO @@ -79074,8 +74238,8 @@ 3358154752,3358158847,PE 3358158848,3358159159,AR 3358159160,3358159167,US -3358159168,3358159359,AR -3358159360,3358159615,EC +3358159168,3358159487,AR +3358159488,3358159615,EC 3358159616,3358159871,US 3358159872,3358160895,VE 3358160896,3358236671,AR @@ -79087,34 +74251,89 @@ 3358326784,3358392319,VE 3358392320,3358457855,AR 3358457856,3358523391,PA -3358523392,3358543871,AR +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 +3358539520,3358539775,AR +3358539776,3358543871,VE 3358543872,3358544127,MX -3358544128,3358558463,AR +3358544128,3358548223,VE +3358548224,3358548479,AR +3358548480,3358549759,VE +3358549760,3358550015,AR +3358550016,3358552063,VE +3358552064,3358556159,AR +3358556160,3358558463,VE 3358558464,3358558591,PY -3358558592,3358559231,AR -3358559232,3358560255,VE -3358560256,3358561791,AR -3358561792,3358562303,VE +3358558592,3358562303,VE 3358562304,3358563327,PE 3358563328,3358563839,CO -3358563840,3358563967,AR +3358563840,3358563967,VE 3358563968,3358564095,CO 3358564096,3358564351,MX -3358564352,3358567423,AR +3358564352,3358564415,AR +3358564416,3358564447,VE +3358564448,3358564479,AR +3358564480,3358564511,VE +3358564512,3358564575,AR +3358564576,3358564607,VE +3358564608,3358564623,AR +3358564624,3358564719,VE +3358564720,3358564751,AR +3358564752,3358564767,VE +3358564768,3358564783,AR +3358564784,3358564807,VE +3358564808,3358564815,AR +3358564816,3358564839,VE +3358564840,3358564847,AR +3358564848,3358565183,VE +3358565184,3358565247,AR +3358565248,3358565311,VE +3358565312,3358565343,AR +3358565344,3358565567,VE +3358565568,3358565599,AR +3358565600,3358565791,VE +3358565792,3358565855,AR +3358565856,3358566047,VE +3358566048,3358566111,AR +3358566112,3358566847,VE +3358566848,3358566879,AR +3358566880,3358566911,VE +3358566912,3358566975,AR +3358566976,3358567103,VE +3358567104,3358567167,AR +3358567168,3358567231,VE +3358567232,3358567263,AR +3358567264,3358567327,VE +3358567328,3358567343,AR +3358567344,3358567375,VE +3358567376,3358567391,AR +3358567392,3358567407,VE +3358567408,3358567423,AR 3358567424,3358568959,CO -3358568960,3358569471,AR -3358569472,3358570495,VE +3358568960,3358570495,VE 3358570496,3358570751,MX 3358570752,3358571263,PE 3358571264,3358572031,MX -3358572032,3358577151,AR +3358572032,3358572543,VE +3358572544,3358577151,AR 3358577152,3358577407,PE 3358577408,3358578431,AR 3358578432,3358578687,VE 3358578688,3358579967,CO 3358579968,3358580223,AR 3358580224,3358580735,MX -3358580736,3358588927,AR +3358580736,3358588927,VE 3358588928,3358654463,PE 3358654464,3358658559,AR 3358658560,3358660607,CL @@ -79277,7 +74496,11 @@ 3360405504,3360407551,HN 3360407552,3360423935,PA 3360423936,3360686079,MX -3360686080,3360708991,AR +3360686080,3360705791,AR +3360705792,3360706047,US +3360706048,3360708223,AR +3360708224,3360708351,US +3360708352,3360708991,AR 3360708992,3360709119,US 3360709120,3360710271,AR 3360710272,3360710399,US @@ -79367,7 +74590,9 @@ 3362430976,3362447359,CO 3362447360,3362448383,SV 3362448384,3362448895,HN -3362448896,3362451455,SV +3362448896,3362449151,SV +3362449152,3362449407,HN +3362449408,3362451455,SV 3362451456,3362452479,AR 3362452480,3362452991,BO 3362452992,3362453247,HN @@ -79434,6 +74659,8 @@ 3362942976,3362945023,GT 3362945024,3362983935,AR 3362983936,3362984447,PY +3362984448,3362984703,CR +3362984704,3362984959,PA 3362984960,3362985983,PE 3362985984,3362988031,AR 3362988032,3362992127,EC @@ -79484,11 +74711,7 @@ 3363602432,3363610623,CW 3363614720,3363617791,AR 3363617792,3363618815,PE -3363618816,3363620863,UY -3363620864,3363621631,BR -3363621632,3363621887,UY -3363621888,3363622911,BR -3363622912,3363627007,UY +3363618816,3363627007,UY 3363627008,3363635199,EC 3363635200,3363651583,UY 3363651584,3363667967,AR @@ -79512,7 +74735,8 @@ 3384410112,3384672255,CL 3384672256,3384688639,HN 3384688640,3384705023,CO -3384705024,3384706047,PA +3384705024,3384705535,US +3384705536,3384706047,PA 3384706048,3384706559,US 3384706560,3384721407,PA 3384721408,3384725503,US @@ -79547,7 +74771,8 @@ 3386613760,3386621951,AR 3386621952,3386630143,CO 3386630144,3386632191,UY -3386638336,3386642431,CW +3386638336,3386642175,CW +3386642176,3386642431,CA 3386642432,3386644479,AR 3386646528,3386647551,CO 3386647552,3386647679,VE @@ -79587,9 +74812,7 @@ 3387293696,3387359231,PE 3387359232,3387424767,AR 3387424768,3387555839,CO -3387555840,3387568127,AR -3387568128,3387568639,PE -3387568640,3387568895,AR +3387555840,3387568895,AR 3387568896,3387569023,PE 3387569024,3387569351,AR 3387569352,3387569355,PE @@ -79612,16 +74835,14 @@ 3387604992,3387608319,AR 3387608320,3387608447,EC 3387608448,3387608575,AR -3387608576,3387608703,EC -3387608704,3387609087,AR +3387608576,3387608831,EC +3387608832,3387609087,AR 3387609088,3387613183,EC 3387613184,3387614079,AR 3387614080,3387614207,VE 3387614208,3387614591,AR 3387614592,3387614719,VE -3387614720,3387616767,AR -3387616768,3387617023,VE -3387617024,3387617439,AR +3387614720,3387617439,AR 3387617440,3387617447,CO 3387617448,3387618175,AR 3387618176,3387618303,CO @@ -79673,10 +74894,8 @@ 3389025536,3389025791,IN 3389025792,3389026047,PK 3389026048,3389026303,TH -3389026304,3389026559,IN -3389026560,3389027071,AU -3389027072,3389027583,IN -3389027584,3389028607,TH +3389026304,3389028351,IN +3389028352,3389028607,TH 3389028608,3389028863,NZ 3389028864,3389029375,CN 3389029376,3389029887,NZ @@ -79701,8 +74920,9 @@ 3389071360,3389079551,PG 3389079552,3389087743,SG 3389087744,3389087999,HK -3389088000,3389091839,SG -3389091840,3389093887,AU +3389088000,3389092351,SG +3389092352,3389092863,PH +3389092864,3389093887,AU 3389093888,3389095935,IN 3389095936,3389104127,SG 3389104128,3389112319,SB @@ -79737,7 +74957,9 @@ 3389211136,3389211391,IN 3389211392,3389211647,AU 3389211648,3389212671,TH -3389212672,3389214463,IN +3389212672,3389213439,AU +3389213440,3389214207,IN +3389214208,3389214463,SG 3389214464,3389214719,AU 3389214720,3389218815,NZ 3389218816,3389222911,AU @@ -79805,8 +75027,8 @@ 3389358080,3389366271,PK 3389366272,3389370177,AU 3389370178,3389370178,PG -3389370179,3389373183,AU -3389373184,3389373439,US +3389370179,3389372415,AU +3389372416,3389373439,US 3389373440,3389374463,AU 3389374464,3389378559,MN 3389382656,3389390847,TW @@ -80149,9 +75371,7 @@ 3390418944,3390423039,MV 3390423040,3390423807,SG 3390423808,3390424063,AP -3390424064,3390427135,SG -3390427136,3390427391,CN -3390427392,3390439423,SG +3390424064,3390439423,SG 3390439424,3390441471,NZ 3390441472,3390443519,TH 3390443520,3390447359,NZ @@ -80179,20 +75399,10 @@ 3390802432,3390832639,NZ 3390832640,3390963711,TH 3390963712,3391094783,KR -3391094784,3391166463,JP -3391166464,3391166719,US -3391166720,3391170047,JP -3391170048,3391170303,US -3391170304,3391187967,JP -3391187968,3391188479,US -3391188480,3391192063,JP +3391094784,3391192063,JP 3391192064,3391192319,AP -3391192320,3391197951,JP -3391197952,3391198207,US -3391198208,3391356927,JP -3391356928,3391360511,NZ -3391360512,3391360767,AU -3391360768,3391441407,NZ +3391192320,3391356927,JP +3391356928,3391441407,NZ 3391441408,3391441663,PH 3391441664,3391444479,NZ 3391444480,3391444991,VN @@ -80488,7 +75698,10 @@ 3392442368,3392442623,HK 3392442624,3392442879,AU 3392442880,3392443391,ID -3392443392,3392444415,MY +3392443392,3392443647,IN +3392443648,3392443903,MY +3392443904,3392444159,IN +3392444160,3392444415,JP 3392444416,3392444671,NZ 3392444672,3392444927,IN 3392444928,3392445183,JP @@ -80541,8 +75754,10 @@ 3392700416,3392708607,SG 3392708608,3392712703,ID 3392712704,3392716799,AF -3392716800,3392733183,IN -3392733184,3392741375,ID +3392716800,3392733439,IN +3392733440,3392733695,ID +3392733696,3392734207,IN +3392734208,3392741375,ID 3392741376,3392765951,PH 3392765952,3392782335,TH 3392789504,3392790527,HK @@ -80571,7 +75786,9 @@ 3392832512,3392833535,IN 3392833536,3392835583,AU 3392835584,3392839679,JP -3392839680,3392856063,ID +3392839680,3392845823,ID +3392845824,3392847871,HK +3392847872,3392856063,ID 3392856064,3392857087,AU 3392857088,3392857343,IN 3392857344,3392858111,AU @@ -80590,10 +75807,7 @@ 3392864256,3392864511,CN 3392864512,3392864767,AU 3392864768,3392865279,IN -3392865280,3392865439,NZ -3392865440,3392865471,NU -3392865472,3392865535,NZ -3392865536,3392866303,NU +3392865280,3392866303,NU 3392866304,3392880639,AU 3392880640,3392888831,PK 3392888832,3392892927,AU @@ -80700,20 +75914,13 @@ 3393150976,3393159167,IN 3393159168,3393163007,HK 3393163008,3393164287,SG -3393164288,3393165823,HK -3393165824,3393166335,SG -3393166336,3393167359,HK +3393164288,3393167359,HK 3393167360,3393175551,CN 3393175552,3393183743,PK 3393183744,3393183999,ID 3393184000,3393184255,AP 3393184256,3393184767,PK -3393184768,3393185023,PG -3393185024,3393185279,SG -3393185280,3393185535,US -3393185536,3393187071,SG -3393187072,3393187327,US -3393187328,3393187839,SG +3393184768,3393187839,SG 3393187840,3393189887,NP 3393189888,3393190911,CN 3393190912,3393191167,IN @@ -80722,7 +75929,8 @@ 3393257472,3393260031,CN 3393260032,3393260543,BD 3393260544,3393265663,AU -3393265664,3393273855,CK +3393265664,3393267711,NZ +3393267712,3393273855,CK 3393273856,3393282047,AU 3393286144,3393290239,ID 3393290240,3393298431,IN @@ -80746,8 +75954,7 @@ 3393478656,3393486847,AU 3393486848,3393495039,IN 3393495040,3393499135,AU -3393499136,3393499391,US -3393499392,3393503231,SG +3393499136,3393503231,SG 3393503232,3393507327,HK 3393507328,3393511423,SG 3393511424,3393519615,KR @@ -80843,7 +76050,9 @@ 3393858048,3393858559,ID 3393858560,3393858815,AU 3393858816,3393859071,ID -3393859072,3393860095,AU +3393859072,3393859327,AU +3393859328,3393859583,JP +3393859584,3393860095,AU 3393860096,3393860607,HK 3393860608,3393861631,IN 3393861632,3393861887,VN @@ -80979,8 +76188,7 @@ 3394484224,3394486271,JP 3394486272,3394489599,HK 3394489600,3394489631,AP -3394489632,3394489855,IN -3394489856,3394494463,HK +3394489632,3394494463,HK 3394494464,3394498559,JP 3394498560,3394500607,HK 3394500608,3394501631,SG @@ -81006,9 +76214,7 @@ 3394631680,3394634751,HK 3394634752,3394635775,IN 3394635776,3394637823,KR -3394637824,3394641151,AF -3394641152,3394641407,CH -3394641408,3394641919,AF +3394637824,3394641919,AF 3394641920,3394648063,AU 3394648064,3394650111,JP 3394650112,3394658303,HK @@ -81042,7 +76248,8 @@ 3394764800,3394772991,HK 3394772992,3394775039,PK 3394777088,3394781183,JP -3394781184,3394789375,MP +3394781184,3394783231,US +3394783232,3394789375,MP 3394789376,3394797567,HK 3394797568,3394813951,IN 3394813952,3394815999,JP @@ -81055,7 +76262,9 @@ 3394835968,3394836223,AP 3394836224,3394836479,HK 3394836480,3394838527,BT -3394838528,3394846719,NZ +3394838528,3394841087,NZ +3394841088,3394841599,AU +3394841600,3394846719,NZ 3394846720,3394850815,IN 3394850816,3394854911,JP 3394855936,3394856959,AU @@ -81063,9 +76272,7 @@ 3394859008,3394860031,JP 3394860032,3394860543,ID 3394860544,3394861055,IN -3394861056,3394861311,HK -3394861312,3394861567,TW -3394861568,3394862079,HK +3394861056,3394862079,HK 3394862080,3394863103,KR 3394863104,3394871295,NZ 3394871296,3394879487,AU @@ -81184,9 +76391,7 @@ 3395181568,3395182591,CN 3395182592,3395182847,AP 3395182848,3395190783,SG -3395190784,3395195135,JP -3395195136,3395195391,US -3395195392,3395198975,JP +3395190784,3395198975,JP 3395198976,3395203071,MY 3395203072,3395215359,JP 3395215360,3395219455,HK @@ -81242,9 +76447,7 @@ 3397120000,3397124095,PK 3397124096,3397128191,JP 3397128192,3397131263,CN -3397131264,3397131775,HK -3397131776,3397132031,SG -3397132032,3397132287,HK +3397131264,3397132287,HK 3397132288,3397136383,AU 3397136384,3397140479,JP 3397140480,3397148671,AU @@ -81304,8 +76507,8 @@ 3397285888,3397287935,BD 3397287936,3397296127,SG 3397296128,3397298687,HK -3397298688,3397299199,SG -3397299200,3397304319,HK +3397298688,3397299455,SG +3397299456,3397304319,HK 3397304320,3397308415,NZ 3397308416,3397312511,HK 3397312512,3397320703,JP @@ -81323,13 +76526,11 @@ 3397369856,3397374463,CN 3397374464,3397374975,AU 3397374976,3397386239,CN -3397386240,3397387519,GU -3397387520,3397388287,US -3397388288,3397394431,GU +3397386240,3397387775,GU +3397387776,3397388031,US +3397388032,3397394431,GU 3397394432,3397402623,PH -3397402624,3397406719,GU -3397406720,3397406975,US -3397406976,3397410815,GU +3397402624,3397410815,GU 3397410816,3397411327,IN 3397411328,3397411583,SG 3397411584,3397411839,HK @@ -81371,7 +76572,8 @@ 3397513728,3397514239,SG 3397514240,3397515263,AU 3397515264,3397516287,NP -3397516288,3397516799,AU +3397516288,3397516543,AU +3397516544,3397516799,NZ 3397516800,3397517055,JP 3397517056,3397517311,AU 3397517312,3397525503,CN @@ -81383,12 +76585,9 @@ 3397530624,3397531647,ID 3397531648,3397532671,SG 3397532672,3397533695,JP -3397533696,3397550591,HK -3397550592,3397550847,IN -3397550848,3397551359,HK +3397533696,3397551359,HK 3397551360,3397551615,AP -3397551616,3397551871,MY -3397551872,3397557247,HK +3397551616,3397557247,HK 3397557248,3397557503,AP 3397557504,3397566463,HK 3397566464,3397574655,AU @@ -81403,8 +76602,7 @@ 3397603328,3397605375,KH 3397605376,3397607423,AU 3397607424,3397623807,IN -3397623808,3397627903,MP -3397627904,3397631999,GU +3397623808,3397631999,GU 3397632000,3397636095,JP 3397636096,3397640191,CN 3397640192,3397648383,MN @@ -81440,9 +76638,7 @@ 3397836800,3397844991,AU 3397844992,3397869823,JP 3397869824,3397870079,AU -3397870080,3397903103,JP -3397903104,3397903359,HK -3397903360,3397908735,JP +3397870080,3397908735,JP 3397908736,3397908991,AU 3397908992,3397910527,JP 3397910528,3397914111,SG @@ -81545,20 +76741,14 @@ 3398619136,3398621183,AU 3398621184,3398623231,HK 3398623232,3398631423,ID -3398631424,3398636031,JP -3398636032,3398636287,MY -3398636288,3398637119,JP +3398631424,3398637119,JP 3398637120,3398637183,HK 3398637184,3398637823,JP 3398637824,3398638079,PH -3398638080,3398640127,JP -3398640128,3398640639,MY -3398640640,3398641151,AU -3398641152,3398641407,MY -3398641408,3398641663,SG -3398641664,3398643711,AU -3398643712,3398647807,JP -3398647808,3398668287,AU +3398638080,3398640639,JP +3398640640,3398640895,AU +3398640896,3398641663,JP +3398641664,3398668287,AU 3398668288,3398672383,CN 3398672384,3398680575,PK 3398680576,3398684671,ID @@ -81625,7 +76815,6 @@ 3399016448,3399024639,ID 3399024640,3399025663,CN 3399026176,3399026431,SG -3399026432,3399026687,AU 3399026688,3399028735,HK 3399028736,3399032831,ID 3399032832,3399036927,IN @@ -81683,8 +76872,8 @@ 3399557120,3399565311,SG 3399565312,3399581695,AU 3399581696,3399583743,HK -3399583744,3399584767,US -3399584768,3399589631,HK +3399583744,3399583999,US +3399584000,3399589631,HK 3399589632,3399589887,NP 3399589888,3399593983,HK 3399593984,3399598079,BD @@ -81742,7 +76931,11 @@ 3399841792,3399852031,TW 3399852032,3399856127,JP 3399856128,3399860223,CN -3399860224,3399864319,PG +3399860224,3399863551,PG +3399863552,3399863615,AU +3399863616,3399863647,PG +3399863648,3399863807,AU +3399863808,3399864319,PG 3399864320,3399868415,CN 3399868416,3399872255,PK 3399872256,3399873023,CN @@ -81769,9 +76962,8 @@ 3399954432,3399974911,US 3399974912,3399995391,MY 3399995392,3399999487,KR -3399999488,3400000255,SG -3400000256,3400000511,AU -3400000512,3400004607,SG +3399999488,3400001535,AU +3400001536,3400004607,SG 3400004608,3400005631,AU 3400005632,3400006143,SG 3400006144,3400006399,HK @@ -81831,7 +77023,9 @@ 3400264704,3400265215,ID 3400265216,3400265471,AU 3400265472,3400265727,IN -3400265728,3400267775,PG +3400265728,3400265983,PG +3400265984,3400266239,AU +3400266240,3400267775,PG 3400267776,3400268799,KR 3400268800,3400269823,MO 3400269824,3400270847,CN @@ -81881,14 +77075,10 @@ 3400438202,3400438202,US 3400438203,3400438527,HK 3400438528,3400438783,AF -3400438784,3400439039,US -3400439040,3400440319,HK -3400440320,3400440575,US -3400440576,3400441599,HK +3400438784,3400441599,HK 3400441600,3400441855,AU 3400441856,3400445951,NZ -3400445952,3400446463,AU -3400446464,3400450047,NZ +3400445952,3400450047,AU 3400450048,3400458239,JP 3400458240,3400466431,AU 3400466432,3400499199,MO @@ -81901,17 +77091,13 @@ 3400535552,3400536063,AU 3400536064,3400548351,JP 3400548352,3400581119,TH -3400581120,3400587775,SG -3400587776,3400588287,IN -3400588288,3400589311,SG +3400581120,3400589311,SG 3400589312,3400597503,CN 3400597504,3400605695,HK 3400605696,3400607743,JP 3400607744,3400608767,AU 3400608768,3400609791,IN -3400609792,3400618751,JP -3400618752,3400619007,US -3400619008,3400630271,JP +3400609792,3400630271,JP 3400630272,3400646655,IN 3400646656,3400648815,AU 3400648816,3400648831,HK @@ -81989,16 +77175,12 @@ 3401545728,3401547775,BD 3401547776,3401580543,IN 3401580544,3402629119,CN -3402629120,3403081727,JP -3403081728,3403082751,US -3403082752,3404506879,JP +3402629120,3404506879,JP 3404506880,3404507135,US 3404507136,3404630015,JP 3404630016,3404633087,US -3404633088,3404693759,JP -3404693760,3404694015,US -3404694016,3404694271,JP -3404694272,3404697599,US +3404633088,3404693503,JP +3404693504,3404697599,US 3404697600,3405774847,JP 3405774848,3405775871,AU 3405775872,3405776895,CN @@ -82287,8 +77469,8 @@ 3406392320,3406392575,CN 3406392576,3406405119,AU 3406405120,3406405375,CN -3406405376,3406409983,AU -3406409984,3406411775,NZ +3406405376,3406409727,AU +3406409728,3406411775,NZ 3406411776,3406434303,AU 3406434304,3406436351,MY 3406436352,3406438911,AU @@ -82329,7 +77511,7 @@ 3406528000,3406528255,CN 3406528256,3406528511,AU 3406528512,3406528767,AP -3406528768,3406529535,AU +3406528768,3406529535,HK 3406529536,3406529791,IN 3406529792,3406530047,HK 3406530048,3406530303,SG @@ -82535,7 +77717,9 @@ 3406948096,3406948351,CN 3406948352,3406948607,AU 3406948608,3406948863,CN -3406948864,3406952447,AU +3406948864,3406950399,AU +3406950400,3406951423,NF +3406951424,3406952447,AU 3406952448,3406952703,CN 3406952704,3406952959,PH 3406952960,3406954239,AU @@ -83659,9 +78843,7 @@ 3411107840,3411111935,LK 3411111936,3411116031,JP 3411116032,3411124223,KR -3411124224,3411125631,MM -3411125632,3411126015,SG -3411126016,3411128319,MM +3411124224,3411128319,MM 3411128320,3411130367,HK 3411130368,3411132415,ID 3411132416,3411144703,PK @@ -83676,7 +78858,6 @@ 3411161088,3411165183,PK 3411165184,3411173375,MY 3411173376,3411177471,AU -3411181056,3411181311,US 3411181568,3411189759,JP 3411189760,3411197951,AU 3411197952,3411202047,BD @@ -83729,9 +78910,7 @@ 3411460096,3411464191,NZ 3411464192,3411468287,AU 3411468288,3411470335,JP -3411470336,3411471615,HK -3411471616,3411471871,GB -3411471872,3411472383,HK +3411470336,3411472383,HK 3411472384,3411474943,JP 3411475200,3411475455,AU 3411475456,3411475967,HK @@ -83791,13 +78970,9 @@ 3411763200,3411767295,CN 3411767296,3411769343,MN 3411769344,3411771391,CN -3411771392,3411773183,HK -3411773184,3411773439,US -3411773440,3411773951,HK +3411771392,3411773951,HK 3411773952,3411774207,BD -3411774208,3411775487,HK -3411775488,3411775743,US -3411775744,3411775811,HK +3411774208,3411775811,HK 3411775812,3411775813,US 3411775814,3411777023,HK 3411777024,3411777279,ID @@ -83953,9 +79128,7 @@ 3413180416,3413213183,TH 3413213184,3413229567,VN 3413229568,3413245951,AU -3413245952,3413247999,SG -3413248000,3413250047,MY -3413250048,3413262335,SG +3413245952,3413262335,SG 3413262336,3413270527,PH 3413270528,3413278719,TH 3413278720,3413295103,NZ @@ -84147,8 +79320,7 @@ 3415191552,3415195647,IN 3415195648,3415220223,AU 3415220224,3415224319,NZ -3415224320,3415226367,IN -3415226368,3415228415,US +3415224320,3415228415,US 3415228416,3415236607,KH 3415236608,3415244799,CN 3415244800,3415277567,TH @@ -84185,9 +79357,7 @@ 3415605248,3415736319,TH 3415736320,3415740927,SG 3415740928,3415741183,TH -3415741184,3415751167,SG -3415751168,3415751423,TH -3415751424,3415752703,SG +3415741184,3415752703,SG 3415752704,3415760895,CN 3415760896,3415769087,NZ 3415769088,3415777279,CN @@ -84246,9 +79416,7 @@ 3416295936,3416296447,IN 3416296448,3416297471,KR 3416297472,3416301567,TW -3416301568,3416305663,PH -3416305664,3416307711,JP -3416307712,3416309759,PH +3416301568,3416309759,PH 3416309760,3416317951,CN 3416317952,3416326143,TW 3416326144,3416327167,CN @@ -84289,7 +79457,9 @@ 3416709120,3416709375,AU 3416709376,3416709631,ID 3416709632,3416710143,AU -3416710144,3416711167,HK +3416710144,3416710655,HK +3416710656,3416710911,JP +3416710912,3416711167,HK 3416711168,3416719359,AU 3416719360,3416727551,PH 3416727552,3416735743,JP @@ -84342,7 +79512,8 @@ 3416997888,3417014271,AU 3417014272,3417022463,JP 3417022464,3417030655,KR -3417030656,3417035007,AU +3417030656,3417034751,AU +3417034752,3417035007,NZ 3417035008,3417035775,IN 3417035776,3417036799,JP 3417036800,3417037823,ID @@ -84369,8 +79540,7 @@ 3417182208,3417184767,AU 3417184768,3417185023,NZ 3417185024,3417185279,AF -3417185280,3417185535,NZ -3417185536,3417185791,SG +3417185280,3417185791,SG 3417185792,3417186303,NZ 3417186304,3417194495,HK 3417194496,3417198591,JP @@ -84420,16 +79590,17 @@ 3417374720,3417440255,PH 3417440256,3417664511,JP 3417664512,3417665279,US -3417665280,3417668095,JP -3417668096,3417668351,US -3417668352,3417833471,JP +3417665280,3417833471,JP 3417833472,3417849855,NZ 3417849856,3417853951,AU 3417853952,3417858047,CN 3417858048,3417866239,JP 3417866240,3417915391,HK 3417915392,3417939967,TH -3417939968,3417947903,PF +3417939968,3417946111,PF +3417946112,3417947135,AU +3417947136,3417947391,IN +3417947648,3417947903,AU 3417947904,3417948159,IN 3417948160,3417964543,AU 3417964544,3418030079,HK @@ -84489,7 +79660,8 @@ 3418247168,3418251263,PH 3418251264,3418255359,CN 3418255360,3418257407,ID -3418257408,3418259455,HK +3418257408,3418259199,HK +3418259200,3418259455,MY 3418259456,3418267647,IN 3418267648,3418271743,VN 3418271744,3418273791,SG @@ -84500,8 +79672,8 @@ 3418282240,3418282495,AU 3418282496,3418283519,PH 3418283520,3418284031,AU -3418284032,3418286079,SG -3418286080,3418287103,AU +3418284032,3418286847,SG +3418286848,3418287103,AU 3418287104,3418288127,SG 3418288128,3418290175,ID 3418290176,3418290431,IN @@ -84534,18 +79706,20 @@ 3418365952,3418374143,TH 3418374144,3418382335,AU 3418382336,3418390527,JP -3418390528,3418392831,AU -3418392832,3418397183,AP +3418390528,3418394623,AU +3418394624,3418397183,AP 3418397184,3418397439,MY 3418397440,3418399231,AP 3418399232,3418399247,PH -3418399248,3418402815,AP +3418399248,3418400255,AP +3418400256,3418400767,AU +3418400768,3418402815,AP 3418402816,3418404863,AU -3418404864,3418406911,AP +3418404864,3418405439,AP +3418405440,3418405471,AU +3418405472,3418406911,AP 3418406912,3418423295,IN -3418423296,3418434559,HK -3418434560,3418434815,AU -3418434816,3418444091,HK +3418423296,3418444091,HK 3418444092,3418444095,CN 3418444096,3418448639,HK 3418448640,3418448895,SG @@ -84554,9 +79728,7 @@ 3418472448,3418480639,AU 3418480640,3418488831,CN 3418488832,3418505215,AU -3418505216,3418512639,JP -3418512640,3418512895,AU -3418512896,3418513407,JP +3418505216,3418513407,JP 3418513408,3418517503,IN 3418517504,3418519551,MN 3418519552,3418521599,CN @@ -84601,9 +79773,7 @@ 3418996736,3419013119,IN 3419013120,3419062271,AU 3419062272,3419070463,JP -3419070464,3419070719,HK -3419070720,3419070975,GB -3419070976,3419072511,HK +3419070464,3419072511,HK 3419073024,3419073279,SG 3419073280,3419073535,FJ 3419073536,3419074559,CN @@ -84630,9 +79800,9 @@ 3419412480,3419414527,PH 3419414528,3419422719,CN 3419422720,3419439103,AU -3419439104,3419457279,SG -3419457280,3419457535,MY -3419457536,3419459407,SG +3419439104,3419456767,SG +3419456768,3419457023,US +3419457024,3419459407,SG 3419459408,3419459423,GB 3419459424,3419459551,SG 3419459552,3419459583,HK @@ -84776,7 +79946,8 @@ 3422552064,3422717439,US 3422717440,3422717695,US 3422717696,3422847487,US -3422847488,3422847999,GB +3422847488,3422847743,GB +3422847744,3422847999,FR 3422848000,3422850559,US 3422850560,3422851071,GB 3422851072,3422955519,US @@ -84789,9 +79960,7 @@ 3423092848,3423093759,VI 3423093760,3423094783,US 3423094784,3423095807,CA -3423095808,3423101695,US -3423101696,3423101951,IN -3423101952,3423143935,US +3423095808,3423143935,US 3423143936,3423145983,CA 3423145984,3423161031,US 3423161032,3423161039,CA @@ -85047,9 +80216,7 @@ 3423356384,3423356399,IN 3423356400,3423357111,US 3423357112,3423357127,AE -3423357128,3423357511,US -3423357512,3423357519,DE -3423357520,3423361023,US +3423357128,3423361023,US 3423361024,3423361279,AU 3423361280,3423363463,US 3423363464,3423363471,AU @@ -85136,7 +80303,9 @@ 3423378304,3423378431,CA 3423378432,3423378943,US 3423378944,3423379455,CA -3423379456,3423393903,US +3423379456,3423389047,US +3423389048,3423389055,MX +3423389056,3423393903,US 3423393904,3423393911,RU 3423393912,3423396487,US 3423396488,3423396495,RU @@ -85176,11 +80345,7 @@ 3423493968,3423493975,AT 3423493976,3423533055,US 3423533056,3423535103,AI -3423535104,3423540087,US -3423540088,3423540095,HN -3423540096,3423540175,US -3423540176,3423540183,HN -3423540184,3423543295,US +3423535104,3423543295,US 3423543296,3423545343,CA 3423545344,3423554183,US 3423554184,3423554191,CA @@ -85193,10 +80358,29 @@ 3423574016,3423579135,US 3423579136,3423580159,CA 3423580160,3423582207,US -3423582208,3423586303,CA +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,3423584719,CA +3423584720,3423584735,US +3423584736,3423586303,CA 3423586304,3423589151,US 3423589152,3423589159,GB -3423589160,3423591143,US +3423589160,3423590871,US +3423590872,3423590879,HT +3423590880,3423591143,US 3423591144,3423591151,HN 3423591152,3423592599,US 3423592600,3423592607,ES @@ -85274,12 +80458,24 @@ 3425846784,3425847039,EU 3425847040,3425850519,CA 3425850520,3425850527,US -3425850528,3425894399,CA +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,3425914127,US +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 @@ -85289,7 +80485,13 @@ 3426007808,3426008063,EU 3426008064,3426013183,US 3426013184,3426013439,IL -3426013440,3426369023,US +3426013440,3426306559,US +3426306560,3426306567,IN +3426306568,3426306591,US +3426306592,3426306623,IN +3426306624,3426306687,US +3426306688,3426306815,IN +3426306816,3426369023,US 3426369024,3426369535,CA 3426369536,3426387967,US 3426387968,3426388991,MX @@ -85652,7 +80854,9 @@ 3428606384,3428606415,US 3428606416,3428606431,CA 3428606432,3428606463,US -3428606464,3428606719,CA +3428606464,3428606591,CA +3428606592,3428606655,US +3428606656,3428606719,CA 3428606720,3428606911,US 3428606912,3428606975,IS 3428606976,3428607743,US @@ -85714,12 +80918,20 @@ 3428644016,3428644047,US 3428644048,3428644063,CA 3428644064,3428644351,US -3428644352,3428645951,CA +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 -3428646912,3428661247,US +3428646912,3428660735,US +3428660736,3428660991,CA +3428660992,3428661247,US 3428661248,3428661503,CA 3428661504,3428671487,US 3428679680,3428689646,US @@ -85737,11 +80949,9 @@ 3428894048,3428958207,US 3428958208,3428962303,CO 3428962304,3429171199,US -3429171200,3429235007,CA -3429235008,3429235039,BM -3429235040,3429236735,CA +3429171200,3429236735,CA 3429236736,3429381887,US -3429381888,3429382143,GB +3429381888,3429382143,EU 3429382144,3429382399,DE 3429382400,3429500927,US 3429500928,3429502975,A2 @@ -85753,9 +80963,7 @@ 3429520952,3429520955,GB 3429520956,3429739175,US 3429739176,3429739179,GB -3429739180,3429774599,US -3429774600,3429774607,BD -3429774608,3429775359,US +3429739180,3429775359,US 3429775360,3429777407,TC 3429777408,3429892095,US 3429892096,3429957631,CA @@ -85841,16 +81049,11 @@ 3431114496,3431114751,CA 3431114752,3431468031,US 3431468032,3431469055,CA -3431469056,3431469311,LU -3431469312,3431470847,US -3431470848,3431471103,GB -3431471104,3431520767,US +3431469056,3431520767,US 3431520768,3431521023,AP -3431521024,3431526911,US -3431526912,3431526921,NL +3431521024,3431526921,US 3431526922,3431526922,EU -3431526923,3431527167,NL -3431527168,3431596287,US +3431526923,3431596287,US 3431596288,3431602687,CA 3431602688,3431602943,US 3431602944,3431606271,CA @@ -85887,7 +81090,9 @@ 3431732804,3431732807,RO 3431732808,3431732895,US 3431732896,3431732927,RO -3431732928,3431745023,US +3431732928,3431734095,US +3431734096,3431734103,IL +3431734104,3431745023,US 3431745024,3431745279,BE 3431745280,3431745791,US 3431745792,3431746047,GB @@ -85991,8 +81196,7 @@ 3434134080,3434423295,US 3434423296,3434423303,CA 3434423304,3434427391,US -3434427392,3434427647,HN -3434427648,3434428415,HR +3434427392,3434428415,HR 3434428416,3434433279,US 3434433280,3434433535,PR 3434433536,3434553343,US @@ -86069,9 +81273,7 @@ 3436476416,3436478463,AW 3436478464,3436492799,US 3436492800,3436493055,NL -3436493056,3436508927,US -3436508928,3436509183,BB -3436509184,3436697087,US +3436493056,3436697087,US 3436697088,3436697343,VE 3436697344,3437232383,US 3437232384,3437232639,CA @@ -86094,7 +81296,9 @@ 3437281536,3437292799,US 3437292800,3437293055,CA 3437293056,3437297919,US -3437297920,3437307391,CA +3437297920,3437301759,CA +3437301760,3437305855,US +3437305856,3437307391,CA 3437307392,3437307903,US 3437307904,3437310975,CA 3437310976,3437311487,US @@ -86189,187 +81393,9 @@ 3437756160,3437756415,IE 3437756416,3437772799,US 3437772800,3437776895,CA -3437776896,3437789847,US -3437789848,3437789855,IN -3437789856,3437789863,US +3437776896,3437789863,US 3437789864,3437789871,AU -3437789872,3437790143,US -3437790144,3437790159,CA -3437790160,3437790215,US -3437790216,3437790223,AU -3437790224,3437790615,US -3437790616,3437790623,GB -3437790624,3437790735,US -3437790736,3437790743,SE -3437790744,3437791199,US -3437791200,3437791207,CO -3437791208,3437791647,US -3437791648,3437791663,CA -3437791664,3437791935,US -3437791936,3437791999,AU -3437792000,3437792031,US -3437792032,3437792063,AU -3437792064,3437792279,US -3437792280,3437792287,SE -3437792288,3437792415,US -3437792416,3437792423,AU -3437792424,3437792527,US -3437792528,3437792535,MX -3437792536,3437792735,US -3437792736,3437792743,CA -3437792744,3437792775,US -3437792776,3437792783,CA -3437792784,3437793279,US -3437793280,3437793535,BD -3437793536,3437793727,US -3437793728,3437793791,BD -3437793792,3437794647,US -3437794648,3437794655,GB -3437794656,3437794831,US -3437794832,3437794839,ID -3437794840,3437794879,US -3437794880,3437794887,CA -3437794888,3437795103,US -3437795104,3437795111,IN -3437795112,3437795247,US -3437795248,3437795255,CA -3437795256,3437795303,US -3437795304,3437795311,BD -3437795312,3437795807,US -3437795808,3437795815,AR -3437795816,3437795919,US -3437795920,3437795927,TH -3437795928,3437796919,US -3437796920,3437796935,ES -3437796936,3437799303,US -3437799304,3437799311,CA -3437799312,3437799359,US -3437799360,3437799367,IN -3437799368,3437799439,US -3437799440,3437799447,CA -3437799448,3437799471,US -3437799472,3437799479,CA -3437799480,3437799599,US -3437799600,3437799607,MX -3437799608,3437799663,US -3437799664,3437799671,GB -3437799672,3437799775,US -3437799776,3437799783,CA -3437799784,3437799791,US -3437799792,3437799799,IN -3437799800,3437799871,US -3437799872,3437799879,CA -3437799880,3437800031,US -3437800032,3437800039,AU -3437800040,3437800215,US -3437800216,3437800223,CN -3437800224,3437800231,US -3437800232,3437800239,CA -3437800240,3437800831,US -3437800832,3437800847,PH -3437800848,3437800959,US -3437800960,3437800975,FR -3437800976,3437801695,US -3437801696,3437801703,AU -3437801704,3437801727,US -3437801728,3437801735,CO -3437801736,3437801743,CA -3437801744,3437802039,US -3437802040,3437802047,BR -3437802048,3437802207,US -3437802208,3437802223,BR -3437802224,3437802495,US -3437802496,3437802503,GB -3437802504,3437802559,US -3437802560,3437802567,SA -3437802568,3437802727,US -3437802728,3437802735,AR -3437802736,3437802743,GB -3437802744,3437802791,US -3437802792,3437802799,CA -3437802800,3437802823,GB -3437802824,3437802879,US -3437802880,3437802887,GB -3437802888,3437803055,US -3437803056,3437803071,EC -3437803072,3437803383,US -3437803384,3437803391,BR -3437803392,3437803535,US -3437803536,3437803543,GB -3437803544,3437803647,US -3437803648,3437803655,AU -3437803656,3437803759,US -3437803760,3437803767,CA -3437803768,3437803783,US -3437803784,3437803791,CA -3437803792,3437803887,US -3437803888,3437803895,CA -3437803896,3437803919,US -3437803920,3437803927,CA -3437803928,3437803967,US -3437803968,3437803975,FR -3437803976,3437804063,US -3437804064,3437804071,IL -3437804072,3437804159,US -3437804160,3437804167,GB -3437804168,3437804175,NZ -3437804176,3437804335,US -3437804336,3437804351,PE -3437804352,3437804447,US -3437804448,3437804455,CA -3437804456,3437804471,US -3437804472,3437804487,IN -3437804488,3437804671,US -3437804672,3437804703,CA -3437804704,3437804767,US -3437804768,3437804799,PH -3437804800,3437804807,US -3437804808,3437804815,CA -3437804816,3437804903,US -3437804904,3437804911,CA -3437804912,3437805159,US -3437805160,3437805167,MX -3437805168,3437805175,US -3437805176,3437805183,CA -3437805184,3437805191,GB -3437805192,3437805207,US -3437805208,3437805215,GB -3437805216,3437805231,US -3437805232,3437805239,FR -3437805240,3437805271,US -3437805272,3437805279,IL -3437805280,3437814623,US -3437814624,3437814631,CA -3437814632,3437815807,US -3437815808,3437815815,IN -3437815816,3437815991,US -3437815992,3437815999,CA -3437816000,3437816007,AU -3437816008,3437816095,US -3437816096,3437816103,IT -3437816104,3437816159,US -3437816160,3437816167,IL -3437816168,3437816183,US -3437816184,3437816191,BR -3437816192,3437816263,US -3437816264,3437816271,GB -3437816272,3437816431,US -3437816432,3437816439,CA -3437816440,3437817375,US -3437817376,3437817383,IL -3437817384,3437817391,US -3437817392,3437817399,SG -3437817400,3437817647,US -3437817648,3437817663,FR -3437817664,3437817855,US -3437817856,3437817983,BD -3437817984,3437819471,US -3437819472,3437819479,IL -3437819480,3437819871,US -3437819872,3437819887,FR -3437819888,3437821823,US -3437821824,3437821887,BD -3437821888,3437961215,US +3437789872,3437961215,US 3437961216,3437964287,ZA 3437964288,3438006271,US 3438006272,3438010367,CA @@ -86402,17 +81428,9 @@ 3438546176,3438546183,US 3438546184,3438552271,CA 3438552272,3438552287,US -3438552288,3438558479,CA -3438558480,3438558487,US -3438558488,3438558575,CA -3438558576,3438558583,US -3438558584,3438558615,CA -3438558616,3438558623,US -3438558624,3438559647,CA +3438552288,3438559647,CA 3438559648,3438559679,US -3438559680,3438569215,CA -3438569216,3438569343,US -3438569344,3438570031,CA +3438559680,3438570031,CA 3438570032,3438570039,MY 3438570040,3438570495,CA 3438570496,3438570527,US @@ -86642,19 +81660,7 @@ 3449189792,3449189839,US 3449189840,3449190655,CA 3449190656,3449190911,US -3449190912,3449191175,CA -3449191176,3449191183,US -3449191184,3449191255,CA -3449191256,3449191263,US -3449191264,3449191303,CA -3449191304,3449191311,US -3449191312,3449191319,CA -3449191320,3449191327,US -3449191328,3449191343,CA -3449191344,3449191351,GB -3449191352,3449191367,CA -3449191368,3449191375,US -3449191376,3449191679,CA +3449190912,3449191679,CA 3449191680,3449191743,US 3449191744,3449195775,CA 3449195776,3449196031,US @@ -86766,22 +81772,7 @@ 3449594112,3449598975,US 3449598976,3449599231,AU 3449599232,3449638911,US -3449638912,3449639359,GB -3449639360,3449639361,US -3449639362,3449639362,BE -3449639363,3449639363,CH -3449639364,3449639364,CZ -3449639365,3449639365,US -3449639366,3449639366,ES -3449639367,3449639367,FR -3449639368,3449639368,US -3449639369,3449639369,IE -3449639370,3449639370,IT -3449639371,3449639371,NL -3449639372,3449639372,PL -3449639373,3449639373,RO -3449639374,3449639423,US -3449639424,3449639679,GB +3449638912,3449639679,GB 3449639680,3449639935,US 3449639936,3449640191,GB 3449640192,3449640447,NL @@ -86798,7 +81789,9 @@ 3449843200,3449843711,YE 3449843712,3449874687,US 3449874688,3449874943,AG -3449874944,3449910719,US +3449874944,3449884159,US +3449884160,3449884415,AS +3449884416,3449910719,US 3449910720,3449910783,CA 3449910784,3449923583,US 3449923584,3449923839,ES @@ -86846,9 +81839,11 @@ 3450685440,3450699007,US 3450699008,3450699263,CA 3450699776,3450731519,US -3450731520,3450732287,CA -3450732288,3450773503,US -3450773504,3450777599,CA +3450731520,3450732543,CA +3450732544,3450773503,US +3450773504,3450774783,CA +3450774784,3450775039,US +3450775040,3450777599,CA 3450777600,3450849791,US 3450849792,3450850047,EU 3450850048,3450851839,US @@ -86895,10 +81890,12 @@ 3450961008,3450961015,DM 3450961016,3450974255,US 3450974256,3450974271,GB -3450974272,3450974719,US -3450974720,3450975231,ZM +3450974272,3450974975,US +3450974976,3450975231,ZM 3450975232,3450975743,LB -3450975744,3450982399,US +3450975744,3450976511,US +3450976512,3450976767,IL +3450976768,3450982399,US 3450982400,3450984447,TW 3450984448,3450986495,PH 3450986496,3450986751,HK @@ -86981,9 +81978,7 @@ 3451912192,3452174335,CA 3452174336,3452436479,US 3452436480,3452502015,CA -3452502016,3452663039,US -3452663040,3452663295,GB -3452663296,3452678143,US +3452502016,3452678143,US 3452678144,3452678399,EU 3452678400,3452682239,BE 3452682240,3452715007,US @@ -87281,13 +82276,11 @@ 3453681944,3453681951,IN 3453681952,3453740031,US 3453740032,3453740159,MX -3453740160,3454002431,US -3454002432,3454002687,IT -3454002688,3454002943,US -3454002944,3454003199,ES -3454003200,3454004991,US -3454004992,3454005247,GB -3454005248,3454292479,US +3453740160,3454003013,US +3454003014,3454003014,ES +3454003015,3454004997,US +3454004998,3454004998,GB +3454004999,3454292479,US 3454292480,3454292735,GB 3454292736,3454436351,US 3454436352,3454436607,GU @@ -87311,9 +82304,7 @@ 3454617600,3454617855,CA 3454617856,3454618111,US 3454618112,3454618367,CA -3454618368,3454619007,US -3454619008,3454619135,DO -3454619136,3454619647,US +3454618368,3454619647,US 3454619648,3454631423,CA 3454631424,3454631935,US 3454631936,3454634751,CA @@ -87431,9 +82422,7 @@ 3455418368,3455418879,KY 3455418880,3455421439,US 3455421440,3455421951,BE -3455421952,3455433471,US -3455433472,3455433727,DE -3455433728,3455453439,US +3455421952,3455453439,US 3455453440,3455453695,HT 3455453696,3455551999,US 3455552000,3455552255,EC @@ -87591,7 +82580,9 @@ 3456303104,3456311295,JP 3456311296,3456892927,US 3456892928,3456958463,CA -3456958464,3457312191,US +3456958464,3457246367,US +3457246368,3457246383,SE +3457246384,3457312191,US 3457312192,3457312255,IE 3457312256,3457327663,US 3457327664,3457327679,NZ @@ -87659,9 +82650,7 @@ 3458145744,3458145759,DE 3458145760,3458195455,US 3458195456,3458196479,SG -3458196480,3458595327,US -3458595328,3458595583,PR -3458595584,3458765631,US +3458196480,3458765631,US 3458765632,3458765695,CA 3458765696,3458811903,US 3458813952,3458818047,CA @@ -87721,8 +82710,8 @@ 3459288064,3459290111,US 3459290112,3459290623,CL 3459290624,3459310591,US -3459310592,3459311103,KY -3459311104,3459312639,US +3459310592,3459310847,KY +3459310848,3459312639,US 3459312640,3459312687,MX 3459312688,3459312767,US 3459312768,3459312895,MX @@ -87852,15 +82841,17 @@ 3459731456,3459735551,CA 3459735552,3459745535,US 3459745536,3459745791,IT -3459745792,3459848959,US +3459745792,3459842815,US +3459842816,3459843071,AR +3459843072,3459848959,US 3459848960,3459849215,FR -3459849216,3459850239,US -3459850240,3459850495,CA +3459849216,3459850431,US +3459850432,3459850495,CA 3459850496,3459852991,US 3459852992,3459853007,CA -3459853008,3459874559,US -3459874560,3459874815,GB -3459874816,3460057283,US +3459853008,3459873807,US +3459873808,3459873823,IT +3459873824,3460057283,US 3460057284,3460057287,TH 3460057288,3460061687,US 3460061688,3460061691,HK @@ -87874,7 +82865,9 @@ 3460104704,3460105215,MX 3460105216,3460108895,US 3460108896,3460108903,FI -3460108904,3460114431,US +3460108904,3460111871,US +3460111872,3460111887,CA +3460111888,3460114431,US 3460114432,3460116479,SR 3460116480,3460161535,US 3460161536,3460165631,PR @@ -88229,10 +83222,8 @@ 3460949056,3460949183,ID 3460949184,3460950271,US 3460950272,3460950527,DE -3460950528,3460950559,HK -3460950560,3460950671,US -3460950672,3460950687,JP -3460950688,3460950991,US +3460950528,3460950783,HK +3460950784,3460950991,US 3460950992,3460951007,JP 3460951008,3460951295,US 3460951296,3460951551,GB @@ -88348,7 +83339,11 @@ 3461536960,3461536975,CA 3461536976,3461554175,US 3461554176,3461556223,CA -3461558272,3461808127,US +3461558272,3461597887,US +3461597888,3461597951,CO +3461597952,3461598015,US +3461598016,3461598079,CO +3461598080,3461808127,US 3461808128,3461873663,CA 3461873664,3461897727,US 3461897728,3461897983,CA @@ -88434,8 +83429,7 @@ 3462593792,3462594559,GN 3462594560,3462633471,US 3462633472,3462633727,SG -3462633728,3462633799,BV -3462633800,3462633823,US +3462633728,3462633823,US 3462633824,3462633855,SG 3462633856,3462633983,US 3462633984,3462634239,SG @@ -88467,13 +83461,17 @@ 3463156736,3463157759,BO 3463157760,3463176191,US 3463176192,3463176703,CW -3463176704,3463184383,US +3463176704,3463183943,US +3463183944,3463183951,CN +3463183952,3463184383,US 3463184384,3463194623,CA 3463194624,3463198719,US 3463198720,3463213311,CA 3463213312,3463213567,US 3463214080,3463215103,US -3463215104,3463243775,CA +3463215104,3463229327,CA +3463229328,3463229335,US +3463229336,3463243775,CA 3463243776,3463245055,US 3463245056,3463249663,CA 3463249664,3463502335,US @@ -88508,11 +83506,9 @@ 3464172032,3464173567,CA 3464173568,3464173823,US 3464173824,3464174591,CA +3464175104,3464175359,US 3464175360,3464180735,CA -3464180736,3464184487,US -3464184488,3464184495,GB -3464184496,3464184511,CA -3464184512,3464191911,US +3464180736,3464191911,US 3464191912,3464191919,ES 3464191920,3464195943,US 3464195944,3464195951,AU @@ -88628,7 +83624,9 @@ 3464785152,3464785407,AR 3464785408,3464802303,US 3464802304,3464806399,CA -3464806400,3465154559,US +3464806400,3464818943,US +3464818944,3464819199,PL +3464819200,3465154559,US 3465154560,3465158655,BS 3465158656,3465177087,US 3465177088,3465179135,PE @@ -89049,9 +84047,7 @@ 3468067760,3468067775,AR 3468067776,3468068095,US 3468068096,3468068351,MC -3468068352,3468068527,US -3468068528,3468068543,MX -3468068544,3468068863,US +3468068352,3468068863,US 3468068864,3468069631,CA 3468069632,3468071791,US 3468071792,3468071807,MX @@ -89070,11 +84066,7 @@ 3468075936,3468075967,US 3468075968,3468075999,MX 3468076000,3468076031,PH -3468076032,3468076191,US -3468076192,3468076207,BR -3468076208,3468076223,US -3468076224,3468076287,GB -3468076288,3468077631,US +3468076032,3468077631,US 3468077632,3468077663,AR 3468077664,3468079327,US 3468079328,3468079359,BR @@ -89232,19 +84224,33 @@ 3468546048,3468619007,US 3468619008,3468619263,CA 3468619264,3468623871,US -3468623872,3468628119,CA +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,3468633759,CA +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,3468639935,CA +3468635936,3468637839,CA +3468637840,3468637847,SK +3468637848,3468638143,CA +3468638144,3468638159,US +3468638160,3468639935,CA 3468639936,3468639967,US 3468639968,3468656639,CA 3468656640,3468799999,US @@ -89261,11 +84267,7 @@ 3469176320,3469176575,MX 3469176576,3469186303,US 3469186304,3469186559,MX -3469186560,3469747455,US -3469747456,3469747711,CA -3469747712,3469857535,US -3469857536,3469857791,CA -3469857792,3469893631,US +3469186560,3469893631,US 3469893632,3469901823,CA 3469901824,3470131199,US 3470131200,3470135295,AG @@ -89776,13 +84778,18 @@ 3470362624,3470362687,SE 3470362688,3470362731,US 3470362732,3470362735,AE -3470362736,3470362895,US +3470362736,3470362767,US +3470362768,3470362783,MA +3470362784,3470362847,US +3470362848,3470362855,AF +3470362856,3470362895,US 3470362896,3470362911,AU 3470362912,3470363455,US 3470363456,3470363519,SE 3470363520,3470363551,US 3470363552,3470363555,AF -3470363556,3470363615,US +3470363556,3470363599,US +3470363600,3470363615,KW 3470363616,3470363631,ES 3470363632,3470363759,US 3470363760,3470363767,CA @@ -89790,15 +84797,11 @@ 3470363904,3470363919,CA 3470363920,3470363967,US 3470363968,3470363983,CA -3470363984,3470364095,US -3470364096,3470364103,AU -3470364104,3470364415,US +3470363984,3470364415,US 3470364416,3470364479,SE 3470364480,3470364559,US 3470364560,3470364575,HN -3470364576,3470453247,US -3470453248,3470453503,GB -3470453504,3470458879,US +3470364576,3470458879,US 3470458880,3470475263,KR 3470475264,3470509311,US 3470509312,3470509567,CA @@ -90028,9 +85031,7 @@ 3473381312,3473381343,DE 3473381344,3473703551,US 3473703552,3473703679,CA -3473703680,3473715391,US -3473715392,3473715407,GB -3473715408,3473755391,US +3473703680,3473755391,US 3473755392,3473755647,HN 3473755648,3473765887,US 3473765888,3473766399,EC @@ -90088,9 +85089,7 @@ 3475310848,3475311103,DE 3475311104,3475384679,US 3475384680,3475384687,CA -3475384688,3475406527,US -3475406528,3475406591,BR -3475406592,3475589887,US +3475384688,3475589887,US 3475589888,3475590143,EC 3475590144,3475670015,US 3475670016,3475670047,AG @@ -90160,9 +85159,7 @@ 3476447232,3476455423,CA 3476455424,3476718616,US 3476718617,3476718617,IN -3476718618,3476720125,US -3476720126,3476720126,GB -3476720127,3476720363,US +3476718618,3476720363,US 3476720364,3476720367,LV 3476720368,3476721159,US 3476721160,3476721167,IT @@ -90189,13 +85186,7 @@ 3476722528,3476722543,AU 3476722544,3476722591,US 3476722592,3476722607,GB -3476722608,3476722719,US -3476722720,3476722727,CO -3476722728,3476722759,US -3476722760,3476722767,IN -3476722768,3476723670,US -3476723671,3476723674,GB -3476723675,3476725151,US +3476722608,3476725151,US 3476725152,3476725183,AU 3476725184,3476725215,ZA 3476725216,3476725247,US @@ -90232,7 +85223,9 @@ 3477312512,3477313023,US 3477313024,3477313279,US 3477313280,3477313535,US -3477313536,3478114303,US +3477313536,3477542143,US +3477542144,3477542175,IN +3477542176,3478114303,US 3478114304,3478118399,PE 3478118400,3478192127,US 3478192128,3478257663,CA @@ -90247,11 +85240,15 @@ 3478261960,3478261983,SG 3478261984,3478262271,US 3478262272,3478262279,SG -3478262280,3478262655,US +3478262280,3478262399,US +3478262400,3478262415,SG +3478262416,3478262655,US 3478262656,3478262671,SG 3478262672,3478262743,US 3478262744,3478262751,SG -3478262752,3478274255,US +3478262752,3478262775,US +3478262776,3478262783,HK +3478262784,3478274255,US 3478274256,3478274303,GB 3478274304,3478274399,US 3478274400,3478274431,GB @@ -90265,7 +85262,17 @@ 3478274640,3478274655,GB 3478274656,3478274687,US 3478274688,3478274719,GB -3478274720,3478294527,US +3478274720,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 @@ -90287,175 +85294,7 @@ 3478372352,3478380543,MX 3478380544,3479207935,US 3479207936,3479240703,CA -3479240704,3479289919,US -3479289920,3479289951,BD -3479289952,3479290063,US -3479290064,3479290071,MX -3479290072,3479290087,US -3479290088,3479290095,LC -3479290096,3479290207,US -3479290208,3479290239,BD -3479290240,3479290351,US -3479290352,3479290359,IN -3479290360,3479290367,US -3479290368,3479290431,BD -3479290432,3479290487,US -3479290488,3479290495,GB -3479290496,3479290631,US -3479290632,3479290639,GB -3479290640,3479290743,US -3479290744,3479290751,EC -3479290752,3479290767,US -3479290768,3479290783,CA -3479290784,3479290869,US -3479290870,3479290871,CA -3479290872,3479291071,US -3479291072,3479291087,CA -3479291088,3479291279,US -3479291280,3479291287,CA -3479291288,3479291671,US -3479291672,3479291679,CA -3479291680,3479291687,AU -3479291688,3479291695,US -3479291696,3479291703,AU -3479291704,3479291831,US -3479291832,3479291847,AU -3479291848,3479291855,JM -3479291856,3479291871,US -3479291872,3479291879,CA -3479291880,3479292007,US -3479292008,3479292015,CA -3479292016,3479292223,US -3479292224,3479292231,UY -3479292232,3479292239,IN -3479292240,3479292671,US -3479292672,3479292687,AU -3479292688,3479292735,US -3479292736,3479292751,BD -3479292752,3479292815,US -3479292816,3479292823,IL -3479292824,3479293007,US -3479293008,3479293023,AU -3479293024,3479293311,US -3479293312,3479293319,CA -3479293320,3479293583,US -3479293584,3479293591,GB -3479293592,3479294031,US -3479294032,3479294039,BD -3479294040,3479294223,US -3479294224,3479294231,TH -3479294232,3479294401,US -3479294402,3479294403,BG -3479294404,3479294419,US -3479294420,3479294423,CA -3479294424,3479294425,US -3479294426,3479294427,CA -3479294428,3479294487,US -3479294488,3479294495,MX -3479294496,3479294527,US -3479294528,3479294543,BD -3479294544,3479294663,US -3479294664,3479294671,AU -3479294672,3479294775,US -3479294776,3479294783,CA -3479294784,3479295015,US -3479295016,3479295023,MY -3479295024,3479295071,US -3479295072,3479295079,CR -3479295080,3479295103,US -3479295104,3479295111,CA -3479295112,3479295359,US -3479295360,3479295367,AU -3479295368,3479295519,US -3479295520,3479295527,CA -3479295528,3479295583,US -3479295584,3479295591,NL -3479295592,3479295703,US -3479295704,3479295735,MY -3479295736,3479295767,US -3479295768,3479295775,MY -3479295776,3479296007,US -3479296008,3479296015,CA -3479296016,3479296079,US -3479296080,3479296095,MY -3479296096,3479296319,US -3479296320,3479296335,BD -3479296336,3479296607,US -3479296608,3479296615,BM -3479296616,3479296631,US -3479296632,3479296639,JP -3479296640,3479296671,US -3479296672,3479296679,NL -3479296680,3479296759,US -3479296760,3479296763,IL -3479296764,3479297615,US -3479297616,3479297623,CA -3479297624,3479298047,US -3479298048,3479298063,IS -3479298064,3479298079,GB -3479298080,3479298103,US -3479298104,3479298111,BM -3479298112,3479298199,US -3479298200,3479298207,BM -3479298208,3479298319,US -3479298320,3479298327,IN -3479298328,3479298399,US -3479298400,3479298407,IN -3479298408,3479298463,US -3479298464,3479298471,CA -3479298472,3479298591,US -3479298592,3479298599,AU -3479298600,3479298759,US -3479298760,3479298767,CA -3479298768,3479301127,US -3479301128,3479301135,GB -3479301136,3479301183,US -3479301184,3479301191,GB -3479301192,3479301287,US -3479301288,3479301295,IL -3479301296,3479301455,US -3479301456,3479301463,IN -3479301464,3479301519,US -3479301520,3479301535,TH -3479301536,3479301551,CA -3479301552,3479301579,US -3479301580,3479301583,IN -3479301584,3479301663,US -3479301664,3479301679,NL -3479301680,3479301687,US -3479301688,3479301695,NZ -3479301696,3479301775,US -3479301776,3479301783,IN -3479301784,3479303759,US -3479303760,3479303767,ZA -3479303768,3479303951,US -3479303952,3479303959,NL -3479303960,3479303967,US -3479303968,3479303975,NL -3479303976,3479303983,US -3479303984,3479303991,CA -3479303992,3479304319,US -3479304320,3479304327,JM -3479304328,3479304447,US -3479304448,3479304455,IL -3479304456,3479304463,MX -3479304464,3479304863,US -3479304864,3479304871,PK -3479304872,3479305175,US -3479305176,3479305183,BM -3479305184,3479305215,US -3479305216,3479305231,EG -3479305232,3479305271,US -3479305272,3479305279,IN -3479305280,3479305583,US -3479305584,3479305599,BD -3479305600,3479305983,US -3479305984,3479306015,CA -3479306016,3479306031,US -3479306032,3479306039,PK -3479306040,3479306079,US -3479306080,3479306087,BD -3479306088,3479568383,US +3479240704,3479568383,US 3479568384,3479633919,CA 3479633920,3479789343,US 3479789344,3479789360,UY @@ -90464,7 +85303,11 @@ 3479956480,3479956735,US 3479956736,3479961599,CA 3479961600,3480223743,US -3480223744,3480256511,CA +3480223744,3480226415,CA +3480226416,3480226423,US +3480226424,3480251007,CA +3480251008,3480251071,US +3480251072,3480256511,CA 3480256512,3480284159,US 3480284160,3480284671,CA 3480284672,3480444927,US @@ -90609,8 +85452,7 @@ 3480610304,3480610559,ES 3480610560,3480610815,US 3480610816,3480610943,AU -3480610944,3480611071,HU -3480611072,3480611327,US +3480610944,3480611327,US 3480611328,3480611583,JP 3480611584,3480611839,MX 3480611840,3480612095,BR @@ -90639,16 +85481,18 @@ 3481822064,3481822079,US 3481822080,3481829375,CA 3481829376,3481843455,US -3481843456,3481843967,GB -3481843968,3481936895,US +3481843456,3481843711,GB +3481843712,3481936895,US 3481936896,3481937919,VE -3481937920,3481949695,US -3481949696,3481949951,MX -3481949952,3481951395,US +3481937920,3481951395,US 3481951396,3481951399,GB -3481951400,3481964575,US +3481951400,3481958143,US +3481958144,3481958399,NL +3481958400,3481964575,US 3481964576,3481964579,IE -3481964580,3481973247,US +3481964580,3481966719,US +3481966720,3481966847,CH +3481966848,3481973247,US 3481973248,3481973503,CA 3481973504,3481993215,US 3481993216,3481993783,CA @@ -90821,7 +85665,9 @@ 3484462280,3484462295,US 3484462296,3484462975,CA 3484462976,3484463039,US -3484463040,3484464143,CA +3484463040,3484463151,CA +3484463152,3484463183,US +3484463184,3484464143,CA 3484464144,3484464159,US 3484464160,3484464175,CA 3484464176,3484464191,US @@ -90878,9 +85724,7 @@ 3484482560,3484483583,CA 3484483584,3484604039,US 3484604040,3484604047,AU -3484604048,3484616703,US -3484616704,3484616959,IN -3484616960,3484647423,US +3484604048,3484647423,US 3484647424,3484663807,CA 3484663808,3484762111,US 3484762112,3484775743,CA @@ -90906,26 +85750,18 @@ 3485466624,3485597695,US 3485597696,3485671583,CA 3485671584,3485671615,US -3485671616,3485695103,CA -3485695104,3485695167,US -3485695168,3485695999,CA +3485671616,3485695999,CA 3485696000,3485721056,US 3485721057,3485721057,AE 3485721058,3485724671,US 3485724672,3485728767,US 3485728768,3485885127,US 3485885128,3485885141,CA -3485885142,3485886917,US -3485886918,3485886931,IN -3485886932,3485887747,US +3485885142,3485887747,US 3485887748,3485887777,AU -3485887778,3485958911,US -3485958912,3485959423,SE -3485959424,3485964287,US -3485964288,3485965311,SE -3485965312,3485972479,US -3485972480,3485974527,SE -3485974528,3486023679,US +3485887778,3485891519,US +3485891520,3485891583,DE +3485891584,3486023679,US 3486023680,3486031871,CA 3486031872,3486269439,US 3486269440,3486285823,JM @@ -91185,20 +86021,16 @@ 3486700400,3486700407,CA 3486700408,3486700439,US 3486700440,3486700447,IT -3486700448,3486701311,US -3486701312,3486701567,CA -3486701568,3486707519,US +3486700448,3486707519,US 3486707520,3486707535,SE 3486707536,3486707559,US 3486707560,3486707567,HN -3486707568,3486711551,US -3486711552,3486711807,CA -3486711808,3487039487,US +3486707568,3487039487,US 3487039488,3487105023,CA 3487105024,3487175935,US 3487175936,3487176191,GB -3487176192,3487177983,US -3487177984,3487178239,GB +3487176192,3487178111,US +3487178112,3487178239,GB 3487178240,3487181359,US 3487181360,3487181375,GB 3487181376,3487189247,US @@ -91380,9 +86212,7 @@ 3487862016,3487875071,BM 3487875072,3487891455,US 3487891456,3487907839,CA -3487907840,3487912959,US -3487912960,3487913215,CA -3487913216,3487969791,US +3487907840,3487969791,US 3487969792,3487970047,KW 3487970048,3488014335,US 3488014336,3488022527,CA @@ -91395,8 +86225,20 @@ 3488104448,3488112639,US 3488112640,3488113839,CA 3488113840,3488113847,US -3488113848,3488120831,CA -3488120832,3488300287,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 @@ -91406,15 +86248,10 @@ 3488615936,3488616191,AU 3488616192,3488718847,US 3488718848,3488719615,A2 -3488719616,3488719871,US -3488719872,3488719999,A2 -3488720000,3488720063,US -3488720064,3488720095,BG -3488720096,3488720111,BY -3488720112,3488720383,A2 -3488720384,3488720895,US -3488720896,3488721151,AL -3488721152,3488727039,A2 +3488719616,3488720895,US +3488720896,3488725503,A2 +3488725504,3488725759,US +3488725760,3488727039,A2 3488727040,3488901887,US 3488901888,3488902143,CA 3488902144,3488940031,US @@ -91439,13 +86276,11 @@ 3489575936,3489577008,CN 3489577009,3489577215,US 3489577216,3489578239,CN -3489578240,3489673471,US +3489578240,3489665481,US +3489665482,3489665482,PR +3489665483,3489673471,US 3489673472,3489673727,PR -3489673728,3489686527,US -3489686528,3489686783,BB -3489686784,3489687295,US -3489687296,3489687551,BB -3489687552,3489717759,US +3489673728,3489717759,US 3489717760,3489718015,PR 3489718016,3489718271,US 3489718272,3489718527,DM @@ -91472,9 +86307,7 @@ 3489775104,3489775359,BO 3489775360,3489969151,US 3489969152,3489969663,PR -3489969664,3490041503,US -3490041504,3490041535,CA -3490041536,3490228735,US +3489969664,3490228735,US 3490228736,3490229247,CO 3490229248,3490263039,US 3490263040,3490265087,CO @@ -91488,17 +86321,19 @@ 3490702848,3490703103,AS 3490703104,3490703615,US 3490703616,3490703871,PR -3490703872,3490786047,US +3490703872,3490732431,US +3490732432,3490732447,CA +3490732448,3490786047,US 3490786048,3490786303,PR 3490786304,3490879231,US 3490879232,3490879487,PR 3490879488,3490974719,US 3490974720,3490975743,PR -3490975744,3491226687,US +3490975744,3491219183,US +3491219184,3491219191,PR +3491219192,3491226687,US 3491226688,3491226719,CA -3491226720,3491231807,US -3491231808,3491231823,PR -3491231824,3491351455,US +3491226720,3491351455,US 3491351456,3491351463,HR 3491351464,3491358183,US 3491358184,3491358191,PR @@ -91559,21 +86394,27 @@ 3492188800,3492188831,CH 3492188832,3492472039,US 3492472040,3492472047,GB -3492472048,3492505799,US -3492505800,3492505807,RU -3492505808,3492669695,US +3492472048,3492669695,US 3492669696,3492671487,PA -3492671488,3492712511,US +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,3492782175,US -3492782176,3492782207,CA -3492782208,3492795775,US +3492730432,3492795775,US 3492795776,3492795903,AR -3492795904,3492807155,US -3492807156,3492807159,SE -3492807160,3492815359,US +3492795904,3492815359,US 3492815360,3492815487,GB 3492815488,3492827391,US 3492827392,3492827423,CA @@ -91584,11 +86425,21 @@ 3492827520,3492827647,AU 3492827648,3492827903,US 3492827904,3492827967,AU -3492827968,3492869631,US +3492827968,3492845823,US +3492845824,3492846079,CH +3492846080,3492869631,US 3492869632,3492870143,BR -3492870144,3492892415,US -3492892416,3492892671,FR -3492892672,3492894975,US +3492870144,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 3492894976,3492895231,BE 3492895232,3492897023,US 3492897024,3492897279,GB @@ -91601,8 +86452,8 @@ 3492912152,3492912159,US 3492912160,3492912383,GB 3492912384,3492917247,US -3492917248,3492919295,VI -3492919296,3492924991,US +3492917248,3492917503,VI +3492917504,3492924991,US 3492924992,3492925007,DE 3492925008,3492926079,US 3492926080,3492926095,EU @@ -91612,17 +86463,29 @@ 3492947088,3492947103,DE 3492947104,3492950863,US 3492950864,3492950879,DE -3492950880,3492968415,US +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,3492969471,US -3492969472,3492969727,VI -3492969728,3492996127,US +3492968448,3492968703,US +3492968704,3492970239,VI +3492970240,3492996127,US 3492996128,3492996136,GB 3492996137,3493003519,US 3493003520,3493003775,AU 3493003776,3493008255,US 3493008256,3493008383,MX -3493008384,3493014527,US +3493008384,3493009279,US +3493009280,3493009407,GB +3493009408,3493011327,US +3493011328,3493011455,GB +3493011456,3493013247,US +3493013248,3493013503,MX +3493013504,3493014527,US 3493014528,3493014560,GB 3493014561,3493014592,US 3493014593,3493014783,GB @@ -91638,7 +86501,9 @@ 3493050497,3493050623,FR 3493050624,3493061119,US 3493061120,3493061375,BR -3493061376,3493069055,US +3493061376,3493068543,US +3493068544,3493068799,GB +3493068800,3493069055,US 3493069056,3493069311,A2 3493069312,3493073151,US 3493073152,3493073407,BO @@ -91669,11 +86534,29 @@ 3493886716,3493886719,BZ 3493886720,3493887823,US 3493887824,3493887831,BR -3493887832,3493901311,US +3493887832,3493900371,US +3493900372,3493900375,GB +3493900376,3493900911,US +3493900912,3493900927,MX +3493900928,3493901023,US +3493901024,3493901031,HK +3493901032,3493901103,US +3493901104,3493901119,EC +3493901120,3493901215,US +3493901216,3493901231,AE +3493901232,3493901307,US +3493901308,3493901311,CA 3493901312,3493901567,AE -3493901568,3493902295,US -3493902296,3493902303,NG -3493902304,3493903551,US +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 @@ -91692,9 +86575,7 @@ 3493987328,3493990399,US 3493990400,3493991423,CA 3493991424,3493998591,US -3493998592,3493999615,AI -3493999616,3493999871,KN -3493999872,3494000639,AI +3493998592,3494000639,AI 3494000640,3494003711,US 3494003712,3494004735,CA 3494004736,3494009855,US @@ -91712,9 +86593,7 @@ 3494076416,3494088703,US 3494088704,3494090751,CA 3494090752,3494094847,US -3494094848,3494094918,CA -3494094919,3494094919,US -3494094920,3494095871,CA +3494094848,3494095871,CA 3494095872,3494101319,US 3494101320,3494101327,GB 3494101328,3494101377,US @@ -91731,13 +86610,7 @@ 3494102688,3494102701,PE 3494102702,3494102735,US 3494102736,3494102743,VI -3494102744,3494109925,US -3494109926,3494109942,CA -3494109943,3494110091,US -3494110092,3494110109,CA -3494110110,3494110145,US -3494110146,3494110161,CA -3494110162,3494115471,US +3494102744,3494115471,US 3494115472,3494115487,AU 3494115488,3494115495,US 3494115496,3494115503,CA @@ -91792,9 +86665,7 @@ 3494197968,3494198259,CA 3494198260,3494198260,US 3494198261,3494198271,CA -3494198272,3494206847,US -3494206848,3494206887,CA -3494206888,3494228031,US +3494198272,3494228031,US 3494228032,3494228095,AU 3494228096,3494228319,US 3494228320,3494228335,RU @@ -92002,7 +86873,10 @@ 3494777856,3494785023,US 3494785024,3494785279,GP 3494785280,3494785535,MF -3494785536,3494787071,GP +3494785536,3494786047,GP +3494786048,3494786303,MF +3494786304,3494786559,GP +3494786560,3494787071,MF 3494787072,3494787199,A2 3494787200,3494787231,GB 3494787232,3494787327,A2 @@ -92086,9 +86960,7 @@ 3494968320,3494972415,CA 3494972416,3494979583,US 3494979584,3494981631,CA -3494981632,3494985983,US -3494985984,3494986239,JP -3494986240,3495000063,US +3494981632,3495000063,US 3495000064,3495001087,CA 3495001088,3495006207,US 3495006208,3495007231,CA @@ -92097,9 +86969,7 @@ 3495011328,3495012095,US 3495012096,3495012351,HK 3495012352,3495014399,PR -3495014400,3495014448,US -3495014449,3495014456,SG -3495014457,3495023615,US +3495014400,3495023615,US 3495023616,3495024639,CA 3495024640,3495057407,US 3495057408,3495059455,CA @@ -92131,9 +87001,7 @@ 3495136472,3495136479,AR 3495136480,3495136495,US 3495136496,3495136503,IN -3495136504,3495136847,US -3495136848,3495136855,PR -3495136856,3495153663,US +3495136504,3495153663,US 3495153664,3495155711,CA 3495155712,3495157039,US 3495157040,3495157047,SE @@ -92158,9 +87026,9 @@ 3495276288,3495276351,IN 3495276352,3495286783,US 3495286784,3495288831,CA -3495288832,3495298559,US -3495298560,3495298815,GB -3495298816,3495331839,US +3495288832,3495308607,US +3495308608,3495308671,IL +3495308672,3495331839,US 3495331840,3495332863,A2 3495332864,3495333887,CA 3495333888,3495349247,US @@ -92286,9 +87154,7 @@ 3495688192,3495689215,CA 3495689216,3495694335,US 3495694336,3495696383,CA -3495696384,3495699967,US -3495699968,3495700223,CA -3495700224,3495703551,US +3495696384,3495703551,US 3495703552,3495704063,GB 3495704064,3495704575,CA 3495704576,3495718911,US @@ -92364,8 +87230,7 @@ 3495881472,3495881727,PA 3495881728,3495896063,US 3495896064,3495897087,PR -3495897088,3495916031,US -3495916032,3495916287,CD +3495897088,3495916287,US 3495916288,3495916543,SL 3495916544,3495930879,US 3495930880,3495931903,CA @@ -92374,7 +87239,11 @@ 3495985152,3495988223,NI 3495988224,3495989247,GT 3495989248,3496034303,US -3496034304,3496050687,CA +3496034304,3496048135,CA +3496048136,3496048351,US +3496048352,3496048359,CA +3496048360,3496048383,US +3496048384,3496050687,CA 3496050688,3496132607,US 3496132608,3496148991,CA 3496148992,3496181759,US @@ -92423,7 +87292,15 @@ 3496887520,3496887527,AU 3496887528,3496887535,US 3496887536,3496887543,PK -3496887544,3496887807,US +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 @@ -92445,11 +87322,17 @@ 3496888400,3496888415,AU 3496888416,3496888431,US 3496888432,3496888439,AU -3496888440,3496893695,US +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,3496893991,US -3496893992,3496893999,TR -3496894000,3496894463,US +3496893704,3496894463,US 3496894464,3496902655,CA 3496902656,3496946175,US 3496946176,3496946431,HK @@ -92553,11 +87436,7 @@ 3497161216,3497161343,HK 3497161344,3497161375,US 3497161376,3497161407,HK -3497161408,3497161607,US -3497161608,3497161615,NO -3497161616,3497161703,US -3497161704,3497161711,GB -3497161712,3497161735,US +3497161408,3497161735,US 3497161736,3497161743,MT 3497161744,3497161751,US 3497161752,3497161759,GB @@ -92643,7 +87522,11 @@ 3497410560,3497431039,CA 3497431040,3497447423,US 3497447424,3497451519,CA -3497451520,3497713415,US +3497451520,3497453119,US +3497453120,3497453135,GB +3497453136,3497453695,US +3497453696,3497453711,GB +3497453712,3497713415,US 3497713416,3497713423,EC 3497713424,3497717759,US 3497717760,3497719807,A2 @@ -92662,9 +87545,7 @@ 3498254448,3498254591,US 3498254592,3498254847,JM 3498254848,3498287103,US -3498287104,3498292543,JM -3498292544,3498292551,US -3498292552,3498295295,JM +3498287104,3498295295,JM 3498295296,3498428415,US 3498428416,3498429439,CR 3498429440,3498429951,US @@ -92785,15 +87666,17 @@ 3501183168,3501183231,SG 3501183232,3501183487,US 3501183488,3501183743,GB -3501183744,3501368831,US +3501183744,3501340415,US +3501340416,3501340471,DE +3501340472,3501340478,US +3501340479,3501340671,DE +3501340672,3501368831,US 3501368832,3501369087,NL 3501369088,3501376147,US 3501376148,3501376151,NL 3501376152,3501378047,US 3501378048,3501378303,DE -3501378304,3501390591,US -3501390592,3501390847,SG -3501390848,3501522943,US +3501378304,3501522943,US 3501522944,3501588479,CA 3501588480,3501721187,US 3501721188,3501721188,US @@ -92827,9 +87710,7 @@ 3502683136,3502683391,MC 3502683392,3502993407,US 3502993408,3502993919,NL -3502993920,3503027327,US -3503027328,3503027359,GB -3503027360,3503058431,US +3502993920,3503058431,US 3503058432,3503058447,CA 3503058448,3503206399,US 3503206400,3503206911,CR @@ -92916,9 +87797,13 @@ 3505999360,3506000127,PR 3506000128,3506043135,US 3506043136,3506044927,PA -3506044928,3506135263,US +3506044928,3506058815,US +3506058816,3506058823,AF +3506058824,3506135263,US 3506135264,3506135295,GB -3506135296,3506161975,US +3506135296,3506155751,US +3506155752,3506155759,AF +3506155760,3506161975,US 3506161976,3506161983,AF 3506161984,3506192639,US 3506192640,3506192895,A2 @@ -93109,7 +87994,9 @@ 3507486720,3507540015,US 3507540016,3507540031,IN 3507540032,3507585023,US -3507585024,3507601407,CA +3507585024,3507598911,CA +3507598912,3507598943,US +3507598944,3507601407,CA 3507601408,3507634335,US 3507634336,3507634351,IQ 3507634352,3507634383,US @@ -93179,9 +88066,7 @@ 3507647808,3507647871,AU 3507647872,3507649263,US 3507649264,3507649279,QA -3507649280,3507650047,US -3507650048,3507650111,BV -3507650112,3507650335,US +3507649280,3507650335,US 3507650336,3507650367,PA 3507650368,3507650431,US 3507650432,3507650495,AU @@ -93624,7 +88509,9 @@ 3509520832,3509520895,US 3509520896,3509521151,CA 3509521152,3509521407,US -3509521408,3509522431,CA +3509521408,3509521791,CA +3509521792,3509521919,US +3509521920,3509522431,CA 3509522432,3509522687,KW 3509522688,3509523071,CA 3509523072,3509523199,US @@ -93662,11 +88549,19 @@ 3509530560,3509530623,US 3509530624,3509532671,CA 3509532672,3509532927,US -3509532928,3509533951,CA -3509533952,3509534335,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,3509536895,CA +3509534720,3509535535,CA +3509535536,3509535551,US +3509535552,3509535663,CA +3509535664,3509535679,US +3509535680,3509536895,CA 3509536896,3509537023,US 3509537024,3509538335,CA 3509538336,3509538351,US @@ -93678,7 +88573,13 @@ 3509538816,3509539071,US 3509539072,3509539327,CA 3509539328,3509539583,US -3509539584,3509539903,CA +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 @@ -93708,7 +88609,9 @@ 3509549824,3509550079,US 3509550080,3509553151,CA 3509553152,3509553407,US -3509553408,3509555119,CA +3509553408,3509553855,CA +3509553856,3509553919,US +3509553920,3509555119,CA 3509555120,3509555135,US 3509555136,3509557439,CA 3509557440,3509557759,US @@ -93743,8 +88646,10 @@ 3509567200,3509567231,US 3509567232,3509569023,CA 3509569024,3509569535,US -3509569536,3509570559,CA -3509570560,3509570687,US +3509569536,3509569919,CA +3509569920,3509570047,US +3509570048,3509570431,CA +3509570432,3509570687,US 3509570688,3509571583,CA 3509571584,3509571647,US 3509571648,3509571663,CA @@ -93767,11 +88672,7 @@ 3509577408,3509577471,US 3509577472,3509577535,CA 3509577536,3509577551,US -3509577552,3509577631,CA -3509577632,3509577647,US -3509577648,3509577695,CA -3509577696,3509577711,US -3509577712,3509577727,CA +3509577552,3509577727,CA 3509577728,3509577983,US 3509577984,3509578367,CA 3509578368,3509578495,US @@ -93904,14 +88805,8 @@ 3509837640,3509837751,US 3509837752,3509837759,GB 3509837760,3509846015,US -3509846016,3509939783,CA -3509939784,3509939791,US -3509939792,3509977087,CA -3509977088,3509987329,US -3509987330,3509987428,IN -3509987429,3509988864,US -3509988865,3509989119,IN -3509989120,3509993471,US +3509846016,3509977087,CA +3509977088,3509993471,US 3509993472,3509997567,CA 3509997568,3510005759,US 3510005760,3510009855,CA @@ -93969,12 +88864,18 @@ 3510322176,3510323199,AG 3510323200,3510324223,KN 3510324224,3510325247,AI -3510325248,3510326271,AG +3510325248,3510325503,AG +3510325504,3510325759,KN +3510325760,3510326271,AG 3510326272,3510327295,VG 3510327296,3510328319,AG 3510328320,3510328575,KN 3510328576,3510328831,MS -3510328832,3510329599,AG +3510328832,3510329279,AG +3510329280,3510329295,MS +3510329296,3510329303,AG +3510329304,3510329311,MS +3510329312,3510329599,AG 3510329600,3510329855,MS 3510329856,3510331391,AG 3510331392,3510332415,DM @@ -93988,363 +88889,11 @@ 3510335744,3510335999,VG 3510336000,3510337279,AG 3510337280,3510337535,LC -3510337536,3510360319,US -3510360320,3510360447,GB -3510360448,3510468631,US -3510468632,3510468639,GB -3510468640,3510468719,US -3510468720,3510468727,MX -3510468728,3510468847,US -3510468848,3510468855,MX -3510468856,3510468895,US -3510468896,3510468903,CA -3510468904,3510468911,ID -3510468912,3510469023,US -3510469024,3510469039,AG -3510469040,3510469055,US -3510469056,3510469063,CA -3510469064,3510469071,US -3510469072,3510469087,AU -3510469088,3510469095,RU -3510469096,3510469103,CA -3510469104,3510469119,BS -3510469120,3510469167,US -3510469168,3510469175,FR -3510469176,3510469183,BE -3510469184,3510469191,US -3510469192,3510469199,AU -3510469200,3510469223,US -3510469224,3510469231,AU -3510469232,3510469247,US -3510469248,3510469263,ID -3510469264,3510469279,US -3510469280,3510469295,MY -3510469296,3510469343,US -3510469344,3510469351,GB -3510469352,3510469359,US -3510469360,3510469367,CH -3510469368,3510469375,GR -3510469376,3510469399,US -3510469400,3510469407,BE -3510469408,3510469487,US -3510469488,3510469495,CA -3510469496,3510469519,US -3510469520,3510469527,IN -3510469528,3510469599,US -3510469600,3510469607,CA -3510469608,3510469615,VG -3510469616,3510469623,US -3510469624,3510469631,DE -3510469632,3510469719,US -3510469720,3510469727,CA -3510469728,3510469743,AU -3510469744,3510469751,CH -3510469752,3510469767,US -3510469768,3510469775,IN -3510469776,3510469815,US -3510469816,3510469831,CA -3510469832,3510469855,US -3510469856,3510469863,UM -3510469864,3510469871,CA -3510469872,3510469887,IN -3510469888,3510469895,US -3510469896,3510469903,IN -3510469904,3510469919,US -3510469920,3510469927,GB -3510469928,3510469975,US -3510469976,3510469983,IN -3510469984,3510469991,CA -3510469992,3510469999,GB -3510470000,3510470031,US -3510470032,3510470039,CA -3510470040,3510470047,RU -3510470048,3510470055,CA -3510470056,3510470063,MX -3510470064,3510470143,US -3510470144,3510470151,DK -3510470152,3510470159,US -3510470160,3510470175,DK -3510470176,3510470183,CA -3510470184,3510470295,US -3510470296,3510470319,CA -3510470320,3510470327,TW -3510470328,3510470359,US -3510470360,3510470367,TH -3510470368,3510470375,US -3510470376,3510470383,CH -3510470384,3510470455,US -3510470456,3510470463,GB -3510470464,3510470471,NL -3510470472,3510470623,US -3510470624,3510470631,BR -3510470632,3510470647,US -3510470648,3510470655,IN -3510470656,3510470775,US -3510470776,3510470783,GR -3510470784,3510470799,US -3510470800,3510470807,GB -3510470808,3510470815,US -3510470816,3510470831,GB -3510470832,3510470855,US -3510470856,3510470863,FR -3510470864,3510470871,US -3510470872,3510470879,AR -3510470880,3510470927,US +3510337536,3510470927,US 3510470928,3510470935,IL -3510470936,3510470959,US -3510470960,3510470975,IN -3510470976,3510470999,US -3510471000,3510471007,CH -3510471008,3510471039,BH -3510471040,3510471119,US -3510471120,3510471135,GB -3510471136,3510471183,US -3510471184,3510471199,CA -3510471200,3510471223,US -3510471224,3510471231,DE -3510471232,3510471311,US -3510471312,3510471319,IE -3510471320,3510471407,US -3510471408,3510471415,GR -3510471416,3510471431,US -3510471432,3510471439,AU -3510471440,3510471455,US -3510471456,3510471487,FR -3510471488,3510471511,US -3510471512,3510471519,HK -3510471520,3510471535,FR -3510471536,3510471607,US -3510471608,3510471615,DE -3510471616,3510471639,US -3510471640,3510471647,IN -3510471648,3510471703,US -3510471704,3510471711,JP -3510471712,3510471751,US -3510471752,3510471759,CA -3510471760,3510471791,US -3510471792,3510471799,IN -3510471800,3510471839,US -3510471840,3510471847,MX -3510471848,3510471871,US -3510471872,3510471887,VE -3510471888,3510471911,US -3510471912,3510471919,IN -3510471920,3510471951,US -3510471952,3510471959,ID -3510471960,3510471991,US -3510471992,3510471999,AR -3510472000,3510472007,IN -3510472008,3510472111,US -3510472112,3510472119,GB -3510472120,3510472191,US -3510472192,3510472207,IN -3510472208,3510472215,FR -3510472216,3510472223,CA -3510472224,3510472231,IT -3510472232,3510472239,SG -3510472240,3510472295,US -3510472296,3510472303,AE -3510472304,3510472447,US -3510472448,3510472463,IN -3510472464,3510472471,US -3510472472,3510472479,EG -3510472480,3510472511,US -3510472512,3510472575,AG -3510472576,3510472735,US -3510472736,3510472743,AR -3510472744,3510472751,US -3510472752,3510472767,AR -3510472768,3510472800,US -3510472801,3510472831,DE -3510472832,3510472919,US -3510472920,3510472927,NL -3510472928,3510473087,US -3510473088,3510473095,TR -3510473096,3510473103,US -3510473104,3510473119,VE -3510473120,3510473135,US -3510473136,3510473143,NZ -3510473144,3510473151,US -3510473152,3510473159,DE -3510473160,3510473175,US -3510473176,3510473183,FR -3510473184,3510473199,IE -3510473200,3510473215,US -3510473216,3510473223,IN -3510473224,3510473231,US -3510473232,3510473239,FR -3510473240,3510473343,US -3510473344,3510473383,DE -3510473384,3510473407,US -3510473408,3510473447,DE -3510473448,3510473463,US -3510473464,3510473471,NL -3510473472,3510473511,DE -3510473512,3510473607,US -3510473608,3510473615,ID -3510473616,3510473623,AU -3510473624,3510474431,US -3510474432,3510474447,TC -3510474448,3510474479,US -3510474480,3510474495,AU -3510474496,3510475055,US -3510475056,3510475063,BR -3510475064,3510475151,US -3510475152,3510475159,AU -3510475160,3510475167,SE -3510475168,3510477063,US -3510477064,3510477071,GB -3510477072,3510477087,US -3510477088,3510477111,GB -3510477112,3510477255,US -3510477256,3510477257,MX -3510477258,3510477311,US -3510477312,3510477319,IN -3510477320,3510477327,US -3510477328,3510477335,GB -3510477336,3510477343,MO -3510477344,3510477375,AG -3510477376,3510477487,US -3510477488,3510477495,IN -3510477496,3510477503,US -3510477504,3510477519,GB -3510477520,3510477535,US -3510477536,3510477543,GB -3510477544,3510477815,US -3510477816,3510477823,GB -3510477824,3510477903,US -3510477904,3510477911,IT -3510477912,3510477919,US -3510477920,3510477927,NL -3510477928,3510477975,US -3510477976,3510477983,AR -3510477984,3510478007,US -3510478008,3510478015,IN -3510478016,3510478023,CA -3510478024,3510478127,US -3510478128,3510478135,GB -3510478136,3510478143,US -3510478144,3510478175,FI -3510478176,3510478231,US -3510478232,3510478239,IN -3510478240,3510478271,US -3510478272,3510478279,MT -3510478280,3510478311,US -3510478312,3510478319,FI -3510478320,3510478495,US -3510478496,3510478527,FR -3510478528,3510478535,US -3510478536,3510478543,GB -3510478544,3510478551,US -3510478552,3510478559,VE -3510478560,3510478567,NL -3510478568,3510478591,US -3510478592,3510478599,MX -3510478600,3510478631,US -3510478632,3510478639,GB -3510478640,3510478655,US -3510478656,3510478663,GB -3510478664,3510478671,US -3510478672,3510478719,AU -3510478720,3510478735,US -3510478736,3510478751,LB -3510478752,3510478775,US -3510478776,3510478783,CR -3510478784,3510478855,US -3510478856,3510478863,IN -3510478864,3510478903,US -3510478904,3510478919,GB -3510478920,3510478943,US -3510478944,3510478951,IN -3510478952,3510479095,US -3510479096,3510479103,GB -3510479104,3510479359,GU -3510479360,3510479407,US -3510479408,3510479415,CA -3510479416,3510479439,US -3510479440,3510479447,CA -3510479448,3510479455,GI -3510479456,3510479503,US -3510479504,3510479511,AU -3510479512,3510479519,US -3510479520,3510479535,LB -3510479536,3510479575,US -3510479576,3510479583,GI -3510479584,3510479791,US +3510470936,3510479791,US 3510479792,3510479799,IE -3510479800,3510479831,US -3510479832,3510479839,DE -3510479840,3510479855,US -3510479856,3510479863,DE -3510479864,3510479879,US -3510479880,3510479887,DE -3510479888,3510479903,US -3510479904,3510479919,ES -3510479920,3510479935,US -3510479936,3510479943,MY -3510479944,3510479951,US -3510479952,3510479959,AU -3510479960,3510479967,US -3510479968,3510479975,AE -3510479976,3510479991,US -3510479992,3510479999,SG -3510480000,3510480047,US -3510480048,3510480055,FR -3510480056,3510480103,US -3510480104,3510480111,CA -3510480112,3510480119,MX -3510480120,3510480205,US -3510480206,3510480207,IE -3510480208,3510480247,US -3510480248,3510480251,GH -3510480252,3510480415,US -3510480416,3510480423,GB -3510480424,3510480431,VE -3510480432,3510480439,US -3510480440,3510480447,BZ -3510480448,3510480527,US -3510480528,3510480535,GB -3510480536,3510480543,US -3510480544,3510480560,AT -3510480561,3510480561,US -3510480562,3510480575,AT -3510480576,3510480655,US -3510480656,3510480663,IN -3510480664,3510480671,US -3510480672,3510480735,AU -3510480736,3510480815,US -3510480816,3510480823,IN -3510480824,3510480839,US -3510480840,3510480847,IN -3510480848,3510480959,US -3510480960,3510480967,GB -3510480968,3510480991,US -3510480992,3510481023,CR -3510481024,3510481191,US -3510481192,3510481199,GB -3510481200,3510481215,US -3510481216,3510481231,CA -3510481232,3510481295,US -3510481296,3510481311,AU -3510481312,3510481319,FR -3510481320,3510481359,US -3510481360,3510481375,ES -3510481376,3510481407,US -3510481408,3510481415,MY -3510481416,3510481679,US -3510481680,3510481687,AU -3510481688,3510481711,US -3510481712,3510481719,CA -3510481720,3510481727,JP -3510481728,3510481743,AU -3510481744,3510481863,US -3510481864,3510481871,CA -3510481872,3510481919,US -3510481920,3510481927,MX -3510481928,3510482111,US -3510482112,3510482143,CA -3510482144,3510482151,AR -3510482152,3510788447,US +3510479800,3510788447,US 3510788448,3510788479,GB 3510788480,3510831527,US 3510831528,3510831535,GB @@ -94367,8 +88916,8 @@ 3510846528,3510846559,CA 3510846560,3510887423,US 3510887424,3510887935,HK -3510887936,3510942719,US -3510942720,3510943743,CA +3510887936,3510935551,US +3510935552,3510943743,CA 3510943744,3511130111,US 3511130112,3511131135,CA 3511131136,3511140351,US @@ -94501,9 +89050,7 @@ 3512067328,3512139775,US 3512139776,3512156159,CA 3512156160,3512172543,US -3512172544,3512172671,CA -3512172672,3512172799,US -3512172800,3512176639,CA +3512172544,3512176639,CA 3512176640,3512197119,US 3512197120,3512205311,CA 3512205312,3512205567,US @@ -94603,9 +89150,7 @@ 3512336384,3512369151,US 3512369152,3512371343,CA 3512371344,3512371351,US -3512371352,3512377231,CA -3512377232,3512377239,US -3512377240,3512378983,CA +3512371352,3512378983,CA 3512378984,3512378991,US 3512378992,3512381583,CA 3512381584,3512381591,US @@ -95099,13 +89644,14 @@ 3514593280,3514596863,US 3514596864,3514597375,SV 3514597376,3514826751,US -3514826752,3514834687,CA -3514834688,3514834815,US -3514834816,3514834847,CA -3514834848,3514834943,US -3514834944,3514843135,CA +3514826752,3514843135,CA 3514843136,3514993919,US -3514993920,3514994049,GB +3514993920,3514993983,GB +3514993984,3514993987,FR +3514993988,3514993991,DE +3514993992,3514994007,GB +3514994008,3514994023,DK +3514994024,3514994049,GB 3514994050,3514994050,EU 3514994051,3514994175,GB 3514994176,3515001869,US @@ -95118,11 +89664,7 @@ 3515149568,3515149583,AU 3515149584,3515301887,US 3515301888,3515318271,CA -3515318272,3515453055,US -3515453056,3515453071,JP -3515453072,3515453679,US -3515453680,3515453687,JP -3515453688,3515454399,US +3515318272,3515454399,US 3515454400,3515454463,JP 3515454464,3515455999,US 3515456000,3515456015,JP @@ -95219,7 +89761,9 @@ 3517112320,3517116159,CA 3517116160,3517116415,US 3517116416,3517120511,CA -3517120512,3517233151,US +3517120512,3517173759,US +3517173760,3517174783,IN +3517174784,3517233151,US 3517233152,3517235199,GU 3517235200,3517382655,US 3517382656,3517384703,CA @@ -95230,9 +89774,11 @@ 3517388800,3517389311,US 3517389312,3517389567,CA 3517389568,3517389823,US -3517389824,3517390335,CA -3517390336,3517390591,US -3517390592,3517392127,CA +3517389824,3517391471,CA +3517391472,3517391487,US +3517391488,3517391535,CA +3517391536,3517391551,US +3517391552,3517392127,CA 3517392128,3517392383,US 3517392384,3517392639,CA 3517392640,3517392655,US @@ -95316,19 +89862,13 @@ 3517416144,3517416159,US 3517416160,3517416591,CA 3517416592,3517416607,US -3517416608,3517416711,CA -3517416712,3517416727,US -3517416728,3517416735,CA -3517416736,3517416743,US -3517416744,3517416775,CA -3517416776,3517416783,US -3517416784,3517416791,CA -3517416792,3517416799,US -3517416800,3517416831,CA -3517416832,3517416839,US -3517416840,3517416871,CA -3517416872,3517416879,US -3517416880,3517418367,CA +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 @@ -95402,8 +89942,8 @@ 3517431760,3517431775,US 3517431776,3517431807,CA 3517431808,3517431823,US -3517431824,3517431919,CA -3517431920,3517431951,US +3517431824,3517431935,CA +3517431936,3517431951,US 3517431952,3517431967,CA 3517431968,3517431983,US 3517431984,3517432191,CA @@ -95483,7 +90023,9 @@ 3517447864,3517448191,CA 3517448192,3517523167,US 3517523168,3517523183,BS -3517523184,3517546495,US +3517523184,3517524183,US +3517524184,3517524191,VI +3517524192,3517546495,US 3517546496,3517562879,CA 3517562880,3517595647,US 3517595648,3517596671,SE @@ -95734,7 +90276,9 @@ 3519700560,3519700567,US 3519700568,3519700575,CA 3519700576,3519700607,US -3519700608,3519709183,CA +3519700608,3519702319,CA +3519702320,3519702327,US +3519702328,3519709183,CA 3519709184,3519712447,US 3519712448,3519712511,CA 3519712512,3519715295,US @@ -95770,13 +90314,7 @@ 3519901696,3519934463,US 3519934464,3519938559,CA 3519938560,3520020479,US -3520020480,3520020559,CA -3520020560,3520020567,US -3520020568,3520020655,CA -3520020656,3520020663,US -3520020664,3520020719,CA -3520020720,3520020727,US -3520020728,3520020991,CA +3520020480,3520020991,CA 3520020992,3520021015,US 3520021016,3520021055,CA 3520021056,3520021071,US @@ -95836,11 +90374,7 @@ 3520024488,3520024495,US 3520024496,3520024807,CA 3520024808,3520024815,US -3520024816,3520025191,CA -3520025192,3520025199,US -3520025200,3520025295,CA -3520025296,3520025303,US -3520025304,3520025503,CA +3520024816,3520025503,CA 3520025504,3520025511,US 3520025512,3520025591,CA 3520025592,3520025599,NL @@ -95866,15 +90400,21 @@ 3520027232,3520027239,US 3520027240,3520027271,CA 3520027272,3520027279,US -3520027280,3520027439,CA -3520027440,3520027447,US -3520027448,3520027711,CA +3520027280,3520027711,CA 3520027712,3520027727,US 3520027728,3520027815,CA 3520027816,3520027823,US 3520027824,3520027839,CA 3520027840,3520027887,US -3520027888,3520028487,CA +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 @@ -95882,17 +90422,57 @@ 3520028656,3520028671,US 3520028672,3520028695,CA 3520028696,3520028711,US -3520028712,3520030799,CA -3520030800,3520030807,US -3520030808,3520030951,CA -3520030952,3520030959,US -3520030960,3520032767,CA +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,3520034559,CA +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 @@ -95996,28 +90576,24 @@ 3520652544,3520656383,US 3520656384,3520656639,US 3520656640,3520675839,US -3520675840,3520683247,CA -3520683248,3520683263,US -3520683264,3520691583,CA +3520675840,3520679439,CA +3520679440,3520679447,US +3520679448,3520691583,CA 3520691584,3520691591,US 3520691592,3520691807,CA 3520691808,3520691839,US 3520691840,3520692223,CA -3520692224,3520723967,US -3520723968,3520724223,PK -3520724224,3520749871,US +3520692224,3520749871,US 3520749872,3520749879,CA 3520749880,3520937983,US 3520937984,3520954367,CA -3520954368,3520960511,US -3520960512,3520960767,AU -3520960768,3520978943,US +3520954368,3520978943,US 3520978944,3520979711,BZ 3520979712,3520980735,GB 3520980736,3520981247,NL -3520981248,3520987391,US -3520987392,3520987647,SA -3520987648,3520994815,US +3520981248,3520987903,US +3520987904,3520987935,US +3520987936,3520994815,US 3520994816,3520995327,ES 3520995328,3520999423,US 3520999424,3521003519,CA @@ -96038,7 +90614,9 @@ 3521098552,3521098559,MX 3521098560,3521103231,US 3521103232,3521103263,CA -3521103264,3521186623,US +3521103264,3521106527,US +3521106528,3521106543,CA +3521106544,3521186623,US 3521186624,3521186687,AR 3521186688,3521192703,US 3521192704,3521192735,FR @@ -96092,15 +90670,7 @@ 3521933438,3521933445,VE 3521933446,3521933493,US 3521933494,3521933501,EG -3521933502,3521933605,US -3521933606,3521933613,AE -3521933614,3521933621,US -3521933622,3521933629,EG -3521933630,3521933725,US -3521933726,3521933733,GB -3521933734,3521933741,US -3521933742,3521933785,GB -3521933786,3521933833,US +3521933502,3521933833,US 3521933834,3521933841,EG 3521933842,3521933929,US 3521933930,3521933937,IN @@ -96125,7 +90695,11 @@ 3521934194,3521934201,LK 3521934202,3521934289,US 3521934290,3521934297,EG -3521934298,3521934421,US +3521934298,3521934318,US +3521934319,3521934326,SA +3521934327,3521934369,US +3521934370,3521934377,IN +3521934378,3521934421,US 3521934422,3521934429,EG 3521934430,3521934437,US 3521934438,3521934445,IN @@ -96162,12 +90736,10 @@ 3522123520,3522123775,GB 3522123776,3522125055,US 3522125056,3522125311,GB -3522125312,3522130180,US -3522130181,3522130181,CA -3522130182,3522130194,US +3522125312,3522130194,US 3522130195,3522130195,CA -3522130196,3522130206,US -3522130207,3522130207,BR +3522130196,3522130205,US +3522130206,3522130207,BR 3522130208,3522130210,US 3522130211,3522130211,CA 3522130212,3522130220,US @@ -96212,7 +90784,7 @@ 3522130327,3522130330,US 3522130331,3522130331,BR 3522130332,3522130333,US -3522130334,3522130336,BR +3522130334,3522130336,IR 3522130337,3522130339,US 3522130340,3522130341,DO 3522130342,3522130342,PK @@ -96236,20 +90808,21 @@ 3522130367,3522130368,TW 3522130369,3522130370,HK 3522130371,3522130371,US -3522130372,3522130372,TW +3522130372,3522130372,CO 3522130373,3522130373,MX -3522130374,3522130376,BR +3522130374,3522130374,CO +3522130375,3522130376,BR 3522130377,3522130377,US 3522130378,3522130378,BR 3522130379,3522130383,US 3522130384,3522130384,UA 3522130385,3522130389,US -3522130390,3522130391,TW +3522130390,3522130391,PK 3522130392,3522130392,AR 3522130393,3522130393,US 3522130394,3522130394,AR 3522130395,3522130400,US -3522130401,3522130401,BO +3522130401,3522130401,PK 3522130402,3522130405,US 3522130406,3522130408,BR 3522130409,3522130412,US @@ -96265,8 +90838,15 @@ 3522130426,3522130426,PH 3522130427,3522130427,BG 3522130428,3522130428,US -3522130429,3522130430,GT -3522130431,3522131455,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 @@ -96330,10 +90910,9 @@ 3522131960,3522131960,US 3522131961,3522131964,BR 3522131965,3522132100,US -3522132101,3522132101,IN +3522132101,3522132101,BR 3522132102,3522132107,US -3522132108,3522132108,BR -3522132109,3522132109,IN +3522132108,3522132109,BR 3522132110,3522132123,US 3522132124,3522132124,GB 3522132125,3522132129,US @@ -96348,7 +90927,7 @@ 3522132148,3522132151,US 3522132152,3522132152,BR 3522132153,3522132155,US -3522132156,3522132156,BR +3522132156,3522132156,BD 3522132157,3522132157,US 3522132158,3522132158,BR 3522132159,3522132159,US @@ -96358,7 +90937,8 @@ 3522132164,3522132166,US 3522132167,3522132167,IN 3522132168,3522132175,BR -3522132176,3522132184,PK +3522132176,3522132182,PK +3522132183,3522132184,BR 3522132185,3522132185,VN 3522132186,3522132188,NL 3522132189,3522132189,US @@ -96367,9 +90947,10 @@ 3522132192,3522132192,BR 3522132193,3522132193,PK 3522132194,3522132194,US -3522132195,3522132195,TR +3522132195,3522132195,IN 3522132196,3522132197,AT -3522132198,3522132202,US +3522132198,3522132198,MX +3522132199,3522132202,US 3522132203,3522132203,BR 3522132204,3522132204,AR 3522132205,3522132205,US @@ -96382,7 +90963,8 @@ 3522132222,3522132222,BD 3522132223,3522132356,US 3522132357,3522132358,BR -3522132359,3522132365,US +3522132359,3522132359,AT +3522132360,3522132365,US 3522132366,3522132366,BR 3522132367,3522132372,US 3522132373,3522132373,BR @@ -96393,31 +90975,42 @@ 3522132391,3522132395,US 3522132396,3522132397,BD 3522132398,3522132400,IN -3522132401,3522132407,US +3522132401,3522132402,US +3522132403,3522132404,CA +3522132405,3522132407,US 3522132408,3522132408,DE 3522132409,3522132409,GB 3522132410,3522132410,TR -3522132411,3522132411,BR +3522132411,3522132411,CL 3522132412,3522132414,US -3522132415,3522132415,IN +3522132415,3522132415,CA 3522132416,3522132417,GB 3522132418,3522132418,BD 3522132419,3522132419,IN 3522132420,3522132422,US -3522132423,3522132426,BR +3522132423,3522132425,IN +3522132426,3522132426,BR 3522132427,3522132427,BD 3522132428,3522132430,BR -3522132431,3522132431,US -3522132432,3522132437,BR -3522132438,3522132440,US -3522132441,3522132441,BR -3522132442,3522132443,US +3522132431,3522132431,BY +3522132432,3522132432,TR +3522132433,3522132437,BR +3522132438,3522132443,US 3522132444,3522132444,VN 3522132445,3522132446,US -3522132447,3522132451,BR -3522132452,3522132460,US +3522132447,3522132453,BR +3522132454,3522132459,US +3522132460,3522132460,BD 3522132461,3522132461,BR -3522132462,3522132575,US +3522132462,3522132462,BD +3522132463,3522132463,IN +3522132464,3522132466,US +3522132467,3522132468,ZA +3522132469,3522132472,US +3522132473,3522132473,BR +3522132474,3522132475,US +3522132476,3522132476,BD +3522132477,3522132575,US 3522132576,3522132607,BR 3522132608,3522132639,CA 3522132640,3522132671,US @@ -96441,14 +91034,23 @@ 3522133024,3522133055,BR 3522133056,3522133124,US 3522133125,3522133125,BR -3522133126,3522133135,US +3522133126,3522133134,US +3522133135,3522133135,GT 3522133136,3522133136,BR -3522133137,3522133311,US +3522133137,3522133137,US +3522133138,3522133138,BD +3522133139,3522133139,US +3522133140,3522133142,BR +3522133143,3522133311,US 3522133312,3522133375,CH 3522133376,3522133535,US 3522133536,3522133567,TR 3522133568,3522133599,BR -3522133600,3522133639,US +3522133600,3522133603,US +3522133604,3522133620,BR +3522133621,3522133621,US +3522133622,3522133622,BR +3522133623,3522133639,US 3522133640,3522133647,DE 3522133648,3522133663,US 3522133664,3522133695,DE @@ -96460,9 +91062,7 @@ 3522195456,3522199551,CA 3522199552,3522773503,US 3522773504,3522773759,US -3522773760,3522816767,US -3522816768,3522817023,CA -3522817024,3522854911,US +3522773760,3522854911,US 3522854912,3522871295,CA 3522871296,3522902015,US 3522902016,3522903039,CA @@ -96474,9 +91074,7 @@ 3523231744,3523248127,AU 3523248128,3523280895,HK 3523280896,3523297279,TH -3523297280,3523298047,PH -3523298048,3523298303,US -3523298304,3523317759,PH +3523297280,3523317759,PH 3523317760,3523330047,JP 3523330048,3523338239,AU 3523338240,3523340287,MY @@ -96508,28 +91106,21 @@ 3523557376,3523559423,CN 3523559424,3523575807,PH 3523575808,3523583999,CN -3523584000,3523592447,HK -3523592448,3523592959,US -3523592960,3523593237,HK -3523593238,3523593238,US -3523593239,3523593855,HK +3523584000,3523592495,HK +3523592496,3523592503,IQ +3523592504,3523593535,HK +3523593536,3523593599,IR +3523593600,3523593855,HK 3523593856,3523593919,IR -3523593920,3523597923,HK -3523597924,3523597924,US -3523597925,3523598079,HK -3523598080,3523598335,US -3523598336,3523599615,HK -3523599616,3523600383,US -3523600384,3523601663,HK +3523593920,3523597823,HK +3523597824,3523598079,US +3523598080,3523601663,HK 3523601664,3523601919,SA -3523601920,3523602935,HK -3523602936,3523602943,US -3523602944,3523603199,HK -3523603200,3523603711,US +3523601920,3523603199,HK +3523603200,3523603455,US +3523603456,3523603711,HK 3523603712,3523603967,EU -3523603968,3523604991,HK -3523604992,3523605247,US -3523605248,3523674111,HK +3523603968,3523674111,HK 3523674112,3523682303,FJ 3523682304,3523686399,NZ 3523686400,3523690495,AU @@ -96605,7 +91196,6 @@ 3528404992,3528407039,NZ 3528407040,3528409087,AU 3528409088,3528425471,CN -3528425472,3528441855,US 3528441856,3528445951,JP 3528445952,3528450047,ID 3528450048,3528458239,CN @@ -96614,11 +91204,7 @@ 3528474624,3528482815,TW 3528482816,3528491007,KR 3528491008,3528507391,AU -3528507392,3528510975,JP -3528510976,3528511231,US -3528511232,3528513535,JP -3528513536,3528514559,US -3528514560,3528576767,JP +3528507392,3528576767,JP 3528576768,3528577023,AP 3528577024,3528589311,JP 3528589312,3528720383,CN @@ -96634,24 +91220,15 @@ 3528978432,3528982527,HK 3528982528,3529056255,JP 3529056256,3529064447,IN -3529064448,3529065983,HK -3529065984,3529066239,AU -3529066240,3529066495,US -3529066496,3529072639,HK +3529064448,3529072639,HK 3529072640,3529080831,JP 3529080832,3529089023,AU 3529089024,3529097215,KR 3529097216,3529113599,JP 3529113600,3531603967,KR -3531603968,3531885055,JP -3531885056,3531885311,US -3531885312,3532792831,JP -3532792832,3532793087,US -3532793088,3532929279,JP +3531603968,3532929279,JP 3532929280,3532929535,AP -3532929536,3534002943,JP -3534002944,3534003199,US -3534003200,3534749695,JP +3532929536,3534749695,JP 3534749696,3534763775,HK 3534763776,3534764031,AP 3534764032,3534867711,HK @@ -96665,9 +91242,7 @@ 3535380480,3535388671,PH 3535388672,3535405055,CN 3535405056,3535536127,MY -3535536128,3535572991,JP -3535572992,3535575039,US -3535575040,3535798271,JP +3535536128,3535798271,JP 3535798272,3535814655,TW 3535814656,3535822847,KR 3535822848,3535831039,CN @@ -96677,9 +91252,7 @@ 3535896576,3535929343,AU 3535929344,3535994879,JP 3535994880,3536060415,MY -3536060416,3536151295,JP -3536151296,3536151551,US -3536151552,3536322559,JP +3536060416,3536322559,JP 3536322560,3536551935,TW 3536551936,3536568319,TH 3536568320,3536584703,JP @@ -96703,9 +91276,7 @@ 3537325568,3537325823,AP 3537325824,3537371135,AU 3537371136,3537895423,KR -3537895424,3538534911,JP -3538534912,3538540543,US -3538540544,3538943999,JP +3537895424,3538943999,JP 3538944000,3539271679,TW 3539271680,3539304447,VN 3539304448,3539337215,HK @@ -96725,22 +91296,14 @@ 3544711168,3545235455,TW 3545235456,3546808319,CN 3546808320,3547856895,KR -3547856896,3547916031,JP -3547916032,3547916543,US -3547916544,3547917567,JP -3547917568,3547917823,US -3547917824,3548905471,JP +3547856896,3547916287,JP +3547916288,3547916543,US +3547916544,3548905471,JP 3548905472,3551002623,CN 3551002624,3556769791,KR 3556769792,3556786175,EU 3556786176,3556794367,RU -3556794368,3556797439,ES -3556797440,3556797623,PT -3556797624,3556797631,ES -3556797632,3556797655,PT -3556797656,3556797663,ES -3556797664,3556797695,PT -3556797696,3556802559,ES +3556794368,3556802559,ES 3556802560,3556810751,SD 3556810752,3556818943,PT 3556818944,3556827135,MD @@ -96826,9 +91389,7 @@ 3557572608,3557580799,RU 3557580800,3557588991,DE 3557588992,3557597183,TR -3557597184,3557599231,SA -3557599232,3557599487,US -3557599488,3557605375,SA +3557597184,3557605375,SA 3557605376,3557613567,LT 3557613568,3557621759,EG 3557621760,3557629951,RU @@ -96863,7 +91424,9 @@ 3557861984,3557862015,FI 3557862016,3557862399,SE 3557862400,3557862655,FI -3557862656,3557864311,SE +3557862656,3557863295,SE +3557863296,3557863359,FI +3557863360,3557864311,SE 3557864312,3557864319,FI 3557864320,3557867519,SE 3557867520,3557875711,RU @@ -96904,20 +91467,19 @@ 3558154240,3558155007,GB 3558155008,3558155263,US 3558155264,3558156287,GB -3558156288,3558156543,US -3558156544,3558157583,GB -3558157584,3558157599,MM -3558157600,3558157799,GB -3558157800,3558157807,SL -3558157808,3558158079,GB +3558156288,3558156351,US +3558156352,3558156359,GB +3558156360,3558156543,US +3558156544,3558158079,GB 3558158080,3558158207,US -3558158208,3558159359,GB +3558158208,3558158239,SC +3558158240,3558158335,US +3558158336,3558159359,GB 3558159360,3558159615,US 3558159616,3558159747,GB 3558159748,3558159748,US -3558159749,3558162199,GB -3558162200,3558162207,BI -3558162208,3558162431,GB +3558159749,3558162175,GB +3558162176,3558162431,BI 3558162432,3558170623,DE 3558170624,3558178815,GB 3558178816,3558187007,BG @@ -96931,7 +91493,9 @@ 3558252544,3558260735,KE 3558260736,3558268927,UA 3558268928,3558277119,GI -3558277120,3558288639,GB +3558277120,3558286591,GB +3558286592,3558286847,FR +3558286848,3558288639,GB 3558288640,3558288895,EU 3558288896,3558289151,FR 3558289152,3558291295,GB @@ -96964,8 +91528,7 @@ 3558514688,3558522879,SK 3558522880,3558531071,NL 3558531072,3558539263,RU -3558539264,3558543359,SE -3558543360,3558547455,DK +3558539264,3558547455,DK 3558547456,3558555647,FR 3558555648,3558572031,AT 3558572032,3558580223,DE @@ -96989,14 +91552,14 @@ 3558718208,3558718463,EU 3558718464,3558719487,NL 3558719488,3558735871,IL -3558735872,3558736511,GB -3558736512,3558736575,GG -3558736576,3558740479,GB -3558740480,3558742015,GG -3558742016,3558742271,GB -3558742272,3558742527,GG -3558742528,3558742783,GB -3558742784,3558744063,GG +3558735872,3558736383,GB +3558736384,3558736639,GG +3558736640,3558740479,GB +3558740480,3558741247,GG +3558741248,3558741503,GB +3558741504,3558742015,GG +3558742016,3558743039,GB +3558743040,3558744063,GG 3558744064,3558752255,LB 3558752256,3558760447,SI 3558760448,3558768639,FR @@ -97033,14 +91596,16 @@ 3559063552,3559079935,CH 3559079936,3559088127,JO 3559088128,3559088383,GB -3559088384,3559089407,BE +3559088384,3559088639,BE +3559088640,3559089151,GB +3559089152,3559089407,BE 3559089408,3559089663,GB -3559089664,3559090943,BE -3559090944,3559091455,GB -3559091456,3559091711,BE -3559091712,3559093247,GB -3559093248,3559094783,BE -3559094784,3559096319,GB +3559089664,3559089919,BE +3559089920,3559090431,GB +3559090432,3559090687,BE +3559090688,3559093247,GB +3559093248,3559093759,BE +3559093760,3559096319,GB 3559096320,3559104511,RO 3559104512,3559112703,RU 3559112704,3559120895,IT @@ -97090,13 +91655,11 @@ 3559473152,3559489535,CH 3559489536,3559491071,ES 3559491072,3559491327,NL -3559491328,3559491762,ES -3559491763,3559491763,NL -3559491764,3559491765,ES -3559491766,3559491766,NL -3559491767,3559493167,ES -3559493168,3559493183,NL -3559493184,3559496703,ES +3559491328,3559491583,ES +3559491584,3559491839,NL +3559491840,3559493119,ES +3559493120,3559493375,NL +3559493376,3559496703,ES 3559496704,3559496959,NL 3559496960,3559497727,ES 3559497728,3559505919,GB @@ -97158,15 +91721,11 @@ 3559964672,3559981055,RU 3559981056,3559989247,EE 3559989248,3559997439,PL -3559997440,3560003688,KE -3560003689,3560003689,NL -3560003690,3560005631,KE +3559997440,3560005631,KE 3560005632,3560013823,RU 3560013824,3560030207,ES 3560030208,3560046591,GB -3560046592,3560052479,BG -3560052480,3560052735,GB -3560052736,3560054783,BG +3560046592,3560054783,BG 3560054784,3560062975,TR 3560062976,3560071167,BG 3560071168,3560079359,CY @@ -97204,9 +91763,7 @@ 3560382464,3560390655,FO 3560390656,3560407039,RU 3560407040,3560423423,PT -3560423424,3560429791,CH -3560429792,3560429823,DE -3560429824,3560431615,CH +3560423424,3560431615,CH 3560431616,3560439807,SK 3560439808,3560447999,BG 3560448000,3560472575,GB @@ -97261,11 +91818,7 @@ 3560923136,3560931327,ES 3560931328,3560944127,DE 3560944128,3560944639,US -3560944640,3560945663,DE -3560945664,3560945919,US -3560945920,3560946431,DE -3560946432,3560946687,US -3560946688,3560946943,DE +3560944640,3560946943,DE 3560946944,3560947199,US 3560947200,3560947711,DE 3560947712,3560955903,SE @@ -97333,7 +91886,9 @@ 3561472000,3561480191,DE 3561480192,3561488383,GB 3561488384,3561496575,OM -3561496576,3561504767,GB +3561496576,3561497087,GB +3561497088,3561497343,NL +3561497344,3561504767,GB 3561504768,3561512959,DE 3561512960,3561521151,SI 3561521152,3561529343,GE @@ -97346,11 +91901,15 @@ 3561578496,3561586687,RU 3561586688,3561594879,BG 3561594880,3561603071,SE -3561603072,3561609319,GB -3561609320,3561609321,FR -3561609322,3561618175,GB -3561618176,3561618431,IE -3561618432,3561618943,GB +3561603072,3561603327,GB +3561603328,3561603583,FR +3561603584,3561607743,GB +3561607744,3561607807,FR +3561607808,3561609215,GB +3561609216,3561609471,FR +3561609472,3561616383,GB +3561616384,3561616639,FR +3561616640,3561618943,GB 3561618944,3561619455,ES 3561619456,3561641450,GB 3561641451,3561641451,FR @@ -97370,13 +91929,10 @@ 3561775104,3561783295,IL 3561783296,3561799679,RU 3561799680,3561807871,DE -3561807872,3561814015,BE -3561814016,3561814527,LU -3561814528,3561815039,BE -3561815040,3561815551,LU +3561807872,3561815295,BE +3561815296,3561815551,LU 3561815552,3561816063,BE -3561816064,3561823999,VA -3561824000,3561824255,IT +3561816064,3561824255,VA 3561824256,3561832447,LI 3561832448,3561840639,IT 3561840640,3561848831,PL @@ -97389,10 +91945,10 @@ 3561897984,3561906175,GB 3561906176,3561914367,DE 3561914368,3561922559,ES -3561922560,3561924863,GB -3561924864,3561925631,NL -3561925632,3561927423,GB -3561927424,3561927679,NL +3561922560,3561925009,GB +3561925010,3561925010,NL +3561925011,3561927551,GB +3561927552,3561927679,NL 3561927680,3561930751,GB 3561930752,3561938943,NL 3561938944,3561947135,IE @@ -97462,7 +92018,6 @@ 3562496000,3562504191,BE 3562504192,3562512383,DE 3562512384,3562520575,UA -3562520576,3562528767,ES 3562528768,3562536959,PL 3562536960,3562545151,AT 3562545152,3562553343,GB @@ -97527,8 +92082,8 @@ 3563067392,3563068415,MZ 3563068416,3563069439,NG 3563069440,3563077631,HU -3563077632,3563078655,KZ -3563078656,3563085823,SE +3563077632,3563078911,KZ +3563078912,3563085823,SE 3563085824,3563094015,RU 3563094016,3563102207,DE 3563102208,3563110399,CZ @@ -97606,9 +92161,13 @@ 3563814912,3563823103,SE 3563823104,3563831295,DE 3563831296,3563847679,RU -3563847680,3563848847,ES +3563847680,3563848447,ES +3563848448,3563848847,NL 3563848848,3563848855,EU -3563848856,3563855871,ES +3563848856,3563848959,NL +3563848960,3563851519,ES +3563851520,3563852031,NL +3563852032,3563855871,ES 3563855872,3563864063,AT 3563864064,3563872255,GB 3563872256,3563880447,RU @@ -97648,8 +92207,12 @@ 3564141312,3564142591,KG 3564142592,3564150783,DK 3564150784,3564153087,SE -3564153088,3564153343,NO -3564153344,3564158831,SE +3564153088,3564153151,NO +3564153152,3564153183,SE +3564153184,3564153343,NO +3564153344,3564157207,SE +3564157208,3564157215,NO +3564157216,3564158831,SE 3564158832,3564158839,FI 3564158840,3564158975,SE 3564158976,3564175359,DE @@ -97692,9 +92255,7 @@ 3564503040,3564511231,JO 3564511232,3564519423,RU 3564519424,3564527615,SI -3564527616,3564529663,SA -3564529664,3564529919,GB -3564529920,3564543999,SA +3564527616,3564543999,SA 3564544000,3564560383,DE 3564560384,3564560531,GB 3564560532,3564560532,EU @@ -97702,7 +92263,8 @@ 3564576768,3564584959,RU 3564584960,3564593151,SA 3564593152,3564601343,RU -3564601344,3564609535,AT +3564601344,3564605439,AT +3564605440,3564609535,EE 3564609536,3564634111,RU 3564634112,3564642303,MK 3564642304,3564650495,CH @@ -97715,14 +92277,16 @@ 3564691456,3564699647,GI 3564699648,3564716031,GB 3564716032,3564724223,IT -3564724224,3564729855,NL -3564729856,3564730111,FR -3564730112,3564732415,NL +3564724224,3564732415,NL 3564732416,3564734207,GB 3564734208,3564734463,EU -3564734464,3564738827,GB -3564738828,3564738828,DE -3564738829,3564740607,GB +3564734464,3564738815,GB +3564738816,3564739071,DE +3564739072,3564740385,GB +3564740386,3564740386,DE +3564740387,3564740535,GB +3564740536,3564740539,DE +3564740540,3564740607,GB 3564740608,3564748799,FR 3564748800,3564756991,GB 3564756992,3564765183,ES @@ -97738,22 +92302,18 @@ 3564831488,3564831743,EU 3564831744,3564832511,BE 3564832512,3564832767,EU -3564832768,3564836943,BE -3564836944,3564836959,DE -3564836960,3564837631,BE -3564837632,3564837887,FR -3564837888,3564838911,BE +3564832768,3564838911,BE 3564838912,3564847103,DE 3564847104,3564855295,IT 3564855296,3564863487,DE 3564863488,3564879871,NL 3564879872,3564882431,GB 3564882432,3564882687,EU -3564882688,3564892415,GB -3564892416,3564892671,NL -3564892672,3564892735,GB -3564892736,3564892751,NL -3564892752,3564896255,GB +3564882688,3564886271,GB +3564886272,3564886527,NL +3564886528,3564892415,GB +3564892416,3564892927,NL +3564892928,3564896255,GB 3564896256,3564904447,RU 3564904448,3564912639,DE 3564912640,3564920831,BG @@ -97768,13 +92328,7 @@ 3564953856,3564954111,GB 3564954112,3564956671,AT 3564956672,3564956927,GB -3564956928,3564959487,AT -3564959488,3564959999,GB -3564960000,3564960511,AT -3564960512,3564960767,GB -3564960768,3564961023,AT -3564961024,3564961279,GB -3564961280,3564961791,AT +3564956928,3564961791,AT 3564961792,3564969983,TR 3564969984,3564978175,DE 3564978176,3564986367,GB @@ -97806,15 +92360,17 @@ 3565551616,3565682687,GB 3565682688,3565748223,NL 3565748224,3565756671,EU -3565756672,3565757695,GB -3565757696,3565759743,EU +3565756672,3565756927,GB +3565756928,3565757439,EU +3565757440,3565757695,GB +3565757696,3565758975,EU +3565758976,3565759231,GB +3565759232,3565759743,EU 3565759744,3565759999,GB -3565760000,3565760767,EU -3565760768,3565761023,GB -3565761024,3565766143,EU +3565760000,3565766143,EU 3565766144,3565766399,GB -3565766400,3565767167,EU -3565767168,3565767935,GB +3565766400,3565767423,EU +3565767424,3565767935,GB 3565767936,3565813759,EU 3565813760,3565879295,SA 3565879296,3566010367,GB @@ -97829,11 +92385,9 @@ 3566354432,3566370815,RO 3566370816,3566403583,TR 3566403584,3566436351,CH -3566436352,3566438399,IE -3566438400,3566438546,GB +3566436352,3566438546,IE 3566438547,3566438547,EU -3566438548,3566438655,GB -3566438656,3566469119,IE +3566438548,3566469119,IE 3566469120,3566534655,GB 3566534656,3566551039,DE 3566551040,3566600191,FI @@ -97851,27 +92405,33 @@ 3566895104,3566927871,KZ 3566927872,3566976767,FR 3566976768,3566977023,EU -3566977024,3566988951,FR -3566988952,3566988959,GB -3566988960,3566993407,FR +3566977024,3566993407,FR 3566993408,3567058943,TR -3567058944,3567080703,FR -3567080704,3567080959,GB -3567080960,3567124479,FR +3567058944,3567124479,FR 3567124480,3567157247,EU 3567157248,3567165439,CZ 3567165440,3567169535,RU 3567169536,3567173631,MK 3567173632,3567239167,GB -3567239168,3567241471,EU -3567241472,3567243007,NL -3567243008,3567247615,EU -3567247616,3567247871,NL -3567247872,3567255551,EU +3567239168,3567240191,EU +3567240192,3567240703,NL +3567240704,3567241471,EU +3567241472,3567241727,NL +3567241728,3567242751,EU +3567242752,3567243007,NL +3567243008,3567245055,EU +3567245056,3567245311,NL +3567245312,3567247359,EU +3567247360,3567249407,NL +3567249408,3567251455,EU +3567251456,3567251711,NL +3567251712,3567255551,EU 3567255552,3567321087,PL 3567321088,3567353855,GB 3567353856,3567386623,CH -3567386624,3567390719,GB +3567386624,3567387647,GB +3567387648,3567387903,DE +3567387904,3567390719,GB 3567390720,3567390975,DE 3567390976,3567391231,GB 3567391232,3567391487,DE @@ -97895,16 +92455,14 @@ 3567620096,3567620351,IN 3567620352,3567626239,GB 3567626240,3567626751,TZ -3567626752,3567641087,GB -3567641088,3567641343,US -3567641344,3567648767,GB +3567626752,3567648767,GB 3567648768,3567665151,BE 3567665152,3567673343,ES 3567673344,3567681535,AT 3567681536,3567714303,ES -3567714304,3567716351,EU -3567716352,3567716607,NL -3567716608,3567779839,EU +3567714304,3567715583,EU +3567715584,3567715839,GB +3567715840,3567779839,EU 3567779840,3567845375,DE 3567845376,3567861759,GB 3567861760,3567878143,NO @@ -97912,11 +92470,7 @@ 3567976448,3568041983,IT 3568041984,3568107519,DE 3568107520,3568173055,GB -3568173056,3568233471,TR -3568233472,3568234495,US -3568234496,3568295935,TR -3568295936,3568296191,US -3568296192,3568304127,TR +3568173056,3568304127,TR 3568304128,3568369663,RU 3568369664,3568435199,IT 3568435200,3568443391,UA @@ -97926,9 +92480,7 @@ 3568486656,3568486911,EU 3568486912,3568492543,NL 3568492544,3568500735,RS -3568500736,3568513535,IL -3568513536,3568513791,US -3568513792,3568566271,IL +3568500736,3568566271,IL 3568566272,3568585471,FR 3568585472,3568585727,EU 3568585728,3568599039,FR @@ -97941,13 +92493,11 @@ 3568795648,3568803839,GB 3568803840,3568812031,IT 3568812032,3568828415,ES -3568828416,3568857519,DE -3568857520,3568857527,US -3568857528,3568898911,DE -3568898912,3568898927,PL -3568898928,3568904191,DE +3568828416,3568904191,DE 3568904192,3568904447,EU -3568904448,3568959487,DE +3568904448,3568915791,DE +3568915792,3568915807,LU +3568915808,3568959487,DE 3568959488,3569025023,AT 3569025024,3569057791,NL 3569057792,3569074687,GB @@ -97967,25 +92517,21 @@ 3569167872,3569168127,EU 3569168128,3569188863,NL 3569188864,3569221631,IT -3569221632,3569245951,BE -3569245952,3569246207,GB -3569246208,3569287167,BE +3569221632,3569287167,BE 3569287168,3569352703,PL 3569352704,3569483775,RU 3569483776,3569614847,FR 3569614848,3569680383,GB 3569680384,3569713151,SK 3569713152,3569729535,AT -3569729536,3569811455,FR +3569729536,3569811175,FR +3569811176,3569811176,GP +3569811177,3569811455,FR 3569811456,3569876991,IL 3569876992,3569942527,RS 3569942528,3570073599,DE 3570073600,3570081791,NL -3570081792,3570095679,CH -3570095680,3570095767,FR -3570095768,3570095775,CH -3570095776,3570095871,FR -3570095872,3570098687,CH +3570081792,3570098687,CH 3570098688,3570098943,EU 3570098944,3570106367,CH 3570106368,3570139135,PL @@ -98013,10 +92559,12 @@ 3571253248,3571286015,BE 3571286016,3571318783,DE 3571318784,3571321599,GB -3571321600,3571321855,DE -3571321856,3571332351,GB -3571332352,3571332607,DE -3571332608,3571361279,GB +3571321600,3571321727,DE +3571321728,3571343393,GB +3571343394,3571343394,DE +3571343395,3571351551,GB +3571351552,3571351807,DE +3571351808,3571361279,GB 3571361280,3571361535,DE 3571361536,3571384319,GB 3571384320,3571482623,DE @@ -98044,11 +92592,7 @@ 3572367360,3572432895,NL 3572432896,3572465663,IT 3572465664,3572498431,BE -3572498432,3572530431,GB -3572530432,3572530591,FR -3572530592,3572530623,GB -3572530624,3572530687,FR -3572530688,3572563967,GB +3572498432,3572563967,GB 3572563968,3572572159,KG 3572572160,3572580351,NL 3572580352,3572596735,AT @@ -98096,7 +92640,8 @@ 3573921792,3573923839,RU 3573923840,3573925887,UA 3573925888,3573929983,PL -3573929984,3573938175,RU +3573929984,3573934079,RU +3573936128,3573938175,RU 3573938176,3573940223,PL 3573940224,3574005759,PS 3574005760,3574071295,CY @@ -98112,27 +92657,26 @@ 3574464512,3574530047,TR 3574530048,3574594559,SE 3574594560,3574595583,GB -3574595584,3574595839,GF +3574595584,3574595839,FR 3574595840,3574596095,MQ -3574596096,3574596351,RE -3574596352,3574596623,FR -3574596624,3574596639,GP -3574596640,3574596735,FR -3574596736,3574596767,GP -3574596768,3574597119,FR -3574597120,3574597375,MQ -3574597376,3574597631,FR +3574596096,3574596607,FR +3574596608,3574596863,GP +3574596864,3574597119,FR +3574597120,3574597631,MQ 3574597632,3574598143,GP 3574598144,3574598655,FR -3574598656,3574599679,MQ +3574598656,3574598911,MQ +3574598912,3574599167,FR +3574599168,3574599679,MQ 3574599680,3574599935,GP 3574599936,3574600191,FR 3574600192,3574600447,MQ -3574600448,3574601215,FR -3574601216,3574601471,GP -3574601472,3574602303,FR -3574602304,3574602319,GF -3574602320,3574603263,FR +3574600448,3574600959,FR +3574600960,3574601471,GP +3574601472,3574602239,FR +3574602240,3574602495,GF +3574602496,3574603007,FR +3574603008,3574603263,MQ 3574603264,3574603519,GP 3574603520,3574603775,FR 3574603776,3574611967,BG @@ -98152,9 +92696,7 @@ 3575054336,3575119871,DE 3575119872,3575185407,RU 3575185408,3575250943,PL -3575250944,3575289855,IT -3575289856,3575290111,US -3575290112,3575316479,IT +3575250944,3575316479,IT 3575316480,3575349247,RU 3575349248,3575382015,ES 3575382016,3575447551,FI @@ -98167,25 +92709,23 @@ 3575581696,3575588863,BE 3575588864,3575589119,A2 3575589120,3575589375,BE -3575589376,3575589631,US +3575589376,3575589631,A2 3575589632,3575589887,CY 3575589888,3575590655,BE 3575590656,3575590911,GB -3575590912,3575624703,BE +3575590912,3575622911,BE +3575622912,3575623167,GB +3575623168,3575624703,BE 3575624704,3575624959,EU -3575624960,3575626239,BE -3575626240,3575626495,GB -3575626496,3575626751,BE +3575624960,3575626751,BE 3575626752,3575627007,A2 -3575627008,3575628633,BE -3575628634,3575628634,GB -3575628635,3575630591,BE -3575630592,3575630847,IL -3575630848,3575631103,BE +3575627008,3575631103,BE 3575631104,3575631359,EU -3575631360,3575634175,BE -3575634176,3575634431,IT -3575634432,3575638181,BE +3575631360,3575634255,BE +3575634256,3575634263,IT +3575634264,3575635985,BE +3575635986,3575635986,DE +3575635987,3575638181,BE 3575638182,3575638182,EU 3575638183,3575644159,BE 3575644160,3575709695,DK @@ -98202,33 +92742,53 @@ 3576040192,3576040447,GB 3576040448,3576072447,EU 3576072448,3576072703,GB -3576072704,3576091903,EU -3576091904,3576092159,GB -3576092160,3576099071,EU +3576072704,3576085698,EU +3576085699,3576085699,GB +3576085700,3576092129,EU +3576092130,3576092130,GB +3576092131,3576099071,EU 3576099072,3576099327,GB -3576099328,3576101887,EU -3576101888,3576102143,GB -3576102144,3576102399,EU -3576102400,3576102655,GB -3576102656,3576102911,EU -3576102912,3576135679,GB +3576099328,3576100351,EU +3576100352,3576100607,GB +3576100608,3576101887,EU +3576101888,3576135679,GB 3576135680,3576168447,DE -3576168448,3576237055,GB -3576237056,3576237311,FR -3576237312,3576238335,GB -3576238336,3576240639,FR -3576240640,3576240895,GB -3576240896,3576245503,FR +3576168448,3576236031,GB +3576236032,3576236287,FR +3576236288,3576238079,GB +3576238080,3576238847,FR +3576238848,3576241151,GB +3576241152,3576241407,FR +3576241408,3576242175,GB +3576242176,3576242431,FR +3576242432,3576243199,GB +3576243200,3576243455,FR +3576243456,3576245247,GB +3576245248,3576245503,FR 3576245504,3576249343,GB -3576249344,3576250879,FR -3576250880,3576251135,GB -3576251136,3576252671,FR -3576252672,3576254479,GB -3576254480,3576254487,FR -3576254488,3576258047,GB -3576258048,3576260095,FR -3576260096,3576265727,GB -3576265728,3576299519,FR +3576249344,3576249599,FR +3576249600,3576252415,GB +3576252416,3576252671,FR +3576252672,3576254975,GB +3576254976,3576255231,FR +3576255232,3576257023,GB +3576257024,3576257279,FR +3576257280,3576258047,GB +3576258048,3576258303,FR +3576258304,3576258625,GB +3576258626,3576258626,FR +3576258627,3576259839,GB +3576259840,3576260095,FR +3576260096,3576260863,GB +3576260864,3576261119,FR +3576261120,3576263423,GB +3576263424,3576263679,FR +3576263680,3576265215,GB +3576265216,3576265471,FR +3576265472,3576265727,GB +3576265728,3576265983,FR +3576265984,3576266751,GB +3576266752,3576299519,FR 3576299520,3576365055,AE 3576365056,3576430591,TR 3576430592,3576496127,FR @@ -98239,27 +92799,27 @@ 3576758272,3576823807,BE 3576823808,3576889343,SE 3576889344,3576954879,NL -3576954880,3576959743,NO -3576959744,3576959999,GB -3576960000,3576987647,NO +3576954880,3576987647,NO 3576987648,3577020415,GB 3577020416,3577085951,NL 3577085952,3577151487,DE -3577151488,3577151999,RE -3577152000,3577152255,FR -3577152256,3577154047,RE +3577151488,3577151999,FR +3577152000,3577152511,RE +3577152512,3577153535,FR +3577153536,3577154047,RE 3577154048,3577154303,FR -3577154304,3577157375,RE -3577157376,3577157631,FR -3577157632,3577159935,RE -3577159936,3577161727,FR +3577154304,3577155327,RE +3577155328,3577155455,FR +3577155456,3577156735,RE +3577156736,3577156863,FR +3577156864,3577159679,RE +3577159680,3577161727,FR 3577161728,3577161983,RE -3577161984,3577162495,FR -3577162496,3577164287,RE -3577164288,3577164543,FR -3577164544,3577167103,RE -3577167104,3577167359,FR -3577167360,3577167871,RE +3577161984,3577162751,FR +3577162752,3577163263,RE +3577163264,3577164031,FR +3577164032,3577164287,RE +3577164288,3577167871,FR 3577167872,3577184255,ET 3577184256,3577217023,CH 3577217024,3577282559,FR @@ -98267,16 +92827,10 @@ 3577348096,3577413631,PT 3577413632,3577479167,RU 3577479168,3577544703,ES -3577544704,3577586687,DE -3577586688,3577586943,GB -3577586944,3577610239,DE +3577544704,3577610239,DE 3577610240,3577625599,EU 3577625600,3577625855,GB -3577625856,3577626111,EU -3577626112,3577626367,GB -3577626368,3577639679,EU -3577639680,3577639935,FR -3577639936,3577641215,EU +3577625856,3577641215,EU 3577641216,3577641471,FR 3577641472,3577641983,EU 3577641984,3577642239,GB @@ -98293,11 +92847,7 @@ 3578064511,3578064639,EU 3578064640,3578159615,DE 3578159616,3578159871,EU -3578159872,3578192988,DE -3578192989,3578192989,GB -3578192990,3578205439,DE -3578205440,3578205695,GB -3578205696,3578234623,DE +3578159872,3578234623,DE 3578234624,3578234879,EU 3578234880,3578265599,DE 3578265600,3578331135,GB @@ -98318,17 +92868,19 @@ 3578822656,3578855423,RU 3578855424,3578888191,GB 3578888192,3578920959,SK -3578920960,3578981631,IT -3578981632,3578981887,ES -3578981888,3578986495,IT +3578920960,3578986495,IT 3578986496,3579002879,DE 3579002880,3579019263,GB 3579019264,3579052031,DK 3579052032,3579117567,NL 3579117568,3579183103,RU 3579183104,3579193599,GB -3579193600,3579193855,BE -3579193856,3579248639,GB +3579193600,3579193655,BE +3579193656,3579193663,NL +3579193664,3579193855,BE +3579193856,3579212287,GB +3579212288,3579212543,FR +3579212544,3579248639,GB 3579248640,3579346943,RU 3579346944,3579445247,SE 3579445248,3579478015,AT @@ -98346,38 +92898,44 @@ 3579723776,3579740159,AT 3579740160,3579772927,IE 3579772928,3579838463,DE -3579838464,3579879935,ES -3579879936,3579880191,US -3579880192,3580100607,ES +3579838464,3580100607,ES 3580100608,3580215295,SE 3580215296,3580215807,EE -3580215808,3580223487,SE -3580223488,3580223999,DE -3580224000,3580224511,SE -3580224512,3580224767,DE +3580215808,3580223999,SE +3580224000,3580224767,DE 3580224768,3580225023,SE 3580225024,3580225535,DE -3580225536,3580226559,SE -3580226560,3580227071,DE -3580227072,3580228607,SE -3580228608,3580229119,DE -3580229120,3580229375,SE -3580229376,3580230143,DE -3580230144,3580230655,SE -3580230656,3580231679,DE -3580231680,3580236287,SE +3580225536,3580226047,SE +3580226048,3580226559,DE +3580226560,3580226815,SE +3580226816,3580228095,DE +3580228096,3580228863,SE +3580228864,3580229247,DE +3580229248,3580229375,SE +3580229376,3580229631,DE +3580229632,3580230143,SE +3580230144,3580230655,DE +3580230656,3580230911,SE +3580230912,3580231167,DE +3580231168,3580236287,SE 3580236288,3580236543,LT -3580236544,3580239359,SE +3580236544,3580237055,SE +3580237056,3580237311,LV +3580237312,3580239359,SE 3580239360,3580239871,LV 3580239872,3580255231,SE 3580255232,3580258303,DE -3580258304,3580260351,SE -3580260352,3580263423,AT -3580263424,3580268543,SE -3580268544,3580272383,LV -3580272384,3580338175,SE -3580338176,3580338687,HR -3580338688,3580362751,SE +3580258304,3580260863,SE +3580260864,3580264447,AT +3580264448,3580264959,SE +3580264960,3580265471,AT +3580265472,3580268543,SE +3580268544,3580271615,LV +3580271616,3580271871,SE +3580271872,3580272639,LV +3580272640,3580338175,SE +3580338176,3580338431,HR +3580338432,3580362751,SE 3580362752,3580624895,GB 3580624896,3580626943,RU 3580626944,3580628991,PL @@ -98390,11 +92948,7 @@ 3580641280,3580643327,FR 3580643328,3580645375,UA 3580645376,3580647423,PL -3580647424,3580647935,GB -3580647936,3580648447,DE -3580648448,3580648703,GB -3580648704,3580648959,DE -3580648960,3580649471,GB +3580647424,3580649471,DE 3580649472,3580651519,SE 3580651520,3580653567,NL 3580653568,3580655615,PL @@ -98430,9 +92984,7 @@ 3581242624,3581245439,FR 3581245440,3581280255,EU 3581280256,3581411327,BE -3581411328,3581521663,GB -3581521664,3581521919,TR -3581521920,3581673471,GB +3581411328,3581673471,GB 3581673472,3581935615,NL 3581935616,3581943807,RU 3581943808,3581951999,FR @@ -98463,7 +93015,7 @@ 3582116864,3582117887,EE 3582117888,3582120959,SE 3582120960,3582121983,EE -3582121984,3582124031,LT +3582121984,3582124031,SE 3582124032,3582132223,FI 3582132224,3582140415,RU 3582140416,3582148607,GE @@ -98518,15 +93070,12 @@ 3582492672,3582509055,IT 3582509056,3582517247,SA 3582517248,3582525439,PL -3582525440,3582525951,IM -3582525952,3582526207,GB -3582526208,3582527231,IM -3582527232,3582527683,GB -3582527684,3582527687,IM -3582527688,3582531327,GB -3582531328,3582532607,IM -3582532608,3582533119,GB -3582533120,3582533631,IM +3582525440,3582525695,IM +3582525696,3582526207,GB +3582526208,3582527743,IM +3582527744,3582531327,GB +3582531328,3582531583,IM +3582531584,3582533631,GB 3582533632,3582541823,BG 3582541824,3582550015,US 3582550016,3582558207,RS @@ -98534,8 +93083,8 @@ 3582560256,3582560511,GN 3582560512,3582566399,MC 3582566400,3582570751,EU -3582570752,3582571007,FR -3582571008,3582574591,EU +3582570752,3582571263,FR +3582571264,3582574591,EU 3582574592,3582582783,DE 3582582784,3582590975,RU 3582590976,3582599167,FR @@ -98547,14 +93096,18 @@ 3582640128,3582648319,RU 3582648320,3582656511,PT 3582656512,3582664703,ES -3582664704,3582672895,JO +3582664704,3582668095,JO +3582668096,3582668223,US +3582668224,3582672895,JO 3582672896,3582681087,DE 3582681088,3582689279,FR 3582689280,3582697471,DE 3582697472,3582705663,FI 3582705664,3582722047,TR 3582722048,3582730239,IT -3582730240,3582738431,ES +3582730240,3582737151,ES +3582737152,3582737407,DZ +3582737408,3582738431,ES 3582738432,3582746623,DK 3582746624,3582754815,RU 3582754816,3582763007,GR @@ -98605,8 +93158,8 @@ 3583123456,3583131647,PL 3583131648,3583139839,SE 3583139840,3583148031,DE -3583148032,3583157503,GB -3583157504,3583157759,IE +3583148032,3583157247,GB +3583157248,3583157759,IE 3583157760,3583164415,GB 3583164416,3583172607,PT 3583172608,3583188991,DE @@ -98630,7 +93183,8 @@ 3583336448,3583337727,ME 3583337728,3583337983,AL 3583337984,3583344639,ME -3583344640,3583352831,BG +3583344640,3583352575,BG +3583352576,3583352831,MK 3583352832,3583361023,CY 3583361024,3583369215,IT 3583369216,3583377407,ES @@ -98641,11 +93195,7 @@ 3583410176,3583418367,SE 3583418368,3583426559,TN 3583426560,3583434751,CI -3583434752,3583435775,AT -3583435776,3583436031,GB -3583436032,3583436799,AT -3583436800,3583437055,DE -3583437056,3583442943,AT +3583434752,3583442943,AT 3583442944,3583451135,UA 3583451136,3583459327,IL 3583459328,3583467111,CZ @@ -98662,9 +93212,7 @@ 3583541248,3583549439,RU 3583549440,3583557631,NL 3583557632,3583565823,IT -3583565824,3583573759,GB -3583573760,3583573791,US -3583573792,3583574015,GB +3583565824,3583574015,GB 3583574016,3583582207,NO 3583582208,3583590399,AT 3583590400,3583598591,DE @@ -98679,12 +93227,10 @@ 3583696896,3583705087,NL 3583705088,3583713279,UA 3583713280,3583721471,CZ -3583721472,3583727871,DE -3583727872,3583728127,FR -3583728128,3583729663,DE +3583721472,3583729663,DE 3583729664,3583737855,TR -3583737856,3583743487,EU -3583743488,3583743743,GB +3583737856,3583743615,EU +3583743616,3583743743,GB 3583743744,3583743975,EU 3583743976,3583743983,IE 3583743984,3583746047,EU @@ -98735,9 +93281,13 @@ 3584091136,3584092415,NL 3584092416,3584092671,NO 3584092672,3584092927,NL -3584092928,3584093183,NO -3584093184,3584093439,NL -3584093440,3584096255,NO +3584092928,3584093695,NO +3584093696,3584094975,NL +3584094976,3584095231,NO +3584095232,3584095487,NL +3584095488,3584095743,NO +3584095744,3584095999,NL +3584096000,3584096255,NO 3584096256,3584098303,NL 3584098304,3584106495,SI 3584106496,3584114687,FI @@ -98767,17 +93317,13 @@ 3584247653,3584247956,NL 3584247957,3584247957,NL 3584247958,3584253951,NL -3584253952,3584256273,ME -3584256274,3584256274,US -3584256275,3584262143,ME +3584253952,3584260351,ME +3584260352,3584260607,RS +3584260608,3584262143,ME 3584262144,3584270335,SE 3584270336,3584278527,FR -3584278528,3584280575,GB -3584280576,3584280831,GG -3584280832,3584286719,GB -3584286720,3584296703,AT -3584296704,3584296959,DE -3584296960,3584303103,AT +3584278528,3584286719,GB +3584286720,3584303103,AT 3584303104,3584311295,ES 3584311296,3584319487,DE 3584319488,3584327679,LT @@ -98786,17 +93332,17 @@ 3584344064,3584352255,SE 3584352256,3584360447,RO 3584360448,3584368639,GB -3584368640,3584372735,SA -3584372736,3584376831,LB +3584368640,3584370175,LB +3584370176,3584370431,SA +3584370432,3584370687,LB +3584370688,3584371711,SA +3584371712,3584376831,LB 3584376832,3584393215,DE 3584393216,3584401407,GB 3584401408,3584409599,MT 3584409600,3584417791,RU 3584417792,3584434175,GB -3584434176,3584434431,FR -3584434432,3584440063,LU -3584440064,3584440191,FR -3584440192,3584442367,LU +3584434176,3584442367,LU 3584442368,3584450559,GB 3584450560,3584458751,EU 3584458752,3584466943,SA @@ -98807,9 +93353,7 @@ 3584499712,3584507903,RU 3584507904,3584516095,GB 3584516096,3584524287,NO -3584524288,3584527359,IS -3584527360,3584527615,US -3584527616,3584532479,IS +3584524288,3584532479,IS 3584532480,3584540671,DE 3584540672,3584548863,RU 3584548864,3584557055,ES @@ -98841,18 +93385,14 @@ 3584753664,3584770047,RU 3584770048,3584778239,NL 3584778240,3584786431,IT -3584786432,3584787711,NL -3584787712,3584787967,GB -3584787968,3584794623,NL +3584786432,3584794623,NL 3584794624,3584802815,IT 3584802816,3584811007,GB 3584811008,3584819199,ES 3584819200,3584827391,RU 3584827392,3584835583,ES 3584835584,3584843775,AZ -3584843776,3584850873,DE -3584850874,3584850874,US -3584850875,3584851967,DE +3584843776,3584851967,DE 3584860160,3584868351,PL 3584868352,3584876543,NO 3584876544,3584884735,SI @@ -98921,8 +93461,7 @@ 3585400832,3585409023,FR 3585409024,3585417215,RU 3585417216,3585425407,BE -3585425408,3585425663,GB -3585425664,3585433599,ES +3585425408,3585433599,ES 3585433600,3585441791,IS 3585441792,3585449983,SK 3585449984,3585458175,SA @@ -98937,9 +93476,7 @@ 3585531904,3585540095,AT 3585540096,3585548287,DE 3585548288,3585556479,RU -3585556480,3585558783,DE -3585558784,3585559039,US -3585559040,3585564671,DE +3585556480,3585564671,DE 3585564672,3585572863,RU 3585572864,3585581055,IT 3585581056,3585597439,DE @@ -98963,10 +93500,11 @@ 3585677312,3585679359,SE 3585679360,3585687551,FI 3585687552,3585695743,DE -3585695744,3585701631,GB +3585695744,3585697279,GB +3585697280,3585697535,NO +3585697536,3585701631,GB 3585701632,3585701887,A2 -3585701888,3585702399,GB -3585702400,3585702527,US +3585701888,3585702527,GB 3585702528,3585702655,TZ 3585702656,3585703935,GB 3585703936,3585712127,DE @@ -98985,7 +93523,9 @@ 3585810432,3585818623,GB 3585818624,3585826815,DE 3585826816,3585835007,RU -3585835008,3585843199,US +3585835008,3585835871,US +3585835872,3585835903,NL +3585835904,3585843199,US 3585843200,3585851391,NO 3585851392,3585859583,SE 3585859584,3585865471,DE @@ -98997,15 +93537,20 @@ 3585884160,3585892351,IQ 3585892352,3585900543,DE 3585900544,3585908735,NO -3585908736,3585909183,FR -3585909184,3585909759,GF +3585908736,3585909119,FR +3585909120,3585909759,GF 3585909760,3585910015,FR 3585910016,3585910271,MQ -3585910272,3585910783,GP -3585910784,3585911551,FR -3585911552,3585914623,GP +3585910272,3585910527,GP +3585910528,3585911551,FR +3585911552,3585911807,GP +3585911808,3585912575,FR +3585912576,3585913343,GP +3585913344,3585913599,FR +3585913600,3585914623,GP 3585914624,3585914879,GF -3585914880,3585916415,GP +3585914880,3585915135,FR +3585915136,3585916415,GP 3585916416,3585916671,FR 3585916672,3585916927,MQ 3585916928,3585925119,IT @@ -99047,9 +93592,9 @@ 3586211840,3586228223,CH 3586228224,3586244607,BE 3586244608,3586260991,NL -3586260992,3586269279,ES -3586269280,3586269311,NL -3586269312,3586272255,ES +3586260992,3586269183,ES +3586269184,3586269439,NL +3586269440,3586272255,ES 3586272256,3586272511,NL 3586272512,3586277375,ES 3586277376,3586293759,TR @@ -99066,9 +93611,7 @@ 3586457600,3586473983,NL 3586473984,3586476287,HU 3586476288,3586476303,SK -3586476304,3586478079,HU -3586478080,3586478591,SK -3586478592,3586490367,HU +3586476304,3586490367,HU 3586490368,3586506751,LT 3586506752,3586523135,NL 3586523136,3586555903,DE @@ -99114,7 +93657,9 @@ 3586912722,3586912722,FR 3586912723,3586916351,DE 3586916352,3586924543,IT -3586924544,3586932735,AX +3586924544,3586925823,AX +3586925824,3586926079,FI +3586926080,3586932735,AX 3586932736,3586949119,LB 3586949120,3586965503,SE 3586965504,3586981887,NL @@ -99146,13 +93691,20 @@ 3587219456,3587227647,RU 3587227648,3587233279,GB 3587233280,3587233791,NL -3587233792,3587236863,GB -3587236864,3587238655,NL -3587238656,3587238911,GB +3587233792,3587237439,GB +3587237440,3587237503,NL +3587237504,3587238911,GB 3587238912,3587239423,NL 3587239424,3587239679,GB -3587239680,3587239935,BE -3587239936,3587243519,NL +3587239680,3587240191,NL +3587240192,3587240447,GB +3587240448,3587240703,NL +3587240704,3587240959,GB +3587240960,3587241215,NL +3587241216,3587241983,GB +3587241984,3587242239,NL +3587242240,3587243263,GB +3587243264,3587243519,NL 3587243520,3587244031,GB 3587244032,3587260415,IT 3587260416,3587284991,DE @@ -99164,8 +93716,7 @@ 3587286528,3587286783,EU 3587286784,3587289599,IT 3587289600,3587290111,EU -3587290112,3587290367,FR -3587290368,3587309567,IT +3587290112,3587309567,IT 3587309568,3587325951,GB 3587325952,3587342335,RU 3587342336,3587358719,CZ @@ -99180,11 +93731,7 @@ 3587440640,3587444900,SE 3587444901,3587444916,FI 3587444917,3587457023,SE -3587457024,3587460607,GB -3587460608,3587460863,NL -3587460864,3587471631,GB -3587471632,3587471647,US -3587471648,3587473407,GB +3587457024,3587473407,GB 3587473408,3587489791,IT 3587489792,3587506175,EG 3587506176,3587538943,IT @@ -99207,7 +93754,6 @@ 3587719168,3587735551,PL 3587735552,3587751935,GB 3587751936,3587768319,FI -3587768320,3587776511,DE 3587776512,3587784703,IR 3587784704,3587801087,DE 3587801088,3587817471,IT @@ -99226,9 +93772,7 @@ 3587997696,3588014079,DE 3588014080,3588030463,CZ 3588030464,3588046847,RU -3588046848,3588056473,DE -3588056474,3588056474,GB -3588056475,3588063231,DE +3588046848,3588063231,DE 3588063232,3588071423,CH 3588071424,3588079615,GB 3588079616,3588095999,CH @@ -99238,9 +93782,7 @@ 3588128768,3588145151,HU 3588145152,3588153343,PL 3588153344,3588161535,RU -3588161536,3588173055,FR -3588173056,3588173567,RE -3588173568,3588227071,FR +3588161536,3588227071,FR 3588227072,3588292607,BE 3588292608,3588308991,AT 3588308992,3588325375,NO @@ -99251,21 +93793,9 @@ 3588341760,3588358143,IT 3588358144,3588374527,BG 3588374528,3588390911,SE -3588390912,3588394255,LT -3588394256,3588394259,LV -3588394260,3588394260,LT -3588394261,3588394261,LV -3588394262,3588394269,LT -3588394270,3588394271,LV -3588394272,3588394279,LT -3588394280,3588394287,LV -3588394288,3588394302,LT -3588394303,3588394303,LV -3588394304,3588394319,LT -3588394320,3588394321,LV -3588394322,3588394335,LT -3588394336,3588394367,LV -3588394368,3588407295,LT +3588390912,3588394239,LT +3588394240,3588394495,LV +3588394496,3588407295,LT 3588407296,3588423679,CZ 3588423680,3588440063,ES 3588440064,3588456447,PL @@ -99300,20 +93830,18 @@ 3588857856,3588866047,IR 3588866048,3588882431,NL 3588882432,3588890623,RU -3588890624,3588892415,GB -3588892416,3588892671,US -3588892672,3588898815,GB +3588890624,3588898815,GB 3588898816,3588915199,NO 3588915200,3588931583,IT 3588931584,3588947967,RU -3588947968,3588958111,GB -3588958112,3588958127,NL -3588958128,3588964351,GB +3588947968,3588964351,GB 3588964352,3588997119,CZ 3588997120,3589013503,AT 3589013504,3589021695,ES 3589021696,3589029887,SA -3589029888,3589034239,NL +3589029888,3589030315,NL +3589030316,3589030316,FR +3589030317,3589034239,NL 3589034240,3589034495,EU 3589034496,3589037055,NL 3589037056,3589037311,EU @@ -99339,9 +93867,9 @@ 3589390336,3589423103,RU 3589423104,3589431039,GB 3589431040,3589431295,ES -3589431296,3589433937,GB -3589433938,3589433938,IE -3589433939,3589439487,GB +3589431296,3589433855,GB +3589433856,3589434111,IE +3589434112,3589439487,GB 3589439488,3589455871,SE 3589455872,3589472255,RU 3589472256,3589488639,TR @@ -99351,9 +93879,13 @@ 3589537792,3589545983,FR 3589545984,3589554175,DE 3589554176,3589570559,PS -3589570560,3589580607,GB -3589580608,3589580608,NL -3589580609,3589583871,GB +3589570560,3589578751,GB +3589578752,3589579007,NL +3589579008,3589580543,GB +3589580544,3589580799,NL +3589580800,3589580927,GB +3589580928,3589580935,NL +3589580936,3589583871,GB 3589583872,3589584127,NL 3589584128,3589586943,GB 3589586944,3589603327,RS @@ -99363,17 +93895,19 @@ 3589680601,3589680601,FR 3589680602,3589685247,FR 3589685248,3589718015,GB -3589718016,3589729279,BE -3589729280,3589729535,PT -3589729536,3589734399,BE +3589718016,3589734399,BE 3589734400,3589742591,EG 3589742592,3589767167,NL 3589767168,3589816319,RU 3589816320,3589825791,EU 3589825792,3589826047,DE -3589826048,3589829119,EU +3589826048,3589827839,EU +3589827840,3589828095,DE +3589828096,3589829119,EU 3589829120,3589829375,GB -3589829376,3589832703,EU +3589829376,3589831679,EU +3589831680,3589831935,FR +3589831936,3589832703,EU 3589832704,3589849087,TR 3589849088,3589865471,GB 3589865472,3589881855,GR @@ -99390,7 +93924,9 @@ 3590062080,3590078463,DE 3590078464,3590094847,RU 3590094848,3590111231,DE -3590111232,3590127615,LT +3590111232,3590113023,LT +3590113024,3590113279,LV +3590113280,3590127615,LT 3590127616,3590143999,GB 3590144000,3590160383,SI 3590160384,3590176767,GB @@ -99398,20 +93934,15 @@ 3590193152,3590201343,IT 3590201344,3590209535,DE 3590209536,3590225919,ES -3590225920,3590226431,TR -3590226432,3590226943,US -3590226944,3590229247,TR -3590229248,3590230271,US -3590230272,3590231039,TR -3590231040,3590231295,US -3590231296,3590234111,TR +3590225920,3590234111,TR 3590234112,3590242303,GB 3590242304,3590250239,IE 3590250240,3590250495,GR 3590250496,3590252543,IE 3590252544,3590253055,LB 3590253056,3590253311,DE -3590253312,3590254847,IE +3590253312,3590253567,GB +3590253568,3590254847,IE 3590254848,3590255103,GB 3590255104,3590258687,IE 3590258688,3590291455,IT @@ -99420,20 +93951,16 @@ 3590307840,3590308607,GB 3590308608,3590308863,US 3590308864,3590309119,ZM -3590309120,3590311899,GB -3590311900,3590311900,YT -3590311901,3590311903,GB -3590311904,3590311919,YT -3590311920,3590316031,GB -3590316032,3590316543,US -3590316544,3590317567,GB -3590317568,3590317823,US -3590317824,3590322175,GB +3590309120,3590311679,GB +3590311680,3590311935,YT +3590311936,3590314495,GB +3590314496,3590315007,US +3590315008,3590316151,GB +3590316152,3590316287,US +3590316288,3590322175,GB 3590322176,3590322431,A2 3590322432,3590324223,GB -3590324224,3590451455,US -3590451456,3590451711,GU -3590451712,3623890943,US +3590324224,3623890943,US 3623890944,3623891199,ZA 3623891200,3623891455,US 3623891456,3623891711,ZA @@ -99494,25 +94021,25 @@ 3624357888,3624358143,KN 3624358144,3624359679,US 3624359680,3624360703,CW -3624360704,3624376279,US +3624360704,3624374431,US +3624374432,3624374439,GB +3624374440,3624376279,US 3624376280,3624376295,GB -3624376296,3624376655,US +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,3624377319,US -3624377320,3624377323,GB -3624377324,3624377863,US -3624377864,3624377871,GB -3624377872,3624377879,US +3624376680,3624377879,US 3624377880,3624377887,GB 3624377888,3624377903,US 3624377904,3624377911,GB 3624377912,3624377919,US 3624377920,3624377935,ES -3624377936,3624377999,US -3624378000,3624378007,ES -3624378008,3624378039,US -3624378040,3624378047,GB -3624378048,3624380831,US +3624377936,3624380831,US 3624380832,3624380839,OM 3624380840,3624380935,US 3624380936,3624380943,SA @@ -99537,7 +94064,15 @@ 3624383296,3624386559,US 3624386560,3624394751,CA 3624394752,3624435711,US -3624435712,3624452095,CA +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 3624452096,3624480767,US 3624480768,3624484863,CA 3624484864,3624534015,US @@ -99551,7 +94086,19 @@ 3624547328,3624547647,A2 3624547648,3624547711,US 3624547712,3624547743,A2 -3624547744,3624548095,US +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 @@ -99569,13 +94116,7 @@ 3624549080,3624549087,A2 3624549088,3624549103,US 3624549104,3624549111,A2 -3624549112,3624549119,US -3624549120,3624549311,A2 -3624549312,3624549327,US -3624549328,3624549335,A2 -3624549336,3624549343,US -3624549344,3624549375,A2 -3624549376,3624549383,US +3624549112,3624549383,US 3624549384,3624549471,A2 3624549472,3624549479,US 3624549480,3624549583,A2 @@ -99668,7 +94209,8 @@ 3624903584,3624903679,US 3624903680,3624903807,CA 3624903808,3624903935,US -3624903936,3624904703,CA +3624903936,3624904463,CA +3624904464,3624904703,US 3624904704,3624904767,IN 3624904768,3624904831,US 3624904832,3624904895,CA @@ -99788,8 +94330,12 @@ 3624915488,3624915903,US 3624915904,3624915935,HK 3624915936,3624916223,US -3624916224,3624916735,CA -3624916736,3624917247,US +3624916224,3624916495,CA +3624916496,3624916503,US +3624916504,3624916511,CA +3624916512,3624916519,US +3624916520,3624916607,CA +3624916608,3624917247,US 3624917248,3624917503,AU 3624917504,3624917919,US 3624917920,3624917951,CA @@ -99864,10 +94410,14 @@ 3624927072,3624927167,US 3624927168,3624927199,TH 3624927200,3624984575,US -3624984576,3624991223,CA +3624984576,3624986367,CA +3624986368,3624986399,US +3624986400,3624991223,CA 3624991224,3624991231,US 3624991232,3624992767,CA -3624992768,3625058303,US +3624992768,3625042327,US +3625042328,3625042335,IT +3625042336,3625058303,US 3625058304,3625091071,CA 3625091072,3625116671,US 3625116672,3625116767,CA @@ -99908,7 +94458,13 @@ 3625288888,3625288895,US 3625288896,3625289959,CA 3625289960,3625289967,US -3625289968,3625295871,CA +3625289968,3625292575,CA +3625292576,3625292583,US +3625292584,3625292671,CA +3625292672,3625292679,US +3625292680,3625292927,CA +3625292928,3625292935,US +3625292936,3625295871,CA 3625295872,3625314559,US 3625314560,3625314815,CA 3625314816,3625320447,US @@ -100069,9 +94625,17 @@ 3626230992,3626230999,GB 3626231000,3626231007,US 3626231008,3626231039,GB -3626231040,3626231807,US -3626231808,3626231967,GB -3626231968,3626270719,US +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 3626270720,3626287103,CA 3626287104,3626332159,US 3626332160,3626334207,CA @@ -100463,7 +95027,9 @@ 3626385378,3626385381,US 3626385382,3626385389,IN 3626385390,3626385393,GB -3626385394,3626508287,US +3626385394,3626443839,US +3626443840,3626443847,CA +3626443848,3626508287,US 3626508288,3626512383,CA 3626512384,3626513427,US 3626513428,3626513428,EU @@ -100487,13 +95053,31 @@ 3626526296,3626526303,US 3626526304,3626526431,CA 3626526432,3626526463,CR -3626526464,3626526711,CA +3626526464,3626526567,CA +3626526568,3626526575,US +3626526576,3626526623,CA +3626526624,3626526631,US +3626526632,3626526711,CA 3626526712,3626526719,US -3626526720,3626527487,CA +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,3626528535,CA +3626527560,3626527903,CA +3626527904,3626527911,US +3626527912,3626528239,CA +3626528240,3626528247,US +3626528248,3626528535,CA 3626528536,3626528543,US 3626528544,3626528631,CA 3626528632,3626528639,US @@ -100595,28 +95179,26 @@ 3626532856,3626852351,US 3626852352,3626860543,CA 3626860544,3626893311,US -3626893312,3626905599,CA +3626893312,3626896175,CA +3626896176,3626896183,US +3626896184,3626905599,CA 3626905600,3626926079,US 3626926080,3626934271,CA 3626934272,3627044863,US 3627044864,3627048959,CA 3627048960,3627065343,US 3627065344,3627069439,CA -3627069440,3627299071,US +3627069440,3627288575,US +3627288576,3627288607,GB +3627288608,3627299071,US 3627299072,3627299327,IN 3627299328,3627309695,US 3627309696,3627309823,AE 3627309824,3627310471,US 3627310472,3627310479,BM -3627310480,3627317087,US -3627317088,3627317119,GB -3627317120,3627317191,US -3627317192,3627317199,CA -3627317200,3627328055,US +3627310480,3627328055,US 3627328056,3627328063,SR -3627328064,3627350127,US -3627350128,3627350135,IL -3627350136,3627399935,US +3627328064,3627399935,US 3627399936,3627399967,GE 3627399968,3627399999,US 3627400000,3627400063,DE @@ -100642,9 +95224,12 @@ 3627659264,3627663359,CA 3627663360,3627679743,US 3627679744,3627712511,CA -3627712512,3627745343,US +3627712512,3627741759,US +3627741760,3627741791,CA +3627741792,3627745343,US 3627745344,3627745375,BE -3627745376,3627745471,US +3627745376,3627745439,US +3627745440,3627745471,IN 3627745472,3627745503,CA 3627745504,3627746399,US 3627746400,3627746431,CA @@ -100834,15 +95419,25 @@ 3628834816,3628843007,CA 3628843008,3628848639,US 3628848640,3628848895,EU -3628848896,3628850687,US -3628850688,3628850943,AU -3628850944,3628963007,US +3628848896,3628963007,US 3628963008,3628963039,PA 3628963040,3629187071,US 3629187072,3629195263,CA 3629195264,3629199359,US -3629199360,3629201407,CA -3629201408,3629202431,US +3629199360,3629201463,CA +3629201464,3629201467,US +3629201468,3629201487,CA +3629201488,3629201515,US +3629201516,3629201539,CA +3629201540,3629201543,US +3629201544,3629201551,CA +3629201552,3629201559,US +3629201560,3629201563,CA +3629201564,3629201599,US +3629201600,3629201615,CA +3629201616,3629201623,US +3629201624,3629201627,CA +3629201628,3629202431,US 3629202432,3629203199,CA 3629203200,3629318143,US 3629318144,3629326335,CA @@ -100977,17 +95572,23 @@ 3630055520,3630055551,US 3630055552,3630055679,CA 3630055680,3630055935,US -3630055936,3630057471,CA +3630055936,3630056959,CA +3630056960,3630057215,US +3630057216,3630057471,CA 3630057472,3630057727,US 3630057728,3630057983,CA 3630057984,3630058047,US -3630058048,3630058495,CA +3630058048,3630058335,CA +3630058336,3630058367,US +3630058368,3630058495,CA 3630058496,3630058751,US 3630058752,3630059007,CA 3630059008,3630059263,US 3630059264,3630059775,CA 3630059776,3630060031,US -3630060032,3630060543,CA +3630060032,3630060351,CA +3630060352,3630060383,US +3630060384,3630060543,CA 3630060544,3630060671,US 3630060672,3630060799,CA 3630060800,3630060815,US @@ -101023,11 +95624,15 @@ 3630065328,3630065343,US 3630065344,3630065359,CA 3630065360,3630065391,US -3630065392,3630065919,CA +3630065392,3630065727,CA +3630065728,3630065791,US +3630065792,3630065919,CA 3630065920,3630066175,CN 3630066176,3630068223,CA 3630068224,3630068479,US -3630068480,3630069247,CA +3630068480,3630068863,CA +3630068864,3630068991,CN +3630068992,3630069247,CA 3630069248,3630069503,US 3630069504,3630071247,CA 3630071248,3630071263,US @@ -101037,7 +95642,9 @@ 3630071872,3630072063,US 3630072064,3630072223,CA 3630072224,3630072255,US -3630072256,3630074375,CA +3630072256,3630074255,CA +3630074256,3630074287,US +3630074288,3630074375,CA 3630074376,3630074383,US 3630074384,3630074415,CA 3630074416,3630074431,US @@ -101079,11 +95686,7 @@ 3630083328,3630083391,US 3630083392,3630083519,CA 3630083520,3630083583,US -3630083584,3630083727,CA -3630083728,3630083743,US -3630083744,3630083807,CA -3630083808,3630083823,US -3630083824,3630083839,CA +3630083584,3630083839,CA 3630083840,3630084159,US 3630084160,3630084351,CA 3630084352,3630084607,US @@ -101170,20 +95773,14 @@ 3630106016,3630106031,CA 3630106032,3630106063,US 3630106064,3630106079,CA -3630106080,3630116863,US -3630116864,3630117887,CA -3630117888,3630120959,US +3630106080,3630120959,US 3630120960,3630130175,CA 3630130176,3630136575,US 3630136576,3630136831,CA 3630136832,3630139391,US 3630139392,3630139647,CA 3630139648,3630141439,US -3630141440,3630141759,CA -3630141760,3630141791,US -3630141792,3630141887,CA -3630141888,3630141951,US -3630141952,3630144031,CA +3630141440,3630144031,CA 3630144032,3630144063,US 3630144064,3630144223,CA 3630144224,3630144255,US @@ -101221,7 +95818,9 @@ 3630155584,3630155599,US 3630155600,3630155615,CA 3630155616,3630155631,US -3630155632,3630158591,CA +3630155632,3630158135,CA +3630158136,3630158151,US +3630158152,3630158591,CA 3630158592,3630158847,US 3630158848,3630158911,CA 3630158912,3630158943,US @@ -101261,7 +95860,13 @@ 3630163880,3630163887,US 3630163888,3630163927,CA 3630163928,3630163959,US -3630163960,3630166719,CA +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 @@ -101292,17 +95897,17 @@ 3630391296,3630395391,CA 3630395392,3630718975,US 3630718976,3630727167,CA -3630727168,3630745727,US -3630745728,3630746623,UG +3630727168,3630745855,US +3630745856,3630746111,UG +3630746112,3630746367,US +3630746368,3630746623,UG 3630746624,3630746879,US 3630746880,3630747391,TZ 3630747392,3630780415,US 3630780416,3630784511,CA 3630784512,3630850047,US 3630850048,3630854143,CA -3630854144,3630869503,US -3630869504,3630870527,GT -3630870528,3630956543,US +3630854144,3630956543,US 3630956544,3631005695,CA 3631005696,3631014915,US 3631014916,3631015011,HU @@ -101347,8 +95952,8 @@ 3631059240,3631096951,US 3631096952,3631096952,US 3631096953,3631112191,US -3631112192,3631112447,VC -3631112448,3631116543,BB +3631112192,3631112703,VC +3631112704,3631116543,BB 3631116544,3631117567,GD 3631117568,3631117823,BB 3631117824,3631118079,GD @@ -101373,11 +95978,7 @@ 3631663152,3631663159,CA 3631663160,3631665151,US 3631665152,3631667199,CA -3631667200,3631667455,US -3631667456,3631668223,CA -3631668224,3631668479,US -3631668480,3631668991,CA -3631668992,3631669247,US +3631667200,3631669247,US 3631669248,3631677439,A2 3631677440,3631712287,US 3631712288,3631712295,AR @@ -101465,9 +96066,7 @@ 3632332800,3632357375,CA 3632357376,3632381951,US 3632381952,3632390143,CA -3632390144,3632407583,US -3632407584,3632407591,GB -3632407592,3632414719,US +3632390144,3632414719,US 3632414720,3632422911,CA 3632422912,3632448255,US 3632448256,3632448511,CA @@ -101500,7 +96099,9 @@ 3632902144,3632971775,US 3632971776,3632972031,CA 3632972032,3632972063,US -3632972064,3632988159,CA +3632972064,3632973087,CA +3632973088,3632973119,US +3632973120,3632988159,CA 3632988160,3632994047,US 3632994048,3632994303,US 3632994304,3633029119,US @@ -101633,14 +96234,13 @@ 3633551360,3633552127,US 3633552128,3633552383,A2 3633552384,3633552639,US -3633552640,3633552895,A2 -3633552896,3633553151,US -3633553152,3633553279,GW -3633553280,3633553311,US -3633553312,3633553343,A2 -3633553344,3633635206,US -3633635207,3633635207,IN -3633635208,3633757439,US +3633552640,3633552911,A2 +3633552912,3633552927,GA +3633552928,3633553119,US +3633553120,3633553127,A2 +3633553128,3633553143,US +3633553144,3633553151,A2 +3633553152,3633757439,US 3633757440,3633757695,IN 3633757696,3633776399,US 3633776400,3633776415,CN @@ -101711,26 +96311,7 @@ 3633818800,3633818807,US 3633818808,3633818847,CA 3633818848,3633818855,US -3633818856,3633818911,CA -3633818912,3633818919,US -3633818920,3633818939,CA -3633818940,3633818943,US -3633818944,3633818951,CA -3633818952,3633818959,US -3633818960,3633818967,CA -3633818968,3633818983,US -3633818984,3633818991,CA -3633818992,3633818999,US -3633819000,3633819071,CA -3633819072,3633819079,US -3633819080,3633819083,CA -3633819084,3633819103,US -3633819104,3633819107,CA -3633819108,3633819111,US -3633819112,3633819123,CA -3633819124,3633819127,US -3633819128,3633819131,CA -3633819132,3633819135,EG +3633818856,3633819135,CA 3633819136,3633819199,IN 3633819200,3633819231,US 3633819232,3633819263,CA @@ -101798,9 +96379,18 @@ 3633975040,3634020351,CA 3634020352,3634053119,US 3634053120,3634061311,CL -3634061312,3634094079,US +3634061312,3634065311,US +3634065312,3634065343,SV +3634065344,3634094079,US 3634094080,3634098175,SE -3634098176,3634138127,US +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,3634189055,US 3634189056,3634189311,GB @@ -101831,7 +96421,11 @@ 3634749440,3634880511,US 3634880512,3634888703,CA 3634888704,3634913279,US -3634913280,3634917663,CA +3634913280,3634914175,CA +3634914176,3634914207,US +3634914208,3634914223,BM +3634914224,3634914239,US +3634914240,3634917663,CA 3634917664,3634917679,BM 3634917680,3634921471,CA 3634921472,3634925567,US @@ -101849,9 +96443,7 @@ 3635163136,3635171071,US 3635171072,3635171327,CA 3635171328,3635185407,US -3635185408,3635185447,US -3635185448,3635185449,US -3635185450,3635185663,US +3635185408,3635185663,US 3635185664,3635186175,US 3635186176,3635186431,US 3635186432,3635187199,US @@ -101864,7 +96456,9 @@ 3635466240,3635470335,CA 3635470336,3635532287,US 3635532288,3635532303,ES -3635532304,3635533535,US +3635532304,3635532543,US +3635532544,3635532799,PR +3635532800,3635533535,US 3635533536,3635533551,IN 3635533552,3635643391,US 3635643392,3635644415,JP @@ -101904,7 +96498,9 @@ 3635879936,3635892223,US 3635892224,3635895785,CA 3635895786,3635895786,US -3635895787,3635896319,CA +3635895787,3635895807,CA +3635895808,3635895839,US +3635895840,3635896319,CA 3635896320,3635904511,US 3635904512,3635912703,CA 3635912704,3635961855,US @@ -101977,8 +96573,8 @@ 3636152784,3636152799,CA 3636152800,3636152831,US 3636152832,3636152855,CA -3636152856,3636152895,US -3636152896,3636153023,CA +3636152856,3636152879,US +3636152880,3636153023,CA 3636153024,3636153055,KN 3636153056,3636153343,CA 3636153344,3636153375,US @@ -102049,12 +96645,12 @@ 3636161872,3636161885,US 3636161886,3636161943,CA 3636161944,3636161951,US -3636161952,3636161967,CA -3636161968,3636162015,US +3636161952,3636161983,CA +3636161984,3636162015,US 3636162016,3636162559,CA 3636162560,3636163583,US 3636163584,3636164095,CA -3636164096,3636164111,BV +3636164096,3636164111,US 3636164112,3636164143,CA 3636164144,3636164159,US 3636164160,3636164255,CA @@ -102076,7 +96672,11 @@ 3636267264,3636267519,CA 3636267520,3636267775,US 3636267776,3636268031,CA -3636268032,3636396031,US +3636268032,3636287487,US +3636287488,3636287743,CA +3636287744,3636291839,US +3636291840,3636292095,CA +3636292096,3636396031,US 3636396032,3636461567,CA 3636461568,3636577647,US 3636577648,3636577663,CA @@ -102268,7 +96868,9 @@ 3636917368,3636917447,US 3636917448,3636917455,HK 3636917456,3636917503,US -3636917504,3636919039,CA +3636917504,3636917775,CA +3636917776,3636918015,US +3636918016,3636919039,CA 3636919040,3636919071,IN 3636919072,3636919103,US 3636919104,3636919135,CA @@ -102283,9 +96885,9 @@ 3636920128,3636920191,CA 3636920192,3637015327,US 3637015328,3637015343,GB -3637015344,3637022207,US -3637022208,3637022463,GB -3637022464,3637024767,US +3637015344,3637023423,US +3637023424,3637023487,TW +3637023488,3637024767,US 3637024768,3637024895,CA 3637024896,3637025023,US 3637025024,3637025087,CA @@ -102335,9 +96937,13 @@ 3637441608,3637469439,US 3637469440,3637469695,GE 3637469696,3637510143,US -3637510144,3637641215,CA +3637510144,3637520127,CA +3637520128,3637520191,US +3637520192,3637641215,CA 3637641216,3637665791,US -3637665792,3637669887,CA +3637665792,3637667439,CA +3637667440,3637667518,US +3637667519,3637669887,CA 3637669888,3637706751,US 3637706752,3637739519,CA 3637739520,3637740767,US @@ -102390,9 +96996,7 @@ 3638222208,3638222463,US 3638222464,3638222591,AU 3638222592,3638222623,CA -3638222624,3638222911,US -3638222912,3638222919,IT -3638222920,3638223559,US +3638222624,3638223559,US 3638223560,3638223567,PA 3638223568,3638224255,US 3638224256,3638224271,IT @@ -102406,9 +97010,7 @@ 3638228024,3638228031,GB 3638228032,3638229279,US 3638229280,3638229311,IT -3638229312,3638230671,US -3638230672,3638230679,AU -3638230680,3638230815,US +3638229312,3638230815,US 3638230816,3638230847,ES 3638230848,3638230927,US 3638230928,3638230935,CA @@ -102430,7 +97032,9 @@ 3638249752,3638249791,GB 3638249792,3638249983,US 3638249984,3638250031,GB -3638250032,3638250535,US +3638250032,3638250063,US +3638250064,3638250079,GB +3638250080,3638250535,US 3638250536,3638250543,GB 3638250544,3638250559,US 3638250560,3638250623,GB @@ -102475,23 +97079,22 @@ 3638400768,3638401087,US 3638401088,3638401151,CA 3638401152,3638401279,CZ -3638401280,3638401447,US -3638401448,3638401455,BE -3638401456,3638509567,US -3638509568,3638534143,CA +3638401280,3638509567,US +3638509568,3638528751,CA +3638528752,3638528759,US +3638528760,3638530047,CA +3638530048,3638530063,US +3638530064,3638530239,CA +3638530240,3638530255,US +3638530256,3638534143,CA 3638534144,3638697983,US 3638697984,3638706175,CA 3638706176,3638706687,A2 3638706688,3638706943,NG 3638706944,3638710271,A2 -3638710272,3638738943,US -3638740992,3638743039,US -3638743040,3638743295,SL -3638743296,3638874111,US +3638710272,3638874111,US 3638874112,3638878207,CA -3638878208,3638880511,US -3638880512,3638880767,CA -3638880768,3638960383,US +3638878208,3638960383,US 3638960384,3638960639,BR 3638960640,3638984703,US 3638984704,3638985983,GT @@ -102627,9 +97230,7 @@ 3639558144,3639566335,CA 3639566336,3639593983,US 3639593984,3639595007,GB -3639595008,3639596031,US -3639596032,3639596287,GB -3639596288,3639607295,US +3639595008,3639607295,US 3639607296,3639611391,CA 3639611392,3639656447,US 3639656448,3639660543,CA @@ -102639,11 +97240,13 @@ 3639672832,3639681023,CL 3639681024,3639684991,US 3639684992,3639685119,SA -3639685120,3639692031,US -3639692032,3639692288,GB +3639685120,3639692032,US +3639692033,3639692288,GB 3639692289,3639730175,US 3639730176,3639734271,CA -3639734272,3639886591,US +3639734272,3639886215,US +3639886216,3639886223,SA +3639886224,3639886591,US 3639886592,3639886599,SG 3639886600,3639887639,US 3639887640,3639887647,AU @@ -102673,7 +97276,9 @@ 3639889408,3639889415,AU 3639889416,3639889423,US 3639889424,3639889439,SA -3639889440,3639890447,US +3639889440,3639890359,US +3639890360,3639890367,SA +3639890368,3639890447,US 3639890448,3639890463,AU 3639890464,3639890479,US 3639890480,3639890487,BR @@ -102704,9 +97309,7 @@ 3639893520,3639902207,US 3639902208,3639918591,PE 3639918592,3639934975,AR -3639934976,3639948031,US -3639948032,3639948287,SG -3639948288,3640001751,US +3639934976,3640001751,US 3640001752,3640001759,IL 3640001760,3640003239,US 3640003240,3640003247,TR @@ -102794,7 +97397,9 @@ 3640345456,3640345503,MX 3640345504,3640345743,US 3640345744,3640345854,MX -3640345855,3640346879,US +3640345855,3640346815,US +3640346816,3640346847,MX +3640346848,3640346879,US 3640346880,3640347134,MX 3640347135,3640347391,US 3640347392,3640347455,MX @@ -102808,9 +97413,11 @@ 3640347568,3640347599,MX 3640347600,3640347615,US 3640347616,3640347631,MX -3640347632,3640351231,US -3640351232,3640351743,MX -3640351744,3640360959,US +3640347632,3640347647,US +3640347648,3640347711,MX +3640347712,3640347839,US +3640347840,3640347902,MX +3640347903,3640360959,US 3640360960,3640369151,CA 3640369152,3640410111,US 3640410112,3640418303,CA @@ -102826,7 +97433,9 @@ 3640450048,3640451071,US 3640451072,3640459263,A2 3640459264,3640557567,US -3640557568,3640565631,CA +3640557568,3640564455,CA +3640564456,3640564463,US +3640564464,3640565631,CA 3640565632,3640565647,US 3640565648,3640578391,CA 3640578392,3640578399,GB @@ -102837,20 +97446,28 @@ 3640655872,3641020121,DE 3641020122,3641020122,GB 3641020123,3641029631,DE -3641029632,3641029887,US -3641029888,3641061119,DE +3641029632,3641029695,US +3641029696,3641029711,DE +3641029712,3641029759,US +3641029760,3641061119,DE 3641061120,3641061199,US 3641061200,3641061207,DE -3641061208,3641061375,US -3641061376,3641078167,DE -3641078168,3641078175,US -3641078176,3641078271,DE -3641078272,3641078511,US +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,3641115271,DE -3641115272,3641115279,US -3641115280,3641150719,DE +3641078528,3641150719,DE 3641150720,3641150759,CN 3641150760,3641150767,DE 3641150768,3641151232,CN @@ -102882,18 +97499,12 @@ 3641311232,3641315327,DE 3641315328,3641319423,DK 3641319424,3641323519,RU -3641323520,3641331711,DE +3641323520,3641324543,DE +3641324544,3641324799,AT +3641324800,3641331711,DE 3641331712,3641335807,ES 3641335808,3641343999,SE -3641344000,3641352191,GB -3641352192,3641352447,US -3641352448,3641355263,GB -3641355264,3641355277,BR -3641355278,3641355278,AO -3641355279,3641355519,BR -3641355520,3641359615,GB -3641359616,3641359871,US -3641359872,3641360383,GB +3641344000,3641360383,GB 3641360384,3641368575,RO 3641368576,3641372671,GB 3641372672,3641376767,BG @@ -102960,8 +97571,8 @@ 3641659392,3641663487,FR 3641663488,3641667583,MT 3641667584,3641669631,GB -3641669632,3641670655,ZW -3641670656,3641671679,GB +3641669632,3641669887,ZW +3641669888,3641671679,GB 3641671680,3641679871,RU 3641679872,3641680127,DK 3641680128,3641681151,GB @@ -102991,8 +97602,8 @@ 3641769984,3641774079,NO 3641774080,3641778175,DE 3641778176,3641782271,PL -3641782272,3641784319,BG -3641784320,3641784575,GB +3641782272,3641784063,BG +3641784064,3641784575,GB 3641784576,3641786367,BG 3641786368,3641790463,SE 3641790464,3641794559,LT @@ -103074,25 +97685,15 @@ 3642142720,3642146815,MT 3642146816,3642150911,DE 3642150912,3642163199,IT -3642163200,3642166783,NL -3642166784,3642167039,GB -3642167040,3642167295,CA +3642163200,3642167295,NL 3642167296,3642171391,RU 3642171392,3642175487,JO 3642175488,3642179583,DE 3642179584,3642187775,RU 3642187776,3642191871,DK 3642191872,3642195967,BY -3642195968,3642199039,RU -3642199040,3642199295,BY -3642199296,3642204159,RU -3642204160,3642206719,GB -3642206720,3642207231,IM -3642207232,3642207743,GB -3642207744,3642207767,IM -3642207768,3642207775,GB -3642207776,3642207999,IM -3642208000,3642208255,GB +3642195968,3642204159,RU +3642204160,3642208255,GB 3642208256,3642212351,RU 3642212352,3642216447,BA 3642216448,3642220543,HU @@ -103120,7 +97721,8 @@ 3642314752,3642318847,RU 3642318848,3642322943,FI 3642322944,3642327039,AT -3642327040,3642331135,DE +3642327040,3642327295,PL +3642327296,3642331135,DE 3642331136,3642335231,RU 3642335232,3642339327,DE 3642339328,3642343423,FR @@ -103146,9 +97748,7 @@ 3642425088,3642425343,US 3642425344,3642429439,DE 3642429440,3642433535,GB -3642433536,3642439679,CY -3642439680,3642439935,LB -3642439936,3642441727,CY +3642433536,3642441727,CY 3642441728,3642449919,IT 3642449920,3642454015,CH 3642454016,3642458111,IT @@ -103180,7 +97780,9 @@ 3642544128,3642552319,RU 3642552320,3642556415,DE 3642556416,3642560511,CZ -3642560512,3642564607,KG +3642560512,3642561535,KG +3642561536,3642561791,US +3642561792,3642564607,KG 3642564608,3642568703,DE 3642568704,3642572799,RU 3642572800,3642576895,IT @@ -103216,11 +97818,7 @@ 3642691584,3642695679,DE 3642695680,3642699775,SK 3642699776,3642703871,CZ -3642703872,3642706175,LU -3642706176,3642706431,FR -3642706432,3642706559,LU -3642706560,3642706575,GB -3642706576,3642707967,LU +3642703872,3642707967,LU 3642707968,3642712063,DE 3642712064,3642716159,NO 3642716160,3642720255,IT @@ -103303,11 +97901,7 @@ 3645132800,3645136895,HR 3645136896,3645145087,NO 3645145088,3645149183,GB -3645149184,3645161983,DE -3645161984,3645162495,US -3645162496,3645163007,DE -3645163008,3645163519,US -3645163520,3645165567,DE +3645149184,3645165567,DE 3645165568,3645169663,TR 3645169664,3645173759,CH 3645173760,3645177855,GB @@ -103347,9 +97941,9 @@ 3645321216,3645325311,BA 3645325312,3645329407,IT 3645329408,3645333503,CH -3645333504,3645336063,EU -3645336064,3645336319,DE -3645336320,3645337599,EU +3645333504,3645335295,EU +3645335296,3645335551,DE +3645335552,3645337599,EU 3645337600,3645341695,FR 3645341696,3645345791,RU 3645345792,3645349887,FI @@ -103401,7 +97995,9 @@ 3645546496,3645550591,RU 3645550592,3645558783,DE 3645558784,3645562879,DK -3645562880,3645566975,GB +3645562880,3645565951,GB +3645565952,3645566207,ZW +3645566208,3645566975,GB 3645566976,3645571071,RU 3645571072,3645575167,IE 3645575168,3645579263,CH @@ -103472,31 +98068,32 @@ 3645888768,3645890559,DE 3645890560,3645894655,RU 3645894656,3645898751,NL -3645898752,3646515967,DE -3646515968,3646516223,FR -3646516224,3646517247,US -3646517248,3646519295,DE -3646519296,3646519807,US -3646519808,3646947327,DE +3645898752,3646947327,DE 3646947328,3647209471,PL 3647209472,3647602687,NL 3647602688,3647733759,RU -3647733760,3647753351,FR -3647753352,3647753431,GP -3647753432,3647795711,FR -3647795712,3647795967,RE -3647795968,3647864831,FR -3647864832,3647875713,DE -3647875714,3647875714,CH -3647875715,3647890687,DE +3647733760,3647864831,FR +3647864832,3647875583,DE +3647875584,3647875839,CH +3647875840,3647890687,DE 3647890688,3647890943,EU 3647890944,3647947263,DE 3647947264,3647947519,US 3647947520,3647949567,DE 3647949568,3647949823,EU -3647949824,3647966463,DE -3647966464,3647966719,GB -3647966720,3647967743,DE +3647949824,3647964415,DE +3647964416,3647964487,AU +3647964488,3647964495,ES +3647964496,3647964543,AU +3647964544,3647964551,ES +3647964552,3647964671,AU +3647964672,3647965183,DE +3647965184,3647965439,ES +3647965440,3647965951,DE +3647965952,3647966207,CH +3647966208,3647966463,DE +3647966464,3647967231,GB +3647967232,3647967743,DE 3647967744,3647967999,BE 3647968000,3647968255,DE 3647968256,3647969023,FR @@ -103504,17 +98101,19 @@ 3647970048,3647970303,BE 3647970304,3647971583,DE 3647971584,3647972351,GB -3647972352,3647973631,DE -3647973632,3647973887,IT -3647973888,3647974399,DE -3647974400,3647975167,ES -3647975168,3647975391,DE -3647975392,3647976191,ES -3647976192,3647977471,DE -3647977472,3647977727,GB -3647977728,3647977783,DE -3647977784,3647977791,GB -3647977792,3647978495,DE +3647972352,3647973375,DE +3647973376,3647973631,IT +3647973632,3647974399,DE +3647974400,3647974911,ES +3647974912,3647975167,DE +3647975168,3647975679,ES +3647975680,3647975935,DE +3647975936,3647976191,ES +3647976192,3647976447,DE +3647976448,3647976703,BE +3647976704,3647977471,DE +3647977472,3647978239,GB +3647978240,3647978495,DE 3647978496,3647979007,NL 3647979008,3647979775,DE 3647979776,3647980543,FR @@ -103522,14 +98121,14 @@ 3647981056,3647982079,DE 3647982080,3647982591,BE 3647982592,3647982847,DE -3647982848,3647983615,IT -3647983616,3647986431,DE -3647986432,3647986687,ES -3647986688,3647987591,DE -3647987592,3647987599,ES -3647987600,3647987679,DE -3647987680,3647987695,ES -3647987696,3647995903,DE +3647982848,3647983103,IT +3647983104,3647983359,DE +3647983360,3647983615,IT +3647983616,3647987455,DE +3647987456,3647987711,ES +3647987712,3647989247,DE +3647989248,3647989503,BE +3647989504,3647995903,DE 3647995904,3648004095,RU 3648004096,3648008191,GB 3648008192,3648016383,FR @@ -103537,10 +98136,12 @@ 3648020480,3648024575,IT 3648024576,3648028671,NL 3648028672,3648032767,HU -3648032768,3648033279,IE -3648033280,3648033535,EU +3648032768,3648033023,IE +3648033024,3648033535,EU 3648033536,3648033791,IE -3648033792,3648034887,EU +3648033792,3648034047,EU +3648034048,3648034303,GB +3648034304,3648034887,EU 3648034888,3648034895,IE 3648034896,3648036863,EU 3648036864,3648040959,CZ @@ -103552,8 +98153,8 @@ 3648061440,3648069631,AM 3648069632,3648073727,DE 3648073728,3648077823,HU -3648077824,3648078335,BE -3648078336,3648078591,BF +3648077824,3648078463,BE +3648078464,3648078591,BF 3648078592,3648079103,BE 3648079104,3648079359,CG 3648079360,3648079615,CD @@ -103636,9 +98237,7 @@ 3648397312,3648405503,NO 3648405504,3648413695,RU 3648413696,3648417791,SK -3648417792,3648418047,GB -3648418048,3648418303,ES -3648418304,3648425983,GB +3648417792,3648425983,GB 3648425984,3648430079,IT 3648430080,3648434175,NL 3648434176,3648438271,RU @@ -103669,9 +98268,7 @@ 3649241088,3649306623,TR 3649306624,3649372159,IL 3649372160,3649437695,IT -3649437696,3649512447,GB -3649512448,3649512703,IN -3649512704,3649568767,GB +3649437696,3649568767,GB 3649568768,3649634303,BE 3649634304,3649765375,GB 3649765376,3649830911,EG @@ -103686,9 +98283,7 @@ 3649859072,3649859583,US 3649859584,3649863679,SE 3649863680,3649896447,FI -3649896448,3649950719,IT -3649950720,3649950975,US -3649950976,3649961983,IT +3649896448,3649961983,IT 3649961984,3650093055,SE 3650093056,3650097151,JO 3650097152,3650101247,SK @@ -103764,13 +98359,15 @@ 3650351992,3650351999,HU 3650352000,3650352007,GB 3650352008,3650352015,IE -3650352016,3650352264,GB -3650352265,3650352265,DE -3650352266,3650352279,GB +3650352016,3650352127,GB +3650352128,3650352279,DE 3650352280,3650352287,IT -3650352288,3650352319,GB +3650352288,3650352295,DE +3650352296,3650352303,SE +3650352304,3650352319,DE 3650352320,3650352327,PL -3650352328,3650355199,GB +3650352328,3650352383,DE +3650352384,3650355199,GB 3650355200,3650359295,CH 3650359296,3650363391,NL 3650363392,3650367487,GB @@ -103796,9 +98393,7 @@ 3650437120,3650441215,NL 3650441216,3650445311,IT 3650445312,3650449407,GB -3650449408,3650450175,NO -3650450176,3650450431,PL -3650450432,3650453503,NO +3650449408,3650453503,NO 3650453504,3650457599,NL 3650457600,3650461695,ES 3650461696,3650465791,AT @@ -103845,40 +98440,38 @@ 3650682880,3650748415,PL 3650748416,3650879487,GB 3650879488,3650912255,RO -3650912256,3650912511,GB -3650912512,3650912767,FR +3650912256,3650912639,GB +3650912640,3650912767,FR 3650912768,3650915327,GB 3650915328,3650915337,FR 3650915338,3650915338,US 3650915339,3650915583,FR 3650915584,3650922495,GB 3650922496,3650922751,US -3650922752,3650926079,GB -3650926080,3650926335,BE -3650926336,3650926591,GB -3650926592,3650929151,ES -3650929152,3650939599,GB +3650922752,3650926591,GB +3650926592,3650929663,ES +3650929664,3650930431,GB +3650930432,3650930687,DE +3650930688,3650939599,GB 3650939600,3650939607,FR -3650939608,3650945023,GB +3650939608,3650944511,GB +3650944512,3650944767,FR +3650944768,3650945023,GB 3650945024,3651010559,DK 3651010560,3651076095,GB 3651076096,3651108863,DE 3651108864,3651141631,EE 3651141632,3651207167,DE -3651207168,3651210239,EU -3651210240,3651210751,GB +3651207168,3651210495,EU +3651210496,3651210751,GB 3651210752,3651272703,EU 3651272704,3651338239,CH -3651338240,3651342847,GB -3651342848,3651343103,US -3651343104,3651350783,GB +3651338240,3651350783,GB 3651350784,3651351039,EU 3651351040,3651403775,GB 3651403776,3651534847,AE 3651534848,3651600383,NL -3651600384,3651659951,FR -3651659952,3651659959,BE -3651659960,3651665919,FR +3651600384,3651665919,FR 3651665920,3651670015,ES 3651670016,3651674111,GB 3651674112,3651682303,CH @@ -103953,9 +98546,7 @@ 3651985408,3651997695,PL 3651997696,3652001791,RU 3652001792,3652005887,HU -3652005888,3652006143,GB -3652006144,3652006399,US -3652006400,3652009983,GB +3652005888,3652009983,GB 3652009984,3652014079,RU 3652014080,3652018175,SA 3652018176,3652022271,IE @@ -103973,9 +98564,8 @@ 3652083712,3652087807,RU 3652087808,3652094463,IT 3652094464,3652094975,US -3652094976,3652095487,IT -3652095488,3652095743,US -3652095744,3652095999,IT +3652094976,3652095231,IT +3652095232,3652095999,US 3652096000,3652100095,BG 3652100096,3652108287,RU 3652108288,3652116479,FR @@ -103991,16 +98581,20 @@ 3652149248,3652153343,DE 3652153344,3652157439,SE 3652157440,3652165631,RU -3652165632,3652166655,FR -3652166656,3652166783,GP -3652166784,3652167167,FR -3652167168,3652167423,GP -3652167424,3652168447,FR -3652168448,3652168959,MQ +3652165632,3652165887,MQ +3652165888,3652168703,FR +3652168704,3652168959,MQ 3652168960,3652169215,FR -3652169216,3652169727,GF -3652169728,3652171775,MQ -3652171776,3652173823,RE +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 3652173824,3652177919,AT 3652177920,3652182015,CY 3652182016,3652190207,DE @@ -104016,11 +98610,19 @@ 3653394432,3653402623,NL 3653402624,3653407487,GB 3653407488,3653407743,US -3653407744,3653408767,GB +3653407744,3653407999,GB +3653408000,3653408119,US +3653408120,3653408127,GB +3653408128,3653408255,US +3653408256,3653408767,GB 3653408768,3653409023,CD 3653409024,3653410060,GB 3653410061,3653410061,YT -3653410062,3653410559,GB +3653410062,3653410095,GB +3653410096,3653410111,US +3653410112,3653410199,GB +3653410200,3653410247,US +3653410248,3653410559,GB 3653410560,3653410815,IL 3653410816,3653414911,CZ 3653414912,3653419007,IT @@ -104035,9 +98637,7 @@ 3653451776,3653464063,RU 3653464064,3653468159,NL 3653468160,3653472255,GR -3653472256,3653472511,NL -3653472512,3653472767,US -3653472768,3653473023,NL +3653472256,3653473023,NL 3653473024,3653473279,US 3653473280,3653476351,NL 3653476352,3653480447,CZ @@ -104088,9 +98688,7 @@ 3653685248,3653689343,DK 3653689344,3653693439,LV 3653693440,3653697535,DE -3653697536,3653704383,IT -3653704384,3653704447,GB -3653704448,3653705727,IT +3653697536,3653705727,IT 3653705728,3653713919,NO 3653713920,3653718015,DE 3653718016,3653722111,AT @@ -104178,9 +98776,7 @@ 3664009216,3664052223,CN 3664052224,3664084991,NZ 3664084992,3664117759,KR -3664117760,3664200447,HK -3664200448,3664200703,GB -3664200704,3664248831,HK +3664117760,3664248831,HK 3664248832,3664642047,CN 3664642048,3664707583,JP 3664707584,3664773119,MY @@ -104217,9 +98813,7 @@ 3673948160,3674210303,HK 3674210304,3678404607,JP 3678404608,3678535679,IN -3678535680,3678593279,JP -3678593280,3678593535,US -3678593536,3678666751,JP +3678535680,3678666751,JP 3678666752,3678928895,TW 3678928896,3678994431,CN 3678994432,3679027199,HK @@ -104243,17 +98837,9 @@ 3680239616,3680403455,MY 3680403456,3680436223,JP 3680436224,3680501759,MY -3680501760,3680879615,JP -3680879616,3680879871,US -3680879872,3681560063,JP -3681560064,3681560319,US -3681560320,3681569023,JP -3681569024,3681569279,US -3681569280,3682554623,JP +3680501760,3682554623,JP 3682554624,3682554879,AP -3682554880,3682587903,JP -3682587904,3682588159,US -3682588160,3682598911,JP +3682554880,3682598911,JP 3682598912,3684696063,CN 3684696064,3688366079,JP 3688366080,3689938943,CN @@ -104262,24 +98848,18 @@ 3690463232,3690987519,KR 3690987520,3695181823,JP 3695181824,3697278975,KR -3697278976,3697311487,JP -3697311488,3697311743,US -3697311744,3697606655,JP +3697278976,3697606655,JP 3697606656,3697655807,AU 3697655808,3697672191,CN 3697672192,3697737727,JP 3697737728,3697803263,KR -3697803264,3698251007,JP -3698251008,3698251263,US -3698251264,3698327551,JP +3697803264,3698327551,JP 3698327552,3698589695,CN 3698589696,3699376127,KR 3699376128,3700424703,TW 3700424704,3700752383,JP 3700752384,3700817919,KR -3700817920,3700828159,JP -3700828160,3700829183,US -3700829184,3700977663,JP +3700817920,3700977663,JP 3700977664,3700979711,AU 3700979712,3700981759,JP 3700981760,3701014527,CN @@ -104380,9 +98960,7 @@ 3732733952,3732799487,CN 3732799488,3732832255,PH 3732832256,3732865023,CN -3732865024,3732870911,PH -3732870912,3732871167,US -3732871168,3732930559,PH +3732865024,3732930559,PH 3732930560,3733979135,CN 3733979136,3734503423,JP 3734503424,3734765567,NZ @@ -104394,9 +98972,7 @@ 3735404544,3735420927,ID 3735420928,3735551999,HK 3735552000,3739222015,CN -3739222016,3739555071,JP -3739555072,3739555327,US -3739555328,3739570175,JP +3739222016,3739570175,JP 3739570176,3739572223,ID 3739572224,3739574271,AU 3739574272,3739680767,JP @@ -104412,7 +98988,9 @@ 3742629888,3742760959,CN 3742760960,3742892031,TW 3742892032,3742957567,TH -3742957568,3742973951,PH +3742957568,3742959871,PH +3742959872,3742960127,US +3742960128,3742973951,PH 3742973952,3742982143,SG 3742982144,3742986239,ID 3742986240,3742988287,AU @@ -104443,9 +99021,7 @@ 3743125504,3743129599,ID 3743129600,3743129855,MY 3743129856,3743130623,HK -3743130624,3743132159,SG -3743132160,3743132415,GB -3743132416,3743133695,SG +3743130624,3743133695,SG 3743133696,3743134719,AU 3743134720,3743135743,JP 3743135744,3743136767,CN @@ -104468,9 +99044,7 @@ 3749183488,3749838847,CN 3749838848,3749839871,SG 3749839872,3749840895,IN -3749841920,3749842943,AU -3749843968,3749846015,AU -3749846016,3749847039,IN +3749841920,3749847039,AU 3749847040,3749855231,HK 3749855232,3749969919,KR 3749969920,3750232063,JP diff --git a/src/ext/README b/src/ext/README index 8c850bef66..58ba7f699d 100644 --- a/src/ext/README +++ b/src/ext/README @@ -34,6 +34,11 @@ 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?) + 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. diff --git a/src/ext/curve25519_donna/README b/src/ext/curve25519_donna/README new file mode 100644 index 0000000000..9f77bd7d95 --- /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 0000000000..9ebd8a12d8 --- /dev/null +++ b/src/ext/curve25519_donna/curve25519-donna-c64.c @@ -0,0 +1,449 @@ +/* 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 <string.h> +#include <stdint.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 0000000000..80e4594eec --- /dev/null +++ b/src/ext/curve25519_donna/curve25519-donna.c @@ -0,0 +1,730 @@ +/* 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 <string.h> +#include <stdint.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/ext/eventdns.c b/src/ext/eventdns.c index 7e99f55626..3ee9f72459 100644 --- a/src/ext/eventdns.c +++ b/src/ext/eventdns.c @@ -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; @@ -1264,7 +1266,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 +1292,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 +1312,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 +1329,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 +1347,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 +1857,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 +1993,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 +2072,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 +2124,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 +2280,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; } @@ -2311,14 +2313,14 @@ _evdns_nameserver_add_impl(const struct sockaddr *address, !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 +2329,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 +2358,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 +2391,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 +2420,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 +2438,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 +2455,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 +2469,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 +2592,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 +2608,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 +2632,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 +2656,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 +2872,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 +2883,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 +2953,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 +2961,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 +2982,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; @@ -3043,7 +3045,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 +3144,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 +3171,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 +3183,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 +3196,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 +3252,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 +3264,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 +3284,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 +3292,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; diff --git a/src/ext/ht.h b/src/ext/ht.h index 385aff2a9b..669a2ed929 100644 --- a/src/ext/ht.h +++ b/src/ext/ht.h @@ -1,6 +1,6 @@ /* 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. */ diff --git a/src/ext/tor_queue.h b/src/ext/tor_queue.h index 595e4a3423..f05e48c18e 100644 --- a/src/ext/tor_queue.h +++ b/src/ext/tor_queue.h @@ -32,8 +32,8 @@ * @(#)queue.h 8.5 (Berkeley) 8/20/94 */ -#ifndef _SYS_QUEUE_H_ -#define _SYS_QUEUE_H_ +#ifndef TOR_QUEUE_H_ +#define TOR_QUEUE_H_ /* * This file defines five types of data structures: singly-linked lists, @@ -83,78 +83,73 @@ */ #if defined(QUEUE_MACRO_DEBUG) || (defined(_KERNEL) && defined(DIAGNOSTIC)) -#define _Q_INVALIDATE(a) (a) = ((void *)-1) +#define TOR_Q_INVALIDATE_(a) (a) = ((void *)-1) #else -#define _Q_INVALIDATE(a) +#define TOR_Q_INVALIDATE_(a) #endif /* * Singly-linked List definitions. */ -#define SLIST_HEAD(name, type) \ +#define TOR_SLIST_HEAD(name, type) \ struct name { \ struct type *slh_first; /* first element */ \ } -#define SLIST_HEAD_INITIALIZER(head) \ +#define TOR_SLIST_HEAD_INITIALIZER(head) \ { NULL } -/* XXXX This macro name conflicts with a typedef in winnt.h, so Tor - * has to redefine it. */ #define TOR_SLIST_ENTRY(type) \ struct { \ struct type *sle_next; /* next element */ \ } -#ifndef _WIN32 -#define SLIST_ENTRY(type) TOR_SLIST_ENTRY(type) -#endif /* * Singly-linked List access methods. */ -#define SLIST_FIRST(head) ((head)->slh_first) -#define SLIST_END(head) NULL -#define SLIST_EMPTY(head) (SLIST_FIRST(head) == SLIST_END(head)) -#define SLIST_NEXT(elm, field) ((elm)->field.sle_next) - -#define SLIST_FOREACH(var, head, field) \ - for((var) = SLIST_FIRST(head); \ - (var) != SLIST_END(head); \ - (var) = SLIST_NEXT(var, field)) - -#define SLIST_FOREACH_SAFE(var, head, field, tvar) \ - for ((var) = SLIST_FIRST(head); \ - (var) && ((tvar) = SLIST_NEXT(var, field), 1); \ +#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 SLIST_INIT(head) { \ - SLIST_FIRST(head) = SLIST_END(head); \ +#define TOR_SLIST_INIT(head) { \ + TOR_SLIST_FIRST(head) = TOR_SLIST_END(head); \ } -#define SLIST_INSERT_AFTER(slistelm, elm, field) do { \ +#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 SLIST_INSERT_HEAD(head, elm, field) do { \ +#define TOR_SLIST_INSERT_HEAD(head, elm, field) do { \ (elm)->field.sle_next = (head)->slh_first; \ (head)->slh_first = (elm); \ } while (0) -#define SLIST_REMOVE_AFTER(elm, field) do { \ +#define TOR_SLIST_REMOVE_AFTER(elm, field) do { \ (elm)->field.sle_next = (elm)->field.sle_next->field.sle_next; \ } while (0) -#define SLIST_REMOVE_HEAD(head, field) do { \ +#define TOR_SLIST_REMOVE_HEAD(head, field) do { \ (head)->slh_first = (head)->slh_first->field.sle_next; \ } while (0) -#define SLIST_REMOVE(head, elm, type, field) do { \ +#define TOR_SLIST_REMOVE(head, elm, type, field) do { \ if ((head)->slh_first == (elm)) { \ - SLIST_REMOVE_HEAD((head), field); \ + TOR_SLIST_REMOVE_HEAD((head), field); \ } else { \ struct type *curelm = (head)->slh_first; \ \ @@ -162,22 +157,22 @@ struct { \ curelm = curelm->field.sle_next; \ curelm->field.sle_next = \ curelm->field.sle_next->field.sle_next; \ - _Q_INVALIDATE((elm)->field.sle_next); \ + TOR_Q_INVALIDATE_((elm)->field.sle_next); \ } \ } while (0) /* * List definitions. */ -#define LIST_HEAD(name, type) \ +#define TOR_LIST_HEAD(name, type) \ struct name { \ struct type *lh_first; /* first element */ \ } -#define LIST_HEAD_INITIALIZER(head) \ +#define TOR_LIST_HEAD_INITIALIZER(head) \ { NULL } -#define LIST_ENTRY(type) \ +#define TOR_LIST_ENTRY(type) \ struct { \ struct type *le_next; /* next element */ \ struct type **le_prev; /* address of previous next element */ \ @@ -186,29 +181,29 @@ struct { \ /* * List access methods */ -#define LIST_FIRST(head) ((head)->lh_first) -#define LIST_END(head) NULL -#define LIST_EMPTY(head) (LIST_FIRST(head) == LIST_END(head)) -#define LIST_NEXT(elm, field) ((elm)->field.le_next) - -#define LIST_FOREACH(var, head, field) \ - for((var) = LIST_FIRST(head); \ - (var)!= LIST_END(head); \ - (var) = LIST_NEXT(var, field)) - -#define LIST_FOREACH_SAFE(var, head, field, tvar) \ - for ((var) = LIST_FIRST(head); \ - (var) && ((tvar) = LIST_NEXT(var, field), 1); \ +#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 LIST_INIT(head) do { \ - LIST_FIRST(head) = LIST_END(head); \ +#define TOR_LIST_INIT(head) do { \ + TOR_LIST_FIRST(head) = TOR_LIST_END(head); \ } while (0) -#define LIST_INSERT_AFTER(listelm, elm, field) do { \ +#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; \ @@ -216,52 +211,52 @@ struct { \ (elm)->field.le_prev = &(listelm)->field.le_next; \ } while (0) -#define LIST_INSERT_BEFORE(listelm, elm, field) do { \ +#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 LIST_INSERT_HEAD(head, elm, field) do { \ +#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 LIST_REMOVE(elm, field) do { \ +#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; \ - _Q_INVALIDATE((elm)->field.le_prev); \ - _Q_INVALIDATE((elm)->field.le_next); \ + TOR_Q_INVALIDATE_((elm)->field.le_prev); \ + TOR_Q_INVALIDATE_((elm)->field.le_next); \ } while (0) -#define LIST_REPLACE(elm, elm2, field) do { \ +#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); \ - _Q_INVALIDATE((elm)->field.le_prev); \ - _Q_INVALIDATE((elm)->field.le_next); \ + TOR_Q_INVALIDATE_((elm)->field.le_prev); \ + TOR_Q_INVALIDATE_((elm)->field.le_next); \ } while (0) /* * Simple queue definitions. */ -#define SIMPLEQ_HEAD(name, type) \ +#define TOR_SIMPLEQ_HEAD(name, type) \ struct name { \ struct type *sqh_first; /* first element */ \ struct type **sqh_last; /* addr of last next element */ \ } -#define SIMPLEQ_HEAD_INITIALIZER(head) \ +#define TOR_SIMPLEQ_HEAD_INITIALIZER(head) \ { NULL, &(head).sqh_first } -#define SIMPLEQ_ENTRY(type) \ +#define TOR_SIMPLEQ_ENTRY(type) \ struct { \ struct type *sqe_next; /* next element */ \ } @@ -269,53 +264,53 @@ struct { \ /* * Simple queue access methods. */ -#define SIMPLEQ_FIRST(head) ((head)->sqh_first) -#define SIMPLEQ_END(head) NULL -#define SIMPLEQ_EMPTY(head) (SIMPLEQ_FIRST(head) == SIMPLEQ_END(head)) -#define SIMPLEQ_NEXT(elm, field) ((elm)->field.sqe_next) - -#define SIMPLEQ_FOREACH(var, head, field) \ - for((var) = SIMPLEQ_FIRST(head); \ - (var) != SIMPLEQ_END(head); \ - (var) = SIMPLEQ_NEXT(var, field)) - -#define SIMPLEQ_FOREACH_SAFE(var, head, field, tvar) \ - for ((var) = SIMPLEQ_FIRST(head); \ - (var) && ((tvar) = SIMPLEQ_NEXT(var, field), 1); \ +#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 SIMPLEQ_INIT(head) do { \ +#define TOR_SIMPLEQ_INIT(head) do { \ (head)->sqh_first = NULL; \ (head)->sqh_last = &(head)->sqh_first; \ } while (0) -#define SIMPLEQ_INSERT_HEAD(head, elm, field) do { \ +#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 SIMPLEQ_INSERT_TAIL(head, elm, field) do { \ +#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 SIMPLEQ_INSERT_AFTER(head, listelm, elm, field) do { \ +#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 SIMPLEQ_REMOVE_HEAD(head, field) do { \ +#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 SIMPLEQ_REMOVE_AFTER(head, elm, field) do { \ +#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; \ @@ -324,16 +319,16 @@ struct { \ /* * Tail queue definitions. */ -#define TAILQ_HEAD(name, type) \ +#define TOR_TAILQ_HEAD(name, type) \ struct name { \ struct type *tqh_first; /* first element */ \ struct type **tqh_last; /* addr of last next element */ \ } -#define TAILQ_HEAD_INITIALIZER(head) \ +#define TOR_TAILQ_HEAD_INITIALIZER(head) \ { NULL, &(head).tqh_first } -#define TAILQ_ENTRY(type) \ +#define TOR_TAILQ_ENTRY(type) \ struct { \ struct type *tqe_next; /* next element */ \ struct type **tqe_prev; /* address of previous next element */ \ @@ -342,49 +337,49 @@ struct { \ /* * tail queue access methods */ -#define TAILQ_FIRST(head) ((head)->tqh_first) -#define TAILQ_END(head) NULL -#define TAILQ_NEXT(elm, field) ((elm)->field.tqe_next) -#define TAILQ_LAST(head, headname) \ +#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 TAILQ_PREV(elm, headname, field) \ +#define TOR_TAILQ_PREV(elm, headname, field) \ (*(((struct headname *)((elm)->field.tqe_prev))->tqh_last)) -#define TAILQ_EMPTY(head) \ - (TAILQ_FIRST(head) == TAILQ_END(head)) - -#define TAILQ_FOREACH(var, head, field) \ - for((var) = TAILQ_FIRST(head); \ - (var) != TAILQ_END(head); \ - (var) = TAILQ_NEXT(var, field)) - -#define TAILQ_FOREACH_SAFE(var, head, field, tvar) \ - for ((var) = TAILQ_FIRST(head); \ - (var) != TAILQ_END(head) && \ - ((tvar) = TAILQ_NEXT(var, field), 1); \ +#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 TAILQ_FOREACH_REVERSE(var, head, headname, field) \ - for((var) = TAILQ_LAST(head, headname); \ - (var) != TAILQ_END(head); \ - (var) = TAILQ_PREV(var, headname, field)) +#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 TAILQ_FOREACH_REVERSE_SAFE(var, head, headname, field, tvar) \ - for ((var) = TAILQ_LAST(head, headname); \ - (var) != TAILQ_END(head) && \ - ((tvar) = TAILQ_PREV(var, headname, field), 1); \ +#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 TAILQ_INIT(head) do { \ +#define TOR_TAILQ_INIT(head) do { \ (head)->tqh_first = NULL; \ (head)->tqh_last = &(head)->tqh_first; \ } while (0) -#define TAILQ_INSERT_HEAD(head, elm, field) do { \ +#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; \ @@ -394,14 +389,14 @@ struct { \ (elm)->field.tqe_prev = &(head)->tqh_first; \ } while (0) -#define TAILQ_INSERT_TAIL(head, elm, field) do { \ +#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 TAILQ_INSERT_AFTER(head, listelm, elm, field) do { \ +#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; \ @@ -411,25 +406,25 @@ struct { \ (elm)->field.tqe_prev = &(listelm)->field.tqe_next; \ } while (0) -#define TAILQ_INSERT_BEFORE(listelm, elm, field) do { \ +#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 TAILQ_REMOVE(head, elm, field) do { \ +#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; \ - _Q_INVALIDATE((elm)->field.tqe_prev); \ - _Q_INVALIDATE((elm)->field.tqe_next); \ + TOR_Q_INVALIDATE_((elm)->field.tqe_prev); \ + TOR_Q_INVALIDATE_((elm)->field.tqe_next); \ } while (0) -#define TAILQ_REPLACE(head, elm, elm2, field) do { \ +#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; \ @@ -437,23 +432,23 @@ struct { \ (head)->tqh_last = &(elm2)->field.tqe_next; \ (elm2)->field.tqe_prev = (elm)->field.tqe_prev; \ *(elm2)->field.tqe_prev = (elm2); \ - _Q_INVALIDATE((elm)->field.tqe_prev); \ - _Q_INVALIDATE((elm)->field.tqe_next); \ + TOR_Q_INVALIDATE_((elm)->field.tqe_prev); \ + TOR_Q_INVALIDATE_((elm)->field.tqe_next); \ } while (0) /* * Circular queue definitions. */ -#define CIRCLEQ_HEAD(name, type) \ +#define TOR_CIRCLEQ_HEAD(name, type) \ struct name { \ struct type *cqh_first; /* first element */ \ struct type *cqh_last; /* last element */ \ } -#define CIRCLEQ_HEAD_INITIALIZER(head) \ - { CIRCLEQ_END(&head), CIRCLEQ_END(&head) } +#define TOR_CIRCLEQ_HEAD_INITIALIZER(head) \ + { TOR_CIRCLEQ_END(&head), TOR_CIRCLEQ_END(&head) } -#define CIRCLEQ_ENTRY(type) \ +#define TOR_CIRCLEQ_ENTRY(type) \ struct { \ struct type *cqe_next; /* next element */ \ struct type *cqe_prev; /* previous element */ \ @@ -462,112 +457,112 @@ struct { \ /* * Circular queue access methods */ -#define CIRCLEQ_FIRST(head) ((head)->cqh_first) -#define CIRCLEQ_LAST(head) ((head)->cqh_last) -#define CIRCLEQ_END(head) ((void *)(head)) -#define CIRCLEQ_NEXT(elm, field) ((elm)->field.cqe_next) -#define CIRCLEQ_PREV(elm, field) ((elm)->field.cqe_prev) -#define CIRCLEQ_EMPTY(head) \ - (CIRCLEQ_FIRST(head) == CIRCLEQ_END(head)) - -#define CIRCLEQ_FOREACH(var, head, field) \ - for((var) = CIRCLEQ_FIRST(head); \ - (var) != CIRCLEQ_END(head); \ - (var) = CIRCLEQ_NEXT(var, field)) - -#define CIRCLEQ_FOREACH_SAFE(var, head, field, tvar) \ - for ((var) = CIRCLEQ_FIRST(head); \ - (var) != CIRCLEQ_END(head) && \ - ((tvar) = CIRCLEQ_NEXT(var, field), 1); \ +#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 CIRCLEQ_FOREACH_REVERSE(var, head, field) \ - for((var) = CIRCLEQ_LAST(head); \ - (var) != CIRCLEQ_END(head); \ - (var) = CIRCLEQ_PREV(var, field)) +#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 CIRCLEQ_FOREACH_REVERSE_SAFE(var, head, headname, field, tvar) \ - for ((var) = CIRCLEQ_LAST(head, headname); \ - (var) != CIRCLEQ_END(head) && \ - ((tvar) = CIRCLEQ_PREV(var, headname, field), 1); \ +#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 CIRCLEQ_INIT(head) do { \ - (head)->cqh_first = CIRCLEQ_END(head); \ - (head)->cqh_last = CIRCLEQ_END(head); \ +#define TOR_CIRCLEQ_INIT(head) do { \ + (head)->cqh_first = TOR_CIRCLEQ_END(head); \ + (head)->cqh_last = TOR_CIRCLEQ_END(head); \ } while (0) -#define CIRCLEQ_INSERT_AFTER(head, listelm, elm, field) do { \ +#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 == CIRCLEQ_END(head)) \ + 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 CIRCLEQ_INSERT_BEFORE(head, listelm, elm, field) do { \ +#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 == CIRCLEQ_END(head)) \ + 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 CIRCLEQ_INSERT_HEAD(head, elm, field) do { \ +#define TOR_CIRCLEQ_INSERT_HEAD(head, elm, field) do { \ (elm)->field.cqe_next = (head)->cqh_first; \ - (elm)->field.cqe_prev = CIRCLEQ_END(head); \ - if ((head)->cqh_last == CIRCLEQ_END(head)) \ + (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 CIRCLEQ_INSERT_TAIL(head, elm, field) do { \ - (elm)->field.cqe_next = CIRCLEQ_END(head); \ +#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 == CIRCLEQ_END(head)) \ + 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 CIRCLEQ_REMOVE(head, elm, field) do { \ - if ((elm)->field.cqe_next == CIRCLEQ_END(head)) \ +#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 == CIRCLEQ_END(head)) \ + 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; \ - _Q_INVALIDATE((elm)->field.cqe_prev); \ - _Q_INVALIDATE((elm)->field.cqe_next); \ + TOR_Q_INVALIDATE_((elm)->field.cqe_prev); \ + TOR_Q_INVALIDATE_((elm)->field.cqe_next); \ } while (0) -#define CIRCLEQ_REPLACE(head, elm, elm2, field) do { \ +#define TOR_CIRCLEQ_REPLACE(head, elm, elm2, field) do { \ if (((elm2)->field.cqe_next = (elm)->field.cqe_next) == \ - CIRCLEQ_END(head)) \ + 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) == \ - CIRCLEQ_END(head)) \ + TOR_CIRCLEQ_END(head)) \ (head).cqh_first = (elm2); \ else \ (elm2)->field.cqe_prev->field.cqe_next = (elm2); \ - _Q_INVALIDATE((elm)->field.cqe_prev); \ - _Q_INVALIDATE((elm)->field.cqe_next); \ + TOR_Q_INVALIDATE_((elm)->field.cqe_prev); \ + TOR_Q_INVALIDATE_((elm)->field.cqe_next); \ } while (0) #endif /* !_SYS_QUEUE_H_ */ diff --git a/src/or/Makefile.nmake b/src/or/Makefile.nmake index 677618e74f..d67123a9a6 100644 --- a/src/or/Makefile.nmake +++ b/src/or/Makefile.nmake @@ -1,28 +1,74 @@ 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 channel.obj channeltls.obj circuitbuild.obj \ - circuitlist.obj circuitmux.obj circuitmux_ewma.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 \ + 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 index f4c31295a8..826eb301db 100644 --- a/src/or/addressmap.c +++ b/src/or/addressmap.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 ADDRESSMAP_PRIVATE @@ -45,7 +45,7 @@ typedef struct { char *new_address; time_t expires; - addressmap_entry_source_t source:3; + ENUM_BF(addressmap_entry_source_t) source:3; unsigned src_wildcard:1; unsigned dst_wildcard:1; short num_resolve_failures; diff --git a/src/or/addressmap.h b/src/or/addressmap.h index 3f1c44571f..40210ee990 100644 --- a/src/or/addressmap.h +++ b/src/or/addressmap.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 */ #ifndef TOR_ADDRESSMAP_H diff --git a/src/or/buffers.c b/src/or/buffers.c index 4d4c879627..73c25579d6 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 */ /** @@ -335,11 +335,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), @@ -348,7 +348,7 @@ 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; diff --git a/src/or/buffers.h b/src/or/buffers.h index f31d2910f7..c947f0ba98 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 */ /** diff --git a/src/or/channel.c b/src/or/channel.c index 625d957811..104b018cf4 100644 --- a/src/or/channel.c +++ b/src/or/channel.c @@ -1,4 +1,4 @@ -/* * Copyright (c) 2012, The Tor Project, Inc. */ +/* * Copyright (c) 2012-2013, The Tor Project, Inc. */ /* See LICENSE for licensing information */ /** @@ -33,7 +33,7 @@ typedef struct cell_queue_entry_s cell_queue_entry_t; struct cell_queue_entry_s { - SIMPLEQ_ENTRY(cell_queue_entry_s) next; + TOR_SIMPLEQ_ENTRY(cell_queue_entry_s) next; enum { CELL_QUEUE_FIXED, CELL_QUEUE_VAR, @@ -89,7 +89,7 @@ HT_HEAD(channel_idmap, channel_idmap_entry_s) channel_identity_map = typedef struct channel_idmap_entry_s { HT_ENTRY(channel_idmap_entry_s) node; uint8_t digest[DIGEST_LEN]; - LIST_HEAD(channel_list_s, channel_s) channel_list; + TOR_LIST_HEAD(channel_list_s, channel_s) channel_list; } channel_idmap_entry_t; static INLINE unsigned @@ -554,10 +554,10 @@ channel_add_to_digest_map(channel_t *chan) if (! ent) { ent = tor_malloc(sizeof(channel_idmap_entry_t)); memcpy(ent->digest, chan->identity_digest, DIGEST_LEN); - LIST_INIT(&ent->channel_list); + TOR_LIST_INIT(&ent->channel_list); HT_INSERT(channel_idmap, &channel_identity_map, ent); } - LIST_INSERT_HEAD(&ent->channel_list, chan, next_with_same_id); + TOR_LIST_INSERT_HEAD(&ent->channel_list, chan, next_with_same_id); log_debug(LD_CHANNEL, "Added channel %p (global ID " U64_FORMAT ") " @@ -612,7 +612,7 @@ channel_remove_from_digest_map(channel_t *chan) #endif /* Pull it out of its list, wherever that list is */ - LIST_REMOVE(chan, next_with_same_id); + 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); @@ -621,7 +621,7 @@ channel_remove_from_digest_map(channel_t *chan) if (ent) { /* Okay, it's here */ - if (LIST_EMPTY(&ent->channel_list)) { + if (TOR_LIST_EMPTY(&ent->channel_list)) { HT_REMOVE(channel_idmap, &channel_identity_map, ent); tor_free(ent); } @@ -691,7 +691,7 @@ channel_find_by_remote_digest(const char *identity_digest) memcpy(search.digest, identity_digest, DIGEST_LEN); ent = HT_FIND(channel_idmap, &channel_identity_map, &search); if (ent) { - rv = LIST_FIRST(&ent->channel_list); + rv = TOR_LIST_FIRST(&ent->channel_list); } return rv; @@ -709,7 +709,7 @@ channel_next_with_digest(channel_t *chan) { tor_assert(chan); - return LIST_NEXT(chan, next_with_same_id); + return TOR_LIST_NEXT(chan, next_with_same_id); } /** @@ -735,8 +735,8 @@ channel_init(channel_t *chan) chan->next_circ_id = crypto_rand_int(1 << 15); /* Initialize queues. */ - SIMPLEQ_INIT(&chan->incoming_queue); - SIMPLEQ_INIT(&chan->outgoing_queue); + 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)); @@ -879,16 +879,16 @@ channel_force_free(channel_t *chan) } /* We might still have a cell queue; kill it */ - SIMPLEQ_FOREACH_SAFE(cell, &chan->incoming_queue, next, cell_tmp) { + TOR_SIMPLEQ_FOREACH_SAFE(cell, &chan->incoming_queue, next, cell_tmp) { cell_queue_entry_free(cell, 0); } - SIMPLEQ_INIT(&chan->incoming_queue); + TOR_SIMPLEQ_INIT(&chan->incoming_queue); /* Outgoing cell queue is similar, but we can have to free packed cells */ - SIMPLEQ_FOREACH_SAFE(cell, &chan->outgoing_queue, next, cell_tmp) { + TOR_SIMPLEQ_FOREACH_SAFE(cell, &chan->outgoing_queue, next, cell_tmp) { cell_queue_entry_free(cell, 0); } - SIMPLEQ_INIT(&chan->outgoing_queue); + TOR_SIMPLEQ_INIT(&chan->outgoing_queue); tor_free(chan); } @@ -1051,7 +1051,7 @@ channel_set_cell_handlers(channel_t *chan, chan->var_cell_handler = var_cell_handler; /* Re-run the queue if we have one and there's any reason to */ - if (! SIMPLEQ_EMPTY(&chan->incoming_queue) && + if (! TOR_SIMPLEQ_EMPTY(&chan->incoming_queue) && try_again && (chan->cell_handler || chan->var_cell_handler)) channel_process_cells(chan); @@ -1686,7 +1686,7 @@ channel_write_cell_queue_entry(channel_t *chan, cell_queue_entry_t *q) } /* Can we send it right out? If so, try */ - if (SIMPLEQ_EMPTY(&chan->outgoing_queue) && + 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) { @@ -1728,7 +1728,7 @@ channel_write_cell_queue_entry(channel_t *chan, cell_queue_entry_t *q) * used the stack. */ tmp = cell_queue_entry_dup(q); - SIMPLEQ_INSERT_TAIL(&chan->outgoing_queue, tmp, next); + TOR_SIMPLEQ_INSERT_TAIL(&chan->outgoing_queue, tmp, next); /* Try to process the queue? */ if (chan->state == CHANNEL_STATE_OPEN) channel_flush_cells(chan); } @@ -1914,15 +1914,15 @@ channel_change_state(channel_t *chan, channel_state_t to_state) channel_do_open_actions(chan); /* Check for queued cells to process */ - if (! SIMPLEQ_EMPTY(&chan->incoming_queue)) + if (! TOR_SIMPLEQ_EMPTY(&chan->incoming_queue)) channel_process_cells(chan); - if (! SIMPLEQ_EMPTY(&chan->outgoing_queue)) + 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(SIMPLEQ_EMPTY(&chan->incoming_queue)); - tor_assert(SIMPLEQ_EMPTY(&chan->outgoing_queue)); + tor_assert(TOR_SIMPLEQ_EMPTY(&chan->incoming_queue)); + tor_assert(TOR_SIMPLEQ_EMPTY(&chan->outgoing_queue)); } } @@ -2096,7 +2096,7 @@ channel_flush_some_cells_from_outgoing_queue(channel_t *chan, /* If we aren't in CHANNEL_STATE_OPEN, nothing goes through */ if (chan->state == CHANNEL_STATE_OPEN) { while ((unlimited || num_cells > flushed) && - NULL != (q = SIMPLEQ_FIRST(&chan->outgoing_queue))) { + NULL != (q = TOR_SIMPLEQ_FIRST(&chan->outgoing_queue))) { if (1) { /* @@ -2185,7 +2185,7 @@ channel_flush_some_cells_from_outgoing_queue(channel_t *chan, } /* if q got NULLed out, we used it and should remove the queue entry */ - if (!q) SIMPLEQ_REMOVE_HEAD(&chan->outgoing_queue, next); + 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; } @@ -2193,7 +2193,7 @@ channel_flush_some_cells_from_outgoing_queue(channel_t *chan, } /* Did we drain the queue? */ - if (SIMPLEQ_EMPTY(&chan->outgoing_queue)) { + if (TOR_SIMPLEQ_EMPTY(&chan->outgoing_queue)) { channel_timestamp_drained(chan); } @@ -2227,7 +2227,7 @@ channel_more_to_flush(channel_t *chan) tor_assert(chan); /* Check if we have any queued */ - if (! SIMPLEQ_EMPTY(&chan->incoming_queue)) + if (! TOR_SIMPLEQ_EMPTY(&chan->incoming_queue)) return 1; /* Check if any circuits would like to queue some */ @@ -2435,13 +2435,13 @@ channel_process_cells(channel_t *chan) if (!(chan->cell_handler || chan->var_cell_handler)) return; /* Nothing we can do if we have no cells */ - if (SIMPLEQ_EMPTY(&chan->incoming_queue)) return; + 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 = SIMPLEQ_FIRST(&chan->incoming_queue))) { + while (NULL != (q = TOR_SIMPLEQ_FIRST(&chan->incoming_queue))) { tor_assert(q); tor_assert(q->type == CELL_QUEUE_FIXED || q->type == CELL_QUEUE_VAR); @@ -2449,7 +2449,7 @@ channel_process_cells(channel_t *chan) if (q->type == CELL_QUEUE_FIXED && chan->cell_handler) { /* Handle a fixed-length cell */ - SIMPLEQ_REMOVE_HEAD(&chan->incoming_queue, next); + 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 " @@ -2461,7 +2461,7 @@ channel_process_cells(channel_t *chan) } else if (q->type == CELL_QUEUE_VAR && chan->var_cell_handler) { /* Handle a variable-length cell */ - SIMPLEQ_REMOVE_HEAD(&chan->incoming_queue, next); + 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 " @@ -2496,7 +2496,7 @@ channel_queue_cell(channel_t *chan, cell_t *cell) /* Do we need to queue it, or can we just call the handler right away? */ if (!(chan->cell_handler)) need_to_queue = 1; - if (! SIMPLEQ_EMPTY(&chan->incoming_queue)) + if (! TOR_SIMPLEQ_EMPTY(&chan->incoming_queue)) need_to_queue = 1; /* Timestamp for receiving */ @@ -2522,7 +2522,7 @@ channel_queue_cell(channel_t *chan, cell_t *cell) "(global ID " U64_FORMAT ")", cell, chan, U64_PRINTF_ARG(chan->global_identifier)); - SIMPLEQ_INSERT_TAIL(&chan->incoming_queue, q, next); + TOR_SIMPLEQ_INSERT_TAIL(&chan->incoming_queue, q, next); if (chan->cell_handler || chan->var_cell_handler) { channel_process_cells(chan); @@ -2549,7 +2549,7 @@ channel_queue_var_cell(channel_t *chan, var_cell_t *var_cell) /* 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 (! SIMPLEQ_EMPTY(&chan->incoming_queue)) + if (! TOR_SIMPLEQ_EMPTY(&chan->incoming_queue)) need_to_queue = 1; /* Timestamp for receiving */ @@ -2575,7 +2575,7 @@ channel_queue_var_cell(channel_t *chan, var_cell_t *var_cell) "(global ID " U64_FORMAT ")", var_cell, chan, U64_PRINTF_ARG(chan->global_identifier)); - SIMPLEQ_INSERT_TAIL(&chan->incoming_queue, q, next); + TOR_SIMPLEQ_INSERT_TAIL(&chan->incoming_queue, q, next); if (chan->cell_handler || chan->var_cell_handler) { channel_process_cells(chan); @@ -2636,10 +2636,10 @@ void channel_dumpstats(int severity) { if (all_channels && smartlist_len(all_channels) > 0) { - log(severity, LD_GENERAL, + tor_log(severity, LD_GENERAL, "Dumping statistics about %d channels:", smartlist_len(all_channels)); - log(severity, LD_GENERAL, + tor_log(severity, LD_GENERAL, "%d are active, and %d are done and waiting for cleanup", (active_channels != NULL) ? smartlist_len(active_channels) : 0, @@ -2649,10 +2649,10 @@ channel_dumpstats(int severity) SMARTLIST_FOREACH(all_channels, channel_t *, chan, channel_dump_statistics(chan, severity)); - log(severity, LD_GENERAL, + tor_log(severity, LD_GENERAL, "Done spamming about channels now"); } else { - log(severity, LD_GENERAL, + tor_log(severity, LD_GENERAL, "No channels to dump"); } } @@ -2668,10 +2668,10 @@ void channel_listener_dumpstats(int severity) { if (all_listeners && smartlist_len(all_listeners) > 0) { - log(severity, LD_GENERAL, + tor_log(severity, LD_GENERAL, "Dumping statistics about %d channel listeners:", smartlist_len(all_listeners)); - log(severity, LD_GENERAL, + tor_log(severity, LD_GENERAL, "%d are active and %d are done and waiting for cleanup", (active_listeners != NULL) ? smartlist_len(active_listeners) : 0, @@ -2681,10 +2681,10 @@ channel_listener_dumpstats(int severity) SMARTLIST_FOREACH(all_listeners, channel_listener_t *, chan_l, channel_listener_dump_statistics(chan_l, severity)); - log(severity, LD_GENERAL, + tor_log(severity, LD_GENERAL, "Done spamming about channel listeners now"); } else { - log(severity, LD_GENERAL, + tor_log(severity, LD_GENERAL, "No channel listeners to dump"); } } @@ -3115,7 +3115,7 @@ chan_cell_queue_len(const chan_cell_queue_t *queue) { int r = 0; cell_queue_entry_t *cell; - SIMPLEQ_FOREACH(cell, queue, next) + TOR_SIMPLEQ_FOREACH(cell, queue, next) ++r; return r; } @@ -3139,13 +3139,13 @@ channel_dump_statistics(channel_t *chan, int severity) age = (double)(now - chan->timestamp_created); - log(severity, LD_GENERAL, + 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); - log(severity, LD_GENERAL, + 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)", @@ -3158,14 +3158,14 @@ channel_dump_statistics(channel_t *chan, int severity) /* Handle digest and nickname */ if (!tor_digest_is_zero(chan->identity_digest)) { if (chan->nickname) { - log(severity, LD_GENERAL, + 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 { - log(severity, LD_GENERAL, + 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), @@ -3173,13 +3173,13 @@ channel_dump_statistics(channel_t *chan, int severity) } } else { if (chan->nickname) { - log(severity, LD_GENERAL, + 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 { - log(severity, LD_GENERAL, + 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)); @@ -3191,7 +3191,7 @@ channel_dump_statistics(channel_t *chan, int severity) if (have_remote_addr) { char *actual = tor_strdup(channel_get_actual_remote_descr(chan)); remote_addr_str = tor_dup_addr(&remote_addr); - log(severity, LD_GENERAL, + 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\"", @@ -3203,7 +3203,7 @@ channel_dump_statistics(channel_t *chan, int severity) tor_free(actual); } else { char *actual = tor_strdup(channel_get_actual_remote_descr(chan)); - log(severity, LD_GENERAL, + 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\"", @@ -3214,7 +3214,7 @@ channel_dump_statistics(channel_t *chan, int severity) } /* Handle marks */ - log(severity, LD_GENERAL, + tor_log(severity, LD_GENERAL, " * Channel " U64_FORMAT " has these marks: %s %s %s " "%s %s %s", U64_PRINTF_ARG(chan->global_identifier), @@ -3233,7 +3233,7 @@ channel_dump_statistics(channel_t *chan, int severity) "incoming" : "outgoing"); /* Describe queues */ - log(severity, LD_GENERAL, + tor_log(severity, LD_GENERAL, " * Channel " U64_FORMAT " has %d queued incoming cells" " and %d queued outgoing cells", U64_PRINTF_ARG(chan->global_identifier), @@ -3241,7 +3241,7 @@ channel_dump_statistics(channel_t *chan, int severity) chan_cell_queue_len(&chan->outgoing_queue)); /* Describe circuits */ - log(severity, LD_GENERAL, + tor_log(severity, LD_GENERAL, " * Channel " U64_FORMAT " has %d active circuits out of" " %d in total", U64_PRINTF_ARG(chan->global_identifier), @@ -3251,25 +3251,25 @@ channel_dump_statistics(channel_t *chan, int severity) circuitmux_num_circuits(chan->cmux) : 0); /* Describe timestamps */ - log(severity, LD_GENERAL, + 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)); - log(severity, LD_GENERAL, + 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)); - log(severity, LD_GENERAL, + 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)); - log(severity, LD_GENERAL, + 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), @@ -3277,7 +3277,7 @@ channel_dump_statistics(channel_t *chan, int severity) U64_PRINTF_ARG(now - chan->timestamp_xmit)); /* Describe counters and rates */ - log(severity, LD_GENERAL, + tor_log(severity, LD_GENERAL, " * Channel " U64_FORMAT " has received " U64_FORMAT " cells and transmitted " U64_FORMAT, U64_PRINTF_ARG(chan->global_identifier), @@ -3288,13 +3288,13 @@ channel_dump_statistics(channel_t *chan, int severity) if (chan->n_cells_recved > 0) { avg = (double)(chan->n_cells_recved) / age; if (avg >= 1.0) { - log(severity, LD_GENERAL, + 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; - log(severity, LD_GENERAL, + tor_log(severity, LD_GENERAL, " * Channel " U64_FORMAT " has averaged %f " "seconds between received cells", U64_PRINTF_ARG(chan->global_identifier), interval); @@ -3303,13 +3303,13 @@ channel_dump_statistics(channel_t *chan, int severity) if (chan->n_cells_xmitted > 0) { avg = (double)(chan->n_cells_xmitted) / age; if (avg >= 1.0) { - log(severity, LD_GENERAL, + 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; - log(severity, LD_GENERAL, + tor_log(severity, LD_GENERAL, " * Channel " U64_FORMAT " has averaged %f " "seconds between transmitted cells", U64_PRINTF_ARG(chan->global_identifier), interval); @@ -3337,13 +3337,13 @@ channel_listener_dump_statistics(channel_listener_t *chan_l, int severity) age = (double)(now - chan_l->timestamp_created); - log(severity, LD_GENERAL, + 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); - log(severity, LD_GENERAL, + 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)", @@ -3353,7 +3353,7 @@ channel_listener_dump_statistics(channel_listener_t *chan_l, int severity) U64_PRINTF_ARG(chan_l->timestamp_active), U64_PRINTF_ARG(now - chan_l->timestamp_active)); - log(severity, LD_GENERAL, + 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", @@ -3371,13 +3371,13 @@ channel_listener_dump_statistics(channel_listener_t *chan_l, int severity) chan_l->n_accepted > 0) { avg = (double)(chan_l->n_accepted) / age; if (avg >= 1.0) { - log(severity, LD_GENERAL, + 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; - log(severity, LD_GENERAL, + tor_log(severity, LD_GENERAL, " * Channel listener " U64_FORMAT " has averaged %f seconds " "between incoming channels", U64_PRINTF_ARG(chan_l->global_identifier), interval); @@ -3504,7 +3504,7 @@ channel_has_queued_writes(channel_t *chan) tor_assert(chan); tor_assert(chan->has_queued_writes); - if (! SIMPLEQ_EMPTY(&chan->outgoing_queue)) { + if (! TOR_SIMPLEQ_EMPTY(&chan->outgoing_queue)) { has_writes = 1; } else { /* Check with the lower layer */ diff --git a/src/or/channel.h b/src/or/channel.h index d2106551aa..ec79888063 100644 --- a/src/or/channel.h +++ b/src/or/channel.h @@ -1,4 +1,4 @@ -/* * Copyright (c) 2012, The Tor Project, Inc. */ +/* * Copyright (c) 2012-2013, The Tor Project, Inc. */ /* See LICENSE for licensing information */ /** @@ -19,7 +19,7 @@ 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; -SIMPLEQ_HEAD(chan_cell_queue, cell_queue_entry_s) incoming_queue; +TOR_SIMPLEQ_HEAD(chan_cell_queue, cell_queue_entry_s) incoming_queue; typedef struct chan_cell_queue chan_cell_queue_t; /* @@ -125,7 +125,7 @@ struct channel_s { * Linked list of channels with the same identity digest, for the * digest->channel map */ - LIST_ENTRY(channel_s) next_with_same_id; + TOR_LIST_ENTRY(channel_s) next_with_same_id; /* List of incoming cells to handle */ chan_cell_queue_t incoming_queue; @@ -142,7 +142,7 @@ struct channel_s { * When we send CREATE cells along this connection, which half of the * space should we use? */ - circ_id_type_t circ_id_type:2; + ENUM_BF(circ_id_type_t) circ_id_type:2; /* * Which circ_id do we try to use next on this connection? This is * always in the range 0..1<<15-1. diff --git a/src/or/channeltls.c b/src/or/channeltls.c index ede245894e..e3dfdcc25e 100644 --- a/src/or/channeltls.c +++ b/src/or/channeltls.c @@ -1,4 +1,4 @@ -/* * Copyright (c) 2012, The Tor Project, Inc. */ +/* * Copyright (c) 2012-2013, The Tor Project, Inc. */ /* See LICENSE for licensing information */ /** @@ -914,6 +914,8 @@ channel_tls_handle_cell(cell_t *cell, or_connection_t *conn) 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. diff --git a/src/or/channeltls.h b/src/or/channeltls.h index b7e0475de6..b4a7e2beac 100644 --- a/src/or/channeltls.h +++ b/src/or/channeltls.h @@ -1,4 +1,4 @@ -/* * Copyright (c) 2012, The Tor Project, Inc. */ +/* * Copyright (c) 2012-2013, The Tor Project, Inc. */ /* See LICENSE for licensing information */ /** diff --git a/src/or/circuitbuild.c b/src/or/circuitbuild.c index 55f746177b..b9a4f89030 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 */ /** @@ -28,6 +28,8 @@ #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" @@ -37,6 +39,7 @@ #include "routerparse.h" #include "routerset.h" #include "crypto.h" +#include "connection_edge.h" #ifndef MIN #define MIN(a,b) ((a)<(b)?(a):(b)) @@ -53,7 +56,8 @@ 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); @@ -63,7 +67,10 @@ static int entry_guard_inc_circ_attempt_count(entry_guard_t *guard); static void pathbias_count_build_success(origin_circuit_t *circ); static void pathbias_count_successful_close(origin_circuit_t *circ); static void pathbias_count_collapse(origin_circuit_t *circ); -static void pathbias_count_unusable(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); /** This function tries to get a channel to the specified endpoint, * and then calls command_setup_channel() to give it the right @@ -473,14 +480,13 @@ circuit_n_chan_done(channel_t *chan, int status) * died? */ } } else { - /* pull the create cell out of circ->onionskin, and send it */ - tor_assert(circ->n_chan_onionskin); - if (circuit_deliver_create_cell(circ,CELL_CREATE, - circ->n_chan_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_chan_onionskin); + tor_free(circ->n_chan_create_cell); circuit_set_state(circ, CIRCUIT_STATE_OPEN); } } @@ -491,22 +497,25 @@ circuit_n_chan_done(channel_t *chan, int status) /** 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_chan); - tor_assert(payload); - tor_assert(cell_type == CELL_CREATE || cell_type == CELL_CREATE_FAST); + 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_chan(circ->n_chan); if (!id) { @@ -517,10 +526,14 @@ circuit_deliver_create_cell(circuit_t *circ, uint8_t cell_type, 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_chan, &cell, CELL_DIRECTION_OUT, 0); @@ -610,6 +623,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 @@ -625,16 +705,16 @@ 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 @@ -644,30 +724,31 @@ circuit_send_next_onion_skin(origin_circuit_t *circ) 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; @@ -676,10 +757,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); 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); @@ -740,9 +824,6 @@ circuit_send_next_onion_skin(origin_circuit_t *circ) /* We're done with measurement circuits here. Just close them */ if (circ->base_.purpose == CIRCUIT_PURPOSE_C_MEASURE_TIMEOUT) { - /* If a measurement circ ever gets back to us, consider it - * succeeded for path bias */ - circ->path_state = PATH_STATE_USE_SUCCEEDED; circuit_mark_for_close(TO_CIRCUIT(circ), END_CIRC_REASON_FINISHED); } return 0; @@ -753,29 +834,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)); + { + 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); + } - 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; + 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); - if (onion_skin_create(hop->extend_info->onion_key, - &(hop->dh_handshake_state), onionskin) < 0) { + 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; @@ -814,11 +916,7 @@ circuit_extend(cell_t *cell, circuit_t *circ) { 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; @@ -841,27 +939,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"); @@ -874,7 +966,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; @@ -883,7 +975,7 @@ 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, + if (tor_memeq(ec.node_id, TO_OR_CIRCUIT(circ)->p_chan->identity_digest, DIGEST_LEN)) { log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL, @@ -891,27 +983,33 @@ circuit_extend(cell_t *cell, circuit_t *circ) return -1; } - n_chan = channel_get_for_extend(id_digest, - &n_addr, + n_chan = channel_get_for_extend((const char*)ec.node_id, + &ec.orport_ipv4.addr, &msg, &should_launch); if (!n_chan) { log_debug(LD_CIRC|LD_OR,"Next router (%s): %s", - fmt_addrport(&n_addr, n_port), msg?msg:"????"); + fmt_addrport(&ec.orport_ipv4.addr,ec.orport_ipv4.port), + msg?msg:"????"); circ->n_hop = extend_info_new(NULL /*nickname*/, - id_digest, - NULL /*onion_key*/, - &n_addr, n_port); + (const char*)ec.node_id, + NULL /*onion_key*/, + NULL /*curve25519_key*/, + &ec.orport_ipv4.addr, + ec.orport_ipv4.port); + + circ->n_chan_create_cell = tor_memdup(&ec.create_cell, + sizeof(ec.create_cell)); - circ->n_chan_onionskin = tor_malloc(ONIONSKIN_CHALLENGE_LEN); - memcpy(circ->n_chan_onionskin, onionskin, ONIONSKIN_CHALLENGE_LEN); circuit_set_state(circ, CIRCUIT_STATE_CHAN_WAIT); if (should_launch) { /* we should try to open a connection */ - n_chan = channel_connect_for_circuit(&n_addr, n_port, id_digest); + 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); @@ -932,8 +1030,9 @@ circuit_extend(cell_t *cell, circuit_t *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; } @@ -1077,53 +1176,93 @@ pathbias_get_scale_threshold(const or_options_t *options) } /** - * The scale factor is the denominator for our scaling - * of circuit counts for our path bias window. + * Compute the path bias scaling ratio from the consensus + * parameters pb_multfactor/pb_scalefactor. * - * Note that our use of doubles for the path bias state - * file means that powers of 2 work best here. + * 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_scale_factor(const or_options_t *options) +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_SCALE_FACTOR 2 - if (options->PathBiasScaleFactor >= 1) - return options->PathBiasScaleFactor; +#define DFLT_PATH_BIAS_NOTICE_USE_PCT 80 + if (options->PathBiasNoticeUseRate >= 0.0) + return options->PathBiasNoticeUseRate; else - return networkstatus_get_param(NULL, "pb_scalefactor", - DFLT_PATH_BIAS_SCALE_FACTOR, 1, INT32_MAX); + return networkstatus_get_param(NULL, "pb_noticeusepct", + DFLT_PATH_BIAS_NOTICE_USE_PCT, + 0, 100)/100.0; } /** - * The mult factor is the numerator for our scaling - * of circuit counts for our path bias window. It - * allows us to scale by fractions. + * The extreme use rate is the rate at which we would drop the guard, + * if pb_dropguard is also set. Otherwise we just warn. */ -static int -pathbias_get_mult_factor(const or_options_t *options) +double +pathbias_get_extreme_use_rate(const or_options_t *options) { -#define DFLT_PATH_BIAS_MULT_FACTOR 1 - if (options->PathBiasMultFactor >= 1) - return options->PathBiasMultFactor; +#define DFLT_PATH_BIAS_EXTREME_USE_PCT 60 + if (options->PathBiasExtremeUseRate >= 0.0) + return options->PathBiasExtremeUseRate; else - return networkstatus_get_param(NULL, "pb_multfactor", - DFLT_PATH_BIAS_MULT_FACTOR, 1, - pathbias_get_scale_factor(options)); + return networkstatus_get_param(NULL, "pb_extremeusepct", + DFLT_PATH_BIAS_EXTREME_USE_PCT, + 0, 100)/100.0; } /** - * If this parameter is set to a true value (default), we use the - * successful_circuits_closed. Otherwise, we use the success_count. + * 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_use_close_counts(const or_options_t *options) +pathbias_get_scale_use_threshold(const or_options_t *options) { -#define DFLT_PATH_BIAS_USE_CLOSE_COUNTS 1 - if (options->PathBiasUseCloseCounts >= 0) - return options->PathBiasUseCloseCounts; +#define DFLT_PATH_BIAS_SCALE_USE_THRESHOLD 100 + if (options->PathBiasScaleUseThreshold >= 10) + return options->PathBiasScaleUseThreshold; else - return networkstatus_get_param(NULL, "pb_useclosecounts", - DFLT_PATH_BIAS_USE_CLOSE_COUNTS, 0, 1); + return networkstatus_get_param(NULL, "pb_scaleuse", + DFLT_PATH_BIAS_SCALE_USE_THRESHOLD, + 10, INT32_MAX); } /** @@ -1139,10 +1278,14 @@ pathbias_state_to_string(path_state_t state) 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"; @@ -1204,6 +1347,24 @@ pathbias_should_count(origin_circuit_t *circ) 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; } @@ -1226,9 +1387,33 @@ pathbias_should_count(origin_circuit_t *circ) } 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; } @@ -1239,7 +1424,7 @@ pathbias_should_count(origin_circuit_t *circ) * Also check for several potential error cases for bug #6475. */ static int -pathbias_count_circ_attempt(origin_circuit_t *circ) +pathbias_count_build_attempt(origin_circuit_t *circ) { #define CIRC_ATTEMPT_NOTICE_INTERVAL (600) static ratelim_t circ_attempt_notice_limit = @@ -1338,7 +1523,7 @@ pathbias_count_build_success(origin_circuit_t *circ) } /* Don't count cannibalized/reused circs for path bias - * build success.. They get counted under use success */ + * "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( @@ -1349,6 +1534,7 @@ pathbias_count_build_success(origin_circuit_t *circ) 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, @@ -1406,6 +1592,333 @@ pathbias_count_build_success(origin_circuit_t *circ) } /** + * 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(); + + 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*)ô->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 @@ -1414,31 +1927,26 @@ pathbias_count_build_success(origin_circuit_t *circ) * * 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. */ -void +int pathbias_check_close(origin_circuit_t *ocirc, int reason) { circuit_t *circ = ô->base_; if (!pathbias_should_count(ocirc)) { - return; + return 0; } - if (ocirc->path_state == PATH_STATE_BUILD_SUCCEEDED) { - if (circ->timestamp_dirty) { - /* 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); - pathbias_count_unusable(ocirc); - } else { + 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) { - /* Unused remote circ close reasons all could be bias */ + /* 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.", @@ -1467,10 +1975,46 @@ pathbias_check_close(origin_circuit_t *ocirc, int reason) } else { pathbias_count_successful_close(ocirc); } - } - } else if (ocirc->path_state == PATH_STATE_USE_SUCCEEDED) { - 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; + + default: + // Other states are uninteresting. No stats to count. + break; } + + ocirc->path_state = PATH_STATE_ALREADY_COUNTED; + + return 0; } /** @@ -1518,6 +2062,7 @@ static void pathbias_count_collapse(origin_circuit_t *circ) { entry_guard_t *guard = NULL; + if (!pathbias_should_count(circ)) { return; } @@ -1542,8 +2087,13 @@ pathbias_count_collapse(origin_circuit_t *circ) } } +/** + * Count a known failed circuit (because we could not probe it). + * + * This counter is informational. + */ static void -pathbias_count_unusable(origin_circuit_t *circ) +pathbias_count_use_failed(origin_circuit_t *circ) { entry_guard_t *guard = NULL; if (!pathbias_should_count(circ)) { @@ -1562,6 +2112,8 @@ pathbias_count_unusable(origin_circuit_t *circ) /* 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", @@ -1603,20 +2155,20 @@ pathbias_count_timeout(origin_circuit_t *circ) } /** - * 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. + * 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. */ -double -pathbias_get_closed_count(entry_guard_t *guard) +static int +pathbias_count_circs_in_states(entry_guard_t *guard, + path_state_t from, + path_state_t to) { - circuit_t *circ = global_circuitlist; + circuit_t *circ; int open_circuits = 0; - /* Count currently open circuits. Give them the benefit of the doubt */ - for ( ; circ; circ = circ->next) { + /* Count currently open circuits. Give them the benefit of the doubt. */ + for (circ = global_circuitlist; circ; circ = circ->next) { origin_circuit_t *ocirc = NULL; if (!CIRCUIT_IS_ORIGIN(circ) || /* didn't originate here */ circ->marked_for_close) /* already counted */ @@ -1627,62 +2179,196 @@ pathbias_get_closed_count(entry_guard_t *guard) if (!ocirc->cpath || !ocirc->cpath->extend_info) continue; - if (ocirc->path_state >= PATH_STATE_BUILD_SUCCEEDED && + 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)) { + 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 guard->successful_circuits_closed + open_circuits; + return open_circuits; } /** - * This function checks the consensus parameters to decide - * if it should return guard->circ_successes or - * guard->successful_circuits_closed. + * 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_success_count(entry_guard_t *guard) +pathbias_get_close_success_count(entry_guard_t *guard) { - if (pathbias_use_close_counts(get_options())) { - return pathbias_get_closed_count(guard); - } else { - return guard->circ_successes; - } + return guard->successful_circuits_closed + + pathbias_count_circs_in_states(guard, + PATH_STATE_BUILD_SUCCEEDED, + PATH_STATE_USE_SUCCEEDED); } -/** 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_circ_attempt_count(entry_guard_t *guard) +/** + * 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(); - entry_guards_changed(); + 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(circ_times.close_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(circ_times.close_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(circ_times.close_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_success_count(guard)/guard->circ_attempts + 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 manipluation attacks, " - "Tor has disabled use of this guard. " - "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.", + "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_closed_count(guard)), + 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), @@ -1690,104 +2376,190 @@ entry_guard_inc_circ_attempt_count(entry_guard_t *guard) tor_lround(circ_times.close_ms/1000)); guard->path_bias_disabled = 1; guard->bad_since = approx_time(); - return -1; + 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, " + "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. %ld circuits completed, %ld " - "were unusable, %ld collapsed, and %ld timed out. For " - "reference, your timeout cutoff is %ld seconds.", + "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_closed_count(guard)), + 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(circ_times.close_ms/1000)); } - } else if (pathbias_get_success_count(guard)/((double)guard->circ_attempts) - < pathbias_get_warn_rate(options)) { + } 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 " + "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 the potentially the guard itself. " - "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.", + "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_closed_count(guard)), + 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(circ_times.close_ms/1000)); } - } else if (pathbias_get_success_count(guard)/((double)guard->circ_attempts) + } 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. %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_closed_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(circ_times.close_ms/1000)); + "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(circ_times.close_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)) { - const int scale_factor = pathbias_get_scale_factor(options); - const int mult_factor = pathbias_get_mult_factor(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); + guard->circ_attempts -= opened_attempts; + 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; + guard->circ_successes += opened_built; + + entry_guards_changed(); + log_info(LD_CIRC, - "Scaling pathbias counts to (%f/%f)*(%d/%d) for guard %s=%s", - guard->circ_successes, guard->circ_attempts, - mult_factor, scale_factor, guard->nickname, - hex_str(guard->identity, DIGEST_LEN)); - - guard->circ_attempts *= mult_factor; - guard->circ_successes *= mult_factor; - guard->timeouts *= mult_factor; - guard->successful_circuits_closed *= mult_factor; - guard->collapsed_circuits *= mult_factor; - guard->unusable_circuits *= mult_factor; - - guard->circ_attempts /= scale_factor; - guard->circ_successes /= scale_factor; - guard->timeouts /= scale_factor; - guard->successful_circuits_closed /= scale_factor; - guard->collapsed_circuits /= scale_factor; - guard->unusable_circuits /= scale_factor; + "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)); } +} + +/** + * 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); + 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)); + entry_guards_changed(); + } +} + +/** 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; } -/** 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. @@ -1795,14 +2567,14 @@ entry_guard_inc_circ_attempt_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_circ_attempt(circ)) < 0) + if ((rv = pathbias_count_build_attempt(circ)) < 0) return rv; if (circ->cpath->state == CPATH_STATE_AWAITING_KEYS) { @@ -1816,39 +2588,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); @@ -1857,9 +2615,9 @@ 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, int reason) @@ -1870,7 +2628,7 @@ circuit_truncated(origin_circuit_t *circ, crypt_path_t *layer, int reason) 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. */ @@ -1908,24 +2666,26 @@ circuit_truncated(origin_circuit_t *circ, crypt_path_t *layer, int reason) * 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)); @@ -1941,12 +2701,9 @@ 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_chan, &cell, CELL_DIRECTION_IN, 0); @@ -1964,15 +2721,18 @@ 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 +/** 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 as large a path length as * is feasible, except if it's less than 2, in which case return -1. + * XXX ^^ I think this behavior is a hold-over from back when we had only a + * few relays in the network, and certainly back before guards existed. + * We should very likely get rid of it. -RD */ 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; @@ -2037,7 +2797,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); } @@ -2485,6 +3245,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) { @@ -2494,9 +3257,7 @@ circuit_extend_to_new_exit(origin_circuit_t *circ, extend_info_t *exit) return -1; } - /* Set timestamp_dirty, so we can check it for path use bias */ - if (!circ->base_.timestamp_dirty) - circ->base_.timestamp_dirty = time(NULL); + // XXX: Should cannibalized circuits be dirty or not? Not easy to say.. return 0; } @@ -2751,8 +3512,9 @@ 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_new(const char *nickname, const char *digest, - crypto_pk_t *onion_key, - const tor_addr_t *addr, uint16_t port) + 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); @@ -2760,6 +3522,13 @@ extend_info_new(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; @@ -2794,12 +3563,14 @@ extend_info_from_node(const node_t *node, int for_direct_connect) 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, + node->md->onion_curve25519_pkey, &ap.addr, ap.port); else diff --git a/src/or/circuitbuild.h b/src/or/circuitbuild.h index 8cd61fae2d..3ca8d1531d 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 */ /** @@ -30,12 +30,15 @@ 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); +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, uint8_t cell_type, - const char *payload, const char *keys); +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); @@ -43,8 +46,9 @@ 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_new(const char *nickname, const char *digest, - crypto_pk_t *onion_key, - const tor_addr_t *addr, uint16_t port); + 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); @@ -54,9 +58,14 @@ const char *build_state_get_exit_nickname(cpath_build_state_t *state); const node_t *choose_good_entry_server(uint8_t purpose, cpath_build_state_t *state); 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_check_close(origin_circuit_t *circ, int reason); +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); #endif diff --git a/src/or/circuitlist.c b/src/or/circuitlist.c index 0ee29000ed..6987dc42fd 100644 --- a/src/or/circuitlist.c +++ b/src/or/circuitlist.c @@ -1,7 +1,7 @@ /* 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 */ /** @@ -23,6 +23,7 @@ #include "networkstatus.h" #include "nodelist.h" #include "onion.h" +#include "onion_fast.h" #include "relay.h" #include "rendclient.h" #include "rendcommon.h" @@ -251,7 +252,7 @@ circuit_set_state(circuit_t *circ, uint8_t state) smartlist_add(circuits_pending_chans, circ); } if (state == CIRCUIT_STATE_OPEN) - tor_assert(!circ->n_chan_onionskin); + tor_assert(!circ->n_chan_create_cell); circ->state = state; } @@ -413,6 +414,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); @@ -440,6 +443,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: @@ -678,7 +682,7 @@ circuit_free(circuit_t *circ) } extend_info_free(circ->n_hop); - tor_free(circ->n_chan_onionskin); + tor_free(circ->n_chan_create_cell); /* Remove from map. */ circuit_set_n_circid_chan(circ, 0, NULL); @@ -748,7 +752,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 */ @@ -778,8 +783,8 @@ circuit_dump_conn_details(int severity, 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:", + tor_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_began.tv_sec); @@ -841,8 +846,8 @@ circuit_dump_chan_details(int severity, int this_circid, int other_circid) { - log(severity, LD_CIRC, "Conn %p has %s circuit: circID %d (other side %d), " - "state %d (%s), born %ld:", + tor_log(severity, LD_CIRC, "Conn %p has %s circuit: circID %d " + "(other side %d), state %d (%s), born %ld:", chan, type, this_circid, other_circid, circ->state, circuit_state_to_string(circ->state), (long)circ->timestamp_began.tv_sec); @@ -1338,7 +1343,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); @@ -1354,7 +1359,10 @@ circuit_mark_for_close_(circuit_t *circ, int reason, int line, } if (CIRCUIT_IS_ORIGIN(circ)) { - pathbias_check_close(TO_ORIGIN_CIRCUIT(circ), reason); + 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; @@ -1505,7 +1513,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); */ @@ -1592,7 +1601,7 @@ assert_circuit_ok(const circuit_t *c) tor_assert(c->deliver_window >= 0); tor_assert(c->package_window >= 0); if (c->state == CIRCUIT_STATE_OPEN) { - tor_assert(!c->n_chan_onionskin); + tor_assert(!c->n_chan_create_cell); if (or_circ) { tor_assert(or_circ->n_crypto); tor_assert(or_circ->p_crypto); @@ -1602,10 +1611,10 @@ assert_circuit_ok(const circuit_t *c) } if (c->state == CIRCUIT_STATE_CHAN_WAIT && !c->marked_for_close) { tor_assert(circuits_pending_chans && - smartlist_isin(circuits_pending_chans, c)); + smartlist_contains(circuits_pending_chans, c)); } else { tor_assert(!circuits_pending_chans || - !smartlist_isin(circuits_pending_chans, c)); + !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 a885af2fa0..e81c0785fe 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 */ /** diff --git a/src/or/circuitmux.c b/src/or/circuitmux.c index f3b6b7cd7b..dcc1901819 100644 --- a/src/or/circuitmux.c +++ b/src/or/circuitmux.c @@ -1,4 +1,4 @@ -/* * Copyright (c) 2012, The Tor Project, Inc. */ +/* * Copyright (c) 2012-2013, The Tor Project, Inc. */ /* See LICENSE for licensing information */ /** diff --git a/src/or/circuitmux.h b/src/or/circuitmux.h index ebab1ba7d3..25644ffab7 100644 --- a/src/or/circuitmux.h +++ b/src/or/circuitmux.h @@ -1,4 +1,4 @@ -/* * Copyright (c) 2012, The Tor Project, Inc. */ +/* * Copyright (c) 2012-2013, The Tor Project, Inc. */ /* See LICENSE for licensing information */ /** diff --git a/src/or/circuitmux_ewma.c b/src/or/circuitmux_ewma.c index e1964d2383..3f37d7b9a0 100644 --- a/src/or/circuitmux_ewma.c +++ b/src/or/circuitmux_ewma.c @@ -1,4 +1,4 @@ -/* * Copyright (c) 2012, The Tor Project, Inc. */ +/* * Copyright (c) 2012-2013, The Tor Project, Inc. */ /* See LICENSE for licensing information */ /** diff --git a/src/or/circuitmux_ewma.h b/src/or/circuitmux_ewma.h index 5621acc936..a512745c77 100644 --- a/src/or/circuitmux_ewma.h +++ b/src/or/circuitmux_ewma.h @@ -1,4 +1,4 @@ -/* * Copyright (c) 2012, The Tor Project, Inc. */ +/* * Copyright (c) 2012-2013, The Tor Project, Inc. */ /* See LICENSE for licensing information */ /** diff --git a/src/or/circuitstats.c b/src/or/circuitstats.c index 4f12a6fbcd..73e34d9ed7 100644 --- a/src/or/circuitstats.c +++ b/src/or/circuitstats.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 CIRCUITSTATS_PRIVATE @@ -183,16 +183,6 @@ circuit_build_times_quantile_cutoff(void) 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. * diff --git a/src/or/circuitstats.h b/src/or/circuitstats.h index efe2799b0f..87dce99f4f 100644 --- a/src/or/circuitstats.h +++ b/src/or/circuitstats.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 */ /** diff --git a/src/or/circuituse.c b/src/or/circuituse.c index 2ffffa8423..c0612039be 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 */ /** @@ -280,17 +280,19 @@ circuit_get_best(const entry_connection_t *conn, 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_began) > 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,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. */ @@ -367,8 +369,8 @@ circuit_expire_building(void) * 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; @@ -407,10 +409,60 @@ circuit_expire_building(void) timersub(&now, &diff, &target); \ } while (0) + /** + * 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, 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); + + /* > 3hop circs seem to have a 1.0 second delay on their cannibalized + * 4th hop. */ + SET_CUTOFF(fourhop_cutoff, circ_times.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(circ_times.close_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, circ_times.timeout_ms * (14/6.0) + 1000); + + /* Server intro circs have an extra round trip */ + SET_CUTOFF(s_intro_cutoff, circ_times.timeout_ms * (9/6.0) + 1000); + SET_CUTOFF(close_cutoff, circ_times.close_ms); SET_CUTOFF(extremely_old_cutoff, circ_times.close_ms*2 + 1000); @@ -441,13 +493,22 @@ circuit_expire_building(void) 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; @@ -516,8 +577,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: @@ -529,6 +588,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 @@ -617,6 +689,9 @@ circuit_expire_building(void) if (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. */ @@ -649,15 +724,23 @@ circuit_expire_building(void) } if (victim->n_chan) - log_info(LD_CIRC,"Abandoning circ %s:%d (state %d:%s, purpose %d)", + log_info(LD_CIRC, + "Abandoning circ %u %s:%d (state %d,%d:%s, purpose %d, " + "len %d)", TO_ORIGIN_CIRCUIT(victim)->global_identifier, channel_get_canonical_remote_descr(victim->n_chan), 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->desired_path_len); 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 %d (state %d,%d:%s, purpose %d, len %d)", + TO_ORIGIN_CIRCUIT(victim)->global_identifier, + 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->desired_path_len); circuit_log_path(LOG_INFO,LD_CIRC,TO_ORIGIN_CIRCUIT(victim)); if (victim->purpose == CIRCUIT_PURPOSE_C_MEASURE_TIMEOUT) @@ -705,7 +788,8 @@ 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) { @@ -990,7 +1074,10 @@ circuit_expire_old_circuits_clientside(void) "purpose %d)", 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_began, &cutoff, <)) { if (circ->purpose == CIRCUIT_PURPOSE_C_GENERAL || @@ -1161,18 +1248,6 @@ circuit_has_opened(origin_circuit_t *circ) { control_event_circuit_status(circ, CIRC_EVENT_BUILT, 0); - /* Cannibalized circuits count as used for path bias. - * (PURPOSE_GENERAL circs especially, since they are - * marked dirty and often go unused after preemptive - * building). */ - // XXX: Cannibalized now use RELAY_EARLY, which is visible - // to taggers end-to-end! We really need to probe these instead. - // Don't forget to remove this check once that's done! - if (circ->has_opened && - circ->build_state->desired_path_len > DEFAULT_ROUTE_LEN) { - circ->path_state = PATH_STATE_USE_SUCCEEDED; - } - /* Remember that this circuit has finished building. Now if we start * it building again later (e.g. by extending it), we will know not * to consider its build time. */ @@ -1419,17 +1494,19 @@ circuit_launch_by_extend_info(uint8_t purpose, purpose == CIRCUIT_PURPOSE_C_INTRODUCING) && circ->path_state == PATH_STATE_BUILD_SUCCEEDED) { /* Path bias: Cannibalized rends pre-emptively count as a - * successfully used circ. We don't wait until the extend, - * because the rend point could be malicious. + * 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 adversaries final hop), we need to remove this. + * (up to the adversary's final hop), we need to remove this, + * or somehow mark the circuit with a special path state. */ - circ->path_state = PATH_STATE_USE_SUCCEEDED; + /* This must be called before the purpose change */ pathbias_check_close(circ, END_CIRC_REASON_FINISHED); } @@ -1534,7 +1611,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) @@ -1693,8 +1770,8 @@ circuit_get_open_circ_or_launch(entry_connection_t *conn, return -1; } extend_info = extend_info_new(conn->chosen_exit_name+1, - digest, NULL, &addr, - conn->socks_request->port); + 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. */ @@ -1949,6 +2026,8 @@ connection_ap_handshake_attach_chosen_circuit(entry_connection_t *conn, 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); if (conn->socks_request->command == SOCKS_COMMAND_CONNECT) { @@ -2075,6 +2154,11 @@ connection_ap_handshake_attach_circuit(entry_connection_t *conn) * feasibility, at this point. */ 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 */ @@ -2097,28 +2181,12 @@ 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). " "Stalling. (stream %d sec old)", introcirc->base_.n_circ_id, rendcirc ? 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; } @@ -2142,6 +2210,10 @@ connection_ap_handshake_attach_circuit(entry_connection_t *conn) case 0: /* success */ 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; diff --git a/src/or/circuituse.h b/src/or/circuituse.h index e8760c22d3..d4d68aad92 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 */ /** diff --git a/src/or/command.c b/src/or/command.c index 39eccdf82d..09313b48a2 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 */ /** @@ -133,11 +133,13 @@ command_process_cell(channel_t *chan, cell_t *cell) switch (cell->command) { case CELL_CREATE: case CELL_CREATE_FAST: + case CELL_CREATE2: ++stats_n_create_cells_processed; 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, chan); break; @@ -187,6 +189,7 @@ 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); @@ -218,6 +221,14 @@ command_process_create_cell(cell_t *cell, channel_t *chan) return; } + if (cell->circ_id == 0) { + log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL, + "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); @@ -252,12 +263,18 @@ command_process_create_cell(cell_t *cell, channel_t *chan) 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) { + 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; @@ -266,26 +283,40 @@ command_process_create_cell(cell_t *cell, channel_t *chan) } 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, */ channel_mark_client(chan); - if (fast_server_handshake(cell->payload, (uint8_t*)reply, - (uint8_t*)keys, sizeof(keys))<0) { + 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)); } } @@ -301,6 +332,7 @@ static void command_process_created_cell(cell_t *cell, channel_t *chan) { circuit_t *circ; + extended_cell_t extended_cell; circ = circuit_get_by_circid_channel(cell->circ_id, chan); @@ -318,12 +350,18 @@ command_process_created_cell(cell_t *cell, channel_t *chan) 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; @@ -336,11 +374,24 @@ command_process_created_cell(cell_t *cell, channel_t *chan) 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); } } diff --git a/src/or/command.h b/src/or/command.h index 375d704561..913f46a5cd 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 */ /** diff --git a/src/or/config.c b/src/or/config.c index 2947d1cf17..31695baa73 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 */ /** @@ -242,6 +242,7 @@ static config_var_t option_vars_[] = { V(FetchHidServDescriptors, BOOL, "1"), V(FetchUselessDescriptors, BOOL, "0"), V(FetchV2Networkstatus, BOOL, "0"), + V(GeoIPExcludeUnknown, AUTOBOOL, "auto"), #ifdef _WIN32 V(GeoIPFile, FILENAME, "<default>"), V(GeoIPv6File, FILENAME, "<default>"), @@ -296,7 +297,8 @@ static config_var_t option_vars_[] = { V(MaxAdvertisedBandwidth, MEMUNIT, "1 GB"), V(MaxCircuitDirtiness, INTERVAL, "10 minutes"), V(MaxClientCircuitsPending, UINT, "32"), - V(MaxOnionsPending, UINT, "100"), + OBSOLETE("MaxOnionsPending"), + V(MaxOnionQueueDelay, MSEC_INTERVAL, "1750 msec"), OBSOLETE("MonthlyAccountingStart"), V(MyFamily, STRING, NULL), V(NewCircuitPeriod, INTERVAL, "30 seconds"), @@ -320,11 +322,17 @@ static config_var_t option_vars_[] = { V(PathBiasWarnRate, DOUBLE, "-1"), V(PathBiasExtremeRate, DOUBLE, "-1"), V(PathBiasScaleThreshold, INT, "-1"), - V(PathBiasScaleFactor, INT, "-1"), - V(PathBiasMultFactor, INT, "-1"), + OBSOLETE("PathBiasScaleFactor"), + OBSOLETE("PathBiasMultFactor"), V(PathBiasDropGuards, AUTOBOOL, "0"), - V(PathBiasUseCloseCounts, AUTOBOOL, "1"), + 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"), @@ -390,6 +398,7 @@ static config_var_t option_vars_[] = { V(UseEntryGuards, BOOL, "1"), V(UseEntryGuardsAsDirGuards, BOOL, "1"), V(UseMicrodescriptors, AUTOBOOL, "auto"), + V(UseNTorHandshake, AUTOBOOL, "auto"), V(User, STRING, NULL), V(UserspaceIOCPBuffers, BOOL, "0"), VAR("V1AuthoritativeDirectory",BOOL, V1AuthoritativeDir, "0"), @@ -1084,7 +1093,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; } @@ -1260,7 +1269,7 @@ options_act(const or_options_t *old_options) 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 @@ -1566,6 +1575,18 @@ options_act(const or_options_t *old_options) 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 || options->EntryStatistics || options->ExitPortStatistics || options->ConnDirectionStatistics || @@ -1762,7 +1783,7 @@ config_get_commandlines(int argc, char **argv, config_line_t **result) (*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'", + log_debug(LD_CONFIG, "command line: parsed keyword '%s', value '%s'", (*new)->key, (*new)->value); new = &((*new)->next); @@ -1845,7 +1866,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"); @@ -2210,7 +2231,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; @@ -2219,7 +2240,7 @@ 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 " "for details.", uname); @@ -2248,7 +2269,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."); @@ -2260,7 +2281,7 @@ 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)) { @@ -2278,7 +2299,7 @@ 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."); @@ -2385,6 +2406,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, @@ -2426,7 +2459,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); @@ -2441,7 +2474,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) { @@ -2449,7 +2482,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\""); } } @@ -2629,6 +2662,37 @@ options_validate(or_options_t *old_options, or_options_t *options, RECOMMENDED_MIN_CIRCUIT_BUILD_TIMEOUT ); } + 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) { log_warn(LD_CONFIG, "MaxCircuitDirtiness option is too short; " "raising to %d seconds.", MIN_MAX_CIRCUIT_DIRTINESS); @@ -3403,7 +3467,7 @@ find_torrc_filename(int argc, char **argv, for (i = 1; i < argc; ++i) { if (i < argc-1 && !strcmp(argv[i],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); } @@ -3466,7 +3530,7 @@ load_torrc_from_disk(int argc, char **argv, int defaults_file) fname = find_torrc_filename(argc, argv, 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; @@ -3476,18 +3540,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; @@ -3579,7 +3643,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; @@ -4633,12 +4697,15 @@ 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)) { @@ -4835,7 +4902,7 @@ parse_port_config(smartlist_t *out, if (is_control) warn_nonlocal_controller_ports(out, forbid_nonlocal); else - warn_nonlocal_client_ports(out, portname); + warn_nonlocal_client_ports(out, portname, listener_type); } return 0; } /* end if (listenaddrs) */ @@ -5101,7 +5168,7 @@ parse_port_config(smartlist_t *out, if (is_control) warn_nonlocal_controller_ports(out, forbid_nonlocal); else - warn_nonlocal_client_ports(out, portname); + warn_nonlocal_client_ports(out, portname, listener_type); } if (got_zero_port && got_nonzero_port) { @@ -5360,7 +5427,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 " diff --git a/src/or/config.h b/src/or/config.h index 336685d075..8e34655805 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 */ /** diff --git a/src/or/confparse.c b/src/or/confparse.c index 67cf43fe8c..717d4ac2aa 100644 --- a/src/or/confparse.c +++ b/src/or/confparse.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 */ #include "or.h" diff --git a/src/or/confparse.h b/src/or/confparse.h index 20616be925..1b987f3bf9 100644 --- a/src/or/confparse.h +++ b/src/or/confparse.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 */ #ifndef TOR_CONFPARSE_H diff --git a/src/or/connection.c b/src/or/connection.c index 5da4d39ba5..7b0f081fde 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 */ /** @@ -731,7 +731,7 @@ connection_mark_for_close_internal_(connection_t *conn, 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(); @@ -1058,6 +1058,7 @@ connection_listener_new(const struct sockaddr *listensockaddr, if (bind(s, listensockaddr, (socklen_t)sizeof(struct sockaddr_un)) == -1) { log_warn(LD_NET,"Bind to %s failed: %s.", address, tor_socket_strerror(tor_socket_errno(s))); + tor_close_socket(s); goto err; } #ifdef HAVE_PWD_H @@ -1066,9 +1067,11 @@ connection_listener_new(const struct sockaddr *listensockaddr, if (pw == NULL) { log_warn(LD_NET,"Unable to chown() %s socket: user %s not found.", address, options->User); + tor_close_socket(s); } else if (chown(address, pw->pw_uid, pw->pw_gid) < 0) { log_warn(LD_NET,"Unable to chown() %s socket: %s.", address, strerror(errno)); + tor_close_socket(s); goto err; } } @@ -1441,11 +1444,7 @@ 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); -#ifdef _WIN32 - *socket_error = WSAENETUNREACH; -#else - *socket_error = ENETUNREACH; -#endif + *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(); @@ -1708,6 +1707,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) { @@ -2531,7 +2531,7 @@ 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); } } @@ -3277,6 +3277,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)); @@ -3333,6 +3334,7 @@ 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); @@ -3356,6 +3358,7 @@ 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); @@ -3386,7 +3389,8 @@ connection_handle_write_impl(connection_t *conn, int force) 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."); @@ -3408,6 +3412,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, @@ -3454,7 +3464,8 @@ connection_handle_write_impl(connection_t *conn, int force) } } - 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; @@ -3898,7 +3909,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); @@ -3982,8 +3993,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. @@ -4110,14 +4122,14 @@ connection_dump_buffer_mem_stats(int severity) 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) { 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])); diff --git a/src/or/connection.h b/src/or/connection.h index b0c2a42838..c78fe6e652 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 */ /** diff --git a/src/or/connection_edge.c b/src/or/connection_edge.c index defe94408b..b4fa3e6fe2 100644 --- a/src/or/connection_edge.c +++ b/src/or/connection_edge.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 */ /** @@ -37,6 +37,7 @@ #include "router.h" #include "routerlist.h" #include "routerset.h" +#include "circuitbuild.h" #ifdef HAVE_LINUX_TYPES_H #include <linux/types.h> @@ -641,6 +642,10 @@ 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); } @@ -805,6 +810,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); @@ -829,9 +838,10 @@ 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 " @@ -1661,7 +1671,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; @@ -2204,8 +2214,10 @@ connection_ap_handshake_socks_reply(entry_connection_t *conn, char *reply, U64_PRINTF_ARG(ENTRY_TO_CONN(conn)->global_identifier), endreason); } else { - TO_ORIGIN_CIRCUIT(conn->edge_.on_circuit)->path_state - = PATH_STATE_USE_SUCCEEDED; + // 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)); } } @@ -2427,6 +2439,7 @@ connection_exit_begin_conn(cell_t *cell, circuit_t *circ) tor_free(address); relay_send_end_cell_from_edge(rh.stream_id, circ, END_STREAM_REASON_EXITPOLICY, NULL); + return 0; } } @@ -2478,7 +2491,7 @@ connection_exit_begin_conn(cell_t *cell, circuit_t *circ) connection_exit_connect(n_stream); /* For path bias: This circuit was used successfully */ - origin_circ->path_state = PATH_STATE_USE_SUCCEEDED; + pathbias_mark_use_success(origin_circ); tor_free(address); return 0; @@ -2811,6 +2824,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. * @@ -2824,6 +2840,7 @@ hostname_type_t parse_extended_hostname(char *address) { char *s; + char *q; char query[REND_SERVICE_ID_LEN_BASE32+1]; s = strrchr(address,'.'); @@ -2838,9 +2855,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 9f38951f40..ea284cbcfd 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 */ /** @@ -90,6 +90,7 @@ 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 * diff --git a/src/or/connection_or.c b/src/or/connection_or.c index c2e4375db2..5ec32d6324 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 */ /** @@ -295,13 +295,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); diff --git a/src/or/connection_or.h b/src/or/connection_or.h index 727de211b0..21178774a3 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 */ /** diff --git a/src/or/control.c b/src/or/control.c index 65689c46dd..03e5d79c8e 100644 --- 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 */ /** @@ -3143,6 +3143,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; } @@ -4663,7 +4665,7 @@ control_event_bootstrap(bootstrap_status_t status, int progress) if (status > bootstrap_percent || (progress && progress > bootstrap_percent)) { bootstrap_status_to_string(status, &tag, &summary); - log(status ? LOG_NOTICE : LOG_INFO, LD_CONTROL, + tor_log(status ? LOG_NOTICE : LOG_INFO, LD_CONTROL, "Bootstrapped %d%%: %s.", progress ? progress : status, summary); tor_snprintf(buf, sizeof(buf), "BOOTSTRAP PROGRESS=%d TAG=%s SUMMARY=\"%s\"", diff --git a/src/or/control.h b/src/or/control.h index eea3af724c..51ae230b09 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 */ /** diff --git a/src/or/cpuworker.c b/src/or/cpuworker.c index 2164e52a41..b5740f091d 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 */ /** @@ -32,9 +32,6 @@ /** 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) /** How many cpuworkers we have running right now. */ static int num_cpuworkers=0; @@ -70,7 +67,7 @@ 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 chan_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*/ /*XXXX DOUBLEPLUSTHIS!!!! AS AS AS AS*/ @@ -81,12 +78,69 @@ tag_pack(char *tag, uint64_t chan_id, circid_t circ_id) /** Unpack <b>tag</b> into addr, port, and circ_id. */ static void -tag_unpack(const char *tag, uint64_t *chan_id, circid_t *circ_id) +tag_unpack(const uint8_t *tag, uint64_t *chan_id, circid_t *circ_id) { *chan_id = get_uint64(tag); *circ_id = get_uint16(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. @@ -125,6 +179,110 @@ 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) + +/** Return true iff we'd like to measure a handshake of type + * <b>onionskin_type</b>. */ +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() < (TOR_RAND_MAX/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 * 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 * 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. @@ -132,8 +290,6 @@ connection_cpu_reached_eof(connection_t *conn) int connection_cpu_process_inbuf(connection_t *conn) { - char success; - char buf[LEN_ONION_RESPONSE]; uint64_t chan_id; circid_t circ_id; channel_t *p_chan = NULL; @@ -146,15 +302,40 @@ 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, &chan_id, &circ_id); + tag_unpack(rpl.tag, &chan_id, &circ_id); circ = NULL; log_debug(LD_OR, "Unpacking cpuworker reply, chan_id is " U64_FORMAT @@ -165,7 +346,7 @@ connection_cpu_process_inbuf(connection_t *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."); @@ -183,8 +364,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; @@ -211,32 +394,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 @@ -247,68 +419,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 "TOR_SOCKET_T_FORMAT" was %s)", - fd, tor_socket_strerror(tor_socket_errno(fd))); - } + if (read_all(fd, (void *)&req, sizeof(req), 1) != sizeof(req)) { + log_info(LD_OR, "read request failed. Exiting."); 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."); - 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, 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(); @@ -391,7 +580,7 @@ static void process_pending_task(connection_t *cpuworker) { or_circuit_t *circ; - char *onionskin = NULL; + create_cell_t *onionskin = NULL; tor_assert(cpuworker); @@ -444,12 +633,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. @@ -483,21 +673,31 @@ assign_onionskin_to_cpuworker(connection_t *cpuworker, tor_free(onionskin); return -1; } - tag_pack(tag, circ->p_chan->global_identifier, + + 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 73c7eefd4c..317cef43ba 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 */ /** @@ -17,9 +17,15 @@ 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 042b2dcf11..c101418446 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" @@ -1860,7 +1860,7 @@ connection_dir_client_reached_eof(dir_connection_t *conn) 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, @@ -2800,8 +2800,6 @@ directory_handle_command_get(dir_connection_t *conn, const char *headers, /* v2 or 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; @@ -2851,7 +2849,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; } @@ -2870,7 +2868,8 @@ 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); + if (is_v3) + geoip_note_ns_response(GEOIP_REJECT_UNAVAILABLE); goto done; } @@ -2878,13 +2877,15 @@ 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); + if (is_v3) + 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); + if (is_v3) + geoip_note_ns_response(GEOIP_REJECT_NOT_MODIFIED); goto done; } @@ -2896,24 +2897,24 @@ 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); + if (is_v3) + geoip_note_ns_response(GEOIP_REJECT_BUSY); goto done; } - { + if (is_v3) { 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, 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 (conn->dirreq_id) - geoip_start_dirreq(conn->dirreq_id, dlen, act, - DIRREQ_TUNNELED); + 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); } } diff --git a/src/or/directory.h b/src/or/directory.h index 9ff78d12c4..41f18a1725 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 */ /** diff --git a/src/or/dirserv.c b/src/or/dirserv.c index d080fe7b1e..6209842881 100644 --- a/src/or/dirserv.c +++ b/src/or/dirserv.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 DIRSERV_PRIVATE @@ -74,7 +74,8 @@ static const struct consensus_method_range_t { } 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, MAX_SUPPORTED_CONSENSUS_METHOD}, + {MIN_METHOD_FOR_P6_LINES, MIN_METHOD_FOR_NTOR_KEY - 1}, + {MIN_METHOD_FOR_NTOR_KEY, MAX_SUPPORTED_CONSENSUS_METHOD}, {-1, -1} }; @@ -1883,6 +1884,22 @@ 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 4096 + +/** Helper for dirserv_compute_performance_thresholds(): Decide whether to + * include a router in our calculations, and return true iff we should. */ +static int +router_counts_toward_thresholds(const node_t *node, time_t now, + const digestmap_t *omit_as_sybil) +{ + return node->ri && router_is_active(node->ri, node, now) && + !digestmap_get(omit_as_sybil, node->ri->cache_info.identity_digest) && + (router_get_advertised_bandwidth(node->ri) >= + ABSOLUTE_MIN_BW_VALUE_TO_CONSIDER); +} + /** 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, @@ -1892,7 +1909,8 @@ dirserv_thinks_router_is_hs_dir(const routerinfo_t *router, * * 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; @@ -1933,8 +1951,8 @@ 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)) { + if (router_counts_toward_thresholds(node, now, omit_as_sybil)) { + routerinfo_t *ri = node->ri; const char *id = ri->cache_info.identity_digest; uint32_t bw; node->is_exit = (!router_exit_policy_rejects_all(ri) && @@ -1974,9 +1992,12 @@ dirserv_compute_performance_thresholds(routerlist_t *rl) { /* We can vote on a parameter for the minimum and maximum. */ +#define ABSOLUTE_MIN_VALUE_FOR_FAST_FLAG 4096 int32_t 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); max_fast = networkstatus_get_param(NULL, "FastFlagMaxThreshold", INT32_MAX, min_fast, INT32_MAX); if (fast_bandwidth < (uint32_t)min_fast) @@ -1995,8 +2016,8 @@ dirserv_compute_performance_thresholds(routerlist_t *rl) 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)) { + 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) @@ -2016,7 +2037,7 @@ dirserv_compute_performance_thresholds(routerlist_t *rl) median_uint32(bandwidths_excluding_exits, 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 Guard: WFU %.03f%%, time-known %lu sec, " @@ -2038,6 +2059,30 @@ dirserv_compute_performance_thresholds(routerlist_t *rl) tor_free(wfus); } +/** Give a statement of our current performance thresholds for inclusion + * in a vote document. */ +char * +dirserv_get_flag_thresholds_line(void) +{ + char *result=NULL; + 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", + (unsigned long)stable_uptime, + (unsigned long)stable_mtbf, + (unsigned long)fast_bandwidth, + guard_wfu*100, + (unsigned long)guard_tk, + (unsigned long)guard_bandwidth_including_exits, + (unsigned long)guard_bandwidth_excluding_exits, + enough_mtbf_info ? 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. */ @@ -2180,7 +2225,7 @@ routerstatus_format_entry(char *buf, size_t buf_len, "(wanted descriptor %s).", id, dd); return -1; - }; + } /* This assert can fire for the control port, because * it can request NS documents before all descriptors @@ -2204,7 +2249,7 @@ 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) { @@ -2750,13 +2795,18 @@ dirserv_generate_networkstatus_vote_obj(crypto_pk_t *private_key, 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; + + dirserv_compute_performance_thresholds(rl, omit_as_sybil); + routerstatuses = smartlist_new(); microdescriptors = smartlist_new(); @@ -3007,14 +3057,13 @@ generate_v2_networkstatus_opinion(void) 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); + dirserv_compute_performance_thresholds(rl, omit_as_sybil); + SMARTLIST_FOREACH_BEGIN(routers, routerinfo_t *, ri) { if (ri->cache_info.published_on >= cutoff) { routerstatus_t rs; diff --git a/src/or/dirserv.h b/src/or/dirserv.h index 0140cfb4d8..add09f44a3 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 */ /** @@ -70,6 +70,7 @@ 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); int directory_fetches_from_authorities(const or_options_t *options); int directory_fetches_dir_info_early(const or_options_t *options); diff --git a/src/or/dirvote.c b/src/or/dirvote.c index 1b9af0f731..469c86c7c5 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 @@ -134,6 +134,8 @@ format_networkstatus_vote(crypto_pk_t *private_signing_key, 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 = @@ -160,6 +162,7 @@ format_networkstatus_vote(crypto_pk_t *private_signing_key, "voting-delay %d %d\n" "%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", @@ -169,6 +172,7 @@ format_networkstatus_vote(crypto_pk_t *private_signing_key, v3_ns->vote_seconds, v3_ns->dist_seconds, version_lines, flags, + flag_thresholds, params, voter->nickname, fingerprint, voter->address, fmt_addr32(addr), voter->dir_port, voter->or_port, @@ -181,6 +185,7 @@ format_networkstatus_vote(crypto_pk_t *private_signing_key, tor_free(params); tor_free(flags); + tor_free(flag_thresholds); tor_free(methods); outp = status + strlen(status); endp = status + len; @@ -2139,7 +2144,7 @@ networkstatus_compute_consensus(smartlist_t *votes, 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)); } @@ -2147,13 +2152,6 @@ networkstatus_compute_consensus(smartlist_t *votes, 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, @@ -2161,7 +2159,7 @@ 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) { @@ -2170,6 +2168,15 @@ networkstatus_compute_consensus(smartlist_t *votes, 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; } @@ -2223,7 +2230,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; @@ -2288,7 +2295,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) { @@ -3110,7 +3117,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) { @@ -3471,7 +3478,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; } @@ -3554,6 +3561,15 @@ dirvote_create_microdescriptor(const routerinfo_t *ri, int consensus_method) 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", diff --git a/src/or/dirvote.h b/src/or/dirvote.h index d14a375161..f134454321 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 */ /** @@ -20,7 +20,7 @@ #define MIN_VOTE_INTERVAL 300 /** The highest consensus method that we currently support. */ -#define MAX_SUPPORTED_CONSENSUS_METHOD 15 +#define MAX_SUPPORTED_CONSENSUS_METHOD 16 /** Lowest consensus method that contains a 'directory-footer' marker */ #define MIN_METHOD_FOR_FOOTER 9 @@ -48,6 +48,10 @@ /** 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 + void dirvote_free_all(void); /* vote manipulation */ diff --git a/src/or/dns.c b/src/or/dns.c index c81948a601..edcf92e5b3 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 */ /** @@ -262,7 +262,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; @@ -291,7 +291,7 @@ 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 @@ -835,7 +835,7 @@ dns_resolve_impl(edge_connection_t *exitconn, int is_resolve, return -1; if (address_is_invalid_destination(exitconn->base_.address, 0)) { - log(LOG_PROTOCOL_WARN, LD_EXIT, + tor_log(LOG_PROTOCOL_WARN, LD_EXIT, "Rejecting invalid destination address %s", escaped_safe_str(exitconn->base_.address)); return -1; @@ -1218,7 +1218,7 @@ 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 the eventdns library tells us the outcome of a @@ -1843,8 +1843,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 " @@ -1866,7 +1866,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 ? @@ -1875,7 +1876,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 " @@ -1919,7 +1920,7 @@ evdns_wildcard_check_callback(int result, char type, int count, int ttl, } } - 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 " @@ -2104,7 +2105,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. */ @@ -2150,8 +2151,8 @@ 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); } diff --git a/src/or/dns.h b/src/or/dns.h index d2f6614e64..022cd4ac63 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 */ /** diff --git a/src/or/dnsserv.c b/src/or/dnsserv.c index a211899073..7032b58145 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 */ /** diff --git a/src/or/dnsserv.h b/src/or/dnsserv.h index 39bd1d33b2..6bdb98de70 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 */ /** diff --git a/src/or/entrynodes.c b/src/or/entrynodes.c index 84c1af4a1a..4ca56cbacf 100644 --- a/src/or/entrynodes.c +++ b/src/or/entrynodes.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 */ /** @@ -762,7 +762,7 @@ entry_guards_set_from_config(const or_options_t *options) smartlist_add(entry_fps, (void*)node->identity)); SMARTLIST_FOREACH(entry_guards, entry_guard_t *, e, { - if (smartlist_digest_isin(entry_fps, e->identity)) + 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); @@ -901,7 +901,7 @@ choose_random_entry_impl(cpath_build_state_t *state, int for_directory, } if (node == chosen_exit) continue; /* don't pick the same node for entry and exit */ - if (consider_exit_family && smartlist_isin(exit_family, node)) + if (consider_exit_family && smartlist_contains(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 && @@ -1098,6 +1098,40 @@ entry_guards_parse_state(or_state_t *state, int set, char **msg) 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; + } + + 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, @@ -1144,7 +1178,7 @@ entry_guards_parse_state(or_state_t *state, int set, char **msg) /* 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_success_count(node)/node->circ_attempts + if (pathbias_get_close_success_count(node)/node->circ_attempts < pathbias_get_extreme_rate(options) && pathbias_get_dropguards(options)) { node->path_bias_disabled = 1; @@ -1282,10 +1316,20 @@ entry_guards_update_state(or_state_t *state) * unusable_circuits */ tor_asprintf(&line->value, "%f %f %f %f %f %f", e->circ_attempts, e->circ_successes, - pathbias_get_closed_count(e), e->collapsed_circuits, + 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) @@ -1501,9 +1545,17 @@ learned_router_identity(const tor_addr_t *addr, uint16_t port, 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", - hex_str(digest, DIGEST_LEN), fmt_addrport(addr, port)); + 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); } } @@ -1611,7 +1663,7 @@ routerset_contains_bridge(const routerset_t *routerset, return 0; extinfo = extend_info_new( - NULL, bridge->identity, NULL, &bridge->addr, bridge->port); + NULL, bridge->identity, NULL, NULL, &bridge->addr, bridge->port); result = routerset_contains_extendinfo(routerset, extinfo); extend_info_free(extinfo); return result; @@ -1629,7 +1681,9 @@ find_bridge_by_digest(const char *digest) return NULL; } -/* DOCDOC find_transport_name_by_bridge_addrport */ +/** 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) { diff --git a/src/or/entrynodes.h b/src/or/entrynodes.h index 2a9a99cfbc..b673d02681 100644 --- a/src/or/entrynodes.h +++ b/src/or/entrynodes.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 */ /** @@ -39,6 +39,10 @@ typedef struct entry_guard_t { * 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 @@ -61,6 +65,9 @@ typedef struct entry_guard_t { * 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); @@ -113,8 +120,8 @@ int find_transport_by_bridge_addrport(const tor_addr_t *addr, uint16_t port, int validate_pluggable_transports_config(void); -double pathbias_get_closed_count(entry_guard_t *gaurd); -double pathbias_get_success_count(entry_guard_t *guard); +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 0775643b5c..69662281bc 100644 --- a/src/or/eventdns_tor.h +++ b/src/or/eventdns_tor.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 */ #ifndef TOR_EVENTDNS_TOR_H diff --git a/src/or/geoip.c b/src/or/geoip.c index 72a1983cb4..e2e98e8ec4 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 */ /** @@ -38,7 +38,6 @@ typedef struct 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; @@ -515,67 +514,6 @@ client_history_clear(void) } } -/** 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. */ @@ -610,22 +548,14 @@ 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); } } @@ -652,36 +582,24 @@ geoip_remove_old_clients(time_t cutoff) &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 @@ -736,7 +654,6 @@ typedef struct dirreq_map_entry_t { 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? */ @@ -805,12 +722,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) @@ -819,7 +735,6 @@ 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); } @@ -860,8 +775,7 @@ geoip_change_dirreq_state(uint64_t dirreq_id, dirreq_type_t type, * 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; @@ -871,13 +785,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 { @@ -1063,18 +974,15 @@ geoip_get_client_history(geoip_client_action_t action, } /** 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; @@ -1082,8 +990,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)); @@ -1121,14 +1028,13 @@ 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); @@ -1137,10 +1043,6 @@ geoip_reset_dirreq_stats(time_t now) } } } - 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; @@ -1168,12 +1070,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) @@ -1182,90 +1081,45 @@ geoip_format_dirreq_stats(time_t now) tor_assert(now >= start_of_dirreq_stats_interval); format_iso_time(t, now); - geoip_get_client_history(GEOIP_CLIENT_NETWORKSTATUS_V2, &v2_ips_string, - NULL); geoip_get_client_history(GEOIP_CLIENT_NETWORKSTATUS, &v3_ips_string, NULL); - v2_reqs_string = geoip_get_request_history( - GEOIP_CLIENT_NETWORKSTATUS_V2); - v3_reqs_string = geoip_get_request_history(GEOIP_CLIENT_NETWORKSTATUS); + 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; } @@ -1496,8 +1350,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); } diff --git a/src/or/geoip.h b/src/or/geoip.h index 2272486477..ebefee5f4e 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 */ /** @@ -30,18 +30,17 @@ void geoip_note_client_seen(geoip_client_action_t action, const tor_addr_t *addr, 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); +void geoip_note_ns_response(geoip_ns_response_t response); int geoip_get_client_history(geoip_client_action_t action, char **country_str, char **ipver_str); -char *geoip_get_request_history(geoip_client_action_t action); +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 72089962ae..36af4d8f83 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 */ /** diff --git a/src/or/hibernate.h b/src/or/hibernate.h index 5f99cde015..d2d6989e10 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 */ /** diff --git a/src/or/include.am b/src/or/include.am index 405cbd071f..241015488a 100644 --- a/src/or/include.am +++ b/src/or/include.am @@ -15,6 +15,12 @@ else evdns_source=src/ext/eventdns.c endif +if CURVE25519_ENABLED +onion_ntor_source=src/or/onion_ntor.c +else +onion_ntor_source= +endif + src_or_libtor_a_SOURCES = \ src/or/addressmap.c \ src/or/buffers.c \ @@ -47,6 +53,8 @@ src_or_libtor_a_SOURCES = \ 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 \ @@ -65,6 +73,7 @@ src_or_libtor_a_SOURCES = \ src/or/status.c \ $(evdns_source) \ $(tor_platform_source) \ + $(onion_ntor_source) \ src/or/config_codedigest.c #libtor_a_LIBADD = ../common/libor.a ../common/libor-crypto.a \ @@ -86,10 +95,11 @@ AM_CPPFLAGS += -DSHARE_DATADIR="\"$(datadir)\"" \ 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 \ +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@ + @TOR_LIB_WS32@ @TOR_LIB_GDI@ @CURVE25519_LIBS@ ORHEADERS = \ src/or/addressmap.h \ @@ -125,6 +135,9 @@ ORHEADERS = \ 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 \ diff --git a/src/or/main.c b/src/or/main.c index abb1e34fcd..79b0f25778 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 */ /** @@ -422,7 +422,7 @@ connection_unlink(connection_t *conn) 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); @@ -432,14 +432,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> @@ -666,7 +666,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)); } } @@ -686,7 +686,7 @@ 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)); } } @@ -973,7 +973,7 @@ directory_info_has_arrived(time_t now, int from_cache) if (!router_have_minimum_dir_info()) { int quiet = from_cache || directory_too_idle_to_fetch_descriptors(options, now); - log(quiet ? LOG_INFO : LOG_NOTICE, LD_DIR, + 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); @@ -1201,7 +1201,7 @@ run_scheduled_events(time_t now) * 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); } @@ -2083,7 +2083,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 { @@ -2115,7 +2115,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); @@ -2133,27 +2133,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), @@ -2164,7 +2164,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); @@ -2178,7 +2178,7 @@ dumpstats(int severity) channel_dumpstats(severity); channel_listener_dumpstats(severity); - log(severity, LD_NET, + tor_log(severity, LD_NET, "Cells processed: "U64_FORMAT" padding\n" " "U64_FORMAT" create\n" " "U64_FORMAT" created\n" @@ -2194,33 +2194,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); @@ -2361,7 +2364,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 diff --git a/src/or/main.h b/src/or/main.h index da2bcfd493..338449b6a6 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 */ /** diff --git a/src/or/microdesc.c b/src/or/microdesc.c index 788a7b1e16..e99b3ebe78 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" @@ -575,6 +575,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); diff --git a/src/or/microdesc.h b/src/or/microdesc.h index 4b18caaae0..4e58aa33f0 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 */ /** diff --git a/src/or/networkstatus.c b/src/or/networkstatus.c index 9d402403c0..71ac054f88 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 */ /** @@ -561,7 +561,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", @@ -569,7 +569,7 @@ 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, @@ -578,7 +578,7 @@ networkstatus_check_consensus_signature(networkstatus_t *consensus, }); 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)); @@ -614,7 +614,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); @@ -774,7 +774,7 @@ router_set_networkstatus_v2(const char *s, time_t arrived_at, } if (requested_fingerprints) { - if (smartlist_string_isin(requested_fingerprints, fp)) { + if (smartlist_contains_string(requested_fingerprints, fp)) { smartlist_string_remove(requested_fingerprints, fp); } else { if (source != NS_FROM_DIR_ALL) { @@ -2239,6 +2239,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 @@ -2255,7 +2270,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); diff --git a/src/or/networkstatus.h b/src/or/networkstatus.h index fe16f33918..b437c5ec2f 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 */ /** @@ -112,6 +112,7 @@ 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); #endif diff --git a/src/or/nodelist.c b/src/or/nodelist.c index 4f1e95064d..ee1bc392e3 100644 --- a/src/or/nodelist.c +++ b/src/or/nodelist.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 */ #include "or.h" @@ -916,6 +916,18 @@ node_get_pref_ipv6_orport(const node_t *node, tor_addr_port_t *ap_out) } } +/** 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 @@ -1201,7 +1213,7 @@ static int have_min_dir_info = 0; 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] = ""; +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 @@ -1241,10 +1253,12 @@ get_dir_info_status_string(void) * 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. + * 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) @@ -1254,6 +1268,10 @@ count_usable_descriptors(int *num_present, int *num_usable, 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)) @@ -1270,6 +1288,8 @@ count_usable_descriptors(int *num_present, int *num_usable, /* we have the descriptor listed in the consensus. */ ++*num_present; } + if (descs_out) + smartlist_add(descs_out, (node_t*)node); } } SMARTLIST_FOREACH_END(rs); @@ -1279,6 +1299,72 @@ count_usable_descriptors(int *num_present, int *num_usable, md ? "microdesc" : "desc", exit_only ? " exits" : "s"); } +/** Return an extimate 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(); + double f_guard, f_mid, f_exit, f_myexit; + int np, nu; /* Ignored */ + const int authdir = authdir_mode_v2(options) || 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); + } + }); + } + + count_usable_descriptors(&np, &nu, exits, consensus, options, now, + NULL, 1); + count_usable_descriptors(&np, &nu, myexits, consensus, options, now, + options->ExitNodes, 1); + + 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); + + smartlist_free(guards); + smartlist_free(mid); + smartlist_free(exits); + smartlist_free(myexits); + + /* 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; + + 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. */ @@ -1294,7 +1380,7 @@ count_loading_descriptors_progress(void) if (!consensus) return 0; /* can't count descriptors if we have no list of them */ - count_usable_descriptors(&num_present, &num_usable, + count_usable_descriptors(&num_present, &num_usable, NULL, consensus, get_options(), now, NULL, 0); if (num_usable == 0) @@ -1307,14 +1393,28 @@ count_loading_descriptors_progress(void) 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 >= 1.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) { - 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(); @@ -1343,66 +1443,40 @@ update_router_have_minimum_dir_info(void) 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); + { + 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 (!num_usable || !num_present) { + if (paths < get_frac_paths_needed_for_circs(options,consensus)) { 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":""); + "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; } - } - res = 1; + tor_free(status); + res = 1; + } done: if (res && !have_min_dir_info) { - log(LOG_NOTICE, LD_DIR, + 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, + 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); diff --git a/src/or/nodelist.h b/src/or/nodelist.h index 13a3847414..65cf0d0284 100644 --- a/src/or/nodelist.h +++ b/src/or/nodelist.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 */ /** @@ -54,6 +54,7 @@ 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); diff --git a/src/or/ntmain.c b/src/or/ntmain.c index d001f7be13..8b67b86822 100644 --- a/src/or/ntmain.c +++ b/src/or/ntmain.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 MAIN_PRIVATE diff --git a/src/or/ntmain.h b/src/or/ntmain.h index 95a835a42e..d3027936cd 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 */ /** diff --git a/src/or/onion.c b/src/or/onion.c index cce4bdf73c..d4a65022fc 100644 --- a/src/or/onion.c +++ b/src/or/onion.c @@ -1,47 +1,99 @@ /* 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 "onion.h" +#include "onion_fast.h" +#include "onion_ntor.h" +#include "onion_tap.h" +#include "relay.h" #include "rephist.h" +#include "router.h" +#include "tor_queue.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; + 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; +/** Queue of circuits waiting for CPU workers, or NULL if the list is empty.*/ +TOR_TAILQ_HEAD(onion_queue_head_t, onion_queue_t) ol_list = + TOR_TAILQ_HEAD_INITIALIZER(ol_list); + +/** Number of entries of each type currently in ol_list. */ +static int ol_entries[MAX_ONION_HANDSHAKE_TYPE+1]; + +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 oninoskin 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; + /* If we've got fewer than 50 entries, we always have room for one more. */ + if (ol_entries[ONION_HANDSHAKE_TYPE_TAP] + + ol_entries[ONION_HANDSHAKE_TYPE_NTOR] < 50) + return 1; + num_cpus = get_num_cpus(options); + /* Compute how many microseconds we'd expect to need to clear all + * onionskins in the current queue. */ + tap_usec = estimated_usec_for_onionskins( + ol_entries[ONION_HANDSHAKE_TYPE_TAP], + ONION_HANDSHAKE_TYPE_TAP) / num_cpus; + ntor_usec = estimated_usec_for_onionskins( + ol_entries[ONION_HANDSHAKE_TYPE_NTOR], + ONION_HANDSHAKE_TYPE_NTOR) / num_cpus; + /* See whether that exceeds MaxOnionQueueDelay. If so, we can't queue + * this. */ + if ((tap_usec + ntor_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); @@ -51,19 +103,7 @@ onion_pending_add(or_circuit_t *circ, char *onionskin) 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); @@ -80,13 +120,19 @@ 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]; + circ->onionqueue_entry = tmp; + TOR_TAILQ_INSERT_TAIL(&ol_list, tmp, next); + + /* cull elderly requests. */ + while (1) { + onion_queue_t *head = TOR_TAILQ_FIRST(&ol_list); + 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); @@ -98,20 +144,24 @@ onion_pending_add(or_circuit_t *circ, char *onionskin) * NULL if the list is empty. */ or_circuit_t * -onion_next_task(char **onionskin_out) +onion_next_task(create_cell_t **onionskin_out) { or_circuit_t *circ; + onion_queue_t *head = TOR_TAILQ_FIRST(&ol_list); - if (!ol_list) + if (!head) return NULL; /* no onions pending, we're done */ - tor_assert(ol_list->circ); - tor_assert(ol_list->circ->p_chan); /* 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->circ->p_chan); /* make sure it's still valid */ + circ = head->circ; + if (head->onionskin && + head->onionskin->handshake_type <= MAX_ONION_HANDSHAKE_TYPE) + --ol_entries[head->onionskin->handshake_type]; + *onionskin_out = head->onionskin; + head->onionskin = NULL; /* prevent free. */ + circ->onionqueue_entry = NULL; + onion_queue_entry_remove(head); return circ; } @@ -121,328 +171,869 @@ onion_next_task(char **onionskin_out) 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; - /* now victim points to the element that needs to be removed */ + 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) +{ + TOR_TAILQ_REMOVE(&ol_list, victim, next); + + if (victim->circ) + victim->circ->onionqueue_entry = NULL; + + if (victim->onionskin && + victim->onionskin->handshake_type <= MAX_ONION_HANDSHAKE_TYPE) + --ol_entries[victim->onionskin->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; + while ((victim = TOR_TAILQ_FIRST(&ol_list))) { + onion_queue_entry_remove(victim); + } + 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; - - 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; + int r = -1; + + 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) + 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) + 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) + 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; +} + +/** 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) +{ + if (p_len < 4) + return -1; + cell_out->cell_type = CELL_CREATE2; + cell_out->handshake_type = ntohs(get_uint16(p)); + cell_out->handshake_len = ntohs(get_uint16(p+2)); + if (cell_out->handshake_len > CELL_PAYLOAD_SIZE - 4 || + cell_out->handshake_len > p_len - 4) + return -1; + if (cell_out->handshake_type == ONION_HANDSHAKE_TYPE_FAST) + return -1; + memcpy(cell_out->onionskin, p+4, cell_out->handshake_len); + 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) +{ + memset(cell_out, 0, sizeof(*cell_out)); + + switch (cell_in->command) { + case CELL_CREATE: + cell_out->cell_type = CELL_CREATE; + if (tor_memeq(cell_in->payload, NTOR_CREATE_MAGIC, 16)) { + cell_out->handshake_type = ONION_HANDSHAKE_TYPE_NTOR; + cell_out->handshake_len = NTOR_ONIONSKIN_LEN; + memcpy(cell_out->onionskin, cell_in->payload+16, NTOR_ONIONSKIN_LEN); + } else { + cell_out->handshake_type = ONION_HANDSHAKE_TYPE_TAP; + cell_out->handshake_len = TAP_ONIONSKIN_CHALLENGE_LEN; + memcpy(cell_out->onionskin, cell_in->payload, + TAP_ONIONSKIN_CHALLENGE_LEN); + } + break; + case CELL_CREATE_FAST: + cell_out->cell_type = CELL_CREATE_FAST; + cell_out->handshake_type = ONION_HANDSHAKE_TYPE_FAST; + cell_out->handshake_len = CREATE_FAST_LEN; + memcpy(cell_out->onionskin, cell_in->payload, CREATE_FAST_LEN); + 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 = *payload, 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); + + cell_out->cell_type = RELAY_COMMAND_EXTEND2; + ++payload; + /* Parse the specifiers. We'll only take the first IPv4 and first IPv6 + * addres, 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, <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; + } - if (crypto_rand((char*)handshake_reply_out, DIGEST_LEN)<0) + return check_extended_cell(cell_out); +} + +/** 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 e7626f9709..db4c999c9e 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 */ /** @@ -12,37 +12,107 @@ #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); 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; + +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 0000000000..aa034a8bd6 --- /dev/null +++ b/src/or/onion_fast.c @@ -0,0 +1,123 @@ +/* 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 hasnshake. 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, <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)) { + 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 0000000000..0c2a475376 --- /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 0000000000..9cf7d5dd6e --- /dev/null +++ b/src/or/onion_ntor.c @@ -0,0 +1,295 @@ +/* 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); + 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); + + 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)); + return bad ? -1 : 0; +} + diff --git a/src/or/onion_ntor.h b/src/or/onion_ntor.h new file mode 100644 index 0000000000..c942e6e0f0 --- /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 0000000000..3782e75abf --- /dev/null +++ b/src/or/onion_tap.c @@ -0,0 +1,218 @@ +/* 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) + 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 0000000000..b978b66737 --- /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 bc2cdae6fe..a0a921a9f4 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 */ /** @@ -81,7 +81,6 @@ #include <process.h> #include <direct.h> #include <windows.h> -#define snprintf _snprintf #endif #ifdef USE_BUFFEREVENTS @@ -99,6 +98,7 @@ #include "compat_libevent.h" #include "ht.h" #include "replaycache.h" +#include "crypto_curve25519.h" /* These signals are defined to help handle_control_signal work. */ @@ -279,6 +279,7 @@ typedef enum { #define CPUWORKER_STATE_MAX_ 2 #define CPUWORKER_TASK_ONION CPUWORKER_STATE_BUSY_ONION +#define CPUWORKER_TASK_SHUTDOWN 255 #define OR_CONN_STATE_MIN_ 1 /** State for a connection to an OR: waiting for connect() to finish. */ @@ -520,7 +521,9 @@ 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 @@ -560,6 +563,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 @@ -826,6 +831,8 @@ 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 @@ -1398,6 +1405,7 @@ typedef struct or_connection_t { 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? */ @@ -1583,6 +1591,13 @@ typedef struct entry_connection_t { } 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; + /** Subtype of connection_t for an "directory connection" -- that is, an HTTP * connection to retrieve or serve directory material. */ typedef struct dir_connection_t { @@ -1601,12 +1616,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; + ENUM_BF(dir_spool_source_t) dir_spool_src : 3; + /** If we're fetching descriptors, what router purpose shall we assign * to them? */ uint8_t router_purpose; @@ -1782,7 +1793,8 @@ typedef enum { /** 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.*/ + ENUM_BF(addr_policy_action_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 @@ -1850,7 +1862,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; + ENUM_BF(download_schedule_t) schedule : 8; } download_status_t; /** If n_download_failures is this high, the download can never happen. */ @@ -1929,6 +1941,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? */ @@ -2052,6 +2066,9 @@ typedef struct routerstatus_t { /** 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 */ @@ -2114,7 +2131,7 @@ typedef struct microdesc_t { */ time_t last_listed; /** Where is this microdescriptor currently stored? */ - saved_location_t saved_location : 3; + ENUM_BF(saved_location_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 */ @@ -2142,6 +2159,8 @@ 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 */ @@ -2362,8 +2381,8 @@ 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? */ + ENUM_BF(networkstatus_type_t) type : 8; /**< Vote, consensus, or opinion? */ + ENUM_BF(consensus_flavor_t) flavor : 8; /**< If a consensus, what kind? */ 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 @@ -2501,6 +2520,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 @@ -2557,6 +2579,21 @@ typedef enum { #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 { @@ -2575,17 +2612,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; @@ -2626,10 +2661,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 { @@ -2661,6 +2692,8 @@ typedef struct { #define ORIGIN_CIRCUIT_MAGIC 0x35315243u #define OR_CIRCUIT_MAGIC 0x98ABC04Fu +struct create_cell_t; + /** * A circuit is a path over the onion routing * network. Applications can connect to one end of the circuit, and can @@ -2735,10 +2768,8 @@ typedef struct circuit_t { * more. */ int deliver_window; - /** For storage while n_chan is pending - * (state CIRCUIT_STATE_CHAN_WAIT). When defined, it is always - * length ONIONSKIN_CHALLENGE_LEN. */ - char *n_chan_onionskin; + /** 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). @@ -2796,8 +2827,18 @@ 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 @@ -2808,7 +2849,7 @@ typedef enum { PATH_STATE_BUILD_ATTEMPTED = 1, /** This circuit has been completely built */ PATH_STATE_BUILD_SUCCEEDED = 2, - /** Did any SOCKS streams or hidserv introductions actually succeed on + /** 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 @@ -2816,13 +2857,28 @@ typedef enum { * (or any other automatic streams) because the adversary could * just tag at a later point. */ - PATH_STATE_USE_SUCCEEDED = 3, + 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 = 4, + 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; /** An origin_circuit_t holds data necessary to build and use a circuit. @@ -2858,9 +2914,32 @@ 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 : 3; + /** + * Path bias state machine. Used to ensure integrity of our + * circuit building and usage accounting. See path_state_t + * for more details. + */ + ENUM_BF(path_state_t) path_state : 3; + + /** + * 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 @@ -2959,9 +3038,10 @@ typedef struct origin_circuit_t { * ISO_STREAM. */ uint64_t associated_isolated_stream_global_id; /**@}*/ - } 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 { @@ -2975,6 +3055,9 @@ typedef struct or_circuit_t { * 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_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; @@ -3026,7 +3109,8 @@ typedef struct or_circuit_t { 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? */ @@ -3457,9 +3541,7 @@ 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 @@ -3801,6 +3883,11 @@ typedef struct { 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. */ int ReloadTorrcOnSIGHUP; @@ -3868,15 +3955,27 @@ typedef struct { double PathBiasExtremeRate; int PathBiasDropGuards; int PathBiasScaleThreshold; - int PathBiasScaleFactor; - int PathBiasMultFactor; - int PathBiasUseCloseCounts; + /** @} */ + + /** + * Parameters for path-bias use detection + * @{ + */ + 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; } or_options_t; /** Persistent state for an onion router, as saved to disk. */ diff --git a/src/or/policies.c b/src/or/policies.c index 27cdd84aff..9696b8123b 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 */ /** @@ -374,7 +374,7 @@ addr_is_in_cc_list(uint32_t addr, const smartlist_t *cc_list) 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 @@ -881,7 +881,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); @@ -910,7 +910,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); diff --git a/src/or/policies.h b/src/or/policies.h index d9983e8008..da375c4425 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 */ /** diff --git a/src/or/reasons.c b/src/or/reasons.c index 874a86774b..637f8cdc7d 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: diff --git a/src/or/reasons.h b/src/or/reasons.h index 0dbf5aa693..fe7e67722a 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 */ /** diff --git a/src/or/relay.c b/src/or/relay.c index 696a411972..5d06fd93fd 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 */ /** @@ -27,6 +27,7 @@ #include "mempool.h" #include "networkstatus.h" #include "nodelist.h" +#include "onion.h" #include "policies.h" #include "reasons.h" #include "relay.h" @@ -185,7 +186,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; @@ -221,7 +232,15 @@ circuit_receive_relay_cell(cell_t *cell, circuit_t *circ, } 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 (!chan) { @@ -571,6 +590,7 @@ relay_send_command_from_edge(streamid_t stream_id, circuit_t *circ, 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 @@ -584,7 +604,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. */ @@ -689,7 +710,7 @@ connection_ap_process_end_not_open( 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 */ @@ -709,11 +730,17 @@ connection_ap_process_end_not_open( * We rely on recognized+digest being strong enough to make * tags unlikely to allow us to get tagged, yet 'recognized' * reason codes here. */ - circ->path_state = PATH_STATE_USE_SUCCEEDED; + pathbias_mark_use_success(circ); } } - if (rh->length > 0 && edge_reason_is_retriable(reason) && + 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 = @@ -1155,6 +1182,23 @@ connection_edge_process_relay_cell(cell_t *cell, circuit_t *circ, return - END_CIRC_REASON_TORPROTOCOL; } + if (rh.stream_id == 0) { + switch (rh.command) { + case RELAY_COMMAND_BEGIN: + case RELAY_COMMAND_CONNECTED: + case RELAY_COMMAND_DATA: + case RELAY_COMMAND_END: + case RELAY_COMMAND_RESOLVE: + case RELAY_COMMAND_RESOLVED: + case RELAY_COMMAND_BEGIN_DIR: + log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL, "Relay command %d with zero " + "stream_id. Dropping.", (int)rh.command); + return 0; + default: + ; + } + } + /* either conn is NULL, in which case we've got a control cell, or else * conn points to the recognized stream. */ @@ -1282,7 +1326,8 @@ connection_edge_process_relay_cell(cell_t *cell, circuit_t *circ, 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 (rh.stream_id) { @@ -1317,17 +1362,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."); @@ -1394,7 +1449,8 @@ connection_edge_process_relay_cell(cell_t *cell, circuit_t *circ, /*XXXX024: Downgrade this back to LOG_PROTOCOL_WARN after a while*/ log_fn(LOG_WARN, LD_PROTOCOL, "Bug/attack: unexpected sendme cell from client. " - "Closing circ."); + "Closing circ (window %d).", + circ->package_window); return -END_CIRC_REASON_TORPROTOCOL; } circ->package_window += CIRCWINDOW_INCREMENT; @@ -1974,8 +2030,9 @@ dump_cell_pool_usage(int severity) 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, total_cells_allocated - n_cells); mp_pool_log_status(cell_pool, severity); } diff --git a/src/or/relay.h b/src/or/relay.h index 57400fdbd5..d8da9ea1bd 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 */ /** diff --git a/src/or/rendclient.c b/src/or/rendclient.c index 88241a4b2c..61e3b917e3 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 */ /** @@ -66,6 +66,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, @@ -100,6 +108,7 @@ 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.", @@ -206,12 +215,12 @@ 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; @@ -261,7 +270,7 @@ 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; @@ -310,6 +319,8 @@ rend_client_send_introduction(origin_circuit_t *introcirc, * state. */ introcirc->base_.timestamp_dirty = time(NULL); + pathbias_count_use_attempt(introcirc); + goto cleanup; perm_err: @@ -338,6 +349,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 */ + for (c = circuit_get_global_list_(); c; c = c->next) { + 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 @@ -363,7 +400,7 @@ rend_client_introduction_acked(origin_circuit_t *circ, /* For path bias: This circuit was used successfully. Valid * nacks and acks count. */ - circ->path_state = PATH_STATE_USE_SUCCEEDED; + pathbias_mark_use_success(circ); if (request_len == 0) { /* It's an ACK; the introduction point relayed our introduction request. */ @@ -389,6 +426,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); @@ -867,7 +907,7 @@ rend_client_rendezvous_acked(origin_circuit_t *circ, const uint8_t *request, * 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 */ - circ->path_state = PATH_STATE_USE_SUCCEEDED; + 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 @@ -907,9 +947,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."); @@ -925,8 +965,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); diff --git a/src/or/rendclient.h b/src/or/rendclient.h index b71fe48be3..1f731d0ae5 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 */ /** diff --git a/src/or/rendcommon.c b/src/or/rendcommon.c index 9e306bdf73..79c1a724e4 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 */ /** @@ -954,7 +954,7 @@ 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. +/** <b>query</b> is a base32'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. diff --git a/src/or/rendcommon.h b/src/or/rendcommon.h index fe574b152f..189891b747 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 */ /** diff --git a/src/or/rendmid.c b/src/or/rendmid.c index dc2dc1d9e7..1046ce3814 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 */ /** @@ -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."); diff --git a/src/or/rendmid.h b/src/or/rendmid.h index 74ba16b316..310276ac96 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 */ /** diff --git a/src/or/rendservice.c b/src/or/rendservice.c index e70f969e8f..f85ac2c03b 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 */ /** @@ -931,7 +931,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; } @@ -1378,14 +1378,11 @@ 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); - - /* For path bias: This intro circuit was used successfully */ - circuit->path_state = PATH_STATE_USE_SUCCEEDED; + memcpy(cpath->rend_circ_nonce, keys, DIGEST_LEN); goto done; @@ -2486,7 +2483,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; @@ -2511,6 +2508,9 @@ rend_service_intro_has_opened(origin_circuit_t *circuit) goto err; } + /* We've attempted to use this circuit */ + pathbias_count_use_attempt(circuit); + goto done; err: @@ -2558,6 +2558,10 @@ rend_service_intro_established(origin_circuit_t *circuit, "Received INTRO_ESTABLISHED cell on circuit %d for service %s", 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: circuit_mark_for_close(TO_CIRCUIT(circuit), END_CIRC_REASON_TORPROTOCOL); @@ -2589,6 +2593,9 @@ rend_service_rendezvous_has_opened(origin_circuit_t *circuit) 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); @@ -2632,13 +2639,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 */ @@ -2651,8 +2658,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; @@ -2774,7 +2781,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; @@ -2809,7 +2816,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); @@ -2827,7 +2835,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); } @@ -3060,7 +3068,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); } @@ -3295,7 +3304,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); @@ -3303,11 +3312,11 @@ 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", + tor_log(severity, LD_GENERAL, " Intro point %d at %s: circuit is %s", j, safe_name, circuit_state_to_string(circ->base_.state)); } } diff --git a/src/or/rendservice.h b/src/or/rendservice.h index 1671602348..ff31ba6edb 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 */ /** diff --git a/src/or/rephist.c b/src/or/rephist.c index e61e599d7e..34caa4b518 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 */ /** @@ -422,6 +422,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 +663,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 +688,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 +722,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); } } } @@ -2042,7 +2057,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, " diff --git a/src/or/rephist.h b/src/or/rephist.h index 28dec8f902..811cd8d450 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 */ /** @@ -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); diff --git a/src/or/replaycache.c b/src/or/replaycache.c index 868b21c9b0..59b98489b7 100644 --- a/src/or/replaycache.c +++ b/src/or/replaycache.c @@ -1,4 +1,4 @@ - /* Copyright (c) 2012, The Tor Project, Inc. */ + /* Copyright (c) 2012-2013, The Tor Project, Inc. */ /* See LICENSE for licensing information */ /* diff --git a/src/or/replaycache.h b/src/or/replaycache.h index 757102b960..de20cab627 100644 --- a/src/or/replaycache.h +++ b/src/or/replaycache.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2012, The Tor Project, Inc. */ +/* Copyright (c) 2012-2013, The Tor Project, Inc. */ /* See LICENSE for licensing information */ /** diff --git a/src/or/router.c b/src/or/router.c index 1a4cee943d..3fd8b3c070 100644 --- 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" @@ -54,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; @@ -126,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. @@ -253,11 +310,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; @@ -266,19 +330,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); @@ -290,6 +373,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); } @@ -305,14 +391,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) { @@ -320,8 +406,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; @@ -330,16 +416,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; } @@ -349,7 +435,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; @@ -363,6 +449,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 @@ -474,14 +631,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; } @@ -641,12 +798,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"); @@ -722,7 +902,7 @@ init_keys(void) tor_free(cp); tor_free(keydir); - log(LOG_NOTICE, LD_GENERAL, + log_notice(LD_GENERAL, "Your Tor server's identity key fingerprint is '%s %s'", options->Nickname, fingerprint); if (!authdir_mode(options)) @@ -882,10 +1062,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; } @@ -905,7 +1085,8 @@ extend_info_from_router(const routerinfo_t *r) router_get_prim_orport(r, &ap); return extend_info_new(r->nickname, r->cache_info.identity_digest, - r->onion_pkey, &ap.addr, ap.port); + r->onion_pkey, r->onion_curve25519_pkey, + &ap.addr, ap.port); } /** Some time has passed, or we just got new directory information. @@ -1429,6 +1610,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 @@ -1575,6 +1763,11 @@ 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 */ +#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. */ { @@ -1662,7 +1855,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, @@ -1688,7 +1881,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: @@ -2155,6 +2348,22 @@ router_dump_router_to_string(char *s, size_t maxlen, routerinfo_t *router, written += result; } +#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); + result = tor_snprintf(s+written,maxlen-written, "ntor-onion-key %s", + kbuf); + if (result<0) { + log_warn(LD_BUG,"descriptor snprintf ran out of room!"); + return -1; + } + written += result; + } +#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); @@ -2187,6 +2396,7 @@ router_dump_router_to_string(char *s, size_t maxlen, routerinfo_t *router, "ipv6-policy %s\n", p6); if (result<0) { log_warn(LD_BUG,"Descriptor printf of policy ran out of room"); + tor_free(p6); return -1; } written += result; @@ -2803,6 +3013,11 @@ 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); diff --git a/src/or/router.h b/src/or/router.h index b641c1cc6a..fd2076af01 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 */ /** @@ -30,6 +30,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); @@ -79,6 +84,7 @@ 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); diff --git a/src/or/routerlist.c b/src/or/routerlist.c index 898b9b5b98..8f19947600 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 */ /** @@ -42,6 +42,9 @@ /****************************************************************************/ /* 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( @@ -541,7 +544,7 @@ authority_certs_fetch_missing(networkstatus_t *status, time_t now) int found = 0; if (!(ds->type & V3_DIRINFO)) continue; - if (smartlist_digest_isin(missing_digests, ds->v3_identity_digest)) + if (smartlist_contains_digest(missing_digests, ds->v3_identity_digest)) continue; cl = get_cert_list(ds->v3_identity_digest); SMARTLIST_FOREACH(cl->certs, authority_cert_t *, cert, { @@ -1681,9 +1684,35 @@ 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), + &sl_last_total_weighted_bw); + + { + 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; double Wg = -1, Wm = -1, We = -1, Wd = -1; double Wgb = -1, Wmb = -1, Web = -1, Wdb = -1; @@ -1702,10 +1731,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); @@ -1756,7 +1785,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; @@ -1786,7 +1815,7 @@ 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); } else if (node->ri) { @@ -1819,20 +1848,53 @@ smartlist_choose_node_by_bandwidth_weights(smartlist_t *sl, sl_last_weighted_bw_of_me = (uint64_t) bandwidths[node_sl_idx].dbl; } SMARTLIST_FOREACH_END(node); - log_debug(LD_CIRC, "Choosing node for rule %s based on weights " + 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, U64_PRINTF_ARG(weighted_bw)); - scale_array_elements_to_u64(bandwidths, smartlist_len(sl), - &sl_last_total_weighted_bw); + *bandwidths_out = bandwidths; - { - int idx = choose_array_element_by_weight(bandwidths, - smartlist_len(sl)); - tor_free(bandwidths); - return idx < 0 ? NULL : smartlist_get(sl, idx); + 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); + + if (total < 1.0) + return 0; + + return present / total; } /** Helper function: @@ -1849,7 +1911,7 @@ 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; @@ -2055,7 +2117,7 @@ smartlist_choose_node_by_bandwidth(smartlist_t *sl, /** 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; @@ -2482,6 +2544,7 @@ routerinfo_free(routerinfo_t *router) 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) { @@ -2584,7 +2647,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), @@ -3326,7 +3389,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) { @@ -3460,7 +3523,7 @@ routerlist_remove_old_routers(void) 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.) */ @@ -3481,7 +3544,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--); } @@ -3660,7 +3723,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 = diff --git a/src/or/routerlist.h b/src/or/routerlist.h index 81ba1ac54f..1849fff31c 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 */ /** @@ -47,8 +47,10 @@ const routerinfo_t *routerlist_find_my_routerinfo(void); 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, diff --git a/src/or/routerparse.c b/src/or/routerparse.c index 1aee4e5332..2a3de12c35 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 */ /** @@ -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, @@ -276,6 +277,7 @@ static token_rule_t routerdesc_token_table[] = { 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 ), @@ -508,6 +510,7 @@ 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 ), @@ -1026,7 +1029,7 @@ 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 */ @@ -1284,6 +1287,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 */ @@ -1938,6 +1952,8 @@ routerstatus_parse_entry_from_string(memarea_t *area, 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.7-alpha"); } if (vote_rs) { vote_rs->version = tor_strdup(tok->args[0]); @@ -2239,7 +2255,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); @@ -3828,7 +3844,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); @@ -4243,6 +4259,17 @@ 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) { diff --git a/src/or/routerparse.h b/src/or/routerparse.h index 256fcca579..4cc9bfd3ae 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 */ /** diff --git a/src/or/routerset.c b/src/or/routerset.c index a495863d8e..e45516bb6c 100644 --- a/src/or/routerset.c +++ b/src/or/routerset.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 */ #include "or.h" @@ -95,7 +95,7 @@ routerset_refresh_countries(routerset_t *target) tor_assert(cc < target->n_countries); bitarray_set(target->countries, cc); } else { - log(LOG_WARN, LD_CONFIG, "Country code '%s' is not recognized.", + log_warn(LD_CONFIG, "Country code '%s' is not recognized.", country); } } SMARTLIST_FOREACH_END(country); @@ -226,6 +226,45 @@ routerset_contains(const routerset_t *set, const tor_addr_t *addr, 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->country_names, 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) diff --git a/src/or/routerset.h b/src/or/routerset.h index ad0832e4df..bfa0c59ac1 100644 --- a/src/or/routerset.h +++ b/src/or/routerset.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 */ /** @@ -31,6 +31,7 @@ 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); #if 0 void routersets_get_node_disjunction(smartlist_t *target, const smartlist_t *source, diff --git a/src/or/statefile.c b/src/or/statefile.c index 1429efda12..bcb7b07417 100644 --- a/src/or/statefile.c +++ b/src/or/statefile.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 */ #include "or.h" @@ -52,6 +52,7 @@ static config_var_t state_vars_[] = { 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), diff --git a/src/or/statefile.h b/src/or/statefile.h index 4770d500d1..dcdee6c604 100644 --- a/src/or/statefile.h +++ b/src/or/statefile.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 */ #ifndef TOR_STATEFILE_H diff --git a/src/or/status.c b/src/or/status.c index 1a4e568854..126167dcb9 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 */ /** @@ -108,7 +108,7 @@ log_heartbeat(time_t now) uptime, count_circuits(),bw_sent,bw_rcvd); if (stats_n_data_cells_packaged) - log(LOG_NOTICE, LD_HEARTBEAT, "Average packaged cell fullness: %2.3f%%", + 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)) ); diff --git a/src/or/status.h b/src/or/status.h index de49d751c3..7c3b969c86 100644 --- a/src/or/status.h +++ b/src/or/status.h @@ -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 */ #ifndef TOR_STATUS_H diff --git a/src/or/tor_main.c b/src/or/tor_main.c index 2f4922317d..806b5ebb38 100644 --- a/src/or/tor_main.c +++ b/src/or/tor_main.c @@ -1,6 +1,6 @@ /* 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 diff --git a/src/or/transports.c b/src/or/transports.c index 0319071097..647b293168 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 */ /** @@ -428,7 +428,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)); } @@ -453,7 +453,7 @@ proxy_needs_restart(const managed_proxy_t *mp) goto needs_restart; SMARTLIST_FOREACH_BEGIN(mp->transports, const transport_t *, t) { - if (!smartlist_string_isin(mp->transports_to_launch, t->name)) + if (!smartlist_contains_string(mp->transports_to_launch, t->name)) goto needs_restart; } SMARTLIST_FOREACH_END(t); diff --git a/src/or/transports.h b/src/or/transports.h index 86a2530fcb..6ee82f4556 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 */ /** diff --git a/src/test/Makefile.nmake b/src/test/Makefile.nmake index aec477cf99..562c8df8b5 100644 --- a/src/test/Makefile.nmake +++ b/src/test/Makefile.nmake @@ -1,20 +1,32 @@ -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_pt.obj test_util.obj test_config.obj test_cell_formats.obj \ + test_replay.obj test_introduce.obj tinytest.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 da1ae9bc5d..d57aeb81aa 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 @@ -15,17 +15,23 @@ const char tor_git_revision[] = ""; #include "orconfig.h" #define RELAY_PRIVATE +#define CONFIG_PRIVATE #include "or.h" +#include "onion_tap.h" #include "relay.h" #include <openssl/opensslv.h> #include <openssl/evp.h> -#if OPENSSL_VERSION_NUMBER >= OPENSSL_V_SERIES(1,0,0) #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) @@ -106,6 +112,125 @@ 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(); + crypto_pk_generate_key_with_bits(key, 1024); + crypto_pk_generate_key_with_bits(key2, 1024); + + 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)); + tor_assert(s == 0); + } + end = perftime(); + printf("Client-side, part 2: %f usec.\n", + NANOCOUNT(start, end, iters)/1e3); + + crypto_pk_free(key); +} + +#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); + } + end = perftime(); + printf("Client-side, part 1: %f usec.\n", NANOCOUNT(start, end, iters)/1e3); + + 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; @@ -184,18 +309,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); @@ -355,6 +480,10 @@ typedef struct benchmark_t { static struct benchmark_t benchmarks[] = { ENT(dmap), ENT(aes), + ENT(onion_TAP), +#ifdef CURVE25519_ENABLED + ENT(onion_ntor), +#endif ENT(cell_aes), ENT(cell_ops), ENT(dh), @@ -385,6 +514,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(); @@ -405,6 +536,16 @@ main(int argc, const char **argv) reset_perftime(); crypto_seed_rng(1); + 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/include.am b/src/test/include.am index 075df36460..112d1a79d8 100644 --- a/src/test/include.am +++ b/src/test/include.am @@ -36,18 +36,33 @@ src_test_bench_CPPFLAGS= $(src_test_AM_CPPFLAGS) src_test_test_LDFLAGS = @TOR_LDFLAGS_zlib@ @TOR_LDFLAGS_openssl@ \ @TOR_LDFLAGS_libevent@ -src_test_test_LDADD = src/or/libtor.a src/common/libor.a src/common/libor-crypto.a \ +src_test_test_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@ + @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 \ +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@ + @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" + +endif + diff --git a/src/test/ntor_ref.py b/src/test/ntor_ref.py new file mode 100644 index 0000000000..ade468da7d --- /dev/null +++ b/src/test/ntor_ref.py @@ -0,0 +1,387 @@ +# 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 +import curve25519 +import hashlib +import hmac +import subprocess + +# ********************************************************************** +# Helpers and constants + +def HMAC(key,msg): + "Return the HMAC-SHA256 of 'msg' using the key 'key'." + H = hmac.new(key, "", 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 + ":key_expand" +T_MAC = PROTOID + ":mac" +T_KEY = PROTOID + ":key_extract" +T_VERIFY = PROTOID + ":verify" + +def H_mac(msg): return H(msg, tweak=T_MAC) +def H_verify(msg): return H(msg, tweak=T_VERIFY) + +class PrivateKey(curve25519.keys.Private): + """As curve25519.keys.Private, but doesn't regenerate its public key + every time you ask for it. + """ + def __init__(self): + curve25519.keys.Private.__init__(self) + self._memo_public = None + + def get_public(self): + if self._memo_public is None: + self._memo_public = curve25519.keys.Private.get_public(self) + + return self._memo_public + +# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +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 + chr(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 = curve25519.keys.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 + + "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 = curve25519.keys.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 + + "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="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 + +# ====================================================================== +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=binascii.b2a_hex + dehex=lambda s: binascii.a2b_hex(s.strip()) + + PROG = "./src/test/test-ntor-cl" + def tor_client1(node_id, pubkey_B): + " returns (msg, state) " + p = subprocess.Popen([PROG, "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 = "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 "We just interoperated." + +# ====================================================================== + +if __name__ == '__main__': + import sys + if 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/test-child.c b/src/test/test-child.c index c5725f1c5a..ef10fbb922 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.c b/src/test/test.c index c96aeb7053..b838172d5a 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 @@ -53,10 +53,14 @@ double fabs(double x); #include "torgzip.h" #include "mempool.h" #include "memarea.h" -#include "onion.h" +#include "onion_tap.h" #include "policies.h" #include "rephist.h" #include "routerparse.h" +#ifdef CURVE25519_ENABLED +#include "crypto_curve25519.h" +#include "onion_ntor.h" +#endif #ifdef USE_DMALLOC #include <dmalloc.h> @@ -815,11 +819,11 @@ test_onion_handshake(void) { /* client-side */ crypto_dh_t *c_dh = NULL; - char c_buf[ONIONSKIN_CHALLENGE_LEN]; + char c_buf[TAP_ONIONSKIN_CHALLENGE_LEN]; char c_keys[40]; /* server-side */ - char s_buf[ONIONSKIN_REPLY_LEN]; + char s_buf[TAP_ONIONSKIN_REPLY_LEN]; char s_keys[40]; /* shared */ @@ -828,18 +832,18 @@ test_onion_handshake(void) pk = pk_generate(0); /* client handshake 1. */ - memset(c_buf, 0, ONIONSKIN_CHALLENGE_LEN); - test_assert(! onion_skin_create(pk, &c_dh, c_buf)); + memset(c_buf, 0, TAP_ONIONSKIN_CHALLENGE_LEN); + test_assert(! onion_skin_TAP_create(pk, &c_dh, c_buf)); /* server handshake */ - memset(s_buf, 0, ONIONSKIN_REPLY_LEN); + memset(s_buf, 0, TAP_ONIONSKIN_REPLY_LEN); memset(s_keys, 0, 40); - test_assert(! onion_skin_server_handshake(c_buf, pk, NULL, + test_assert(! onion_skin_TAP_server_handshake(c_buf, pk, NULL, s_buf, s_keys, 40)); /* client handshake 2 */ memset(c_keys, 0, 40); - test_assert(! onion_skin_client_handshake(c_dh, s_buf, c_keys, 40)); + test_assert(! onion_skin_TAP_client_handshake(c_dh, s_buf, c_keys, 40)); if (memcmp(c_keys, s_keys, 40)) { puts("Aiiiie"); @@ -856,6 +860,60 @@ test_onion_handshake(void) crypto_pk_free(pk); } +#ifdef CURVE25519_ENABLED +static void +test_ntor_handshake(void *arg) +{ + /* client-side */ + ntor_handshake_state_t *c_state = NULL; + uint8_t c_buf[NTOR_ONIONSKIN_LEN]; + uint8_t c_keys[400]; + + /* 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]; + + /* shared */ + const curve25519_public_key_t *server_pubkey; + uint8_t node_id[20] = "abcdefghijklmnopqrst"; + + (void) arg; + + /* 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; + + /* 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)); + + /* 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)); + + /* client handshake 2 */ + memset(c_keys, 0, 40); + tt_int_op(0, ==, onion_skin_ntor_client_handshake(c_state, s_buf, + c_keys, 400)); + + test_memeq(c_keys, s_keys, 400); + memset(s_buf, 0, 40); + test_memneq(c_keys, s_buf, 40); + + done: + ntor_handshake_state_free(c_state); + dimap_free(s_keymap, NULL); +} +#endif + static void test_circuit_timeout(void) { @@ -1354,11 +1412,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); @@ -1462,59 +1529,35 @@ test_geoip(void) *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", @@ -1687,14 +1730,13 @@ 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); @@ -1947,6 +1989,9 @@ static struct testcase_t test_array[] = { ENT(buffers), { "buffer_copy", test_buffer_copy, 0, NULL, NULL }, ENT(onion_handshake), +#ifdef CURVE25519_ENABLED + { "ntor_handshake", test_ntor_handshake, 0, NULL, NULL }, +#endif ENT(circuit_timeout), ENT(policies), ENT(rend_fns), diff --git a/src/test/test.h b/src/test/test.h index 08fad6b313..a89b558e5a 100644 --- a/src/test/test.h +++ b/src/test/test.h @@ -1,6 +1,6 @@ /* 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 diff --git a/src/test/test_addr.c b/src/test/test_addr.c index eea0fcde89..890dfe4366 100644 --- a/src/test/test_addr.c +++ b/src/test/test_addr.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 ADDRESSMAP_PRIVATE diff --git a/src/test/test_cell_formats.c b/src/test/test_cell_formats.c index 4222c79d92..55d8d0f00f 100644 --- a/src/test/test_cell_formats.c +++ b/src/test/test_cell_formats.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 "orconfig.h" @@ -9,6 +9,10 @@ #define RELAY_PRIVATE #include "or.h" #include "connection_edge.h" +#include "onion.h" +#include "onion_tap.h" +#include "onion_fast.h" +#include "onion_ntor.h" #include "relay.h" #include "test.h" @@ -374,6 +378,500 @@ test_cfmt_connected_cells(void *arg) 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); +} + #define TEST(name, flags) \ { #name, test_cfmt_ ## name, flags, 0, NULL } @@ -381,6 +879,10 @@ 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), END_OF_TESTCASES }; diff --git a/src/test/test_config.c b/src/test/test_config.c index 9f6b260fea..e20fe73295 100644 --- a/src/test/test_config.c +++ b/src/test/test_config.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 "orconfig.h" diff --git a/src/test/test_containers.c b/src/test/test_containers.c index 580c5779f0..ca901624c2 100644 --- a/src/test/test_containers.c +++ b/src/test/test_containers.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 "orconfig.h" @@ -66,8 +66,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); @@ -195,13 +195,13 @@ 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_); @@ -278,13 +278,13 @@ test_container_smartlist_strings(void) 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 +292,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 +365,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 +389,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 +445,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); @@ -528,18 +528,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. */ @@ -782,6 +782,50 @@ test_container_order_functions(void) ; } +static void +test_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); +} + #define CONTAINER_LEGACY(name) \ { #name, legacy_test_helper, 0, &legacy_setup, test_container_ ## name } @@ -796,6 +840,7 @@ struct testcase_t container_tests[] = { CONTAINER_LEGACY(strmap), CONTAINER_LEGACY(pqueue), CONTAINER_LEGACY(order_functions), + { "di_map", test_di_map, 0, NULL, NULL }, END_OF_TESTCASES }; diff --git a/src/test/test_crypto.c b/src/test/test_crypto.c index ed1da39670..a1b5c52179 100644 --- a/src/test/test_crypto.c +++ b/src/test/test_crypto.c @@ -1,13 +1,18 @@ /* 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" +#ifdef CURVE25519_ENABLED +#include "crypto_curve25519.h" +#endif /** Run unit tests for Diffie-Hellman functionality. */ static void @@ -832,6 +837,278 @@ 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); + + 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; + const int loop_max=10000; + 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, + "4faf81190869fd742a33691b0e0824d5" + "7e0329f4dd2819f5f32d130f1296b500"); + test_memeq_hex(e2k, + "05aec13f92286f3a781ccae98995a3b9" + "e0544770bc7de853b38f9100489e3e79"); + test_memeq_hex(e1e2k, + "cd6e8269104eb5aaee886bd2071fba88" + "bd13861475516bc2cd2b6e005e805064"); + + 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"); + + 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_int_op(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)); + + content[69] ^= 0xff; + tt_int_op(0, ==, write_bytes_to_file(fname, content, st.st_size, 1)); + tt_int_op(-1, ==, curve25519_keypair_read_from_file(&keypair2, &tag, fname)); + + done: + tor_free(fname); + tor_free(content); +} + +#endif + static void * pass_data_setup_fn(const struct testcase_t *testcase) { @@ -863,6 +1140,15 @@ struct testcase_t crypto_tests[] = { { "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 END_OF_TESTCASES }; diff --git a/src/test/test_data.c b/src/test/test_data.c index de2f9f58eb..5f0f7cba01 100644 --- a/src/test/test_data.c +++ b/src/test/test_data.c @@ -1,6 +1,6 @@ /* 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 */ /** First of 3 example authority certificates for unit testing. */ diff --git a/src/test/test_dir.c b/src/test/test_dir.c index ff41bf2f3f..f1c745ef78 100644 --- a/src/test/test_dir.c +++ b/src/test/test_dir.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 "orconfig.h" diff --git a/src/test/test_introduce.c b/src/test/test_introduce.c index 992d9cd507..69c1152229 100644 --- a/src/test/test_introduce.c +++ b/src/test/test_introduce.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2012, The Tor Project, Inc. */ +/* Copyright (c) 2012-2013, The Tor Project, Inc. */ /* See LICENSE for licensing information */ #include "orconfig.h" diff --git a/src/test/test_microdesc.c b/src/test/test_microdesc.c index 89c578f4a7..4bc9fa7263 100644 --- a/src/test/test_microdesc.c +++ b/src/test/test_microdesc.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 */ #include "orconfig.h" diff --git a/src/test/test_ntor_cl.c b/src/test/test_ntor_cl.c new file mode 100644 index 0000000000..d16b088a5f --- /dev/null +++ b/src/test/test_ntor_cl.c @@ -0,0 +1,166 @@ +/* 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; + uint8_t msg[NTOR_ONIONSKIN_LEN]; + + char buf[1024]; + + memset(&state, 0, sizeof(state)); + + 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; + char *hexkeys; + + 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"); + return 2; + } + + 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); + + tor_free(keys); + tor_free(hexkeys); + return 0; +} + +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; + + 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"); + return 2; + } + + base16_encode(hexkeys, keybytes*2+1, (const char*)keys, keybytes); + printf("%s\n", hexkeys); + + tor_free(keys); + tor_free(hexkeys); + + return 0; +} + +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_pt.c b/src/test/test_pt.c index d3dadb9bfa..80707f4379 100644 --- a/src/test/test_pt.c +++ b/src/test/test_pt.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 "orconfig.h" diff --git a/src/test/test_replay.c b/src/test/test_replay.c index b08818f06b..be48df177e 100644 --- a/src/test/test_replay.c +++ b/src/test/test_replay.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2012, The Tor Project, Inc. */ +/* Copyright (c) 2012-2013, The Tor Project, Inc. */ /* See LICENSE for licensing information */ #define REPLAYCACHE_PRIVATE diff --git a/src/test/test_util.c b/src/test/test_util.c index 3ed2cbb54d..bed33fac25 100644 --- a/src/test/test_util.c +++ b/src/test/test_util.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 "orconfig.h" @@ -17,6 +17,7 @@ #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. */ @@ -2215,13 +2216,13 @@ 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); @@ -2843,6 +2844,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: ; } @@ -3230,6 +3241,20 @@ test_util_set_env_var_in_sl(void *ptr) smartlist_free(expected_resulting_env_vars); } +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: + ; +} + #define UTIL_LEGACY(name) \ { #name, legacy_test_helper, 0, &legacy_setup, test_util_ ## name } @@ -3286,6 +3311,7 @@ struct testcase_t util_tests[] = { 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(mathlog, 0), END_OF_TESTCASES }; diff --git a/src/tools/Makefile.nmake b/src/tools/Makefile.nmake index a30a28b2e1..fda1990e0b 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 index 7337eff163..54b150a80c 100644 --- a/src/tools/include.am +++ b/src/tools/include.am @@ -8,14 +8,16 @@ 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@ + @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@ + @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 05fc8d86c8..a3860ca4b7 100644 --- a/src/tools/tor-checkkey.c +++ b/src/tools/tor-checkkey.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 */ #define CRYPTO_PRIVATE 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 ee6d5f3434..e288a1ecf3 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 */ /** 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 037d409ac7..2d924ce750 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 */ /** 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 e5c33db0b4..692186d372 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 */ /** 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 add350d2f6..b6c7ed8643 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 */ /** diff --git a/src/tools/tor-fw-helper/tor-fw-helper.c b/src/tools/tor-fw-helper/tor-fw-helper.c index 4efe515cc4..d92445e08f 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 */ /** diff --git a/src/tools/tor-fw-helper/tor-fw-helper.h b/src/tools/tor-fw-helper/tor-fw-helper.h index 1f6c1ff26b..0b0d179935 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 */ /** diff --git a/src/tools/tor-gencert.c b/src/tools/tor-gencert.c index 91b1e3c234..3809b22d43 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" @@ -82,10 +82,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); } } } diff --git a/src/tools/tor-resolve.c b/src/tools/tor-resolve.c index cae5fbbbb4..2e4b97eefd 100644 --- a/src/tools/tor-resolve.c +++ b/src/tools/tor-resolve.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 */ diff --git a/src/win32/orconfig.h b/src/win32/orconfig.h index 24e1261847..4312d9fbe5 100644 --- a/src/win32/orconfig.h +++ b/src/win32/orconfig.h @@ -151,6 +151,9 @@ /* 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" @@ -238,7 +241,7 @@ #define USING_TWOS_COMPLEMENT /* Version number of package */ -#define VERSION "0.2.4.7-alpha-dev" +#define VERSION "0.2.4.10-alpha-dev" @@ -248,3 +251,8 @@ #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 + |