aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore2
-rw-r--r--ChangeLog813
-rw-r--r--Makefile.am7
-rw-r--r--ReleaseNotes286
-rw-r--r--changes/bug2649a5
-rw-r--r--changes/bug2649b5
-rw-r--r--changes/bug332714
-rw-r--r--changes/bug34216
-rw-r--r--changes/bug3428b9
-rw-r--r--changes/bug346011
-rw-r--r--changes/bug37867
-rw-r--r--changes/bug38514
-rw-r--r--changes/bug39093
-rw-r--r--changes/bug39235
-rw-r--r--changes/bug45295
-rw-r--r--changes/bug45486
-rw-r--r--changes/bug45844
-rw-r--r--changes/config26
-rw-r--r--changes/disable_network9
-rw-r--r--changes/intro-point-expiration5
-rw-r--r--changes/per-intro-point-replay-cache7
-rw-r--r--changes/proposal1786
-rw-r--r--changes/reduce-hs-intro-dh-key-replay-cache-lifetime9
-rw-r--r--changes/split_entry_conn5
-rw-r--r--configure.in13
-rwxr-xr-xcontrib/checkSpace.pl2
-rw-r--r--contrib/package_nsis-mingw.sh2
-rw-r--r--contrib/tor-mingw.nsi.in2
-rw-r--r--doc/HACKING2
-rw-r--r--doc/tor.1.txt67
-rw-r--r--src/common/Makefile.am4
-rw-r--r--src/common/OpenBSD_malloc_Linux.c2
-rw-r--r--src/common/address.c66
-rw-r--r--src/common/address.h24
-rw-r--r--src/common/aes.c1030
-rw-r--r--src/common/aes.h4
-rw-r--r--src/common/compat.c86
-rw-r--r--src/common/compat.h22
-rw-r--r--src/common/compat_libevent.c130
-rw-r--r--src/common/compat_libevent.h8
-rw-r--r--src/common/container.c19
-rw-r--r--src/common/container.h28
-rw-r--r--src/common/crypto.c479
-rw-r--r--src/common/crypto.h6
-rw-r--r--src/common/mempool.c1
-rw-r--r--src/common/torgzip.c3
-rw-r--r--src/common/tortls.c815
-rw-r--r--src/common/tortls.h33
-rw-r--r--src/common/util.c454
-rw-r--r--src/common/util.h103
-rw-r--r--src/config/geoip14740
-rw-r--r--src/or/Makefile.am11
-rw-r--r--src/or/buffers.c51
-rw-r--r--src/or/circuitbuild.c357
-rw-r--r--src/or/circuitbuild.h21
-rw-r--r--src/or/circuitlist.c33
-rw-r--r--src/or/circuituse.c17
-rw-r--r--src/or/command.c670
-rw-r--r--src/or/config.c1633
-rw-r--r--src/or/config.h21
-rw-r--r--src/or/connection.c263
-rw-r--r--src/or/connection.h3
-rw-r--r--src/or/connection_edge.c39
-rw-r--r--src/or/connection_or.c704
-rw-r--r--src/or/connection_or.h27
-rw-r--r--src/or/control.c48
-rw-r--r--src/or/cpuworker.c14
-rw-r--r--src/or/directory.c13
-rw-r--r--src/or/directory.h2
-rw-r--r--src/or/dirserv.c137
-rw-r--r--src/or/dirvote.c32
-rw-r--r--src/or/dirvote.h3
-rw-r--r--src/or/dns.c15
-rw-r--r--src/or/eventdns.c21
-rw-r--r--src/or/geoip.c10
-rw-r--r--src/or/hibernate.c52
-rw-r--r--src/or/hibernate.h22
-rw-r--r--src/or/main.c229
-rw-r--r--src/or/microdesc.c32
-rw-r--r--src/or/microdesc.h2
-rw-r--r--src/or/nodelist.c132
-rw-r--r--src/or/nodelist.h13
-rw-r--r--src/or/ntmain.c2
-rw-r--r--src/or/or.h293
-rw-r--r--src/or/relay.c9
-rw-r--r--src/or/relay.h5
-rw-r--r--src/or/rendclient.c219
-rw-r--r--src/or/rendclient.h13
-rw-r--r--src/or/rendcommon.c5
-rw-r--r--src/or/rendservice.c396
-rw-r--r--src/or/rephist.c169
-rw-r--r--src/or/rephist.h5
-rw-r--r--src/or/router.c148
-rw-r--r--src/or/router.h10
-rw-r--r--src/or/routerlist.c16
-rw-r--r--src/or/routerparse.c136
-rw-r--r--src/or/routerparse.h1
-rw-r--r--src/or/transports.c1250
-rw-r--r--src/or/transports.h106
-rw-r--r--src/test/Makefile.am13
-rw-r--r--src/test/bench.c327
-rw-r--r--src/test/test.c107
-rw-r--r--src/test/test_addr.c189
-rw-r--r--src/test/test_config.c6
-rw-r--r--src/test/test_crypto.c104
-rw-r--r--src/test/test_dir.c85
-rw-r--r--src/test/test_pt.c147
-rw-r--r--src/test/test_util.c178
-rw-r--r--src/tools/tor-gencert.c4
-rw-r--r--src/tools/tor-resolve.c2
-rw-r--r--src/win32/orconfig.h2
111 files changed, 20271 insertions, 7707 deletions
diff --git a/.gitignore b/.gitignore
index 610965b85..26e9e3808 100644
--- a/.gitignore
+++ b/.gitignore
@@ -144,6 +144,8 @@
# /src/test
/src/test/Makefile
/src/test/Makefile.in
+/src/test/bench
+/src/test/bench.exe
/src/test/test
/src/test/test-child
/src/test/test.exe
diff --git a/ChangeLog b/ChangeLog
index 1e0f85014..9a7d50af8 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,816 @@
+Changes in version 0.2.3.9-alpha - 2011-1?-??
+ o Major features:
+ - When using OpenSSL 1.0.0 or later, use OpenSSL's counter mode
+ implementation. It makes AES_CTR about 7% faster than our old one
+ (which was about 10% faster than the one OpenSSL used to provide).
+ Resolves ticket 4526.
+ - Tor clients and bridges can now be easily configured to use a
+ separate 'transport' proxy. This approach helps to resist
+ censorship by allowing bridges to use protocol obfuscation
+ plugins. It implements the 'managed proxy' part of proposal
+ 180. Implements ticket 3472.
+ - Block excess renegotiations even if they are RFC5746 compliant.
+ This security fix mitigates potential SSL Denial of Service attacks
+ that use SSL renegotiation as a way of forcing the server to perform
+ unneeded computationally expensive SSL handshakes. Implements
+ ticket 4312.
+
+ o Major bugfixes:
+ - Teach Tor how to notice excess renegotiation attempts before it
+ receives the first data SSL record. Fixes part of ticket 4312.
+ - Only use the EVP interface when AES acceleration is enabled,
+ to avoid a 5-7% performance regression. Resolves issue 4525;
+ bugfix on 0.2.3.8-alpha.
+
+ o Minor features:
+ - Experimental support for running on Windows with IOCP and no
+ kernel-space socket buffers. This feature is controlled by a new
+ UserspaceIOCPBuffers feature (off by default), which has no
+ effect unless Tor has been built with support for bufferevents,
+ is running on Windows, and has enabled IOCP. This may, in the
+ long run, help solve or mitigate bug 98.
+ - Try to make the introductory warning message that Tor prints on
+ startup more useful for actually finding help and information.
+ Resolves ticket 2474.
+ - Running "make version" now displays the version of Tor that
+ we're about to build. Idea from katmagic; resolves issue 4400.
+ - If set to 1, Tor will attempt to prevent basic debugging
+ attachment attempts by other processes. It has no impact for
+ users who wish to attach if they have CAP_SYS_PTRACE or if they
+ are root. We believe that this feature works on modern
+ Gnu/Linux distributions, and that it may also work on OSX and
+ some *BSD systems (untested). Some modern Gnu/Linux systems
+ such as Ubuntu have the kernel.yama.ptrace_scope sysctl and by
+ default enable it as an attempt to limit the PTRACE scope for
+ all user processes by default. This feature will attempt to
+ limit the PTRACE scope for Tor specifically - it will not
+ attempt to alter the system wide ptrace scope as it may not even
+ exist. If you wish to attach to Tor with a debugger such as gdb
+ or strace you will want to set this to 0 for the duration of
+ your debugging. Normal users should leave it on. (Default: 1)
+
+ o Minor bugfixes:
+ - Resolve an integer overflow bug in smartlist_ensure_capacity().
+ Fixes bug 4230; bugfix on Tor 0.1.0.1-rc. Based on a patch by
+ Mansour Moufid.
+ - Fix a compile warning in tor_inet_pton(). Bugfix on 0.2.3.8-alpha;
+ fixes bug 4554.
+ - Fix a minor formatting issue in one of tor-gencert's error messages.
+ Fixes bug 4574.
+ - Prevent a false positive from the check-spaces script, by disabling
+ the "whitespace between function name and (" check for functions
+ named 'op()'.
+
+ o Build fixes:
+ - Properly handle the case where the build-tree is not the same
+ as the source tree when generating src/common/common_sha1.i,
+ src/or/micro-revision.i, and src/or/or_sha1.i. Fixes bug 3953;
+ bugfix on 0.2.0.1-alpha.
+
+ o Code simplifications and refactorings:
+ - Remove the pure attribute from all functions that used it
+ previously. In many cases we assigned it incorrectly, because the
+ functions might assert or call impure functions, and we don't have
+ evidence that keeping the pure attribute is worthwhile. Implements
+ changes suggested in ticket 4421.
+
+
+Changes in version 0.2.3.8-alpha - 2011-11-22
+ Tor 0.2.3.8-alpha fixes some crash and assert bugs, including a
+ socketpair-related bug that has been bothering Windows users. It adds
+ support to serve microdescriptors to controllers, so Vidalia's network
+ map can resume listing relays (once Vidalia implements its side),
+ and adds better support for hardware AES acceleration. Finally, it
+ starts the process of adjusting the bandwidth cutoff for getting the
+ "Fast" flag from 20KB to (currently) 32KB -- preliminary results show
+ that tiny relays harm performance more than they help network capacity.
+
+ o Major bugfixes:
+ - Initialize Libevent with the EVENT_BASE_FLAG_NOLOCK flag enabled, so
+ that it doesn't attempt to allocate a socketpair. This could cause
+ some problems on Windows systems with overzealous firewalls. Fix for
+ bug 4457; workaround for Libevent versions 2.0.1-alpha through
+ 2.0.15-stable.
+ - Correctly sanity-check that we don't underflow on a memory
+ allocation (and then assert) for hidden service introduction
+ point decryption. Bug discovered by Dan Rosenberg. Fixes bug 4410;
+ bugfix on 0.2.1.5-alpha.
+ - Remove the artificially low cutoff of 20KB to guarantee the Fast
+ flag. In the past few years the average relay speed has picked
+ up, and while the "top 7/8 of the network get the Fast flag" and
+ "all relays with 20KB or more of capacity get the Fast flag" rules
+ used to have the same result, now the top 7/8 of the network has
+ a capacity more like 32KB. Bugfix on 0.2.1.14-rc. Fixes bug 4489.
+ - Fix a rare assertion failure when checking whether a v0 hidden
+ service descriptor has any usable introduction points left, and
+ we don't have enough information to build a circuit to the first
+ intro point named in the descriptor. The HS client code in
+ 0.2.3.x no longer uses v0 HS descriptors, but this assertion can
+ trigger on (and crash) v0 HS authorities. Fixes bug 4411.
+ Bugfix on 0.2.3.1-alpha; diagnosed by frosty_un.
+ - Make bridge authorities not crash when they are asked for their own
+ descriptor. Bugfix on 0.2.3.7-alpha, reported by Lucky Green.
+ - When running as a client, do not print a misleading (and plain
+ wrong) log message that we're collecting "directory request"
+ statistics: clients don't collect statistics. Also don't create a
+ useless (because empty) stats file in the stats/ directory. Fixes
+ bug 4353; bugfix on 0.2.2.34 and 0.2.3.7-alpha.
+
+ o Major features:
+ - Allow Tor controllers like Vidalia to obtain the microdescriptor
+ for a relay by identity digest or nickname. Previously,
+ microdescriptors were only available by their own digests, so a
+ controller would have to ask for and parse the whole microdescriptor
+ consensus in order to look up a single relay's microdesc. Fixes
+ bug 3832; bugfix on 0.2.3.1-alpha.
+ - Use OpenSSL's EVP interface for AES encryption, so that all AES
+ operations can use hardware acceleration (if present). Resolves
+ ticket 4442.
+
+ o Minor bugfixes (on 0.2.2.x and earlier):
+ - Detect failure to initialize Libevent. This fix provides better
+ detection for future instances of bug 4457.
+ - Avoid frequent calls to the fairly expensive cull_wedged_cpuworkers
+ function. This was eating up hideously large amounts of time on some
+ busy servers. Fixes bug 4518; bugfix on 0.0.9.8.
+ - Don't warn about unused log_mutex in log.c when building with
+ --disable-threads using a recent GCC. Fixes bug 4437; bugfix on
+ 0.1.0.6-rc which introduced --disable-threads.
+ - Allow manual 'authenticate' commands to the controller interface
+ from netcat (nc) as well as telnet. We were rejecting them because
+ they didn't come with the expected whitespace at the end of the
+ command. Bugfix on 0.1.1.1-alpha; fixes bug 2893.
+ - Fix some (not actually triggerable) buffer size checks in usage of
+ tor_inet_ntop. Fixes bug 4434; bugfix on Tor 0.2.0.1-alpha. Patch
+ by Anders Sundman.
+ - Fix parsing of some corner-cases with tor_inet_pton(). Fixes
+ bug 4515; bugfix on 0.2.0.1-alpha; fix by Anders Sundman.
+ - When configuring, starting, or stopping an NT service, stop
+ immediately after the service configuration attempt has succeeded
+ or failed. Fixes bug 3963; bugfix on 0.2.0.7-alpha.
+ - When sending a NETINFO cell, include the original address
+ received for the other side, not its canonical address. Found
+ by "troll_un"; fixes bug 4349; bugfix on 0.2.0.10-alpha.
+ - Rename the bench_{aes,dmap} functions to test_*, so that tinytest
+ can pick them up when the tests aren't disabled. Bugfix on
+ 0.2.2.4-alpha which introduced tinytest.
+ - Fix a memory leak when we check whether a hidden service
+ descriptor has any usable introduction points left. Fixes bug
+ 4424. Bugfix on 0.2.2.25-alpha.
+ - Fix a memory leak in launch_direct_bridge_descriptor_fetch() that
+ occurred when a client tried to fetch a descriptor for a bridge
+ in ExcludeNodes. Fixes bug 4383; bugfix on 0.2.2.25-alpha.
+
+ o Minor bugfixes (on 0.2.3.x):
+ - Make util unit tests build correctly with MSVC. Bugfix on
+ 0.2.3.3-alpha. Patch by Gisle Vanem.
+ - Successfully detect AUTH_CHALLENGE cells with no recognized
+ authentication type listed. Fixes bug 4367; bugfix on 0.2.3.6-alpha.
+ Found by frosty_un.
+ - If a relay receives an AUTH_CHALLENGE cell it can't answer,
+ it should still send a NETINFO cell to allow the connection to
+ become open. Fixes bug 4368; fix on 0.2.3.6-alpha; bug found by
+ "frosty".
+ - Log less loudly when we get an invalid authentication certificate
+ from a source other than a directory authority: it's not unusual
+ to see invalid certs because of clock skew. Fixes bug 4370; bugfix
+ on 0.2.3.6-alpha.
+ - Tolerate servers with more clock skew in their authentication
+ certificates than previously. Fixes bug 4371; bugfix on
+ 0.2.3.6-alpha.
+ - Fix a couple of compile warnings on Windows. Fixes bug 4469; bugfix
+ on 0.2.3.4-alpha and 0.2.3.6-alpha.
+
+ o Minor features:
+ - Add two new config options for directory authorities:
+ AuthDirFastGuarantee sets a bandwidth threshold for guaranteeing the
+ Fast flag, and AuthDirGuardBWGuarantee sets a bandwidth threshold
+ that is always sufficient to satisfy the bandwidth requirement for
+ the Guard flag. Now it will be easier for researchers to simulate
+ Tor networks with different values. Resolves ticket 4484.
+ - When Tor ignores a hidden service specified in its configuration,
+ include the hidden service's directory in the warning message.
+ Previously, we would only tell the user that some hidden service
+ was ignored. Bugfix on 0.0.6; fixes bug 4426.
+ - When we fail to initialize Libevent, retry with IOCP disabled so we
+ don't need to turn on multi-threading support in Libevent, which in
+ turn requires a working socketpair(). This is a workaround for bug
+ 4457, which affects Libevent versions from 2.0.1-alpha through
+ 2.0.15-stable.
+ - Detect when we try to build on a platform that doesn't define
+ AF_UNSPEC to 0. We don't work there, so refuse to compile.
+ - Update to the November 1 2011 Maxmind GeoLite Country database.
+
+ o Packaging changes:
+ - Make it easier to automate expert package builds on Windows,
+ by removing an absolute path from makensis.exe command.
+
+ o Code simplifications and refactoring:
+ - Remove some redundant #include directives throughout the code.
+ Patch from Andrea Gelmini.
+ - Unconditionally use OpenSSL's AES implementation instead of our
+ old built-in one. OpenSSL's AES has been better for a while, and
+ relatively few servers should still be on any version of OpenSSL
+ that doesn't have good optimized assembly AES.
+ - Use the name "CERTS" consistently to refer to the new cell type;
+ we were calling it CERT in some places and CERTS in others.
+
+ o Testing:
+ - Numerous new unit tests for functions in util.c and address.c by
+ Anders Sundman.
+ - The long-disabled benchmark tests are now split into their own
+ ./src/test/bench binary.
+ - The benchmark tests can now use more accurate timers than
+ gettimeofday() when such timers are available.
+
+
+Changes in version 0.2.3.7-alpha - 2011-10-30
+ Tor 0.2.3.7-alpha fixes a crash bug in 0.2.3.6-alpha introduced by
+ the new v3 handshake. It also resolves yet another bridge address
+ enumeration issue.
+
+ o Major bugfixes:
+ - If we mark an OR connection for close based on a cell we process,
+ don't process any further cells on it. We already avoid further
+ reads on marked-for-close connections, but now we also discard the
+ cells we'd already read. Fixes bug 4299; bugfix on 0.2.0.10-alpha,
+ which was the first version where we might mark a connection for
+ close based on processing a cell on it.
+ - Fix a double-free bug that would occur when we received an invalid
+ certificate in a CERT cell in the new v3 handshake. Fixes bug 4343;
+ bugfix on 0.2.3.6-alpha.
+ - Bridges no longer include their address in NETINFO cells on outgoing
+ OR connections, to allow them to blend in better with clients.
+ Removes another avenue for enumerating bridges. Reported by
+ "troll_un". Fixes bug 4348; bugfix on 0.2.0.10-alpha, when NETINFO
+ cells were introduced.
+
+ o Trivial fixes:
+ - Fixed a typo in a hibernation-related log message. Fixes bug 4331;
+ bugfix on 0.2.2.23-alpha; found by "tmpname0901".
+
+
+Changes in version 0.2.3.6-alpha - 2011-10-26
+ Tor 0.2.3.6-alpha includes the fix from 0.2.2.34 for a critical
+ anonymity vulnerability where an attacker can deanonymize Tor
+ users. Everybody should upgrade.
+
+ This release also features support for a new v3 connection handshake
+ protocol, and fixes to make hidden service connections more robust.
+
+ o Major features:
+ - Implement a new handshake protocol (v3) for authenticating Tors to
+ each other over TLS. It should be more resistant to fingerprinting
+ than previous protocols, and should require less TLS hacking for
+ future Tor implementations. Implements proposal 176.
+ - Allow variable-length padding cells to disguise the length of
+ Tor's TLS records. Implements part of proposal 184.
+
+ o Privacy/anonymity fixes (clients):
+ - Clients and bridges no longer send TLS certificate chains on
+ outgoing OR connections. Previously, each client or bridge would
+ use the same cert chain for all outgoing OR connections until
+ its IP address changes, which allowed any relay that the client
+ or bridge contacted to determine which entry guards it is using.
+ Fixes CVE-2011-2768. Bugfix on 0.0.9pre5; found by "frosty_un".
+ - If a relay receives a CREATE_FAST cell on a TLS connection, it
+ no longer considers that connection as suitable for satisfying a
+ circuit EXTEND request. Now relays can protect clients from the
+ CVE-2011-2768 issue even if the clients haven't upgraded yet.
+ - Directory authorities no longer assign the Guard flag to relays
+ that haven't upgraded to the above "refuse EXTEND requests
+ to client connections" fix. Now directory authorities can
+ protect clients from the CVE-2011-2768 issue even if neither
+ the clients nor the relays have upgraded yet. There's a new
+ "GiveGuardFlagTo_CVE_2011_2768_VulnerableRelays" config option
+ to let us transition smoothly, else tomorrow there would be no
+ guard relays.
+
+ o Major bugfixes (hidden services):
+ - Improve hidden service robustness: when an attempt to connect to
+ a hidden service ends, be willing to refetch its hidden service
+ descriptors from each of the HSDir relays responsible for them
+ immediately. Previously, we would not consider refetching the
+ service's descriptors from each HSDir for 15 minutes after the last
+ fetch, which was inconvenient if the hidden service was not running
+ during the first attempt. Bugfix on 0.2.0.18-alpha; fixes bug 3335.
+ - When one of a hidden service's introduction points appears to be
+ unreachable, stop trying it. Previously, we would keep trying
+ to build circuits to the introduction point until we lost the
+ descriptor, usually because the user gave up and restarted Tor.
+ Partly fixes bug 3825.
+ - Don't launch a useless circuit after failing to use one of a
+ hidden service's introduction points. Previously, we would
+ launch a new introduction circuit, but not set the hidden service
+ which that circuit was intended to connect to, so it would never
+ actually be used. A different piece of code would then create a
+ new introduction circuit correctly. Bug reported by katmagic and
+ found by Sebastian Hahn. Bugfix on 0.2.1.13-alpha; fixes bug 4212.
+
+ o Major bugfixes (other):
+ - Bridges now refuse CREATE or CREATE_FAST cells on OR connections
+ that they initiated. Relays could distinguish incoming bridge
+ connections from client connections, creating another avenue for
+ enumerating bridges. Fixes CVE-2011-2769. Bugfix on 0.2.0.3-alpha.
+ Found by "frosty_un".
+ - Don't update the AccountingSoftLimitHitAt state file entry whenever
+ tor gets started. This prevents a wrong average bandwidth
+ estimate, which would cause relays to always start a new accounting
+ interval at the earliest possible moment. Fixes bug 2003; bugfix
+ on 0.2.2.7-alpha. Reported by BryonEldridge, who also helped
+ immensely in tracking this bug down.
+ - Fix a crash bug when changing node restrictions while a DNS lookup
+ is in-progress. Fixes bug 4259; bugfix on 0.2.2.25-alpha. Bugfix
+ by "Tey'".
+
+ o Minor bugfixes (on 0.2.2.x and earlier):
+ - When a hidden service turns an extra service-side introduction
+ circuit into a general-purpose circuit, free the rend_data and
+ intro_key fields first, so we won't leak memory if the circuit
+ is cannibalized for use as another service-side introduction
+ circuit. Bugfix on 0.2.1.7-alpha; fixes bug 4251.
+ - Rephrase the log message emitted if the TestSocks check is
+ successful. Patch from Fabian Keil; fixes bug 4094.
+ - Bridges now skip DNS self-tests, to act a little more stealthily.
+ Fixes bug 4201; bugfix on 0.2.0.3-alpha, which first introduced
+ bridges. Patch by "warms0x".
+ - Remove a confusing dollar sign from the example fingerprint in the
+ man page, and also make the example fingerprint a valid one. Fixes
+ bug 4309; bugfix on 0.2.1.3-alpha.
+ - Fix internal bug-checking logic that was supposed to catch
+ failures in digest generation so that it will fail more robustly
+ if we ask for a nonexistent algorithm. Found by Coverity Scan.
+ Bugfix on 0.2.2.1-alpha; fixes Coverity CID 479.
+ - Report any failure in init_keys() calls launched because our
+ IP address has changed. Spotted by Coverity Scan. Bugfix on
+ 0.1.1.4-alpha; fixes CID 484.
+
+ o Minor bugfixes (on 0.2.3.x):
+ - Fix a bug in configure.in that kept it from building a configure
+ script with autoconf versions earlier than 2.61. Fixes bug 2430;
+ bugfix on 0.2.3.1-alpha.
+ - Don't warn users that they are exposing a client port to the
+ Internet if they have specified an RFC1918 address. Previously,
+ we would warn if the user had specified any non-loopback
+ address. Bugfix on 0.2.3.3-alpha. Fixes bug 4018; reported by Tas.
+ - Fix memory leaks in the failing cases of the new SocksPort and
+ ControlPort code. Found by Coverity Scan. Bugfix on 0.2.3.3-alpha;
+ fixes coverity CIDs 485, 486, and 487.
+
+ o Minor features:
+ - When a hidden service's introduction point times out, consider
+ trying it again during the next attempt to connect to the
+ HS. Previously, we would not try it again unless a newly fetched
+ descriptor contained it. Required by fixes for bugs 1297 and 3825.
+ - The next version of Windows will be called Windows 8, and it has
+ a major version of 6, minor version of 2. Correctly identify that
+ version instead of calling it "Very recent version". Resolves
+ ticket 4153; reported by funkstar.
+ - The Bridge Authority now writes statistics on how many bridge
+ descriptors it gave out in total, and how many unique descriptors
+ it gave out. It also lists how often the most and least commonly
+ fetched descriptors were given out, as well as the median and
+ 25th/75th percentile. Implements tickets 4200 and 4294.
+ - Update to the October 4 2011 Maxmind GeoLite Country database.
+
+ o Code simplifications and refactoring:
+ - Remove some old code to remember statistics about which descriptors
+ we've served as a directory mirror. The feature wasn't used and
+ is outdated now that microdescriptors are around.
+ - Rename Tor functions that turn strings into addresses, so that
+ "parse" indicates that no hostname resolution occurs, and
+ "lookup" indicates that hostname resolution may occur. This
+ should help prevent mistakes in the future. Fixes bug 3512.
+
+
+Changes in version 0.2.2.34 - 2011-10-26
+ Tor 0.2.2.34 fixes a critical anonymity vulnerability where an attacker
+ can deanonymize Tor users. Everybody should upgrade.
+
+ The attack relies on four components: 1) Clients reuse their TLS cert
+ when talking to different relays, so relays can recognize a user by
+ the identity key in her cert. 2) An attacker who knows the client's
+ identity key can probe each guard relay to see if that identity key
+ is connected to that guard relay right now. 3) A variety of active
+ attacks in the literature (starting from "Low-Cost Traffic Analysis
+ of Tor" by Murdoch and Danezis in 2005) allow a malicious website to
+ discover the guard relays that a Tor user visiting the website is using.
+ 4) Clients typically pick three guards at random, so the set of guards
+ for a given user could well be a unique fingerprint for her. This
+ release fixes components #1 and #2, which is enough to block the attack;
+ the other two remain as open research problems. Special thanks to
+ "frosty_un" for reporting the issue to us!
+
+ Clients should upgrade so they are no longer recognizable by the TLS
+ certs they present. Relays should upgrade so they no longer allow a
+ remote attacker to probe them to test whether unpatched clients are
+ currently connected to them.
+
+ This release also fixes several vulnerabilities that allow an attacker
+ to enumerate bridge relays. Some bridge enumeration attacks still
+ remain; see for example proposal 188.
+
+ o Privacy/anonymity fixes (clients):
+ - Clients and bridges no longer send TLS certificate chains on
+ outgoing OR connections. Previously, each client or bridge would
+ use the same cert chain for all outgoing OR connections until
+ its IP address changes, which allowed any relay that the client
+ or bridge contacted to determine which entry guards it is using.
+ Fixes CVE-2011-2768. Bugfix on 0.0.9pre5; found by "frosty_un".
+ - If a relay receives a CREATE_FAST cell on a TLS connection, it
+ no longer considers that connection as suitable for satisfying a
+ circuit EXTEND request. Now relays can protect clients from the
+ CVE-2011-2768 issue even if the clients haven't upgraded yet.
+ - Directory authorities no longer assign the Guard flag to relays
+ that haven't upgraded to the above "refuse EXTEND requests
+ to client connections" fix. Now directory authorities can
+ protect clients from the CVE-2011-2768 issue even if neither
+ the clients nor the relays have upgraded yet. There's a new
+ "GiveGuardFlagTo_CVE_2011_2768_VulnerableRelays" config option
+ to let us transition smoothly, else tomorrow there would be no
+ guard relays.
+
+ o Privacy/anonymity fixes (bridge enumeration):
+ - Bridge relays now do their directory fetches inside Tor TLS
+ connections, like all the other clients do, rather than connecting
+ directly to the DirPort like public relays do. Removes another
+ avenue for enumerating bridges. Fixes bug 4115; bugfix on 0.2.0.35.
+ - Bridges relays now build circuits for themselves in a more similar
+ way to how clients build them. Removes another avenue for
+ enumerating bridges. Fixes bug 4124; bugfix on 0.2.0.3-alpha,
+ when bridges were introduced.
+ - Bridges now refuse CREATE or CREATE_FAST cells on OR connections
+ that they initiated. Relays could distinguish incoming bridge
+ connections from client connections, creating another avenue for
+ enumerating bridges. Fixes CVE-2011-2769. Bugfix on 0.2.0.3-alpha.
+ Found by "frosty_un".
+
+ o Major bugfixes:
+ - Fix a crash bug when changing node restrictions while a DNS lookup
+ is in-progress. Fixes bug 4259; bugfix on 0.2.2.25-alpha. Bugfix
+ by "Tey'".
+ - Don't launch a useless circuit after failing to use one of a
+ hidden service's introduction points. Previously, we would
+ launch a new introduction circuit, but not set the hidden service
+ which that circuit was intended to connect to, so it would never
+ actually be used. A different piece of code would then create a
+ new introduction circuit correctly. Bug reported by katmagic and
+ found by Sebastian Hahn. Bugfix on 0.2.1.13-alpha; fixes bug 4212.
+
+ o Minor bugfixes:
+ - Change an integer overflow check in the OpenBSD_Malloc code so
+ that GCC is less likely to eliminate it as impossible. Patch
+ from Mansour Moufid. Fixes bug 4059.
+ - When a hidden service turns an extra service-side introduction
+ circuit into a general-purpose circuit, free the rend_data and
+ intro_key fields first, so we won't leak memory if the circuit
+ is cannibalized for use as another service-side introduction
+ circuit. Bugfix on 0.2.1.7-alpha; fixes bug 4251.
+ - Bridges now skip DNS self-tests, to act a little more stealthily.
+ Fixes bug 4201; bugfix on 0.2.0.3-alpha, which first introduced
+ bridges. Patch by "warms0x".
+ - Fix internal bug-checking logic that was supposed to catch
+ failures in digest generation so that it will fail more robustly
+ if we ask for a nonexistent algorithm. Found by Coverity Scan.
+ Bugfix on 0.2.2.1-alpha; fixes Coverity CID 479.
+ - Report any failure in init_keys() calls launched because our
+ IP address has changed. Spotted by Coverity Scan. Bugfix on
+ 0.1.1.4-alpha; fixes CID 484.
+
+ o Minor bugfixes (log messages and documentation):
+ - Remove a confusing dollar sign from the example fingerprint in the
+ man page, and also make the example fingerprint a valid one. Fixes
+ bug 4309; bugfix on 0.2.1.3-alpha.
+ - The next version of Windows will be called Windows 8, and it has
+ a major version of 6, minor version of 2. Correctly identify that
+ version instead of calling it "Very recent version". Resolves
+ ticket 4153; reported by funkstar.
+ - Downgrade log messages about circuit timeout calibration from
+ "notice" to "info": they don't require or suggest any human
+ intervention. Patch from Tom Lowenthal. Fixes bug 4063;
+ bugfix on 0.2.2.14-alpha.
+
+ o Minor features:
+ - Turn on directory request statistics by default and include them in
+ extra-info descriptors. Don't break if we have no GeoIP database.
+ Backported from 0.2.3.1-alpha; implements ticket 3951.
+ - Update to the October 4 2011 Maxmind GeoLite Country database.
+
+
+Changes in version 0.2.1.31 - 2011-10-26
+ Tor 0.2.1.31 backports important security and privacy fixes for
+ oldstable. This release is intended only for package maintainers and
+ others who cannot use the 0.2.2 stable series. All others should be
+ using Tor 0.2.2.x or newer.
+
+ o Security fixes (also included in 0.2.2.x):
+ - Replace all potentially sensitive memory comparison operations
+ with versions whose runtime does not depend on the data being
+ compared. This will help resist a class of attacks where an
+ adversary can use variations in timing information to learn
+ sensitive data. Fix for one case of bug 3122. (Safe memcmp
+ implementation by Robert Ransom based partially on code by DJB.)
+ - Fix an assert in parsing router descriptors containing IPv6
+ addresses. This one took down the directory authorities when
+ somebody tried some experimental code. Bugfix on 0.2.1.3-alpha.
+
+ o Privacy/anonymity fixes (also included in 0.2.2.x):
+ - Clients and bridges no longer send TLS certificate chains on
+ outgoing OR connections. Previously, each client or bridge would
+ use the same cert chain for all outgoing OR connections until
+ its IP address changes, which allowed any relay that the client
+ or bridge contacted to determine which entry guards it is using.
+ Fixes CVE-2011-2768. Bugfix on 0.0.9pre5; found by "frosty_un".
+ - If a relay receives a CREATE_FAST cell on a TLS connection, it
+ no longer considers that connection as suitable for satisfying a
+ circuit EXTEND request. Now relays can protect clients from the
+ CVE-2011-2768 issue even if the clients haven't upgraded yet.
+ - Bridges now refuse CREATE or CREATE_FAST cells on OR connections
+ that they initiated. Relays could distinguish incoming bridge
+ connections from client connections, creating another avenue for
+ enumerating bridges. Fixes CVE-2011-2769. Bugfix on 0.2.0.3-alpha.
+ Found by "frosty_un".
+ - When receiving a hidden service descriptor, check that it is for
+ the hidden service we wanted. Previously, Tor would store any
+ hidden service descriptors that a directory gave it, whether it
+ wanted them or not. This wouldn't have let an attacker impersonate
+ a hidden service, but it did let directories pre-seed a client
+ with descriptors that it didn't want. Bugfix on 0.0.6.
+ - Avoid linkability based on cached hidden service descriptors: forget
+ all hidden service descriptors cached as a client when processing a
+ SIGNAL NEWNYM command. Fixes bug 3000; bugfix on 0.0.6.
+ - Make the bridge directory authority refuse to answer directory
+ requests for "all" descriptors. It used to include bridge
+ descriptors in its answer, which was a major information leak.
+ Found by "piebeer". Bugfix on 0.2.0.3-alpha.
+ - Don't attach new streams to old rendezvous circuits after SIGNAL
+ NEWNYM. Previously, we would keep using an existing rendezvous
+ circuit if it remained open (i.e. if it were kept open by a
+ long-lived stream, or if a new stream were attached to it before
+ Tor could notice that it was old and no longer in use). Bugfix on
+ 0.1.1.15-rc; fixes bug 3375.
+
+ o Minor bugfixes (also included in 0.2.2.x):
+ - When we restart our relay, we might get a successful connection
+ from the outside before we've started our reachability tests,
+ triggering a warning: "ORPort found reachable, but I have no
+ routerinfo yet. Failing to inform controller of success." This
+ bug was harmless unless Tor is running under a controller
+ like Vidalia, in which case the controller would never get a
+ REACHABILITY_SUCCEEDED status event. Bugfix on 0.1.2.6-alpha;
+ fixes bug 1172.
+ - Build correctly on OSX with zlib 1.2.4 and higher with all warnings
+ enabled. Fixes bug 1526.
+ - Remove undocumented option "-F" from tor-resolve: it hasn't done
+ anything since 0.2.1.16-rc.
+ - Avoid signed/unsigned comparisons by making SIZE_T_CEILING unsigned.
+ None of the cases where we did this before were wrong, but by making
+ this change we avoid warnings. Fixes bug 2475; bugfix on 0.2.1.28.
+ - Fix a rare crash bug that could occur when a client was configured
+ with a large number of bridges. Fixes bug 2629; bugfix on
+ 0.2.1.2-alpha. Bugfix by trac user "shitlei".
+ - Correct the warning displayed when a rendezvous descriptor exceeds
+ the maximum size. Fixes bug 2750; bugfix on 0.2.1.5-alpha. Found by
+ John Brooks.
+ - Fix an uncommon assertion failure when running with DNSPort under
+ heavy load. Fixes bug 2933; bugfix on 0.2.0.1-alpha.
+ - When warning about missing zlib development packages during compile,
+ give the correct package names. Bugfix on 0.2.0.1-alpha.
+ - Require that introduction point keys and onion keys have public
+ exponent 65537. Bugfix on 0.2.0.10-alpha.
+ - Do not crash when our configuration file becomes unreadable, for
+ example due to a permissions change, between when we start up
+ and when a controller calls SAVECONF. Fixes bug 3135; bugfix
+ on 0.0.9pre6.
+ - Fix warnings from GCC 4.6's "-Wunused-but-set-variable" option.
+ Fixes bug 3208.
+ - Always NUL-terminate the sun_path field of a sockaddr_un before
+ passing it to the kernel. (Not a security issue: kernels are
+ smart enough to reject bad sockaddr_uns.) Found by Coverity;
+ CID #428. Bugfix on Tor 0.2.0.3-alpha.
+ - Don't stack-allocate the list of supplementary GIDs when we're
+ about to log them. Stack-allocating NGROUPS_MAX gid_t elements
+ could take up to 256K, which is way too much stack. Found by
+ Coverity; CID #450. Bugfix on 0.2.1.7-alpha.
+
+ o Minor bugfixes (only in 0.2.1.x):
+ - Resume using micro-version numbers in 0.2.1.x: our Debian packages
+ rely on them. Bugfix on 0.2.1.30.
+ - Use git revisions instead of svn revisions when generating our
+ micro-version numbers. Bugfix on 0.2.1.15-rc; fixes bug 2402.
+
+ o Minor features (also included in 0.2.2.x):
+ - Adjust the expiration time on our SSL session certificates to
+ better match SSL certs seen in the wild. Resolves ticket 4014.
+ - Allow nameservers with IPv6 address. Resolves bug 2574.
+ - Update to the October 4 2011 Maxmind GeoLite Country database.
+
+
+Changes in version 0.2.3.5-alpha - 2011-09-28
+ Tor 0.2.3.5-alpha fixes two bugs that make it possible to enumerate
+ bridge relays; fixes an assertion error that many users started hitting
+ today; and adds the ability to refill token buckets more often than
+ once per second, allowing significant performance improvements.
+
+ o Security fixes:
+ - Bridge relays now do their directory fetches inside Tor TLS
+ connections, like all the other clients do, rather than connecting
+ directly to the DirPort like public relays do. Removes another
+ avenue for enumerating bridges. Fixes bug 4115; bugfix on 0.2.0.35.
+ - Bridges relays now build circuits for themselves in a more similar
+ way to how clients build them. Removes another avenue for
+ enumerating bridges. Fixes bug 4124; bugfix on 0.2.0.3-alpha,
+ when bridges were introduced.
+
+ o Major bugfixes:
+ - Fix an "Assertion md->held_by_node == 1 failed" error that could
+ occur when the same microdescriptor was referenced by two node_t
+ objects at once. Fix for bug 4118; bugfix on Tor 0.2.3.1-alpha.
+
+ o Major features (networking):
+ - Add a new TokenBucketRefillInterval option to refill token buckets
+ more frequently than once per second. This should improve network
+ performance, alleviate queueing problems, and make traffic less
+ bursty. Implements proposal 183; closes ticket 3630. Design by
+ Florian Tschorsch and Björn Scheuermann; implementation by
+ Florian Tschorsch.
+
+ o Minor bugfixes:
+ - Change an integer overflow check in the OpenBSD_Malloc code so
+ that GCC is less likely to eliminate it as impossible. Patch
+ from Mansour Moufid. Fixes bug 4059.
+
+ o Minor bugfixes (usability):
+ - Downgrade log messages about circuit timeout calibration from
+ "notice" to "info": they don't require or suggest any human
+ intervention. Patch from Tom Lowenthal. Fixes bug 4063;
+ bugfix on 0.2.2.14-alpha.
+
+ o Minor features (diagnostics):
+ - When the system call to create a listener socket fails, log the
+ error message explaining why. This may help diagnose bug 4027.
+
+
+Changes in version 0.2.3.4-alpha - 2011-09-13
+ Tor 0.2.3.4-alpha includes the fixes from 0.2.2.33, including a slight
+ tweak to Tor's TLS handshake that makes relays and bridges that run
+ this new version reachable from Iran again. It also fixes a few new
+ bugs in 0.2.3.x, and teaches relays to recognize when they're not
+ listed in the network consensus and republish.
+
+ o Major bugfixes (also part of 0.2.2.33):
+ - Avoid an assertion failure when reloading a configuration with
+ TrackExitHosts changes. Found and fixed by 'laruldan'. Fixes bug
+ 3923; bugfix on 0.2.2.25-alpha.
+
+ o Minor features (security, also part of 0.2.2.33):
+ - Check for replays of the public-key encrypted portion of an
+ INTRODUCE1 cell, in addition to the current check for replays of
+ the g^x value. This prevents a possible class of active attacks
+ by an attacker who controls both an introduction point and a
+ rendezvous point, and who uses the malleability of AES-CTR to
+ alter the encrypted g^x portion of the INTRODUCE1 cell. We think
+ that these attacks is infeasible (requiring the attacker to send
+ on the order of zettabytes of altered cells in a short interval),
+ but we'd rather block them off in case there are any classes of
+ this attack that we missed. Reported by Willem Pinckaers.
+
+ o Minor features (also part of 0.2.2.33):
+ - Adjust the expiration time on our SSL session certificates to
+ better match SSL certs seen in the wild. Resolves ticket 4014.
+ - Change the default required uptime for a relay to be accepted as
+ a HSDir (hidden service directory) from 24 hours to 25 hours.
+ Improves on 0.2.0.10-alpha; resolves ticket 2649.
+ - Add a VoteOnHidServDirectoriesV2 config option to allow directory
+ authorities to abstain from voting on assignment of the HSDir
+ consensus flag. Related to bug 2649.
+ - Update to the September 6 2011 Maxmind GeoLite Country database.
+
+ o Minor bugfixes (also part of 0.2.2.33):
+ - Demote the 'replay detected' log message emitted when a hidden
+ service receives the same Diffie-Hellman public key in two different
+ INTRODUCE2 cells to info level. A normal Tor client can cause that
+ log message during its normal operation. Bugfix on 0.2.1.6-alpha;
+ fixes part of bug 2442.
+ - Demote the 'INTRODUCE2 cell is too {old,new}' log message to info
+ level. There is nothing that a hidden service's operator can do
+ to fix its clients' clocks. Bugfix on 0.2.1.6-alpha; fixes part
+ of bug 2442.
+ - Clarify a log message specifying the characters permitted in
+ HiddenServiceAuthorizeClient client names. Previously, the log
+ message said that "[A-Za-z0-9+-_]" were permitted; that could have
+ given the impression that every ASCII character between "+" and "_"
+ was permitted. Now we say "[A-Za-z0-9+_-]". Bugfix on 0.2.1.5-alpha.
+
+ o Build fixes (also part of 0.2.2.33):
+ - Clean up some code issues that prevented Tor from building on older
+ BSDs. Fixes bug 3894; reported by "grarpamp".
+ - Search for a platform-specific version of "ar" when cross-compiling.
+ Should fix builds on iOS. Resolves bug 3909, found by Marco Bonetti.
+
+ o Major bugfixes:
+ - Fix a bug where the SocksPort option (for example) would get
+ ignored and replaced by the default if a SocksListenAddress
+ option was set. Bugfix on 0.2.3.3-alpha; fixes bug 3936. Fix by
+ Fabian Keil.
+
+ o Major features:
+ - Relays now try regenerating and uploading their descriptor more
+ frequently if they are not listed in the consensus, or if the
+ version of their descriptor listed in the consensus is too
+ old. This fix should prevent situations where a server declines
+ to re-publish itself because it has done so too recently, even
+ though the authorities decided not to list its recent-enough
+ descriptor. Fix for bug 3327.
+
+ o Minor features:
+ - Relays now include a reason for regenerating their descriptors
+ in an HTTP header when uploading to the authorities. This will
+ make it easier to debug descriptor-upload issues in the future.
+ - When starting as root and then changing our UID via the User
+ control option, and we have a ControlSocket configured, make sure
+ that the ControlSocket is owned by the same account that Tor will
+ run under. Implements ticket 3421; fix by Jérémy Bobbio.
+
+ o Minor bugfixes:
+ - Abort if tor_vasprintf fails in connection_printf_to_buf (a
+ utility function used in the control-port code). This shouldn't
+ ever happen unless Tor is completely out of memory, but if it did
+ happen and Tor somehow recovered from it, Tor could have sent a log
+ message to a control port in the middle of a reply to a controller
+ command. Fixes part of bug 3428; bugfix on 0.1.2.3-alpha.
+ - Make 'FetchUselessDescriptors' cause all descriptor types and
+ all consensus types (including microdescriptors) to get fetched.
+ Fixes bug 3851; bugfix on 0.2.3.1-alpha.
+
+ o Code refactoring:
+ - Make a new "entry connection" struct as an internal subtype of "edge
+ connection", to simplify the code and make exit connections smaller.
+
+
+Changes in version 0.2.2.33 - 2011-09-13
+ Tor 0.2.2.33 fixes several bugs, and includes a slight tweak to Tor's
+ TLS handshake that makes relays and bridges that run this new version
+ reachable from Iran again.
+
+ o Major bugfixes:
+ - Avoid an assertion failure when reloading a configuration with
+ TrackExitHosts changes. Found and fixed by 'laruldan'. Fixes bug
+ 3923; bugfix on 0.2.2.25-alpha.
+
+ o Minor features (security):
+ - Check for replays of the public-key encrypted portion of an
+ INTRODUCE1 cell, in addition to the current check for replays of
+ the g^x value. This prevents a possible class of active attacks
+ by an attacker who controls both an introduction point and a
+ rendezvous point, and who uses the malleability of AES-CTR to
+ alter the encrypted g^x portion of the INTRODUCE1 cell. We think
+ that these attacks are infeasible (requiring the attacker to send
+ on the order of zettabytes of altered cells in a short interval),
+ but we'd rather block them off in case there are any classes of
+ this attack that we missed. Reported by Willem Pinckaers.
+
+ o Minor features:
+ - Adjust the expiration time on our SSL session certificates to
+ better match SSL certs seen in the wild. Resolves ticket 4014.
+ - Change the default required uptime for a relay to be accepted as
+ a HSDir (hidden service directory) from 24 hours to 25 hours.
+ Improves on 0.2.0.10-alpha; resolves ticket 2649.
+ - Add a VoteOnHidServDirectoriesV2 config option to allow directory
+ authorities to abstain from voting on assignment of the HSDir
+ consensus flag. Related to bug 2649.
+ - Update to the September 6 2011 Maxmind GeoLite Country database.
+
+ o Minor bugfixes (documentation and log messages):
+ - Correct the man page to explain that HashedControlPassword and
+ CookieAuthentication can both be set, in which case either method
+ is sufficient to authenticate to Tor. Bugfix on 0.2.0.7-alpha,
+ when we decided to allow these config options to both be set. Issue
+ raised by bug 3898.
+ - Demote the 'replay detected' log message emitted when a hidden
+ service receives the same Diffie-Hellman public key in two different
+ INTRODUCE2 cells to info level. A normal Tor client can cause that
+ log message during its normal operation. Bugfix on 0.2.1.6-alpha;
+ fixes part of bug 2442.
+ - Demote the 'INTRODUCE2 cell is too {old,new}' log message to info
+ level. There is nothing that a hidden service's operator can do
+ to fix its clients' clocks. Bugfix on 0.2.1.6-alpha; fixes part
+ of bug 2442.
+ - Clarify a log message specifying the characters permitted in
+ HiddenServiceAuthorizeClient client names. Previously, the log
+ message said that "[A-Za-z0-9+-_]" were permitted; that could have
+ given the impression that every ASCII character between "+" and "_"
+ was permitted. Now we say "[A-Za-z0-9+_-]". Bugfix on 0.2.1.5-alpha.
+
+ o Build fixes:
+ - Provide a substitute implementation of lround() for MSVC, which
+ apparently lacks it. Patch from Gisle Vanem.
+ - Clean up some code issues that prevented Tor from building on older
+ BSDs. Fixes bug 3894; reported by "grarpamp".
+ - Search for a platform-specific version of "ar" when cross-compiling.
+ Should fix builds on iOS. Resolves bug 3909, found by Marco Bonetti.
+
+
Changes in version 0.2.3.3-alpha - 2011-09-01
Tor 0.2.3.3-alpha adds a new "stream isolation" feature to improve Tor's
security, and provides client-side support for the microdescriptor
diff --git a/Makefile.am b/Makefile.am
index cd0d8833c..b8d18d4c0 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -70,3 +70,10 @@ check-logs:
./contrib/checkLogs.pl \
src/*/*.[ch] | sort -n
+version:
+ @echo "Tor @VERSION@"
+ @if test -d "$(top_srcdir)/.git" && test -x "`which git 2>&1;true`"; then \
+ echo -n "git: " ;\
+ (cd "$(top_srcdir)" && git rev-parse --short=16 HEAD); \
+ fi
+
diff --git a/ReleaseNotes b/ReleaseNotes
index c3b08c909..cbc8f0ef3 100644
--- a/ReleaseNotes
+++ b/ReleaseNotes
@@ -3,6 +3,292 @@ This document summarizes new features and bugfixes in each stable release
of Tor. If you want to see more detailed descriptions of the changes in
each development snapshot, see the ChangeLog file.
+Changes in version 0.2.2.34 - 2011-10-26
+ Tor 0.2.2.34 fixes a critical anonymity vulnerability where an attacker
+ can deanonymize Tor users. Everybody should upgrade.
+
+ The attack relies on four components: 1) Clients reuse their TLS cert
+ when talking to different relays, so relays can recognize a user by
+ the identity key in her cert. 2) An attacker who knows the client's
+ identity key can probe each guard relay to see if that identity key
+ is connected to that guard relay right now. 3) A variety of active
+ attacks in the literature (starting from "Low-Cost Traffic Analysis
+ of Tor" by Murdoch and Danezis in 2005) allow a malicious website to
+ discover the guard relays that a Tor user visiting the website is using.
+ 4) Clients typically pick three guards at random, so the set of guards
+ for a given user could well be a unique fingerprint for her. This
+ release fixes components #1 and #2, which is enough to block the attack;
+ the other two remain as open research problems. Special thanks to
+ "frosty_un" for reporting the issue to us!
+
+ Clients should upgrade so they are no longer recognizable by the TLS
+ certs they present. Relays should upgrade so they no longer allow a
+ remote attacker to probe them to test whether unpatched clients are
+ currently connected to them.
+
+ This release also fixes several vulnerabilities that allow an attacker
+ to enumerate bridge relays. Some bridge enumeration attacks still
+ remain; see for example proposal 188.
+
+ o Privacy/anonymity fixes (clients):
+ - Clients and bridges no longer send TLS certificate chains on
+ outgoing OR connections. Previously, each client or bridge would
+ use the same cert chain for all outgoing OR connections until
+ its IP address changes, which allowed any relay that the client
+ or bridge contacted to determine which entry guards it is using.
+ Fixes CVE-2011-2768. Bugfix on 0.0.9pre5; found by "frosty_un".
+ - If a relay receives a CREATE_FAST cell on a TLS connection, it
+ no longer considers that connection as suitable for satisfying a
+ circuit EXTEND request. Now relays can protect clients from the
+ CVE-2011-2768 issue even if the clients haven't upgraded yet.
+ - Directory authorities no longer assign the Guard flag to relays
+ that haven't upgraded to the above "refuse EXTEND requests
+ to client connections" fix. Now directory authorities can
+ protect clients from the CVE-2011-2768 issue even if neither
+ the clients nor the relays have upgraded yet. There's a new
+ "GiveGuardFlagTo_CVE_2011_2768_VulnerableRelays" config option
+ to let us transition smoothly, else tomorrow there would be no
+ guard relays.
+
+ o Privacy/anonymity fixes (bridge enumeration):
+ - Bridge relays now do their directory fetches inside Tor TLS
+ connections, like all the other clients do, rather than connecting
+ directly to the DirPort like public relays do. Removes another
+ avenue for enumerating bridges. Fixes bug 4115; bugfix on 0.2.0.35.
+ - Bridges relays now build circuits for themselves in a more similar
+ way to how clients build them. Removes another avenue for
+ enumerating bridges. Fixes bug 4124; bugfix on 0.2.0.3-alpha,
+ when bridges were introduced.
+ - Bridges now refuse CREATE or CREATE_FAST cells on OR connections
+ that they initiated. Relays could distinguish incoming bridge
+ connections from client connections, creating another avenue for
+ enumerating bridges. Fixes CVE-2011-2769. Bugfix on 0.2.0.3-alpha.
+ Found by "frosty_un".
+
+ o Major bugfixes:
+ - Fix a crash bug when changing node restrictions while a DNS lookup
+ is in-progress. Fixes bug 4259; bugfix on 0.2.2.25-alpha. Bugfix
+ by "Tey'".
+ - Don't launch a useless circuit after failing to use one of a
+ hidden service's introduction points. Previously, we would
+ launch a new introduction circuit, but not set the hidden service
+ which that circuit was intended to connect to, so it would never
+ actually be used. A different piece of code would then create a
+ new introduction circuit correctly. Bug reported by katmagic and
+ found by Sebastian Hahn. Bugfix on 0.2.1.13-alpha; fixes bug 4212.
+
+ o Minor bugfixes:
+ - Change an integer overflow check in the OpenBSD_Malloc code so
+ that GCC is less likely to eliminate it as impossible. Patch
+ from Mansour Moufid. Fixes bug 4059.
+ - When a hidden service turns an extra service-side introduction
+ circuit into a general-purpose circuit, free the rend_data and
+ intro_key fields first, so we won't leak memory if the circuit
+ is cannibalized for use as another service-side introduction
+ circuit. Bugfix on 0.2.1.7-alpha; fixes bug 4251.
+ - Bridges now skip DNS self-tests, to act a little more stealthily.
+ Fixes bug 4201; bugfix on 0.2.0.3-alpha, which first introduced
+ bridges. Patch by "warms0x".
+ - Fix internal bug-checking logic that was supposed to catch
+ failures in digest generation so that it will fail more robustly
+ if we ask for a nonexistent algorithm. Found by Coverity Scan.
+ Bugfix on 0.2.2.1-alpha; fixes Coverity CID 479.
+ - Report any failure in init_keys() calls launched because our
+ IP address has changed. Spotted by Coverity Scan. Bugfix on
+ 0.1.1.4-alpha; fixes CID 484.
+
+ o Minor bugfixes (log messages and documentation):
+ - Remove a confusing dollar sign from the example fingerprint in the
+ man page, and also make the example fingerprint a valid one. Fixes
+ bug 4309; bugfix on 0.2.1.3-alpha.
+ - The next version of Windows will be called Windows 8, and it has
+ a major version of 6, minor version of 2. Correctly identify that
+ version instead of calling it "Very recent version". Resolves
+ ticket 4153; reported by funkstar.
+ - Downgrade log messages about circuit timeout calibration from
+ "notice" to "info": they don't require or suggest any human
+ intervention. Patch from Tom Lowenthal. Fixes bug 4063;
+ bugfix on 0.2.2.14-alpha.
+
+ o Minor features:
+ - Turn on directory request statistics by default and include them in
+ extra-info descriptors. Don't break if we have no GeoIP database.
+ Backported from 0.2.3.1-alpha; implements ticket 3951.
+ - Update to the October 4 2011 Maxmind GeoLite Country database.
+
+
+Changes in version 0.2.1.31 - 2011-10-26
+ Tor 0.2.1.31 backports important security and privacy fixes for
+ oldstable. This release is intended only for package maintainers and
+ others who cannot use the 0.2.2 stable series. All others should be
+ using Tor 0.2.2.x or newer.
+
+ o Security fixes (also included in 0.2.2.x):
+ - Replace all potentially sensitive memory comparison operations
+ with versions whose runtime does not depend on the data being
+ compared. This will help resist a class of attacks where an
+ adversary can use variations in timing information to learn
+ sensitive data. Fix for one case of bug 3122. (Safe memcmp
+ implementation by Robert Ransom based partially on code by DJB.)
+ - Fix an assert in parsing router descriptors containing IPv6
+ addresses. This one took down the directory authorities when
+ somebody tried some experimental code. Bugfix on 0.2.1.3-alpha.
+
+ o Privacy/anonymity fixes (also included in 0.2.2.x):
+ - Clients and bridges no longer send TLS certificate chains on
+ outgoing OR connections. Previously, each client or bridge would
+ use the same cert chain for all outgoing OR connections until
+ its IP address changes, which allowed any relay that the client
+ or bridge contacted to determine which entry guards it is using.
+ Fixes CVE-2011-2768. Bugfix on 0.0.9pre5; found by "frosty_un".
+ - If a relay receives a CREATE_FAST cell on a TLS connection, it
+ no longer considers that connection as suitable for satisfying a
+ circuit EXTEND request. Now relays can protect clients from the
+ CVE-2011-2768 issue even if the clients haven't upgraded yet.
+ - Bridges now refuse CREATE or CREATE_FAST cells on OR connections
+ that they initiated. Relays could distinguish incoming bridge
+ connections from client connections, creating another avenue for
+ enumerating bridges. Fixes CVE-2011-2769. Bugfix on 0.2.0.3-alpha.
+ Found by "frosty_un".
+ - When receiving a hidden service descriptor, check that it is for
+ the hidden service we wanted. Previously, Tor would store any
+ hidden service descriptors that a directory gave it, whether it
+ wanted them or not. This wouldn't have let an attacker impersonate
+ a hidden service, but it did let directories pre-seed a client
+ with descriptors that it didn't want. Bugfix on 0.0.6.
+ - Avoid linkability based on cached hidden service descriptors: forget
+ all hidden service descriptors cached as a client when processing a
+ SIGNAL NEWNYM command. Fixes bug 3000; bugfix on 0.0.6.
+ - Make the bridge directory authority refuse to answer directory
+ requests for "all" descriptors. It used to include bridge
+ descriptors in its answer, which was a major information leak.
+ Found by "piebeer". Bugfix on 0.2.0.3-alpha.
+ - Don't attach new streams to old rendezvous circuits after SIGNAL
+ NEWNYM. Previously, we would keep using an existing rendezvous
+ circuit if it remained open (i.e. if it were kept open by a
+ long-lived stream, or if a new stream were attached to it before
+ Tor could notice that it was old and no longer in use). Bugfix on
+ 0.1.1.15-rc; fixes bug 3375.
+
+ o Minor bugfixes (also included in 0.2.2.x):
+ - When we restart our relay, we might get a successful connection
+ from the outside before we've started our reachability tests,
+ triggering a warning: "ORPort found reachable, but I have no
+ routerinfo yet. Failing to inform controller of success." This
+ bug was harmless unless Tor is running under a controller
+ like Vidalia, in which case the controller would never get a
+ REACHABILITY_SUCCEEDED status event. Bugfix on 0.1.2.6-alpha;
+ fixes bug 1172.
+ - Build correctly on OSX with zlib 1.2.4 and higher with all warnings
+ enabled. Fixes bug 1526.
+ - Remove undocumented option "-F" from tor-resolve: it hasn't done
+ anything since 0.2.1.16-rc.
+ - Avoid signed/unsigned comparisons by making SIZE_T_CEILING unsigned.
+ None of the cases where we did this before were wrong, but by making
+ this change we avoid warnings. Fixes bug 2475; bugfix on 0.2.1.28.
+ - Fix a rare crash bug that could occur when a client was configured
+ with a large number of bridges. Fixes bug 2629; bugfix on
+ 0.2.1.2-alpha. Bugfix by trac user "shitlei".
+ - Correct the warning displayed when a rendezvous descriptor exceeds
+ the maximum size. Fixes bug 2750; bugfix on 0.2.1.5-alpha. Found by
+ John Brooks.
+ - Fix an uncommon assertion failure when running with DNSPort under
+ heavy load. Fixes bug 2933; bugfix on 0.2.0.1-alpha.
+ - When warning about missing zlib development packages during compile,
+ give the correct package names. Bugfix on 0.2.0.1-alpha.
+ - Require that introduction point keys and onion keys have public
+ exponent 65537. Bugfix on 0.2.0.10-alpha.
+ - Do not crash when our configuration file becomes unreadable, for
+ example due to a permissions change, between when we start up
+ and when a controller calls SAVECONF. Fixes bug 3135; bugfix
+ on 0.0.9pre6.
+ - Fix warnings from GCC 4.6's "-Wunused-but-set-variable" option.
+ Fixes bug 3208.
+ - Always NUL-terminate the sun_path field of a sockaddr_un before
+ passing it to the kernel. (Not a security issue: kernels are
+ smart enough to reject bad sockaddr_uns.) Found by Coverity;
+ CID #428. Bugfix on Tor 0.2.0.3-alpha.
+ - Don't stack-allocate the list of supplementary GIDs when we're
+ about to log them. Stack-allocating NGROUPS_MAX gid_t elements
+ could take up to 256K, which is way too much stack. Found by
+ Coverity; CID #450. Bugfix on 0.2.1.7-alpha.
+
+ o Minor bugfixes (only in 0.2.1.x):
+ - Resume using micro-version numbers in 0.2.1.x: our Debian packages
+ rely on them. Bugfix on 0.2.1.30.
+ - Use git revisions instead of svn revisions when generating our
+ micro-version numbers. Bugfix on 0.2.1.15-rc; fixes bug 2402.
+
+ o Minor features (also included in 0.2.2.x):
+ - Adjust the expiration time on our SSL session certificates to
+ better match SSL certs seen in the wild. Resolves ticket 4014.
+ - Allow nameservers with IPv6 address. Resolves bug 2574.
+ - Update to the October 4 2011 Maxmind GeoLite Country database.
+
+
+Changes in version 0.2.2.33 - 2011-09-13
+ Tor 0.2.2.33 fixes several bugs, and includes a slight tweak to Tor's
+ TLS handshake that makes relays and bridges that run this new version
+ reachable from Iran again.
+
+ o Major bugfixes:
+ - Avoid an assertion failure when reloading a configuration with
+ TrackExitHosts changes. Found and fixed by 'laruldan'. Fixes bug
+ 3923; bugfix on 0.2.2.25-alpha.
+
+ o Minor features (security):
+ - Check for replays of the public-key encrypted portion of an
+ INTRODUCE1 cell, in addition to the current check for replays of
+ the g^x value. This prevents a possible class of active attacks
+ by an attacker who controls both an introduction point and a
+ rendezvous point, and who uses the malleability of AES-CTR to
+ alter the encrypted g^x portion of the INTRODUCE1 cell. We think
+ that these attacks are infeasible (requiring the attacker to send
+ on the order of zettabytes of altered cells in a short interval),
+ but we'd rather block them off in case there are any classes of
+ this attack that we missed. Reported by Willem Pinckaers.
+
+ o Minor features:
+ - Adjust the expiration time on our SSL session certificates to
+ better match SSL certs seen in the wild. Resolves ticket 4014.
+ - Change the default required uptime for a relay to be accepted as
+ a HSDir (hidden service directory) from 24 hours to 25 hours.
+ Improves on 0.2.0.10-alpha; resolves ticket 2649.
+ - Add a VoteOnHidServDirectoriesV2 config option to allow directory
+ authorities to abstain from voting on assignment of the HSDir
+ consensus flag. Related to bug 2649.
+ - Update to the September 6 2011 Maxmind GeoLite Country database.
+
+ o Minor bugfixes (documentation and log messages):
+ - Correct the man page to explain that HashedControlPassword and
+ CookieAuthentication can both be set, in which case either method
+ is sufficient to authenticate to Tor. Bugfix on 0.2.0.7-alpha,
+ when we decided to allow these config options to both be set. Issue
+ raised by bug 3898.
+ - Demote the 'replay detected' log message emitted when a hidden
+ service receives the same Diffie-Hellman public key in two different
+ INTRODUCE2 cells to info level. A normal Tor client can cause that
+ log message during its normal operation. Bugfix on 0.2.1.6-alpha;
+ fixes part of bug 2442.
+ - Demote the 'INTRODUCE2 cell is too {old,new}' log message to info
+ level. There is nothing that a hidden service's operator can do
+ to fix its clients' clocks. Bugfix on 0.2.1.6-alpha; fixes part
+ of bug 2442.
+ - Clarify a log message specifying the characters permitted in
+ HiddenServiceAuthorizeClient client names. Previously, the log
+ message said that "[A-Za-z0-9+-_]" were permitted; that could have
+ given the impression that every ASCII character between "+" and "_"
+ was permitted. Now we say "[A-Za-z0-9+_-]". Bugfix on 0.2.1.5-alpha.
+
+ o Build fixes:
+ - Provide a substitute implementation of lround() for MSVC, which
+ apparently lacks it. Patch from Gisle Vanem.
+ - Clean up some code issues that prevented Tor from building on older
+ BSDs. Fixes bug 3894; reported by "grarpamp".
+ - Search for a platform-specific version of "ar" when cross-compiling.
+ Should fix builds on iOS. Resolves bug 3909, found by Marco Bonetti.
+
+
Changes in version 0.2.2.32 - 2011-08-27
The Tor 0.2.2 release series is dedicated to the memory of Andreas
Pfitzmann (1958-2010), a pioneer in anonymity and privacy research,
diff --git a/changes/bug2649a b/changes/bug2649a
deleted file mode 100644
index 4ee31ebdb..000000000
--- a/changes/bug2649a
+++ /dev/null
@@ -1,5 +0,0 @@
- o Minor features:
- - Add a VoteOnHidServDirectoriesV2 configuration option to allow
- directory authorities to abstain from voting on assignment of
- the HSDir consensus flag. Related to bug 2649.
-
diff --git a/changes/bug2649b b/changes/bug2649b
deleted file mode 100644
index 1ff14e556..000000000
--- a/changes/bug2649b
+++ /dev/null
@@ -1,5 +0,0 @@
- o Minor bugfixes:
- - Change the default required uptime for a relay to be accepted as
- a HSDir from 24 hours to 25 hours. Bugfix on 0.2.0.10-alpha;
- fixes bug 2649.
-
diff --git a/changes/bug3327 b/changes/bug3327
deleted file mode 100644
index 454eb3156..000000000
--- a/changes/bug3327
+++ /dev/null
@@ -1,14 +0,0 @@
- o Major features:
- - Relays now try regenerating and uploading their descriptor more
- frequently if they are not listed in the consensus, or if the
- version of their descriptor listed in the consensus is too
- old. This fix should prevent situations where a server declines
- to re-publish itself because it has done so too recently, even
- though the authorities decided not to list its recent-enough
- descriptor. Fix for bug 3327.
-
- o Minor features:
- - Relays now include a reason for regenerating their descriptors
- an HTTP header when uploading to the authorities. This will
- make it easier to debug descriptor-upload issues in the future.
-
diff --git a/changes/bug3421 b/changes/bug3421
deleted file mode 100644
index 8a4072987..000000000
--- a/changes/bug3421
+++ /dev/null
@@ -1,6 +0,0 @@
- o Minor features:
- - When starting as root and then changing our UID via the User
- control option, if we are running with ControlSocket, make sure
- that the ControlSocket is owned by the same account that Tor will
- run under. Implements ticket 3421; fix by Jérémy Bobbio.
-
diff --git a/changes/bug3428b b/changes/bug3428b
deleted file mode 100644
index 2cdd688f8..000000000
--- a/changes/bug3428b
+++ /dev/null
@@ -1,9 +0,0 @@
- o Minor bugfixes:
- - Abort if tor_vasprintf fails in connection_printf_to_buf (a
- utility function used in the control-port code). This shouldn't
- ever happen unless Tor is completely out of memory, but if it
- had happened and Tor somehow recovered from it, Tor could have
- sent a log message to a control port in the middle of a reply to
- a controller command. Fixes part of bug 3428.
-
-
diff --git a/changes/bug3460 b/changes/bug3460
new file mode 100644
index 000000000..4fbca01ae
--- /dev/null
+++ b/changes/bug3460
@@ -0,0 +1,11 @@
+ o Major bugfixes:
+
+ - Ignore the timestamps of INTRODUCE2 cells received by a hidden
+ service. Previously, hidden services would check that the
+ timestamp was within 30 minutes of their system clock, so that
+ services could keep only INTRODUCE2 cells they had received in
+ the last hour in their replay-detection cache. Bugfix on
+ 0.2.1.6-alpha, when the v3 intro-point protocol (the first one
+ which sent a timestamp field in the INTRODUCE2 cell) was
+ introduced; fixes bug 3460.
+
diff --git a/changes/bug3786 b/changes/bug3786
new file mode 100644
index 000000000..8e61ee0c1
--- /dev/null
+++ b/changes/bug3786
@@ -0,0 +1,7 @@
+ o Major features:
+ - Implement support for clients connecting to private bridges over
+ IPv6. Bridges still need at least one IPv4 address in order to
+ connect to other relays. Currently, adding Bridge lines with
+ both an IPv4 and an IPv6 address to the same bridge will most
+ probably result in the IPv6 address not being used. Implements
+ parts of proposal 186.
diff --git a/changes/bug3851 b/changes/bug3851
deleted file mode 100644
index 91572f031..000000000
--- a/changes/bug3851
+++ /dev/null
@@ -1,4 +0,0 @@
- o Minor bugfixes:
- - Make 'FetchUselessDescriptors' cause all descriptor types and
- all consensus types get fetched. Fixes bug 3851; bugfix on
- 0.2.3.1-alpha.
diff --git a/changes/bug3909 b/changes/bug3909
deleted file mode 100644
index 0b4b29203..000000000
--- a/changes/bug3909
+++ /dev/null
@@ -1,3 +0,0 @@
- o Build fixes:
- - Search for a platform-specific version of "ar" when cross-compiling.
- Should fix builds on iOS. Found by Marco Bonetti.
diff --git a/changes/bug3923 b/changes/bug3923
deleted file mode 100644
index 9c0e13882..000000000
--- a/changes/bug3923
+++ /dev/null
@@ -1,5 +0,0 @@
- o Major bugfies:
- - Avoid an assertion failure when reloading a configuration with
- TrackExitHosts changes. Found and fixed by 'laruldan'. Fixes
- bug 3923; bugfix on 0.2.2.25-alpha.
-
diff --git a/changes/bug4529 b/changes/bug4529
new file mode 100644
index 000000000..89d10b2f6
--- /dev/null
+++ b/changes/bug4529
@@ -0,0 +1,5 @@
+ o Minor bufixes:
+ - If we had ever tried to call tor_addr_to_str on an address of
+ unknown type, we would have done a strdup on an uninitialized
+ buffer. Now we won't. Fixes bug 4529; bugfix on 0.2.1.3-alpha.
+ Reported by "troll_un".
diff --git a/changes/bug4548 b/changes/bug4548
new file mode 100644
index 000000000..e22e3f507
--- /dev/null
+++ b/changes/bug4548
@@ -0,0 +1,6 @@
+ o Privacy/anonymity features (bridge detection):
+ - Introduce a new config option 'DynamicDHGroups', enabled by
+ default, which provides each bridge with a unique prime DH
+ modulus to be used during SSL handshakes. This option attempts
+ to help against censors using the Apache DH modulus as a static
+ identifier for bridges.
diff --git a/changes/bug4584 b/changes/bug4584
new file mode 100644
index 000000000..38cf2d6da
--- /dev/null
+++ b/changes/bug4584
@@ -0,0 +1,4 @@
+ o Privacy/anonymity features (bridge detection):
+ - Make bridge SSL certificates a bit more stealthy by using random
+ serial numbers, in the same fashion as OpenSSL when generating
+ self-signed certificates. Implements ticket 4584.
diff --git a/changes/config b/changes/config
new file mode 100644
index 000000000..3a1c7d113
--- /dev/null
+++ b/changes/config
@@ -0,0 +1,26 @@
+ o Minor features
+ - Slightly change behavior of "list" options (that is, options that
+ can appear more than once) when they appear both in torrc and on
+ the command line. Previously, the command-line options would be
+ appended to the ones from torrc. Now, the command-line options
+ override the torrc options entirely. This new behavior allows
+ the user to override list options (like exit policies and
+ ports to listen on) from the command line, rather than simply
+ appending to the list.
+ - You can get the old (appending) command-line behavior for "list"
+ "list" options, by prefixing the option name with a "+".
+ - You can remove all the values for a "list" option from the command
+ line without adding any new ones by prefixing the option name
+ with a "/".
+ - Add *experimental* support for a "defaults" torrc file to be parsed
+ before the regular torrc. Torrc options override the defaults file's
+ options in the same way that the command line overrides the torrc.
+ The SAVECONF controller command saves only those options which differ
+ between the current configuration and the defaults file. HUP reloads
+ both files. (Note: This is an experimental feature; its behavior will
+ probably be refined in future 0.2.3.x-alpha versions to better meet
+ packagers' needs.)
+
+ o Minor bugfixes:
+ - Restore behavior of overriding SocksPort, ORPort, and similar
+ options from the command line. Bugfix on 0.2.3.3-alpha.
diff --git a/changes/disable_network b/changes/disable_network
new file mode 100644
index 000000000..e6e7259ea
--- /dev/null
+++ b/changes/disable_network
@@ -0,0 +1,9 @@
+ o Minor features:
+
+ - New "DisableNetwork" option to prevent Tor from launching any
+ connections or accepting any connections except on a control
+ port. Some bundles and controllers want to use this so they can
+ configure Tor before letting Tor talk to the rest of the
+ network--for example, to prevent any connections from being made
+ to a non-bridge address.
+
diff --git a/changes/intro-point-expiration b/changes/intro-point-expiration
new file mode 100644
index 000000000..3de33c188
--- /dev/null
+++ b/changes/intro-point-expiration
@@ -0,0 +1,5 @@
+ o Minor features:
+
+ - Expire old or over-used hidden service introduction points.
+ Required by fix for bug 3460.
+
diff --git a/changes/per-intro-point-replay-cache b/changes/per-intro-point-replay-cache
new file mode 100644
index 000000000..f63e428e3
--- /dev/null
+++ b/changes/per-intro-point-replay-cache
@@ -0,0 +1,7 @@
+ o Minor features:
+
+ - Move the replay-detection cache for the RSA-encrypted parts of
+ INTRODUCE2 cells to the introduction point data structures.
+ Previously, we would use one replay-detection cache per hidden
+ service. Required by fix for bug 3460.
+
diff --git a/changes/proposal178 b/changes/proposal178
new file mode 100644
index 000000000..ee706952a
--- /dev/null
+++ b/changes/proposal178
@@ -0,0 +1,6 @@
+ o Major features:
+ - Implement a more secure consensus parameter voting algorithm that
+ ensures that at least three directory authorities or a majority of
+ them voted on a given parameter before including it in the
+ consensus. Implements proposal 178.
+
diff --git a/changes/reduce-hs-intro-dh-key-replay-cache-lifetime b/changes/reduce-hs-intro-dh-key-replay-cache-lifetime
new file mode 100644
index 000000000..5ae3785fc
--- /dev/null
+++ b/changes/reduce-hs-intro-dh-key-replay-cache-lifetime
@@ -0,0 +1,9 @@
+ o Minor features:
+
+ - Reduce the lifetime of elements of hidden services'
+ Diffie-Hellman public key replay-detection cache from 60 minutes
+ to 5 minutes. This replay-detection cache is now used only to
+ detect multiple INTRODUCE2 cells specifying the same rendezvous
+ point, so we don't launch multiple simultaneous attempts to
+ connect to it.
+
diff --git a/changes/split_entry_conn b/changes/split_entry_conn
deleted file mode 100644
index c0a2eb657..000000000
--- a/changes/split_entry_conn
+++ /dev/null
@@ -1,5 +0,0 @@
- o Code refactoring:
- - Make "entry connection" in to a new internal subtype of "edge
- connection", to simplify the code and make exit connections
- smaller.
-
diff --git a/configure.in b/configure.in
index 824547c6d..64d9d6db7 100644
--- a/configure.in
+++ b/configure.in
@@ -4,7 +4,7 @@ dnl Copyright (c) 2007-2008, The Tor Project, Inc.
dnl See LICENSE for licensing information
AC_INIT
-AM_INIT_AUTOMAKE(tor, 0.2.3.3-alpha-dev)
+AM_INIT_AUTOMAKE(tor, 0.2.3.8-alpha-dev)
AM_CONFIG_HEADER(orconfig.h)
AC_CANONICAL_HOST
@@ -189,9 +189,9 @@ AC_C_FLEXIBLE_ARRAY_MEMBER
[tor_cv_c_flexarray=yes],
[tor_cv_c_flexarray=no])])
if test $tor_cv_flexarray = yes ; then
- AC_DEFINE([FLEXIBLE_ARRAY_MEMBER], [])
+ AC_DEFINE([FLEXIBLE_ARRAY_MEMBER], [], [Define to nothing if C supports flexible array members, and to 1 if it does not.])
else
- AC_DEFINE([FLEXIBLE_ARRAY_MEMBER], [1])
+ AC_DEFINE([FLEXIBLE_ARRAY_MEMBER], [1], [Define to nothing if C supports flexible array members, and to 1 if it does not.])
fi
])
@@ -276,6 +276,7 @@ AC_SEARCH_LIBS(socket, [socket])
AC_SEARCH_LIBS(gethostbyname, [nsl])
AC_SEARCH_LIBS(dlopen, [dl])
AC_SEARCH_LIBS(inet_aton, [resolv])
+AC_SEARCH_LIBS([clock_gettime], [rt], [have_rt=yes])
if test "$enable_threads" = "yes"; then
AC_SEARCH_LIBS(pthread_create, [pthread])
@@ -288,6 +289,7 @@ dnl exports strlcpy without defining it in a header.
AC_CHECK_FUNCS(
accept4 \
+ clock_gettime \
flock \
ftime \
getaddrinfo \
@@ -296,8 +298,10 @@ AC_CHECK_FUNCS(
gmtime_r \
inet_aton \
localtime_r \
+ lround \
memmem \
prctl \
+ rint \
socketpair \
strlcat \
strlcpy \
@@ -361,9 +365,6 @@ dnl On Gnu/Linux or any place we require it, we'll add librt to the Libevent
dnl linking for static builds.
STATIC_LIBEVENT_FLAGS=""
if test "$enable_static_libevent" = "yes"; then
- dnl Determine if we have clock_gettime in librt
- AC_SEARCH_LIBS([clock_gettime], [rt],
- [have_rt=yes])
if test "$have_rt" = yes; then
STATIC_LIBEVENT_FLAGS=" -lrt "
fi
diff --git a/contrib/checkSpace.pl b/contrib/checkSpace.pl
index 6eb32e562..a18df99b1 100755
--- a/contrib/checkSpace.pl
+++ b/contrib/checkSpace.pl
@@ -97,7 +97,7 @@ for $fn (@ARGV) {
if ($1 ne "if" and $1 ne "while" and $1 ne "for" and
$1 ne "switch" and $1 ne "return" and $1 ne "int" and
$1 ne "elsif" and $1 ne "WINAPI" and $2 ne "WINAPI" and
- $1 ne "void" and $1 ne "__attribute__") {
+ $1 ne "void" and $1 ne "__attribute__" and $1 ne "op") {
print " fn ():$fn:$.\n";
}
}
diff --git a/contrib/package_nsis-mingw.sh b/contrib/package_nsis-mingw.sh
index 59811f4f1..b8a46cdbe 100644
--- a/contrib/package_nsis-mingw.sh
+++ b/contrib/package_nsis-mingw.sh
@@ -91,5 +91,5 @@ clean_localstatedir src/config/torrc.sample.in win_tmp/src/config/torrc.sample
cp contrib/tor-mingw.nsi.in win_tmp/contrib/
cd win_tmp
-"C:\Program Files\NSIS\makensis.exe" contrib/tor-mingw.nsi.in
+makensis.exe contrib/tor-mingw.nsi.in
diff --git a/contrib/tor-mingw.nsi.in b/contrib/tor-mingw.nsi.in
index 137cb67ff..8ea9f32b9 100644
--- a/contrib/tor-mingw.nsi.in
+++ b/contrib/tor-mingw.nsi.in
@@ -8,7 +8,7 @@
!include "LogicLib.nsh"
!include "FileFunc.nsh"
!insertmacro GetParameters
-!define VERSION "0.2.3.3-alpha-dev"
+!define VERSION "0.2.3.8-alpha-dev"
!define INSTALLER "tor-${VERSION}-win32.exe"
!define WEBSITE "https://www.torproject.org/"
!define LICENSE "LICENSE"
diff --git a/doc/HACKING b/doc/HACKING
index b0689d82c..bc409dc0d 100644
--- a/doc/HACKING
+++ b/doc/HACKING
@@ -473,7 +473,7 @@ git branches too.
a while to see if anybody has problems building it. Try to get Sebastian
or somebody to try building it on Windows.
-6) Get at least two of weasel/arma/karsten to put the new version number
+6) Get at least two of weasel/arma/sebastian to put the new version number
in their approved versions list.
7) Sign the tarball, then sign and push the git tag:
diff --git a/doc/tor.1.txt b/doc/tor.1.txt
index 76791269c..4c6533418 100644
--- a/doc/tor.1.txt
+++ b/doc/tor.1.txt
@@ -110,6 +110,12 @@ Other options can be specified either on the command-line (--option
You should never need to change this value, since a network-wide value is
published in the consensus and your relay will use that value. (Default: 0)
+**ClientTransportPlugin** __transport__ socks4|socks5 __IP__:__PORT__::
+ When set along with a corresponding Bridge line, the Tor client
+ forwards its traffic to a SOCKS-speaking proxy on "IP:PORT". It's
+ the duty of that proxy to properly forward the traffic to the
+ bridge.
+
**ConnLimit** __NUM__::
The minimum number of file descriptors that must be available to the Tor
process before it will start. Tor will ask the OS for as many file
@@ -119,6 +125,12 @@ Other options can be specified either on the command-line (--option
You probably don't need to adjust this. It has no effect on Windows
since that platform lacks getrlimit(). (Default: 1000)
+**DisableNetwork** **0**|**1**::
+ When this option is set, we don't listen for or accept any connections
+ other than controller connections, and we don't make any outbound
+ connections. Controllers sometimes use this option to avoid using
+ the network until Tor is fully configured. (Default: 0)
+
**ConstrainedSockets** **0**|**1**::
If set, Tor will tell the kernel to attempt to shrink the buffers for all
sockets to the size specified in **ConstrainedSockSize**. This is useful for
@@ -233,6 +245,12 @@ Other options can be specified either on the command-line (--option
distinguishable from other users, because you won't believe the same
authorities they do.
+**DynamicDHGroups** **0**|**1**::
+ If this option is set to 1, when running as a server, generate our
+ own Diffie-Hellman group instead of using the one from Apache's mod_ssl.
+ This option may help circumvent censorship based on static
+ Diffie-Hellman parameters. (Default: 1).
+
**AlternateDirAuthority** [__nickname__] [**flags**] __address__:__port__ __fingerprint__ +
**AlternateHSAuthority** [__nickname__] [**flags**] __address__:__port__ __fingerprint__ +
@@ -252,6 +270,20 @@ Other options can be specified either on the command-line (--option
option requires that you start your Tor as root, and you should use the
**User** option to properly reduce Tor's privileges. (Default: 0)
+**DisableDebuggerAttachment** **0**|**1**::
+ If set to 1, Tor will attempt to prevent basic debugging attachment attempts
+ by other processes. It has no impact for users who wish to attach if they
+ have CAP_SYS_PTRACE or if they are root. We believe that this feature
+ works on modern Gnu/Linux distributions, and that it may also work on *BSD
+ systems (untested). Some modern Gnu/Linux systems such as Ubuntu have the
+ kernel.yama.ptrace_scope sysctl and by default enable it as an attempt to
+ limit the PTRACE scope for all user processes by default. This feature will
+ attempt to limit the PTRACE scope for Tor specifically - it will not attempt
+ to alter the system wide ptrace scope as it may not even exist. If you wish
+ to attach to Tor with a debugger such as gdb or strace you will want to set
+ this to 0 for the duration of your debugging. Normal users should leave it
+ on. (Default: 1)
+
**FetchDirInfoEarly** **0**|**1**::
If set to 1, Tor will always fetch directory information like other
directory caches, even if you don't meet the normal criteria for fetching
@@ -483,13 +515,17 @@ The following options are useful only for clients (that is, if
so using these relays might make your client stand out.
(Default: 1)
-**Bridge** __IP__:__ORPort__ [fingerprint]::
+**Bridge** [__transport__] __IP__:__ORPort__ [__fingerprint__]::
When set along with UseBridges, instructs Tor to use the relay at
"IP:ORPort" as a "bridge" relaying into the Tor network. If "fingerprint"
is provided (using the same format as for DirServer), we will verify that
the relay running at that location has the right fingerprint. We also use
fingerprint to look up the bridge descriptor at the bridge authority, if
- it's provided and if UpdateBridgesFromAuthority is set too.
+ it's provided and if UpdateBridgesFromAuthority is set too. +
+ +
+ If "transport" is provided, and matches to a ClientTransportPlugin
+ line, we use that pluggable transports proxy to transfer data to
+ the bridge.
**LearnCircuitBuildTimeout** **0**|**1**::
If 0, CircuitBuildTimeout adaptive learning is disabled. (Default: 1)
@@ -527,7 +563,7 @@ The following options are useful only for clients (that is, if
A list of identity fingerprints, nicknames, country codes and address
patterns of nodes to avoid when building a circuit.
(Example:
- ExcludeNodes SlowServer, $ EFFFFFFFFFFFFFFF, \{cc}, 255.254.0.0/8) +
+ ExcludeNodes SlowServer, ABCD1234CDEF5678ABCD1234CDEF5678ABCD1234, \{cc}, 255.254.0.0/8) +
+
By default, this option is treated as a preference that Tor is allowed
to override in order to keep working.
@@ -727,11 +763,11 @@ The following options are useful only for clients (that is, if
received on this SOCKSPort are allowed to share circuits with one
another. Recognized isolation flags are:
**IsolateClientAddr**;;
- Don't share a circuits with streams from a different
+ Don't share circuits with streams from a different
client address. (On by default and strongly recommended;
you can disable it with **NoIsolateClientAddr**.)
**IsolateSOCKSAuth**;;
- Don't share a circuits with streams for which different
+ Don't share circuits with streams for which different
SOCKS authentication was provided. (On by default;
you can disable it with **NoIsolateSOCKSAuth**.)
**IsolateClientProtocol**;;
@@ -739,10 +775,10 @@ The following options are useful only for clients (that is, if
(SOCKS 4, SOCKS 5, TransPort connections, NATDPort connections,
and DNSPort requests are all considered to be different protocols.)
**IsolateDestPort**;;
- Don't share a circuits with streams targetting a different
+ Don't share circuits with streams targetting a different
destination port.
**IsolateDestAddr**;;
- Don't share a circuits with streams targetting a different
+ Don't share circuits with streams targetting a different
destination address.
**SessionGroup=**__INT__;;
If no other isolation rules would prevent it, allow streams
@@ -770,6 +806,13 @@ The following options are useful only for clients (that is, if
unattached waiting for an appropriate circuit, before we fail it. (Default:
2 minutes.)
+**TokenBucketRefillInterval** __NUM__ [**msec**|**second**]::
+ Set the refill interval of Tor's token bucket to NUM milliseconds.
+ NUM must be between 1 and 1000, inclusive. Note that the configured
+ bandwidth limits are still expressed in bytes per second: this
+ option only affects the frequency with which Tor checks to see whether
+ previously exhausted connections may read again. (Default: 100 msec.)
+
**TrackHostExits** __host__,__.domain__,__...__::
For each value in the comma separated list, Tor will track recent
connections to hosts that match this value and attempt to reuse the same
@@ -1422,6 +1465,16 @@ DIRECTORY AUTHORITY SERVER OPTIONS
Authoritative directories only. Like AuthDirMaxServersPerAddr, but applies
to addresses shared with directory authorities. (Default: 5)
+**AuthDirFastGuarantee** __N__ **bytes**|**KB**|**MB**|**GB**::
+ Authoritative directories only. If non-zero, always vote the
+ Fast flag for any relay advertising this amount of capacity or
+ more. (Default: 100 KB)
+
+**AuthDirGuardBWGuarantee** __N__ **bytes**|**KB**|**MB**|**GB**::
+ Authoritative directories only. If non-zero, this advertised capacity
+ or more is always sufficient to satisfy the bandwidth requirement
+ for the Guard flag. (Default: 250 KB)
+
**BridgePassword** __Password__::
If set, contains an HTTP authenticator that tells a bridge authority to
serve all requested bridge information. Used for debugging. (Default:
diff --git a/src/common/Makefile.am b/src/common/Makefile.am
index 2244fe58d..2920e73d2 100644
--- a/src/common/Makefile.am
+++ b/src/common/Makefile.am
@@ -56,9 +56,9 @@ noinst_HEADERS = \
common_sha1.i: $(libor_SOURCES) $(libor_crypto_a_SOURCES) $(noinst_HEADERS)
if test "@SHA1SUM@" != none; then \
- @SHA1SUM@ $(libor_SOURCES) $(libor_crypto_a_SOURCES) $(noinst_HEADERS) | @SED@ -n 's/^\(.*\)$$/"\1\\n"/p' > common_sha1.i; \
+ (cd "$(srcdir)" && @SHA1SUM@ $(libor_SOURCES) $(libor_crypto_a_SOURCES) $(noinst_HEADERS)) | @SED@ -n 's/^\(.*\)$$/"\1\\n"/p' > common_sha1.i; \
elif test "@OPENSSL@" != none; then \
- @OPENSSL@ sha1 $(libor_SOURCES) $(libor_crypto_a_SOURCES) $(noinst_HEADERS) | @SED@ -n 's/SHA1(\(.*\))= \(.*\)/"\2 \1\\n"/p' > common_sha1.i; \
+ (cd "$(srcdir)" && @OPENSSL@ sha1 $(libor_SOURCES) $(libor_crypto_a_SOURCES) $(noinst_HEADERS)) | @SED@ -n 's/SHA1(\(.*\))= \(.*\)/"\2 \1\\n"/p' > common_sha1.i; \
else \
rm common_sha1.i; \
touch common_sha1.i; \
diff --git a/src/common/OpenBSD_malloc_Linux.c b/src/common/OpenBSD_malloc_Linux.c
index 19dac7765..445135c6b 100644
--- a/src/common/OpenBSD_malloc_Linux.c
+++ b/src/common/OpenBSD_malloc_Linux.c
@@ -1236,7 +1236,7 @@ imalloc(size_t size)
ptralloc = 1;
size = malloc_pagesize;
}
- if ((size + malloc_pagesize) < size) { /* Check for overflow */
+ if (size > SIZE_MAX - malloc_pagesize) { /* Check for overflow */
result = NULL;
errno = ENOMEM;
} else if (size <= malloc_maxsize)
diff --git a/src/common/address.c b/src/common/address.c
index 26a59e923..ab056f427 100644
--- a/src/common/address.c
+++ b/src/common/address.c
@@ -52,6 +52,13 @@
#include <string.h>
#include <assert.h>
+/* tor_addr_is_null() and maybe other functions rely on AF_UNSPEC being 0 to
+ * work correctly. Bail out here if we've found a platform where AF_UNSPEC
+ * isn't 0. */
+#if AF_UNSPEC != 0
+#error We rely on AF_UNSPEC being 0. Let us know about your platform, please!
+#endif
+
/** Convert the tor_addr_t in <b>a</b>, with port in <b>port</b>, into a
* sockaddr object in *<b>sa_out</b> of object size <b>len</b>. If not enough
* room is available in sa_out, or on error, return 0. On success, return
@@ -350,15 +357,21 @@ tor_addr_to_str(char *dest, const tor_addr_t *addr, size_t len, int decorate)
switch (tor_addr_family(addr)) {
case AF_INET:
- if (len<3)
+ /* Shortest addr x.x.x.x + \0 */
+ if (len < 8)
return NULL;
- ptr = tor_inet_ntop(AF_INET, &addr->addr.in_addr, dest, len);
+ ptr = tor_inet_ntop(AF_INET, &addr->addr.in_addr, dest, len);
break;
case AF_INET6:
+ /* Shortest addr [ :: ] + \0 */
+ if (len < (3 + (decorate ? 2 : 0)))
+ return NULL;
+
if (decorate)
ptr = tor_inet_ntop(AF_INET6, &addr->addr.in6_addr, dest+1, len-2);
else
ptr = tor_inet_ntop(AF_INET6, &addr->addr.in6_addr, dest, len);
+
if (ptr && decorate) {
*dest = '[';
memcpy(dest+strlen(dest), "]", 2);
@@ -384,7 +397,7 @@ tor_addr_to_str(char *dest, const tor_addr_t *addr, size_t len, int decorate)
* IPv4 or IPv6 address too.
*/
int
-tor_addr_parse_reverse_lookup_name(tor_addr_t *result, const char *address,
+tor_addr_parse_PTR_name(tor_addr_t *result, const char *address,
int family, int accept_regular)
{
if (!strcasecmpend(address, ".in-addr.arpa")) {
@@ -455,7 +468,7 @@ tor_addr_parse_reverse_lookup_name(tor_addr_t *result, const char *address,
if (accept_regular) {
tor_addr_t tmp;
- int r = tor_addr_from_str(&tmp, address);
+ int r = tor_addr_parse(&tmp, address);
if (r < 0)
return 0;
if (r != family && family != AF_UNSPEC)
@@ -470,13 +483,17 @@ tor_addr_parse_reverse_lookup_name(tor_addr_t *result, const char *address,
return 0;
}
-/** Convert <b>addr</b> to an in-addr.arpa name or a .ip6.arpa name, and store
- * the result in the <b>outlen</b>-byte buffer at <b>out</b>. Return 0 on
- * success, -1 on failure. */
+/** Convert <b>addr</b> to an in-addr.arpa name or a .ip6.arpa name,
+ * and store the result in the <b>outlen</b>-byte buffer at
+ * <b>out</b>. Return the number of chars written to <b>out</b>, not
+ * including the trailing \0, on success. Returns -1 on failure. */
int
-tor_addr_to_reverse_lookup_name(char *out, size_t outlen,
- const tor_addr_t *addr)
+tor_addr_to_PTR_name(char *out, size_t outlen,
+ const tor_addr_t *addr)
{
+ tor_assert(out);
+ tor_assert(addr);
+
if (addr->family == AF_INET) {
uint32_t a = tor_addr_to_ipv4h(addr);
@@ -499,7 +516,7 @@ tor_addr_to_reverse_lookup_name(char *out, size_t outlen,
*cp++ = '.';
}
memcpy(cp, "ip6.arpa", 9); /* 8 characters plus NUL */
- return 0;
+ return 32 * 2 + 8;
}
return -1;
}
@@ -945,8 +962,11 @@ char *
tor_dup_addr(const tor_addr_t *addr)
{
char buf[TOR_ADDR_BUF_LEN];
- tor_addr_to_str(buf, addr, sizeof(buf), 0);
- return tor_strdup(buf);
+ if (tor_addr_to_str(buf, addr, sizeof(buf), 0)) {
+ return tor_strdup(buf);
+ } else {
+ return tor_strdup("<unknown address type>");
+ }
}
/** Return a string representing the address <b>addr</b>. This string is
@@ -984,7 +1004,7 @@ fmt_addr32(uint32_t addr)
* Return an address family on success, or -1 if an invalid address string is
* provided. */
int
-tor_addr_from_str(tor_addr_t *addr, const char *src)
+tor_addr_parse(tor_addr_t *addr, const char *src)
{
char *tmp = NULL; /* Holds substring if we got a dotted quad. */
int result;
@@ -1012,7 +1032,7 @@ tor_addr_from_str(tor_addr_t *addr, const char *src)
* address as needed, and put the result in <b>addr_out</b> and (optionally)
* <b>port_out</b>. Return 0 on success, negative on failure. */
int
-tor_addr_port_parse(const char *s, tor_addr_t *addr_out, uint16_t *port_out)
+tor_addr_port_lookup(const char *s, tor_addr_t *addr_out, uint16_t *port_out)
{
const char *port;
tor_addr_t addr;
@@ -1148,6 +1168,20 @@ is_internal_IP(uint32_t ip, int for_listening)
return tor_addr_is_internal(&myaddr, for_listening);
}
+/** Given an address of the form "host:port", try to divide it into its host
+ * ane port portions, setting *<b>address_out</b> to a newly allocated string
+ * holding the address portion and *<b>port_out</b> to the port (or 0 if no
+ * port is given). Return 0 on success, -1 on failure. */
+int
+tor_addr_port_split(int severity, const char *addrport,
+ char **address_out, uint16_t *port_out)
+{
+ tor_assert(addrport);
+ tor_assert(address_out);
+ tor_assert(port_out);
+ return addr_port_lookup(severity, addrport, address_out, NULL, port_out);
+}
+
/** Parse a string of the form "host[:port]" from <b>addrport</b>. If
* <b>address</b> is provided, set *<b>address</b> to a copy of the
* host portion of the string. If <b>addr</b> is provided, try to
@@ -1159,7 +1193,7 @@ is_internal_IP(uint32_t ip, int for_listening)
* Return 0 on success, -1 on failure.
*/
int
-parse_addr_port(int severity, const char *addrport, char **address,
+addr_port_lookup(int severity, const char *addrport, char **address,
uint32_t *addr, uint16_t *port_out)
{
const char *colon;
@@ -1169,7 +1203,7 @@ parse_addr_port(int severity, const char *addrport, char **address,
tor_assert(addrport);
- colon = strchr(addrport, ':');
+ colon = strrchr(addrport, ':');
if (colon) {
_address = tor_strndup(addrport, colon-addrport);
_port = (int) tor_parse_long(colon+1,10,1,65535,NULL,NULL);
diff --git a/src/common/address.h b/src/common/address.h
index e41e4c2ba..4568c32bf 100644
--- a/src/common/address.h
+++ b/src/common/address.h
@@ -31,6 +31,13 @@ typedef struct tor_addr_t
} addr;
} tor_addr_t;
+/** Holds an IP address and a TCP/UDP port. */
+typedef struct tor_addr_port_t
+{
+ tor_addr_t addr;
+ uint16_t port;
+} tor_addr_port_t;
+
static INLINE const struct in6_addr *tor_addr_to_in6(const tor_addr_t *a);
static INLINE uint32_t tor_addr_to_ipv4n(const tor_addr_t *a);
static INLINE uint32_t tor_addr_to_ipv4h(const tor_addr_t *a);
@@ -149,24 +156,24 @@ int tor_addr_compare_masked(const tor_addr_t *addr1, const tor_addr_t *addr2,
unsigned int tor_addr_hash(const tor_addr_t *addr);
int tor_addr_is_v4(const tor_addr_t *addr);
-int tor_addr_is_internal(const tor_addr_t *ip, int for_listening) ATTR_PURE;
+int tor_addr_is_internal(const tor_addr_t *ip, int for_listening);
/** Longest length that can be required for a reverse lookup name. */
/* 32 nybbles, 32 dots, 8 characters of "ip6.arpa", 1 NUL: 73 characters. */
#define REVERSE_LOOKUP_NAME_BUF_LEN 73
-int tor_addr_to_reverse_lookup_name(char *out, size_t outlen,
+int tor_addr_to_PTR_name(char *out, size_t outlen,
const tor_addr_t *addr);
-int tor_addr_parse_reverse_lookup_name(tor_addr_t *result, const char *address,
+int tor_addr_parse_PTR_name(tor_addr_t *result, const char *address,
int family, int accept_regular);
-int tor_addr_port_parse(const char *s, tor_addr_t *addr_out,
+int tor_addr_port_lookup(const char *s, tor_addr_t *addr_out,
uint16_t *port_out);
int tor_addr_parse_mask_ports(const char *s,
tor_addr_t *addr_out, maskbits_t *mask_out,
uint16_t *port_min_out, uint16_t *port_max_out);
const char * tor_addr_to_str(char *dest, const tor_addr_t *addr, size_t len,
int decorate);
-int tor_addr_from_str(tor_addr_t *addr, const char *src);
+int tor_addr_parse(tor_addr_t *addr, const char *src);
void tor_addr_copy(tor_addr_t *dest, const tor_addr_t *src);
void tor_addr_from_ipv4n(tor_addr_t *dest, uint32_t v4addr);
/** Set <b>dest</b> to the IPv4 address encoded in <b>v4addr</b> in host
@@ -181,9 +188,12 @@ void tor_addr_from_in6(tor_addr_t *dest, const struct in6_addr *in6);
int tor_addr_is_null(const tor_addr_t *addr);
int tor_addr_is_loopback(const tor_addr_t *addr);
+int tor_addr_port_split(int severity, const char *addrport,
+ char **address_out, uint16_t *port_out);
+
/* IPv4 helpers */
-int is_internal_IP(uint32_t ip, int for_listening) ATTR_PURE;
-int parse_addr_port(int severity, const char *addrport, char **address,
+int is_internal_IP(uint32_t ip, int for_listening);
+int addr_port_lookup(int severity, const char *addrport, char **address,
uint32_t *addr, uint16_t *port_out);
int parse_port_range(const char *port, uint16_t *port_min_out,
uint16_t *port_max_out);
diff --git a/src/common/aes.c b/src/common/aes.c
index 81091e9f0..cec689981 100644
--- a/src/common/aes.c
+++ b/src/common/aes.c
@@ -6,11 +6,7 @@
/**
* \file aes.c
- * \brief Implements the AES cipher (with 128-bit keys and blocks),
- * and a counter-mode stream cipher on top of AES. This code is
- * taken from the main Rijndael distribution. (We include this
- * because many people are running older versions of OpenSSL without
- * AES support.)
+ * \brief Implements a counter-mode stream cipher on top of AES.
**/
#include "orconfig.h"
@@ -18,120 +14,39 @@
#include <assert.h>
#include <stdlib.h>
#include <string.h>
+#include <openssl/aes.h>
+#include <openssl/evp.h>
+#include <openssl/engine.h>
+#if OPENSSL_VERSION_NUMBER >= 0x10000000L
+/* See comments about which counter mode implementation to use below. */
+#include <openssl/modes.h>
+#define USE_OPENSSL_CTR
+#endif
#include "compat.h"
#include "aes.h"
#include "util.h"
#include "torlog.h"
-/* We have 3 strategies for getting AES: Via OpenSSL's AES_encrypt function,
- * via OpenSSL's EVP_EncryptUpdate function, or via the built-in AES
- * implementation below. */
-
-/** Defined iff we're using OpenSSL's AES functions for AES. */
-#undef USE_OPENSSL_AES
-/** Defined iff we're using OpenSSL's EVP code for AES. */
-#undef USE_OPENSSL_EVP
-/** Defined iff we're using Tor's internal AES implementation, defined
- * below. */
-#undef USE_BUILTIN_AES
-
-/* Figure out our CPU type. We use this to pick an AES implementation.
- * Macros are as listed at http://predef.sourceforge.net/prearch.html
- */
-#if (defined(i386) || defined(__i386__) || defined(__i386) || defined(_X86_) \
- || defined(_M_IX86) || defined(__THW_INTEL__) || defined(__I86__))
-# define CPU_IS_X86
-#elif (defined(__amd64__) || defined(__amd64) || \
- defined(__x86_64__) || defined(__x86_64) || \
- defined(_M_X64))
-# define CPU_IS_X86_64
-#elif (defined(__ia64__) || defined(__ia64) || defined(_IA64) || \
- defined(_M_IA64))
-# define CPU_IS_IA64
-#elif (defined(__sparc__) || defined(__sparc))
-# define CPU_IS_SPARC
-#elif (defined(__arm__) || defined (__TARGET_ARCH_ARM))
-# define CPU_IS_ARM
+#ifdef ANDROID
+/* Android's OpenSSL seems to have removed all of its Engine support. */
+#define DISABLE_ENGINES
#endif
-/* Here we pick which to use, if none is force-defined. See
- * http://archives.seul.org/or/dev/Feb-2007/msg00045.html
- * for a summary of the most recent benchmarking results that led to this
- * nutty decision tree.
-*/
-#if (!defined(USE_BUILTIN_AES) && \
- !defined(USE_OPENSSL_AES) && \
- !defined(USE_OPENSSL_EVP))
-
-/* OpenSSL 0.9.7 was the first to support AES. It was slower than our
- * built-in implementation.
- * OpenSSL 0.9.8 added assembly implementations for i386 and ia64.
- * Either the i386 stuff isn't used for x86-64, or it isn't faster.
- * OpenSSL 0.9.9 (not yet out) has added assembly implementations for
- * x86_64 (aka amd64), sparc9, and arm
+/* We have 2 strategies for getting AES: Via OpenSSL's AES_encrypt function,
+ * via OpenSSL's EVP_EncryptUpdate function.
*
- * Note: the "f" at the end of OpenSSL version numbers below means
- * "release". */
-# if defined(CPU_IS_X86) || defined(CPU_IS_IA64)
-# if OPENSSL_VERSION_NUMBER >= 0x0090800fL
-# define USE_OPENSSL_AES
-# endif
-# endif
-
-# if defined(CPU_IS_X86_64) || defined(CPU_IS_ARM) || defined(CPU_IS_SPARC)
-# if OPENSSL_VERSION_NUMBER >= 0x0090900fL
-# define USE_OPENSSL_AES
-# endif
-# endif
-
-/* Otherwise, use the built-in implementation below. */
-# ifndef USE_OPENSSL_AES
-# define USE_BUILTIN_AES
-# endif
-#endif /* endif need to pick a method */
-
-/* Include OpenSSL headers as needed. */
-#ifdef USE_OPENSSL_AES
-# include <openssl/aes.h>
-#endif
-#ifdef USE_OPENSSL_EVP
-# include <openssl/evp.h>
-#endif
-
-/* Figure out which AES optimizations to use. */
-#ifdef USE_BUILTIN_AES
-/** If this is defined, we take advantage of the fact that AES treats its
- * input as a set of 4 32-bit words, so that there is no need to encode and
- * decode the 128-bit counter before every block encryption */
-# define USE_RIJNDAEL_COUNTER_OPTIMIZATION
-# if 0 && (defined(__powerpc__) || defined(__powerpc64__))
-/* XXXX do more experimentation before concluding this is actually
- * a good idea. */
-# define FULL_UNROLL
-# endif
-#endif
-
-/*======================================================================*/
-/* From rijndael-alg-fst.h */
-
-typedef uint64_t u64;
-typedef uint32_t u32;
-typedef uint8_t u8;
-
-#ifdef USE_BUILTIN_AES
-#define MAXNR 14
+ * If there's any hardware acceleration in play, we want to be using EVP_* so
+ * we can get it. Otherwise, we'll want AES_*, which seems to be about 5%
+ * faster than indirecting through the EVP layer.
+ */
-static int rijndaelKeySetupEnc(u32 rk[/*4*(Nr + 1)*/],
- const u8 cipherKey[], int keyBits);
-#ifdef USE_RIJNDAEL_COUNTER_OPTIMIZATION
-static void rijndaelEncrypt(const u32 rk[/*4*(Nr + 1)*/], int Nr,
- u32 ctr3, u32 ctr2,
- u32 ctr1, u32 ctr0, u8 ct[16]);
-#else
-static void rijndaelEncrypt(const u32 rk[/*4*(Nr + 1)*/], int Nr,
- const u8 pt[16], u8 ct[16]);
-#endif
-#endif
+/* We have 2 strategies for counter mode: use our own, or use OpenSSL's.
+ *
+ * Here we have a counter mode that's faster than the one shipping with
+ * OpenSSL pre-1.0 (by about 10%!). But OpenSSL 1.0.0 added a counter mode
+ * implementation faster than the one here (by about 7%). So we pick which
+ * one to used based on the Openssl version above.
+ */
/*======================================================================*/
/* Interface to AES code, and counter implementation */
@@ -139,42 +54,78 @@ static void rijndaelEncrypt(const u32 rk[/*4*(Nr + 1)*/], int Nr,
/** Implements an AES counter-mode cipher. */
struct aes_cnt_cipher {
/** This next element (however it's defined) is the AES key. */
-#if defined(USE_OPENSSL_EVP)
- EVP_CIPHER_CTX key;
-#elif defined(USE_OPENSSL_AES)
- AES_KEY key;
-#else
- u32 rk[4*(MAXNR+1)];
- int nr;
-#endif
+ union {
+ EVP_CIPHER_CTX evp;
+ AES_KEY aes;
+ } key;
-#if !defined(WORDS_BIGENDIAN) || defined(USE_RIJNDAEL_COUNTER_OPTIMIZATION)
+#if !defined(WORDS_BIGENDIAN) && !defined(USE_OPENSSL_CTR)
#define USING_COUNTER_VARS
/** These four values, together, implement a 128-bit counter, with
* counter0 as the low-order word and counter3 as the high-order word. */
- u32 counter3;
- u32 counter2;
- u32 counter1;
- u32 counter0;
+ uint32_t counter3;
+ uint32_t counter2;
+ uint32_t counter1;
+ uint32_t counter0;
#endif
-#ifndef USE_RIJNDAEL_COUNTER_OPTIMIZATION
-#define USING_COUNTER_BUFS
union {
/** The counter, in big-endian order, as bytes. */
- u8 buf[16];
+ uint8_t buf[16];
/** The counter, in big-endian order, as big-endian words. Note that
* on big-endian platforms, this is redundant with counter3...0,
* so we just use these values instead. */
- u32 buf32[4];
+ uint32_t buf32[4];
} ctr_buf;
-#endif
+
/** The encrypted value of ctr_buf. */
- u8 buf[16];
+ uint8_t buf[16];
/** Our current stream position within buf. */
- u8 pos;
+#ifdef USE_OPENSSL_CTR
+ unsigned int pos;
+#else
+ uint8_t pos;
+#endif
+
+ /** True iff we're using the evp implementation of this cipher. */
+ uint8_t using_evp;
};
+/** True if we should prefer the EVP implementation for AES, either because
+ * we're testing it or because we have hardware acceleration configured */
+static int should_use_EVP = 0;
+
+/** Check whether we should use the EVP interface for AES. If <b>force_val</b>
+ * is nonnegative, we use use EVP iff it is true. Otherwise, we use EVP
+ * if there is an engine enabled for aes-ecb. */
+int
+evaluate_evp_for_aes(int force_val)
+{
+ ENGINE *e;
+
+ if (force_val >= 0) {
+ should_use_EVP = force_val;
+ return 0;
+ }
+#ifdef DISABLE_ENGINES
+ should_use_EVP = 0;
+#else
+ e = ENGINE_get_cipher_engine(NID_aes_128_ecb);
+
+ if (e) {
+ log_notice(LD_CRYPTO, "AES engine \"%s\" found; using EVP_* functions.",
+ ENGINE_get_name(e));
+ should_use_EVP = 1;
+ } else {
+ log_notice(LD_CRYPTO, "No AES engine found; using AES_* functions.");
+ should_use_EVP = 0;
+ }
+#endif
+
+ return 0;
+}
+
+#ifndef USE_OPENSSL_CTR
#if !defined(USING_COUNTER_VARS)
#define COUNTER(c, n) ((c)->ctr_buf.buf32[3-(n)])
#else
@@ -194,25 +145,16 @@ _aes_fill_buf(aes_cnt_cipher_t *cipher)
* 3) changing the counter position was not trivial, last time I looked.
* None of these issues are insurmountable in principle.
*/
-#if defined(USE_BUILTIN_AES) && defined(USE_RIJNDAEL_COUNTER_OPTIMIZATION)
- rijndaelEncrypt(cipher->rk, cipher->nr,
- cipher->counter3, cipher->counter2,
- cipher->counter1, cipher->counter0, cipher->buf);
-#else
-#if defined(USE_OPENSSL_EVP)
- {
+ if (cipher->using_evp) {
int outl=16, inl=16;
- EVP_EncryptUpdate(&cipher->key, cipher->buf, &outl,
+ EVP_EncryptUpdate(&cipher->key.evp, cipher->buf, &outl,
cipher->ctr_buf.buf, inl);
+ } else {
+ AES_encrypt(cipher->ctr_buf.buf, cipher->buf, &cipher->key.aes);
}
-#elif defined(USE_OPENSSL_AES)
- AES_encrypt(cipher->ctr_buf.buf, cipher->buf, &cipher->key);
-#else
- rijndaelEncrypt(cipher->rk, cipher->nr, cipher->ctr_buf.buf, cipher->buf);
-#endif
-#endif
}
+#endif
/**
* Return a newly allocated counter-mode AES128 cipher implementation.
@@ -232,33 +174,37 @@ aes_new_cipher(void)
void
aes_set_key(aes_cnt_cipher_t *cipher, const char *key, int key_bits)
{
-#if defined(USE_OPENSSL_EVP)
- const EVP_CIPHER *c;
- switch (key_bits) {
- case 128: c = EVP_aes_128_ecb(); break;
- case 192: c = EVP_aes_192_ecb(); break;
- case 256: c = EVP_aes_256_ecb(); break;
- default: tor_assert(0);
+ if (should_use_EVP) {
+ const EVP_CIPHER *c;
+ switch (key_bits) {
+ case 128: c = EVP_aes_128_ecb(); break;
+ case 192: c = EVP_aes_192_ecb(); break;
+ case 256: c = EVP_aes_256_ecb(); break;
+ default: tor_assert(0);
+ }
+ EVP_EncryptInit(&cipher->key.evp, c, (const unsigned char*)key, NULL);
+ cipher->using_evp = 1;
+ } else {
+ AES_set_encrypt_key((const unsigned char *)key, key_bits, &cipher->key.aes);
+ cipher->using_evp = 0;
}
- EVP_EncryptInit(&cipher->key, c, (const unsigned char*)key, NULL);
-#elif defined(USE_OPENSSL_AES)
- AES_set_encrypt_key((const unsigned char *)key, key_bits, &(cipher->key));
-#else
- cipher->nr = rijndaelKeySetupEnc(cipher->rk, (const unsigned char*)key,
- key_bits);
-#endif
+
#ifdef USING_COUNTER_VARS
cipher->counter0 = 0;
cipher->counter1 = 0;
cipher->counter2 = 0;
cipher->counter3 = 0;
#endif
-#ifdef USING_COUNTER_BUFS
+
memset(cipher->ctr_buf.buf, 0, sizeof(cipher->ctr_buf.buf));
-#endif
cipher->pos = 0;
+
+#ifdef USE_OPENSSL_CTR
+ memset(cipher->buf, 0, sizeof(cipher->buf));
+#else
_aes_fill_buf(cipher);
+#endif
}
/** Release storage held by <b>cipher</b>
@@ -268,14 +214,14 @@ aes_free_cipher(aes_cnt_cipher_t *cipher)
{
if (!cipher)
return;
-#ifdef USE_OPENSSL_EVP
- EVP_CIPHER_CTX_cleanup(&cipher->key);
-#endif
+ if (cipher->using_evp) {
+ EVP_CIPHER_CTX_cleanup(&cipher->key.evp);
+ }
memset(cipher, 0, sizeof(aes_cnt_cipher_t));
tor_free(cipher);
}
-#if defined(USING_COUNTER_VARS) && defined(USING_COUNTER_BUFS)
+#if defined(USING_COUNTER_VARS)
#define UPDATE_CTR_BUF(c, n) STMT_BEGIN \
(c)->ctr_buf.buf32[3-(n)] = htonl((c)->counter ## n); \
STMT_END
@@ -283,6 +229,18 @@ aes_free_cipher(aes_cnt_cipher_t *cipher)
#define UPDATE_CTR_BUF(c, n)
#endif
+#ifdef USE_OPENSSL_CTR
+/* Helper function to use EVP with openssl's counter-mode wrapper. */
+static void evp_block128_fn(const uint8_t in[16],
+ uint8_t out[16],
+ const void *key)
+{
+ EVP_CIPHER_CTX *ctx = (void*)key;
+ int inl=16, outl=16;
+ EVP_EncryptUpdate(ctx, out, &outl, in, inl);
+}
+#endif
+
/** Encrypt <b>len</b> bytes from <b>input</b>, storing the result in
* <b>output</b>. Uses the key in <b>cipher</b>, and advances the counter
* by <b>len</b> bytes as it encrypts.
@@ -291,20 +249,29 @@ void
aes_crypt(aes_cnt_cipher_t *cipher, const char *input, size_t len,
char *output)
{
- /* This function alone is up to 5% of our runtime in some profiles; anything
- * we could do to make it faster would be great.
- *
- * Experimenting suggests that unrolling the inner loop into a switch
- * statement doesn't help. What does seem to help is making the input and
- * output buffers word aligned, and never crypting anything besides an
- * integer number of words at a time -- it shaves maybe 4-5% of the per-byte
- * encryption time measured by bench_aes. We can't do that with the current
- * Tor protocol, though: Tor really likes to crypt things in 509-byte
- * chunks.
- *
- * If we were really ambitous, we'd force len to be a multiple of the block
- * size, and shave maybe another 4-5% off.
- */
+#ifdef USE_OPENSSL_CTR
+ if (cipher->using_evp) {
+ /* In openssl 1.0.0, there's an if'd out EVP_aes_128_ctr in evp.h. If
+ * it weren't disabled, it might be better just to use that.
+ */
+ CRYPTO_ctr128_encrypt((const unsigned char *)input,
+ (unsigned char *)output,
+ len,
+ &cipher->key.evp,
+ cipher->ctr_buf.buf,
+ cipher->buf,
+ &cipher->pos,
+ evp_block128_fn);
+ } else {
+ AES_ctr128_encrypt((const unsigned char *)input,
+ (unsigned char *)output,
+ len,
+ &cipher->key.aes,
+ cipher->ctr_buf.buf,
+ cipher->buf,
+ &cipher->pos);
+ }
+#else
int c = cipher->pos;
if (PREDICT_UNLIKELY(!len)) return;
@@ -327,6 +294,7 @@ aes_crypt(aes_cnt_cipher_t *cipher, const char *input, size_t len,
UPDATE_CTR_BUF(cipher, 0);
_aes_fill_buf(cipher);
}
+#endif
}
/** Encrypt <b>len</b> bytes from <b>input</b>, storing the results in place.
@@ -336,11 +304,9 @@ aes_crypt(aes_cnt_cipher_t *cipher, const char *input, size_t len,
void
aes_crypt_inplace(aes_cnt_cipher_t *cipher, char *data, size_t len)
{
-
- /* XXXX This function is up to 5% of our runtime in some profiles;
- * we should look into unrolling some of the loops; taking advantage
- * of alignment, using a bigger buffer, and so on. Not till after 0.1.2.x,
- * though. */
+#ifdef USE_OPENSSL_CTR
+ aes_crypt(cipher, data, len, data);
+#else
int c = cipher->pos;
if (PREDICT_UNLIKELY(!len)) return;
@@ -363,6 +329,7 @@ aes_crypt_inplace(aes_cnt_cipher_t *cipher, char *data, size_t len)
UPDATE_CTR_BUF(cipher, 0);
_aes_fill_buf(cipher);
}
+#endif
}
/** Reset the 128-bit counter of <b>cipher</b> to the 16-bit big-endian value
@@ -377,705 +344,10 @@ aes_set_iv(aes_cnt_cipher_t *cipher, const char *iv)
cipher->counter0 = ntohl(get_uint32(iv+12));
#endif
cipher->pos = 0;
-#ifndef USE_RIJNDAEL_COUNTER_OPTIMIZATION
memcpy(cipher->ctr_buf.buf, iv, 16);
-#endif
+#ifndef USE_OPENSSL_CTR
_aes_fill_buf(cipher);
-}
-
-#ifdef USE_BUILTIN_AES
-/*======================================================================*/
-/* From rijndael-alg-fst.c */
-
-/**
- * rijndael-alg-fst.c
- *
- * @version 3.0 (December 2000)
- *
- * Optimized ANSI C code for the Rijndael cipher (now AES)
- *
- * @author Vincent Rijmen <vincent.rijmen@esat.kuleuven.ac.be>
- * @author Antoon Bosselaers <antoon.bosselaers@esat.kuleuven.ac.be>
- * @author Paulo Barreto <paulo.barreto@terra.com.br>
- *
- * This code is hereby placed in the public domain.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ''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 AUTHORS 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.
- */
-
-/*
-Te0[x] = S [x].[02, 01, 01, 03];
-Te1[x] = S [x].[03, 02, 01, 01];
-Te2[x] = S [x].[01, 03, 02, 01];
-Te3[x] = S [x].[01, 01, 03, 02];
-Te4[x] = S [x].[01, 01, 01, 01];
-
-Td0[x] = Si[x].[0e, 09, 0d, 0b];
-Td1[x] = Si[x].[0b, 0e, 09, 0d];
-Td2[x] = Si[x].[0d, 0b, 0e, 09];
-Td3[x] = Si[x].[09, 0d, 0b, 0e];
-Td4[x] = Si[x].[01, 01, 01, 01];
-*/
-
-static const u32 Te0[256] = {
- 0xc66363a5U, 0xf87c7c84U, 0xee777799U, 0xf67b7b8dU,
- 0xfff2f20dU, 0xd66b6bbdU, 0xde6f6fb1U, 0x91c5c554U,
- 0x60303050U, 0x02010103U, 0xce6767a9U, 0x562b2b7dU,
- 0xe7fefe19U, 0xb5d7d762U, 0x4dababe6U, 0xec76769aU,
- 0x8fcaca45U, 0x1f82829dU, 0x89c9c940U, 0xfa7d7d87U,
- 0xeffafa15U, 0xb25959ebU, 0x8e4747c9U, 0xfbf0f00bU,
- 0x41adadecU, 0xb3d4d467U, 0x5fa2a2fdU, 0x45afafeaU,
- 0x239c9cbfU, 0x53a4a4f7U, 0xe4727296U, 0x9bc0c05bU,
- 0x75b7b7c2U, 0xe1fdfd1cU, 0x3d9393aeU, 0x4c26266aU,
- 0x6c36365aU, 0x7e3f3f41U, 0xf5f7f702U, 0x83cccc4fU,
- 0x6834345cU, 0x51a5a5f4U, 0xd1e5e534U, 0xf9f1f108U,
- 0xe2717193U, 0xabd8d873U, 0x62313153U, 0x2a15153fU,
- 0x0804040cU, 0x95c7c752U, 0x46232365U, 0x9dc3c35eU,
- 0x30181828U, 0x379696a1U, 0x0a05050fU, 0x2f9a9ab5U,
- 0x0e070709U, 0x24121236U, 0x1b80809bU, 0xdfe2e23dU,
- 0xcdebeb26U, 0x4e272769U, 0x7fb2b2cdU, 0xea75759fU,
- 0x1209091bU, 0x1d83839eU, 0x582c2c74U, 0x341a1a2eU,
- 0x361b1b2dU, 0xdc6e6eb2U, 0xb45a5aeeU, 0x5ba0a0fbU,
- 0xa45252f6U, 0x763b3b4dU, 0xb7d6d661U, 0x7db3b3ceU,
- 0x5229297bU, 0xdde3e33eU, 0x5e2f2f71U, 0x13848497U,
- 0xa65353f5U, 0xb9d1d168U, 0x00000000U, 0xc1eded2cU,
- 0x40202060U, 0xe3fcfc1fU, 0x79b1b1c8U, 0xb65b5bedU,
- 0xd46a6abeU, 0x8dcbcb46U, 0x67bebed9U, 0x7239394bU,
- 0x944a4adeU, 0x984c4cd4U, 0xb05858e8U, 0x85cfcf4aU,
- 0xbbd0d06bU, 0xc5efef2aU, 0x4faaaae5U, 0xedfbfb16U,
- 0x864343c5U, 0x9a4d4dd7U, 0x66333355U, 0x11858594U,
- 0x8a4545cfU, 0xe9f9f910U, 0x04020206U, 0xfe7f7f81U,
- 0xa05050f0U, 0x783c3c44U, 0x259f9fbaU, 0x4ba8a8e3U,
- 0xa25151f3U, 0x5da3a3feU, 0x804040c0U, 0x058f8f8aU,
- 0x3f9292adU, 0x219d9dbcU, 0x70383848U, 0xf1f5f504U,
- 0x63bcbcdfU, 0x77b6b6c1U, 0xafdada75U, 0x42212163U,
- 0x20101030U, 0xe5ffff1aU, 0xfdf3f30eU, 0xbfd2d26dU,
- 0x81cdcd4cU, 0x180c0c14U, 0x26131335U, 0xc3ecec2fU,
- 0xbe5f5fe1U, 0x359797a2U, 0x884444ccU, 0x2e171739U,
- 0x93c4c457U, 0x55a7a7f2U, 0xfc7e7e82U, 0x7a3d3d47U,
- 0xc86464acU, 0xba5d5de7U, 0x3219192bU, 0xe6737395U,
- 0xc06060a0U, 0x19818198U, 0x9e4f4fd1U, 0xa3dcdc7fU,
- 0x44222266U, 0x542a2a7eU, 0x3b9090abU, 0x0b888883U,
- 0x8c4646caU, 0xc7eeee29U, 0x6bb8b8d3U, 0x2814143cU,
- 0xa7dede79U, 0xbc5e5ee2U, 0x160b0b1dU, 0xaddbdb76U,
- 0xdbe0e03bU, 0x64323256U, 0x743a3a4eU, 0x140a0a1eU,
- 0x924949dbU, 0x0c06060aU, 0x4824246cU, 0xb85c5ce4U,
- 0x9fc2c25dU, 0xbdd3d36eU, 0x43acacefU, 0xc46262a6U,
- 0x399191a8U, 0x319595a4U, 0xd3e4e437U, 0xf279798bU,
- 0xd5e7e732U, 0x8bc8c843U, 0x6e373759U, 0xda6d6db7U,
- 0x018d8d8cU, 0xb1d5d564U, 0x9c4e4ed2U, 0x49a9a9e0U,
- 0xd86c6cb4U, 0xac5656faU, 0xf3f4f407U, 0xcfeaea25U,
- 0xca6565afU, 0xf47a7a8eU, 0x47aeaee9U, 0x10080818U,
- 0x6fbabad5U, 0xf0787888U, 0x4a25256fU, 0x5c2e2e72U,
- 0x381c1c24U, 0x57a6a6f1U, 0x73b4b4c7U, 0x97c6c651U,
- 0xcbe8e823U, 0xa1dddd7cU, 0xe874749cU, 0x3e1f1f21U,
- 0x964b4bddU, 0x61bdbddcU, 0x0d8b8b86U, 0x0f8a8a85U,
- 0xe0707090U, 0x7c3e3e42U, 0x71b5b5c4U, 0xcc6666aaU,
- 0x904848d8U, 0x06030305U, 0xf7f6f601U, 0x1c0e0e12U,
- 0xc26161a3U, 0x6a35355fU, 0xae5757f9U, 0x69b9b9d0U,
- 0x17868691U, 0x99c1c158U, 0x3a1d1d27U, 0x279e9eb9U,
- 0xd9e1e138U, 0xebf8f813U, 0x2b9898b3U, 0x22111133U,
- 0xd26969bbU, 0xa9d9d970U, 0x078e8e89U, 0x339494a7U,
- 0x2d9b9bb6U, 0x3c1e1e22U, 0x15878792U, 0xc9e9e920U,
- 0x87cece49U, 0xaa5555ffU, 0x50282878U, 0xa5dfdf7aU,
- 0x038c8c8fU, 0x59a1a1f8U, 0x09898980U, 0x1a0d0d17U,
- 0x65bfbfdaU, 0xd7e6e631U, 0x844242c6U, 0xd06868b8U,
- 0x824141c3U, 0x299999b0U, 0x5a2d2d77U, 0x1e0f0f11U,
- 0x7bb0b0cbU, 0xa85454fcU, 0x6dbbbbd6U, 0x2c16163aU,
-};
-static const u32 Te1[256] = {
- 0xa5c66363U, 0x84f87c7cU, 0x99ee7777U, 0x8df67b7bU,
- 0x0dfff2f2U, 0xbdd66b6bU, 0xb1de6f6fU, 0x5491c5c5U,
- 0x50603030U, 0x03020101U, 0xa9ce6767U, 0x7d562b2bU,
- 0x19e7fefeU, 0x62b5d7d7U, 0xe64dababU, 0x9aec7676U,
- 0x458fcacaU, 0x9d1f8282U, 0x4089c9c9U, 0x87fa7d7dU,
- 0x15effafaU, 0xebb25959U, 0xc98e4747U, 0x0bfbf0f0U,
- 0xec41adadU, 0x67b3d4d4U, 0xfd5fa2a2U, 0xea45afafU,
- 0xbf239c9cU, 0xf753a4a4U, 0x96e47272U, 0x5b9bc0c0U,
- 0xc275b7b7U, 0x1ce1fdfdU, 0xae3d9393U, 0x6a4c2626U,
- 0x5a6c3636U, 0x417e3f3fU, 0x02f5f7f7U, 0x4f83ccccU,
- 0x5c683434U, 0xf451a5a5U, 0x34d1e5e5U, 0x08f9f1f1U,
- 0x93e27171U, 0x73abd8d8U, 0x53623131U, 0x3f2a1515U,
- 0x0c080404U, 0x5295c7c7U, 0x65462323U, 0x5e9dc3c3U,
- 0x28301818U, 0xa1379696U, 0x0f0a0505U, 0xb52f9a9aU,
- 0x090e0707U, 0x36241212U, 0x9b1b8080U, 0x3ddfe2e2U,
- 0x26cdebebU, 0x694e2727U, 0xcd7fb2b2U, 0x9fea7575U,
- 0x1b120909U, 0x9e1d8383U, 0x74582c2cU, 0x2e341a1aU,
- 0x2d361b1bU, 0xb2dc6e6eU, 0xeeb45a5aU, 0xfb5ba0a0U,
- 0xf6a45252U, 0x4d763b3bU, 0x61b7d6d6U, 0xce7db3b3U,
- 0x7b522929U, 0x3edde3e3U, 0x715e2f2fU, 0x97138484U,
- 0xf5a65353U, 0x68b9d1d1U, 0x00000000U, 0x2cc1ededU,
- 0x60402020U, 0x1fe3fcfcU, 0xc879b1b1U, 0xedb65b5bU,
- 0xbed46a6aU, 0x468dcbcbU, 0xd967bebeU, 0x4b723939U,
- 0xde944a4aU, 0xd4984c4cU, 0xe8b05858U, 0x4a85cfcfU,
- 0x6bbbd0d0U, 0x2ac5efefU, 0xe54faaaaU, 0x16edfbfbU,
- 0xc5864343U, 0xd79a4d4dU, 0x55663333U, 0x94118585U,
- 0xcf8a4545U, 0x10e9f9f9U, 0x06040202U, 0x81fe7f7fU,
- 0xf0a05050U, 0x44783c3cU, 0xba259f9fU, 0xe34ba8a8U,
- 0xf3a25151U, 0xfe5da3a3U, 0xc0804040U, 0x8a058f8fU,
- 0xad3f9292U, 0xbc219d9dU, 0x48703838U, 0x04f1f5f5U,
- 0xdf63bcbcU, 0xc177b6b6U, 0x75afdadaU, 0x63422121U,
- 0x30201010U, 0x1ae5ffffU, 0x0efdf3f3U, 0x6dbfd2d2U,
- 0x4c81cdcdU, 0x14180c0cU, 0x35261313U, 0x2fc3ececU,
- 0xe1be5f5fU, 0xa2359797U, 0xcc884444U, 0x392e1717U,
- 0x5793c4c4U, 0xf255a7a7U, 0x82fc7e7eU, 0x477a3d3dU,
- 0xacc86464U, 0xe7ba5d5dU, 0x2b321919U, 0x95e67373U,
- 0xa0c06060U, 0x98198181U, 0xd19e4f4fU, 0x7fa3dcdcU,
- 0x66442222U, 0x7e542a2aU, 0xab3b9090U, 0x830b8888U,
- 0xca8c4646U, 0x29c7eeeeU, 0xd36bb8b8U, 0x3c281414U,
- 0x79a7dedeU, 0xe2bc5e5eU, 0x1d160b0bU, 0x76addbdbU,
- 0x3bdbe0e0U, 0x56643232U, 0x4e743a3aU, 0x1e140a0aU,
- 0xdb924949U, 0x0a0c0606U, 0x6c482424U, 0xe4b85c5cU,
- 0x5d9fc2c2U, 0x6ebdd3d3U, 0xef43acacU, 0xa6c46262U,
- 0xa8399191U, 0xa4319595U, 0x37d3e4e4U, 0x8bf27979U,
- 0x32d5e7e7U, 0x438bc8c8U, 0x596e3737U, 0xb7da6d6dU,
- 0x8c018d8dU, 0x64b1d5d5U, 0xd29c4e4eU, 0xe049a9a9U,
- 0xb4d86c6cU, 0xfaac5656U, 0x07f3f4f4U, 0x25cfeaeaU,
- 0xafca6565U, 0x8ef47a7aU, 0xe947aeaeU, 0x18100808U,
- 0xd56fbabaU, 0x88f07878U, 0x6f4a2525U, 0x725c2e2eU,
- 0x24381c1cU, 0xf157a6a6U, 0xc773b4b4U, 0x5197c6c6U,
- 0x23cbe8e8U, 0x7ca1ddddU, 0x9ce87474U, 0x213e1f1fU,
- 0xdd964b4bU, 0xdc61bdbdU, 0x860d8b8bU, 0x850f8a8aU,
- 0x90e07070U, 0x427c3e3eU, 0xc471b5b5U, 0xaacc6666U,
- 0xd8904848U, 0x05060303U, 0x01f7f6f6U, 0x121c0e0eU,
- 0xa3c26161U, 0x5f6a3535U, 0xf9ae5757U, 0xd069b9b9U,
- 0x91178686U, 0x5899c1c1U, 0x273a1d1dU, 0xb9279e9eU,
- 0x38d9e1e1U, 0x13ebf8f8U, 0xb32b9898U, 0x33221111U,
- 0xbbd26969U, 0x70a9d9d9U, 0x89078e8eU, 0xa7339494U,
- 0xb62d9b9bU, 0x223c1e1eU, 0x92158787U, 0x20c9e9e9U,
- 0x4987ceceU, 0xffaa5555U, 0x78502828U, 0x7aa5dfdfU,
- 0x8f038c8cU, 0xf859a1a1U, 0x80098989U, 0x171a0d0dU,
- 0xda65bfbfU, 0x31d7e6e6U, 0xc6844242U, 0xb8d06868U,
- 0xc3824141U, 0xb0299999U, 0x775a2d2dU, 0x111e0f0fU,
- 0xcb7bb0b0U, 0xfca85454U, 0xd66dbbbbU, 0x3a2c1616U,
-};
-static const u32 Te2[256] = {
- 0x63a5c663U, 0x7c84f87cU, 0x7799ee77U, 0x7b8df67bU,
- 0xf20dfff2U, 0x6bbdd66bU, 0x6fb1de6fU, 0xc55491c5U,
- 0x30506030U, 0x01030201U, 0x67a9ce67U, 0x2b7d562bU,
- 0xfe19e7feU, 0xd762b5d7U, 0xabe64dabU, 0x769aec76U,
- 0xca458fcaU, 0x829d1f82U, 0xc94089c9U, 0x7d87fa7dU,
- 0xfa15effaU, 0x59ebb259U, 0x47c98e47U, 0xf00bfbf0U,
- 0xadec41adU, 0xd467b3d4U, 0xa2fd5fa2U, 0xafea45afU,
- 0x9cbf239cU, 0xa4f753a4U, 0x7296e472U, 0xc05b9bc0U,
- 0xb7c275b7U, 0xfd1ce1fdU, 0x93ae3d93U, 0x266a4c26U,
- 0x365a6c36U, 0x3f417e3fU, 0xf702f5f7U, 0xcc4f83ccU,
- 0x345c6834U, 0xa5f451a5U, 0xe534d1e5U, 0xf108f9f1U,
- 0x7193e271U, 0xd873abd8U, 0x31536231U, 0x153f2a15U,
- 0x040c0804U, 0xc75295c7U, 0x23654623U, 0xc35e9dc3U,
- 0x18283018U, 0x96a13796U, 0x050f0a05U, 0x9ab52f9aU,
- 0x07090e07U, 0x12362412U, 0x809b1b80U, 0xe23ddfe2U,
- 0xeb26cdebU, 0x27694e27U, 0xb2cd7fb2U, 0x759fea75U,
- 0x091b1209U, 0x839e1d83U, 0x2c74582cU, 0x1a2e341aU,
- 0x1b2d361bU, 0x6eb2dc6eU, 0x5aeeb45aU, 0xa0fb5ba0U,
- 0x52f6a452U, 0x3b4d763bU, 0xd661b7d6U, 0xb3ce7db3U,
- 0x297b5229U, 0xe33edde3U, 0x2f715e2fU, 0x84971384U,
- 0x53f5a653U, 0xd168b9d1U, 0x00000000U, 0xed2cc1edU,
- 0x20604020U, 0xfc1fe3fcU, 0xb1c879b1U, 0x5bedb65bU,
- 0x6abed46aU, 0xcb468dcbU, 0xbed967beU, 0x394b7239U,
- 0x4ade944aU, 0x4cd4984cU, 0x58e8b058U, 0xcf4a85cfU,
- 0xd06bbbd0U, 0xef2ac5efU, 0xaae54faaU, 0xfb16edfbU,
- 0x43c58643U, 0x4dd79a4dU, 0x33556633U, 0x85941185U,
- 0x45cf8a45U, 0xf910e9f9U, 0x02060402U, 0x7f81fe7fU,
- 0x50f0a050U, 0x3c44783cU, 0x9fba259fU, 0xa8e34ba8U,
- 0x51f3a251U, 0xa3fe5da3U, 0x40c08040U, 0x8f8a058fU,
- 0x92ad3f92U, 0x9dbc219dU, 0x38487038U, 0xf504f1f5U,
- 0xbcdf63bcU, 0xb6c177b6U, 0xda75afdaU, 0x21634221U,
- 0x10302010U, 0xff1ae5ffU, 0xf30efdf3U, 0xd26dbfd2U,
- 0xcd4c81cdU, 0x0c14180cU, 0x13352613U, 0xec2fc3ecU,
- 0x5fe1be5fU, 0x97a23597U, 0x44cc8844U, 0x17392e17U,
- 0xc45793c4U, 0xa7f255a7U, 0x7e82fc7eU, 0x3d477a3dU,
- 0x64acc864U, 0x5de7ba5dU, 0x192b3219U, 0x7395e673U,
- 0x60a0c060U, 0x81981981U, 0x4fd19e4fU, 0xdc7fa3dcU,
- 0x22664422U, 0x2a7e542aU, 0x90ab3b90U, 0x88830b88U,
- 0x46ca8c46U, 0xee29c7eeU, 0xb8d36bb8U, 0x143c2814U,
- 0xde79a7deU, 0x5ee2bc5eU, 0x0b1d160bU, 0xdb76addbU,
- 0xe03bdbe0U, 0x32566432U, 0x3a4e743aU, 0x0a1e140aU,
- 0x49db9249U, 0x060a0c06U, 0x246c4824U, 0x5ce4b85cU,
- 0xc25d9fc2U, 0xd36ebdd3U, 0xacef43acU, 0x62a6c462U,
- 0x91a83991U, 0x95a43195U, 0xe437d3e4U, 0x798bf279U,
- 0xe732d5e7U, 0xc8438bc8U, 0x37596e37U, 0x6db7da6dU,
- 0x8d8c018dU, 0xd564b1d5U, 0x4ed29c4eU, 0xa9e049a9U,
- 0x6cb4d86cU, 0x56faac56U, 0xf407f3f4U, 0xea25cfeaU,
- 0x65afca65U, 0x7a8ef47aU, 0xaee947aeU, 0x08181008U,
- 0xbad56fbaU, 0x7888f078U, 0x256f4a25U, 0x2e725c2eU,
- 0x1c24381cU, 0xa6f157a6U, 0xb4c773b4U, 0xc65197c6U,
- 0xe823cbe8U, 0xdd7ca1ddU, 0x749ce874U, 0x1f213e1fU,
- 0x4bdd964bU, 0xbddc61bdU, 0x8b860d8bU, 0x8a850f8aU,
- 0x7090e070U, 0x3e427c3eU, 0xb5c471b5U, 0x66aacc66U,
- 0x48d89048U, 0x03050603U, 0xf601f7f6U, 0x0e121c0eU,
- 0x61a3c261U, 0x355f6a35U, 0x57f9ae57U, 0xb9d069b9U,
- 0x86911786U, 0xc15899c1U, 0x1d273a1dU, 0x9eb9279eU,
- 0xe138d9e1U, 0xf813ebf8U, 0x98b32b98U, 0x11332211U,
- 0x69bbd269U, 0xd970a9d9U, 0x8e89078eU, 0x94a73394U,
- 0x9bb62d9bU, 0x1e223c1eU, 0x87921587U, 0xe920c9e9U,
- 0xce4987ceU, 0x55ffaa55U, 0x28785028U, 0xdf7aa5dfU,
- 0x8c8f038cU, 0xa1f859a1U, 0x89800989U, 0x0d171a0dU,
- 0xbfda65bfU, 0xe631d7e6U, 0x42c68442U, 0x68b8d068U,
- 0x41c38241U, 0x99b02999U, 0x2d775a2dU, 0x0f111e0fU,
- 0xb0cb7bb0U, 0x54fca854U, 0xbbd66dbbU, 0x163a2c16U,
-};
-static const u32 Te3[256] = {
-
- 0x6363a5c6U, 0x7c7c84f8U, 0x777799eeU, 0x7b7b8df6U,
- 0xf2f20dffU, 0x6b6bbdd6U, 0x6f6fb1deU, 0xc5c55491U,
- 0x30305060U, 0x01010302U, 0x6767a9ceU, 0x2b2b7d56U,
- 0xfefe19e7U, 0xd7d762b5U, 0xababe64dU, 0x76769aecU,
- 0xcaca458fU, 0x82829d1fU, 0xc9c94089U, 0x7d7d87faU,
- 0xfafa15efU, 0x5959ebb2U, 0x4747c98eU, 0xf0f00bfbU,
- 0xadadec41U, 0xd4d467b3U, 0xa2a2fd5fU, 0xafafea45U,
- 0x9c9cbf23U, 0xa4a4f753U, 0x727296e4U, 0xc0c05b9bU,
- 0xb7b7c275U, 0xfdfd1ce1U, 0x9393ae3dU, 0x26266a4cU,
- 0x36365a6cU, 0x3f3f417eU, 0xf7f702f5U, 0xcccc4f83U,
- 0x34345c68U, 0xa5a5f451U, 0xe5e534d1U, 0xf1f108f9U,
- 0x717193e2U, 0xd8d873abU, 0x31315362U, 0x15153f2aU,
- 0x04040c08U, 0xc7c75295U, 0x23236546U, 0xc3c35e9dU,
- 0x18182830U, 0x9696a137U, 0x05050f0aU, 0x9a9ab52fU,
- 0x0707090eU, 0x12123624U, 0x80809b1bU, 0xe2e23ddfU,
- 0xebeb26cdU, 0x2727694eU, 0xb2b2cd7fU, 0x75759feaU,
- 0x09091b12U, 0x83839e1dU, 0x2c2c7458U, 0x1a1a2e34U,
- 0x1b1b2d36U, 0x6e6eb2dcU, 0x5a5aeeb4U, 0xa0a0fb5bU,
- 0x5252f6a4U, 0x3b3b4d76U, 0xd6d661b7U, 0xb3b3ce7dU,
- 0x29297b52U, 0xe3e33eddU, 0x2f2f715eU, 0x84849713U,
- 0x5353f5a6U, 0xd1d168b9U, 0x00000000U, 0xeded2cc1U,
- 0x20206040U, 0xfcfc1fe3U, 0xb1b1c879U, 0x5b5bedb6U,
- 0x6a6abed4U, 0xcbcb468dU, 0xbebed967U, 0x39394b72U,
- 0x4a4ade94U, 0x4c4cd498U, 0x5858e8b0U, 0xcfcf4a85U,
- 0xd0d06bbbU, 0xefef2ac5U, 0xaaaae54fU, 0xfbfb16edU,
- 0x4343c586U, 0x4d4dd79aU, 0x33335566U, 0x85859411U,
- 0x4545cf8aU, 0xf9f910e9U, 0x02020604U, 0x7f7f81feU,
- 0x5050f0a0U, 0x3c3c4478U, 0x9f9fba25U, 0xa8a8e34bU,
- 0x5151f3a2U, 0xa3a3fe5dU, 0x4040c080U, 0x8f8f8a05U,
- 0x9292ad3fU, 0x9d9dbc21U, 0x38384870U, 0xf5f504f1U,
- 0xbcbcdf63U, 0xb6b6c177U, 0xdada75afU, 0x21216342U,
- 0x10103020U, 0xffff1ae5U, 0xf3f30efdU, 0xd2d26dbfU,
- 0xcdcd4c81U, 0x0c0c1418U, 0x13133526U, 0xecec2fc3U,
- 0x5f5fe1beU, 0x9797a235U, 0x4444cc88U, 0x1717392eU,
- 0xc4c45793U, 0xa7a7f255U, 0x7e7e82fcU, 0x3d3d477aU,
- 0x6464acc8U, 0x5d5de7baU, 0x19192b32U, 0x737395e6U,
- 0x6060a0c0U, 0x81819819U, 0x4f4fd19eU, 0xdcdc7fa3U,
- 0x22226644U, 0x2a2a7e54U, 0x9090ab3bU, 0x8888830bU,
- 0x4646ca8cU, 0xeeee29c7U, 0xb8b8d36bU, 0x14143c28U,
- 0xdede79a7U, 0x5e5ee2bcU, 0x0b0b1d16U, 0xdbdb76adU,
- 0xe0e03bdbU, 0x32325664U, 0x3a3a4e74U, 0x0a0a1e14U,
- 0x4949db92U, 0x06060a0cU, 0x24246c48U, 0x5c5ce4b8U,
- 0xc2c25d9fU, 0xd3d36ebdU, 0xacacef43U, 0x6262a6c4U,
- 0x9191a839U, 0x9595a431U, 0xe4e437d3U, 0x79798bf2U,
- 0xe7e732d5U, 0xc8c8438bU, 0x3737596eU, 0x6d6db7daU,
- 0x8d8d8c01U, 0xd5d564b1U, 0x4e4ed29cU, 0xa9a9e049U,
- 0x6c6cb4d8U, 0x5656faacU, 0xf4f407f3U, 0xeaea25cfU,
- 0x6565afcaU, 0x7a7a8ef4U, 0xaeaee947U, 0x08081810U,
- 0xbabad56fU, 0x787888f0U, 0x25256f4aU, 0x2e2e725cU,
- 0x1c1c2438U, 0xa6a6f157U, 0xb4b4c773U, 0xc6c65197U,
- 0xe8e823cbU, 0xdddd7ca1U, 0x74749ce8U, 0x1f1f213eU,
- 0x4b4bdd96U, 0xbdbddc61U, 0x8b8b860dU, 0x8a8a850fU,
- 0x707090e0U, 0x3e3e427cU, 0xb5b5c471U, 0x6666aaccU,
- 0x4848d890U, 0x03030506U, 0xf6f601f7U, 0x0e0e121cU,
- 0x6161a3c2U, 0x35355f6aU, 0x5757f9aeU, 0xb9b9d069U,
- 0x86869117U, 0xc1c15899U, 0x1d1d273aU, 0x9e9eb927U,
- 0xe1e138d9U, 0xf8f813ebU, 0x9898b32bU, 0x11113322U,
- 0x6969bbd2U, 0xd9d970a9U, 0x8e8e8907U, 0x9494a733U,
- 0x9b9bb62dU, 0x1e1e223cU, 0x87879215U, 0xe9e920c9U,
- 0xcece4987U, 0x5555ffaaU, 0x28287850U, 0xdfdf7aa5U,
- 0x8c8c8f03U, 0xa1a1f859U, 0x89898009U, 0x0d0d171aU,
- 0xbfbfda65U, 0xe6e631d7U, 0x4242c684U, 0x6868b8d0U,
- 0x4141c382U, 0x9999b029U, 0x2d2d775aU, 0x0f0f111eU,
- 0xb0b0cb7bU, 0x5454fca8U, 0xbbbbd66dU, 0x16163a2cU,
-};
-static const u32 Te4[256] = {
- 0x63636363U, 0x7c7c7c7cU, 0x77777777U, 0x7b7b7b7bU,
- 0xf2f2f2f2U, 0x6b6b6b6bU, 0x6f6f6f6fU, 0xc5c5c5c5U,
- 0x30303030U, 0x01010101U, 0x67676767U, 0x2b2b2b2bU,
- 0xfefefefeU, 0xd7d7d7d7U, 0xababababU, 0x76767676U,
- 0xcacacacaU, 0x82828282U, 0xc9c9c9c9U, 0x7d7d7d7dU,
- 0xfafafafaU, 0x59595959U, 0x47474747U, 0xf0f0f0f0U,
- 0xadadadadU, 0xd4d4d4d4U, 0xa2a2a2a2U, 0xafafafafU,
- 0x9c9c9c9cU, 0xa4a4a4a4U, 0x72727272U, 0xc0c0c0c0U,
- 0xb7b7b7b7U, 0xfdfdfdfdU, 0x93939393U, 0x26262626U,
- 0x36363636U, 0x3f3f3f3fU, 0xf7f7f7f7U, 0xccccccccU,
- 0x34343434U, 0xa5a5a5a5U, 0xe5e5e5e5U, 0xf1f1f1f1U,
- 0x71717171U, 0xd8d8d8d8U, 0x31313131U, 0x15151515U,
- 0x04040404U, 0xc7c7c7c7U, 0x23232323U, 0xc3c3c3c3U,
- 0x18181818U, 0x96969696U, 0x05050505U, 0x9a9a9a9aU,
- 0x07070707U, 0x12121212U, 0x80808080U, 0xe2e2e2e2U,
- 0xebebebebU, 0x27272727U, 0xb2b2b2b2U, 0x75757575U,
- 0x09090909U, 0x83838383U, 0x2c2c2c2cU, 0x1a1a1a1aU,
- 0x1b1b1b1bU, 0x6e6e6e6eU, 0x5a5a5a5aU, 0xa0a0a0a0U,
- 0x52525252U, 0x3b3b3b3bU, 0xd6d6d6d6U, 0xb3b3b3b3U,
- 0x29292929U, 0xe3e3e3e3U, 0x2f2f2f2fU, 0x84848484U,
- 0x53535353U, 0xd1d1d1d1U, 0x00000000U, 0xededededU,
- 0x20202020U, 0xfcfcfcfcU, 0xb1b1b1b1U, 0x5b5b5b5bU,
- 0x6a6a6a6aU, 0xcbcbcbcbU, 0xbebebebeU, 0x39393939U,
- 0x4a4a4a4aU, 0x4c4c4c4cU, 0x58585858U, 0xcfcfcfcfU,
- 0xd0d0d0d0U, 0xefefefefU, 0xaaaaaaaaU, 0xfbfbfbfbU,
- 0x43434343U, 0x4d4d4d4dU, 0x33333333U, 0x85858585U,
- 0x45454545U, 0xf9f9f9f9U, 0x02020202U, 0x7f7f7f7fU,
- 0x50505050U, 0x3c3c3c3cU, 0x9f9f9f9fU, 0xa8a8a8a8U,
- 0x51515151U, 0xa3a3a3a3U, 0x40404040U, 0x8f8f8f8fU,
- 0x92929292U, 0x9d9d9d9dU, 0x38383838U, 0xf5f5f5f5U,
- 0xbcbcbcbcU, 0xb6b6b6b6U, 0xdadadadaU, 0x21212121U,
- 0x10101010U, 0xffffffffU, 0xf3f3f3f3U, 0xd2d2d2d2U,
- 0xcdcdcdcdU, 0x0c0c0c0cU, 0x13131313U, 0xececececU,
- 0x5f5f5f5fU, 0x97979797U, 0x44444444U, 0x17171717U,
- 0xc4c4c4c4U, 0xa7a7a7a7U, 0x7e7e7e7eU, 0x3d3d3d3dU,
- 0x64646464U, 0x5d5d5d5dU, 0x19191919U, 0x73737373U,
- 0x60606060U, 0x81818181U, 0x4f4f4f4fU, 0xdcdcdcdcU,
- 0x22222222U, 0x2a2a2a2aU, 0x90909090U, 0x88888888U,
- 0x46464646U, 0xeeeeeeeeU, 0xb8b8b8b8U, 0x14141414U,
- 0xdedededeU, 0x5e5e5e5eU, 0x0b0b0b0bU, 0xdbdbdbdbU,
- 0xe0e0e0e0U, 0x32323232U, 0x3a3a3a3aU, 0x0a0a0a0aU,
- 0x49494949U, 0x06060606U, 0x24242424U, 0x5c5c5c5cU,
- 0xc2c2c2c2U, 0xd3d3d3d3U, 0xacacacacU, 0x62626262U,
- 0x91919191U, 0x95959595U, 0xe4e4e4e4U, 0x79797979U,
- 0xe7e7e7e7U, 0xc8c8c8c8U, 0x37373737U, 0x6d6d6d6dU,
- 0x8d8d8d8dU, 0xd5d5d5d5U, 0x4e4e4e4eU, 0xa9a9a9a9U,
- 0x6c6c6c6cU, 0x56565656U, 0xf4f4f4f4U, 0xeaeaeaeaU,
- 0x65656565U, 0x7a7a7a7aU, 0xaeaeaeaeU, 0x08080808U,
- 0xbabababaU, 0x78787878U, 0x25252525U, 0x2e2e2e2eU,
- 0x1c1c1c1cU, 0xa6a6a6a6U, 0xb4b4b4b4U, 0xc6c6c6c6U,
- 0xe8e8e8e8U, 0xddddddddU, 0x74747474U, 0x1f1f1f1fU,
- 0x4b4b4b4bU, 0xbdbdbdbdU, 0x8b8b8b8bU, 0x8a8a8a8aU,
- 0x70707070U, 0x3e3e3e3eU, 0xb5b5b5b5U, 0x66666666U,
- 0x48484848U, 0x03030303U, 0xf6f6f6f6U, 0x0e0e0e0eU,
- 0x61616161U, 0x35353535U, 0x57575757U, 0xb9b9b9b9U,
- 0x86868686U, 0xc1c1c1c1U, 0x1d1d1d1dU, 0x9e9e9e9eU,
- 0xe1e1e1e1U, 0xf8f8f8f8U, 0x98989898U, 0x11111111U,
- 0x69696969U, 0xd9d9d9d9U, 0x8e8e8e8eU, 0x94949494U,
- 0x9b9b9b9bU, 0x1e1e1e1eU, 0x87878787U, 0xe9e9e9e9U,
- 0xcecececeU, 0x55555555U, 0x28282828U, 0xdfdfdfdfU,
- 0x8c8c8c8cU, 0xa1a1a1a1U, 0x89898989U, 0x0d0d0d0dU,
- 0xbfbfbfbfU, 0xe6e6e6e6U, 0x42424242U, 0x68686868U,
- 0x41414141U, 0x99999999U, 0x2d2d2d2dU, 0x0f0f0f0fU,
- 0xb0b0b0b0U, 0x54545454U, 0xbbbbbbbbU, 0x16161616U,
-};
-
-static const u32 rcon[] = {
- 0x01000000, 0x02000000, 0x04000000, 0x08000000,
- 0x10000000, 0x20000000, 0x40000000, 0x80000000,
- 0x1B000000, 0x36000000, /* for 128-bit blocks, Rijndael never uses more than 10 rcon values */
-};
-
-#define SWAP(x) (_lrotl(x, 8) & 0x00ff00ff | _lrotr(x, 8) & 0xff00ff00)
-
-#ifdef _MSC_VER
-#define GETU32(p) SWAP(*((u32 *)(p)))
-#define PUTU32(ct, st) { *((u32 *)(ct)) = SWAP((st)); }
-#else
-#define GETU32(pt) (((u32)(pt)[0] << 24) ^ ((u32)(pt)[1] << 16) ^ ((u32)(pt)[2] << 8) ^ ((u32)(pt)[3]))
-#define PUTU32(ct, st) { (ct)[0] = (u8)((st) >> 24); (ct)[1] = (u8)((st) >> 16); (ct)[2] = (u8)((st) >> 8); (ct)[3] = (u8)(st); }
#endif
-
-/**
- * Expand the cipher key into the encryption key schedule.
- *
- * @return the number of rounds for the given cipher key size.
- */
-static int
-rijndaelKeySetupEnc(u32 rk[/*4*(Nr + 1)*/], const u8 cipherKey[], int keyBits)
-{
- int i = 0;
- u32 temp;
-
- rk[0] = GETU32(cipherKey );
- rk[1] = GETU32(cipherKey + 4);
- rk[2] = GETU32(cipherKey + 8);
- rk[3] = GETU32(cipherKey + 12);
- if (keyBits == 128) {
- for (;;) {
- temp = rk[3];
- rk[4] = rk[0] ^
- (Te4[(temp >> 16) & 0xff] & 0xff000000) ^
- (Te4[(temp >> 8) & 0xff] & 0x00ff0000) ^
- (Te4[(temp ) & 0xff] & 0x0000ff00) ^
- (Te4[(temp >> 24) ] & 0x000000ff) ^
- rcon[i];
- rk[5] = rk[1] ^ rk[4];
- rk[6] = rk[2] ^ rk[5];
- rk[7] = rk[3] ^ rk[6];
- if (++i == 10) {
- return 10;
- }
- rk += 4;
- }
- }
- rk[4] = GETU32(cipherKey + 16);
- rk[5] = GETU32(cipherKey + 20);
- if (keyBits == 192) {
- for (;;) {
- temp = rk[ 5];
- rk[ 6] = rk[ 0] ^
- (Te4[(temp >> 16) & 0xff] & 0xff000000) ^
- (Te4[(temp >> 8) & 0xff] & 0x00ff0000) ^
- (Te4[(temp ) & 0xff] & 0x0000ff00) ^
- (Te4[(temp >> 24) ] & 0x000000ff) ^
- rcon[i];
- rk[ 7] = rk[ 1] ^ rk[ 6];
- rk[ 8] = rk[ 2] ^ rk[ 7];
- rk[ 9] = rk[ 3] ^ rk[ 8];
- if (++i == 8) {
- return 12;
- }
- rk[10] = rk[ 4] ^ rk[ 9];
- rk[11] = rk[ 5] ^ rk[10];
- rk += 6;
- }
- }
- rk[6] = GETU32(cipherKey + 24);
- rk[7] = GETU32(cipherKey + 28);
- if (keyBits == 256) {
- for (;;) {
- temp = rk[ 7];
- rk[ 8] = rk[ 0] ^
- (Te4[(temp >> 16) & 0xff] & 0xff000000) ^
- (Te4[(temp >> 8) & 0xff] & 0x00ff0000) ^
- (Te4[(temp ) & 0xff] & 0x0000ff00) ^
- (Te4[(temp >> 24) ] & 0x000000ff) ^
- rcon[i];
- rk[ 9] = rk[ 1] ^ rk[ 8];
- rk[10] = rk[ 2] ^ rk[ 9];
- rk[11] = rk[ 3] ^ rk[10];
- if (++i == 7) {
- return 14;
- }
- temp = rk[11];
- rk[12] = rk[ 4] ^
- (Te4[(temp >> 24) ] & 0xff000000) ^
- (Te4[(temp >> 16) & 0xff] & 0x00ff0000) ^
- (Te4[(temp >> 8) & 0xff] & 0x0000ff00) ^
- (Te4[(temp ) & 0xff] & 0x000000ff);
- rk[13] = rk[ 5] ^ rk[12];
- rk[14] = rk[ 6] ^ rk[13];
- rk[15] = rk[ 7] ^ rk[14];
-
- rk += 8;
- }
- }
- return 0;
-}
-
-#ifdef USE_RIJNDAEL_COUNTER_OPTIMIZATION
-static void
-rijndaelEncrypt(const u32 rk[/*4*(Nr + 1)*/], int Nr, u32 ctr3, u32 ctr2, u32 ctr1, u32 ctr0, u8 ct[16])
-#else
-static void
-rijndaelEncrypt(const u32 rk[/*4*(Nr + 1)*/], int Nr, const u8 pt[16], u8 ct[16])
-#endif
-{
- u32 s0, s1, s2, s3, t0, t1, t2, t3;
-#ifndef FULL_UNROLL
- int r;
-#endif /* ?FULL_UNROLL */
-
- /*
- * map byte array block to cipher state
- * and add initial round key:
- */
-#ifdef USE_RIJNDAEL_COUNTER_OPTIMIZATION
- s0 = ctr3 ^ rk[0];
- s1 = ctr2 ^ rk[1];
- s2 = ctr1 ^ rk[2];
- s3 = ctr0 ^ rk[3];
-#else
- s0 = GETU32(pt ) ^ rk[0];
- s1 = GETU32(pt + 4) ^ rk[1];
- s2 = GETU32(pt + 8) ^ rk[2];
- s3 = GETU32(pt + 12) ^ rk[3];
-#endif
-
-#ifdef FULL_UNROLL
- /* round 1: */
- t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[ 4];
- t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[ 5];
- t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[ 6];
- t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[ 7];
- /* round 2: */
- s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >> 8) & 0xff] ^ Te3[t3 & 0xff] ^ rk[ 8];
- s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >> 8) & 0xff] ^ Te3[t0 & 0xff] ^ rk[ 9];
- s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >> 8) & 0xff] ^ Te3[t1 & 0xff] ^ rk[10];
- s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] ^ Te3[t2 & 0xff] ^ rk[11];
- /* round 3: */
- t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[12];
- t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[13];
- t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[14];
- t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[15];
- /* round 4: */
- s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >> 8) & 0xff] ^ Te3[t3 & 0xff] ^ rk[16];
- s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >> 8) & 0xff] ^ Te3[t0 & 0xff] ^ rk[17];
- s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >> 8) & 0xff] ^ Te3[t1 & 0xff] ^ rk[18];
- s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] ^ Te3[t2 & 0xff] ^ rk[19];
- /* round 5: */
- t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[20];
- t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[21];
- t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[22];
- t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[23];
- /* round 6: */
- s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >> 8) & 0xff] ^ Te3[t3 & 0xff] ^ rk[24];
- s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >> 8) & 0xff] ^ Te3[t0 & 0xff] ^ rk[25];
- s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >> 8) & 0xff] ^ Te3[t1 & 0xff] ^ rk[26];
- s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] ^ Te3[t2 & 0xff] ^ rk[27];
- /* round 7: */
- t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[28];
- t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[29];
- t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[30];
- t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[31];
- /* round 8: */
- s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >> 8) & 0xff] ^ Te3[t3 & 0xff] ^ rk[32];
- s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >> 8) & 0xff] ^ Te3[t0 & 0xff] ^ rk[33];
- s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >> 8) & 0xff] ^ Te3[t1 & 0xff] ^ rk[34];
- s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] ^ Te3[t2 & 0xff] ^ rk[35];
- /* round 9: */
- t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[36];
- t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[37];
- t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[38];
- t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[39];
- if (Nr > 10) {
- /* round 10: */
- s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >> 8) & 0xff] ^ Te3[t3 & 0xff] ^ rk[40];
- s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >> 8) & 0xff] ^ Te3[t0 & 0xff] ^ rk[41];
- s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >> 8) & 0xff] ^ Te3[t1 & 0xff] ^ rk[42];
- s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] ^ Te3[t2 & 0xff] ^ rk[43];
- /* round 11: */
- t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[44];
- t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[45];
- t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[46];
- t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[47];
- if (Nr > 12) {
- /* round 12: */
- s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >> 8) & 0xff] ^ Te3[t3 & 0xff] ^ rk[48];
- s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >> 8) & 0xff] ^ Te3[t0 & 0xff] ^ rk[49];
- s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >> 8) & 0xff] ^ Te3[t1 & 0xff] ^ rk[50];
- s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] ^ Te3[t2 & 0xff] ^ rk[51];
- /* round 13: */
- t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[52];
- t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[53];
- t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[54];
- t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[55];
- }
- }
- rk += Nr << 2;
-#else /* !FULL_UNROLL */
- /*
- * Nr - 1 full rounds:
- */
- r = Nr >> 1;
- for (;;) {
- t0 =
- Te0[(s0 >> 24) ] ^
- Te1[(s1 >> 16) & 0xff] ^
- Te2[(s2 >> 8) & 0xff] ^
- Te3[(s3 ) & 0xff] ^
- rk[4];
- t1 =
- Te0[(s1 >> 24) ] ^
- Te1[(s2 >> 16) & 0xff] ^
- Te2[(s3 >> 8) & 0xff] ^
- Te3[(s0 ) & 0xff] ^
- rk[5];
- t2 =
- Te0[(s2 >> 24) ] ^
- Te1[(s3 >> 16) & 0xff] ^
- Te2[(s0 >> 8) & 0xff] ^
- Te3[(s1 ) & 0xff] ^
- rk[6];
- t3 =
- Te0[(s3 >> 24) ] ^
- Te1[(s0 >> 16) & 0xff] ^
- Te2[(s1 >> 8) & 0xff] ^
- Te3[(s2 ) & 0xff] ^
- rk[7];
-
- rk += 8;
- if (--r == 0) {
- break;
- }
-
- s0 =
- Te0[(t0 >> 24) ] ^
- Te1[(t1 >> 16) & 0xff] ^
- Te2[(t2 >> 8) & 0xff] ^
- Te3[(t3 ) & 0xff] ^
- rk[0];
- s1 =
- Te0[(t1 >> 24) ] ^
- Te1[(t2 >> 16) & 0xff] ^
- Te2[(t3 >> 8) & 0xff] ^
- Te3[(t0 ) & 0xff] ^
- rk[1];
- s2 =
- Te0[(t2 >> 24) ] ^
- Te1[(t3 >> 16) & 0xff] ^
- Te2[(t0 >> 8) & 0xff] ^
- Te3[(t1 ) & 0xff] ^
- rk[2];
- s3 =
- Te0[(t3 >> 24) ] ^
- Te1[(t0 >> 16) & 0xff] ^
- Te2[(t1 >> 8) & 0xff] ^
- Te3[(t2 ) & 0xff] ^
- rk[3];
- }
-#endif /* ?FULL_UNROLL */
- /*
- * apply last round and
- * map cipher state to byte array block:
- */
- s0 =
- (Te4[(t0 >> 24) ] & 0xff000000) ^
- (Te4[(t1 >> 16) & 0xff] & 0x00ff0000) ^
- (Te4[(t2 >> 8) & 0xff] & 0x0000ff00) ^
- (Te4[(t3 ) & 0xff] & 0x000000ff) ^
- rk[0];
- PUTU32(ct , s0);
- s1 =
- (Te4[(t1 >> 24) ] & 0xff000000) ^
- (Te4[(t2 >> 16) & 0xff] & 0x00ff0000) ^
- (Te4[(t3 >> 8) & 0xff] & 0x0000ff00) ^
- (Te4[(t0 ) & 0xff] & 0x000000ff) ^
- rk[1];
- PUTU32(ct + 4, s1);
- s2 =
- (Te4[(t2 >> 24) ] & 0xff000000) ^
- (Te4[(t3 >> 16) & 0xff] & 0x00ff0000) ^
- (Te4[(t0 >> 8) & 0xff] & 0x0000ff00) ^
- (Te4[(t1 ) & 0xff] & 0x000000ff) ^
- rk[2];
- PUTU32(ct + 8, s2);
- s3 =
- (Te4[(t3 >> 24) ] & 0xff000000) ^
- (Te4[(t0 >> 16) & 0xff] & 0x00ff0000) ^
- (Te4[(t1 >> 8) & 0xff] & 0x0000ff00) ^
- (Te4[(t2 ) & 0xff] & 0x000000ff) ^
- rk[3];
- PUTU32(ct + 12, s3);
-}
-#endif
-
-#ifdef AES_BENCHMARK
-int
-main(int c, char **v)
-{
- int i;
- char blob[509]; /* the size of a cell payload. */
- char blob_out[509];
- aes_cnt_cipher_t *cipher = aes_new_cipher();
- aes_set_key(cipher, "aesbenchmarkkey!", 128);
- memset(blob, 'z', sizeof(blob));
-
- for (i=0;i<1000000; ++i) {
- aes_crypt(cipher, blob, sizeof(blob), blob_out);
- }
- return 0;
}
-#endif
diff --git a/src/common/aes.h b/src/common/aes.h
index eb633dbcc..221e84615 100644
--- a/src/common/aes.h
+++ b/src/common/aes.h
@@ -13,8 +13,6 @@
* \brief Headers for aes.c
*/
-#include "torint.h"
-
struct aes_cnt_cipher;
typedef struct aes_cnt_cipher aes_cnt_cipher_t;
@@ -26,5 +24,7 @@ void aes_crypt(aes_cnt_cipher_t *cipher, const char *input, size_t len,
void aes_crypt_inplace(aes_cnt_cipher_t *cipher, char *data, size_t len);
void aes_set_iv(aes_cnt_cipher_t *cipher, const char *iv);
+int evaluate_evp_for_aes(int force_value);
+
#endif
diff --git a/src/common/compat.c b/src/common/compat.c
index 330c43228..ea95f9f08 100644
--- a/src/common/compat.c
+++ b/src/common/compat.c
@@ -58,6 +58,14 @@
#endif
#endif
+/* Includes for the process attaching prevention */
+#if defined(HAVE_SYS_PRCTL_H) && defined(__linux__)
+#include <sys/prctl.h>
+#elif defined(__APPLE__)
+#include <sys/types.h>
+#include <sys/ptrace.h>
+#endif
+
#ifdef HAVE_NETDB_H
#include <netdb.h>
#endif
@@ -1519,6 +1527,57 @@ switch_id(const char *user)
#endif
}
+/* We only use the linux prctl for now. There is no Win32 support; this may
+ * also work on various BSD systems and Mac OS X - send testing feedback!
+ *
+ * On recent Gnu/Linux kernels it is possible to create a system-wide policy
+ * that will prevent non-root processes from attaching to other processes
+ * unless they are the parent process; thus gdb can attach to programs that
+ * they execute but they cannot attach to other processes running as the same
+ * user. The system wide policy may be set with the sysctl
+ * kernel.yama.ptrace_scope or by inspecting
+ * /proc/sys/kernel/yama/ptrace_scope and it is 1 by default on Ubuntu 11.04.
+ *
+ * This ptrace scope will be ignored on Gnu/Linux for users with
+ * CAP_SYS_PTRACE and so it is very likely that root will still be able to
+ * attach to the Tor process.
+ */
+/** Attempt to disable debugger attachment: return 0 on success, -1 on
+ * failure. */
+int
+tor_disable_debugger_attach(void)
+{
+ int r, attempted;
+ r = -1;
+ attempted = 0;
+ log_debug(LD_CONFIG,
+ "Attemping to disable debugger attachment to Tor for "
+ "unprivileged users.");
+#if defined(__linux__) && defined(HAVE_SYS_PRCTL_H) && defined(HAVE_PRCTL)
+#ifdef PR_SET_DUMPABLE
+ attempted = 1;
+ r = prctl(PR_SET_DUMPABLE, 0);
+#endif
+#endif
+#if defined(__APPLE__) && defined(PT_DENY_ATTACH)
+ if (r < 0) {
+ attempted = 1;
+ r = ptrace(PT_DENY_ATTACH, 0, 0, 0);
+ }
+#endif
+
+ // XXX: TODO - Mac OS X has dtrace and this may be disabled.
+ // XXX: TODO - Windows probably has something similar
+ if (r == 0) {
+ log_debug(LD_CONFIG,"Debugger attachment disabled for "
+ "unprivileged users.");
+ } else if (attempted) {
+ log_warn(LD_CONFIG, "Unable to disable ptrace attach: %s",
+ strerror(errno));
+ }
+ return r;
+}
+
#ifdef HAVE_PWD_H
/** Allocate and return a string containing the home directory for the
* user <b>username</b>. Only works on posix-like systems. */
@@ -1632,7 +1691,7 @@ tor_inet_ntop(int af, const void *src, char *dst, size_t len)
addr->s6_addr[12], addr->s6_addr[13],
addr->s6_addr[14], addr->s6_addr[15]);
}
- if (strlen(buf) > len)
+ if ((strlen(buf) + 1) > len) /* +1 for \0 */
return NULL;
strlcpy(dst, buf, len);
return dst;
@@ -1673,7 +1732,7 @@ tor_inet_ntop(int af, const void *src, char *dst, size_t len)
}
}
*cp = '\0';
- if (strlen(buf) > len)
+ if ((strlen(buf) + 1) > len) /* +1 for \0 */
return NULL;
strlcpy(dst, buf, len);
return dst;
@@ -1733,24 +1792,30 @@ tor_inet_pton(int af, const char *src, void *dst)
return 0;
if (TOR_ISXDIGIT(*src)) {
char *next;
+ ssize_t len;
long r = strtol(src, &next, 16);
- if (next > 4+src)
- return 0;
- if (next == src)
- return 0;
- if (r<0 || r>65536)
+ tor_assert(next != NULL);
+ tor_assert(next != src);
+
+ len = *next == '\0' ? eow - src : next - src;
+ if (len > 4)
return 0;
+ if (len > 1 && !TOR_ISXDIGIT(src[1]))
+ return 0; /* 0x is not valid */
+ tor_assert(r >= 0);
+ tor_assert(r < 65536);
words[i++] = (uint16_t)r;
setWords++;
src = next;
if (*src != ':' && src != eow)
return 0;
++src;
- } else if (*src == ':' && i > 0 && gapPos==-1) {
+ } else if (*src == ':' && i > 0 && gapPos == -1) {
gapPos = i;
++src;
- } else if (*src == ':' && i == 0 && src[1] == ':' && gapPos==-1) {
+ } else if (*src == ':' && i == 0 && src+1 < eow && src[1] == ':' &&
+ gapPos == -1) {
gapPos = i;
src += 2;
} else {
@@ -1861,6 +1926,7 @@ get_uname(void)
static struct {
unsigned major; unsigned minor; const char *version;
} win_version_table[] = {
+ { 6, 2, "Windows 8" },
{ 6, 1, "Windows 7" },
{ 6, 0, "Windows Vista" },
{ 5, 2, "Windows Server 2003" },
@@ -1917,7 +1983,7 @@ get_uname(void)
plat, extra);
} else {
if (info.dwMajorVersion > 6 ||
- (info.dwMajorVersion==6 && info.dwMinorVersion>1))
+ (info.dwMajorVersion==6 && info.dwMinorVersion>2))
tor_snprintf(uname_result, sizeof(uname_result),
"Very recent version of Windows [major=%d,minor=%d] %s",
(int)info.dwMajorVersion,(int)info.dwMinorVersion,
diff --git a/src/common/compat.h b/src/common/compat.h
index 8e271ba90..db541623d 100644
--- a/src/common/compat.h
+++ b/src/common/compat.h
@@ -45,9 +45,6 @@
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
-#ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
#ifdef HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif
@@ -138,7 +135,6 @@ extern INLINE double U64_TO_DBL(uint64_t x) {
/* GCC has several useful attributes. */
#if defined(__GNUC__) && __GNUC__ >= 3
#define ATTR_NORETURN __attribute__((noreturn))
-#define ATTR_PURE __attribute__((pure))
#define ATTR_CONST __attribute__((const))
#define ATTR_MALLOC __attribute__((malloc))
#define ATTR_NORETURN __attribute__((noreturn))
@@ -171,7 +167,6 @@ extern INLINE double U64_TO_DBL(uint64_t x) {
#define PREDICT_UNLIKELY(exp) __builtin_expect(!!(exp), 0)
#else
#define ATTR_NORETURN
-#define ATTR_PURE
#define ATTR_CONST
#define ATTR_MALLOC
#define ATTR_NORETURN
@@ -183,6 +178,10 @@ extern INLINE double U64_TO_DBL(uint64_t x) {
/** Expands to a syntactically valid empty statement. */
#define STMT_NIL (void)0
+/** Expands to a syntactically valid empty statement, explicitly (void)ing its
+ * argument. */
+#define STMT_VOID(a) while (0) { (void)(a); }
+
#ifdef __GNUC__
/** STMT_BEGIN and STMT_END are used to wrap blocks inside macros so that
* the macro can be used as if it were a single C statement. */
@@ -270,9 +269,9 @@ int tor_asprintf(char **strp, const char *fmt, ...)
int tor_vasprintf(char **strp, const char *fmt, va_list args);
const void *tor_memmem(const void *haystack, size_t hlen, const void *needle,
- size_t nlen) ATTR_PURE ATTR_NONNULL((1,3));
+ size_t nlen) ATTR_NONNULL((1,3));
static const void *tor_memstr(const void *haystack, size_t hlen,
- const char *needle) ATTR_PURE ATTR_NONNULL((1,3));
+ const char *needle) ATTR_NONNULL((1,3));
static INLINE const void *
tor_memstr(const void *haystack, size_t hlen, const char *needle)
{
@@ -545,9 +544,9 @@ long tor_weak_random(void);
/* ===== OS compatibility */
const char *get_uname(void);
-uint16_t get_uint16(const void *cp) ATTR_PURE ATTR_NONNULL((1));
-uint32_t get_uint32(const void *cp) ATTR_PURE ATTR_NONNULL((1));
-uint64_t get_uint64(const void *cp) ATTR_PURE ATTR_NONNULL((1));
+uint16_t get_uint16(const void *cp) ATTR_NONNULL((1));
+uint32_t get_uint32(const void *cp) ATTR_NONNULL((1));
+uint64_t get_uint64(const void *cp) ATTR_NONNULL((1));
void set_uint16(void *cp, uint16_t v) ATTR_NONNULL((1));
void set_uint32(void *cp, uint32_t v) ATTR_NONNULL((1));
void set_uint64(void *cp, uint64_t v) ATTR_NONNULL((1));
@@ -565,6 +564,7 @@ set_uint8(void *cp, uint8_t v)
typedef unsigned long rlim_t;
#endif
int set_max_file_descriptors(rlim_t limit, int *max);
+int tor_disable_debugger_attach(void);
int switch_id(const char *user);
#ifdef HAVE_PWD_H
char *get_user_homedir(const char *username);
@@ -621,7 +621,7 @@ void tor_threads_init(void);
#else
#define tor_mutex_new() ((tor_mutex_t*)tor_malloc(sizeof(int)))
#define tor_mutex_init(m) STMT_NIL
-#define tor_mutex_acquire(m) STMT_NIL
+#define tor_mutex_acquire(m) STMT_VOID(m)
#define tor_mutex_release(m) STMT_NIL
#define tor_mutex_free(m) STMT_BEGIN tor_free(m); STMT_END
#define tor_mutex_uninit(m) STMT_NIL
diff --git a/src/common/compat_libevent.c b/src/common/compat_libevent.c
index beae9502d..67f465927 100644
--- a/src/common/compat_libevent.c
+++ b/src/common/compat_libevent.c
@@ -169,6 +169,7 @@ struct event_base *the_event_base = NULL;
#ifdef USE_BUFFEREVENTS
static int using_iocp_bufferevents = 0;
+static void tor_libevent_set_tick_timeout(int msec_per_tick);
int
tor_libevent_using_iocp_bufferevents(void)
@@ -194,16 +195,33 @@ tor_libevent_initialize(tor_libevent_cfg *torcfg)
#ifdef HAVE_EVENT2_EVENT_H
{
- struct event_config *cfg = event_config_new();
+ int attempts = 0;
+ int using_threads;
+ struct event_config *cfg;
+
+ retry:
+ ++attempts;
+ using_threads = 0;
+ cfg = event_config_new();
+ tor_assert(cfg);
#if defined(MS_WINDOWS) && defined(USE_BUFFEREVENTS)
if (! torcfg->disable_iocp) {
evthread_use_windows_threads();
event_config_set_flag(cfg, EVENT_BASE_FLAG_STARTUP_IOCP);
using_iocp_bufferevents = 1;
+ using_threads = 1;
+ } else {
+ using_iocp_bufferevents = 0;
}
#endif
+ if (!using_threads) {
+ /* Telling Libevent not to try to turn locking on can avoid a needless
+ * socketpair() attempt. */
+ event_config_set_flag(cfg, EVENT_BASE_FLAG_NOLOCK);
+ }
+
#if defined(LIBEVENT_VERSION_NUMBER) && LIBEVENT_VERSION_NUMBER >= V(2,0,7)
if (torcfg->num_cpus > 0)
event_config_set_num_cpus_hint(cfg, torcfg->num_cpus);
@@ -218,11 +236,34 @@ tor_libevent_initialize(tor_libevent_cfg *torcfg)
the_event_base = event_base_new_with_config(cfg);
event_config_free(cfg);
+
+ if (using_threads && the_event_base == NULL && attempts < 2) {
+ /* This could be a socketpair() failure, which can happen sometimes on
+ * windows boxes with obnoxious firewall rules. Downgrade and try
+ * again. */
+#if defined(MS_WINDOWS) && defined(USE_BUFFEREVENTS)
+ if (torcfg->disable_iocp == 0) {
+ log_warn(LD_GENERAL, "Unable to initialize Libevent. Trying again "
+ "with IOCP disabled.");
+ } else
+#endif
+ {
+ log_warn(LD_GENERAL, "Unable to initialize Libevent. Trying again.");
+ }
+
+ torcfg->disable_iocp = 1;
+ goto retry;
+ }
}
#else
the_event_base = event_init();
#endif
+ if (!the_event_base) {
+ log_err(LD_GENERAL, "Unable to initialize Libevent: cannot continue.");
+ exit(1);
+ }
+
#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. */
@@ -236,6 +277,10 @@ tor_libevent_initialize(tor_libevent_cfg *torcfg)
"You have a *VERY* old version of libevent. It is likely to be buggy; "
"please build Tor with a more recent version.");
#endif
+
+#ifdef USE_BUFFEREVENTS
+ tor_libevent_set_tick_timeout(torcfg->msec_per_tick);
+#endif
}
/** Return the current Libevent event base that we're set up to use. */
@@ -513,6 +558,60 @@ tor_check_libevent_header_compatibility(void)
#endif
}
+struct tor_libevent_action_t {
+ struct event *ev;
+ void (*cb)(void *arg);
+ void *arg;
+};
+
+/** Callback for tor_run_in_libevent_loop */
+static void
+run_runnable_cb(evutil_socket_t s, short what, void *arg)
+{
+ tor_libevent_action_t *r = arg;
+ void (*cb)(void *) = r->cb;
+ void *cb_arg = r->arg;
+ (void)what;
+ (void)s;
+ tor_event_free(r->ev);
+ tor_free(r);
+
+ cb(cb_arg);
+}
+
+/** Cause cb(arg) to run later on this iteration of the libevent loop, or in
+ * the next iteration of the libevent loop. This is useful for when you're
+ * deep inside a no-reentrant code and there's some function you want to call
+ * without worrying about whether it might cause reeentrant invocation.
+ */
+tor_libevent_action_t *
+tor_run_in_libevent_loop(void (*cb)(void *arg), void *arg)
+{
+ tor_libevent_action_t *r = tor_malloc(sizeof(tor_libevent_action_t));
+ r->cb = cb;
+ r->arg = arg;
+ r->ev = tor_event_new(tor_libevent_get_base(), -1, EV_TIMEOUT,
+ run_runnable_cb, r);
+ if (!r->ev) {
+ tor_free(r);
+ return NULL;
+ }
+ /* Make the event active immediately. */
+ event_active(r->ev, EV_TIMEOUT, 1);
+
+ return r;
+}
+
+/**
+ * Cancel <b>action</b> without running it.
+ */
+void
+tor_cancel_libevent_action(tor_libevent_action_t *action)
+{
+ tor_event_free(action->ev);
+ tor_free(action);
+}
+
/*
If possible, we're going to try to use Libevent's periodic timer support,
since it does a pretty good job of making sure that periodic events get
@@ -598,26 +697,29 @@ static const struct timeval *one_tick = NULL;
/**
* Return a special timeout to be passed whenever libevent's O(1) timeout
* implementation should be used. Only use this when the timer is supposed
- * to fire after 1 / TOR_LIBEVENT_TICKS_PER_SECOND seconds have passed.
+ * to fire after msec_per_tick ticks have elapsed.
*/
const struct timeval *
tor_libevent_get_one_tick_timeout(void)
{
- if (PREDICT_UNLIKELY(one_tick == NULL)) {
- struct event_base *base = tor_libevent_get_base();
- struct timeval tv;
- if (TOR_LIBEVENT_TICKS_PER_SECOND == 1) {
- tv.tv_sec = 1;
- tv.tv_usec = 0;
- } else {
- tv.tv_sec = 0;
- tv.tv_usec = 1000000 / TOR_LIBEVENT_TICKS_PER_SECOND;
- }
- one_tick = event_base_init_common_timeout(base, &tv);
- }
+ tor_assert(one_tick);
return one_tick;
}
+/** Initialize the common timeout that we'll use to refill the buckets every
+ * time a tick elapses. */
+static void
+tor_libevent_set_tick_timeout(int msec_per_tick)
+{
+ struct event_base *base = tor_libevent_get_base();
+ struct timeval tv;
+
+ tor_assert(! one_tick);
+ tv.tv_sec = msec_per_tick / 1000;
+ tv.tv_usec = (msec_per_tick % 1000) * 1000;
+ one_tick = event_base_init_common_timeout(base, &tv);
+}
+
static struct bufferevent *
tor_get_root_bufferevent(struct bufferevent *bev)
{
diff --git a/src/common/compat_libevent.h b/src/common/compat_libevent.h
index 15b0fc273..4076cc0e0 100644
--- a/src/common/compat_libevent.h
+++ b/src/common/compat_libevent.h
@@ -44,8 +44,12 @@ void tor_event_free(struct event *ev);
#define tor_evdns_add_server_port evdns_add_server_port
#endif
-typedef struct periodic_timer_t periodic_timer_t;
+typedef struct tor_libevent_action_t tor_libevent_action_t;
+tor_libevent_action_t *tor_run_in_libevent_loop(void (*cb)(void *arg),
+ void *arg);
+void tor_cancel_libevent_action(tor_libevent_action_t *action);
+typedef struct periodic_timer_t periodic_timer_t;
periodic_timer_t *periodic_timer_new(struct event_base *base,
const struct timeval *tv,
void (*cb)(periodic_timer_t *timer, void *data),
@@ -62,6 +66,7 @@ int tor_event_base_loopexit(struct event_base *base, struct timeval *tv);
typedef struct tor_libevent_cfg {
int disable_iocp;
int num_cpus;
+ int msec_per_tick;
} tor_libevent_cfg;
void tor_libevent_initialize(tor_libevent_cfg *cfg);
@@ -73,7 +78,6 @@ void tor_check_libevent_header_compatibility(void);
const char *tor_libevent_get_version_str(void);
#ifdef USE_BUFFEREVENTS
-#define TOR_LIBEVENT_TICKS_PER_SECOND 3
const struct timeval *tor_libevent_get_one_tick_timeout(void);
int tor_libevent_using_iocp_bufferevents(void);
int tor_set_bufferevent_rate_limit(struct bufferevent *bev,
diff --git a/src/common/container.c b/src/common/container.c
index 92bfd2ec8..31cc6c5a6 100644
--- a/src/common/container.c
+++ b/src/common/container.c
@@ -62,13 +62,22 @@ smartlist_clear(smartlist_t *sl)
static INLINE void
smartlist_ensure_capacity(smartlist_t *sl, int size)
{
+#if SIZEOF_SIZE_T > SIZEOF_INT
+#define MAX_CAPACITY (INT_MAX)
+#else
+#define MAX_CAPACITY (int)((SIZE_MAX / (sizeof(void*))))
+#endif
if (size > sl->capacity) {
- int higher = sl->capacity * 2;
- while (size > higher)
- higher *= 2;
- tor_assert(higher > 0); /* detect overflow */
+ int higher = sl->capacity;
+ if (PREDICT_UNLIKELY(size > MAX_CAPACITY/2)) {
+ tor_assert(size <= MAX_CAPACITY);
+ higher = MAX_CAPACITY;
+ } else {
+ while (size > higher)
+ higher *= 2;
+ }
sl->capacity = higher;
- sl->list = tor_realloc(sl->list, sizeof(void*)*sl->capacity);
+ sl->list = tor_realloc(sl->list, sizeof(void*)*((size_t)sl->capacity));
}
}
diff --git a/src/common/container.h b/src/common/container.h
index 4a6eba789..fe071cc1b 100644
--- a/src/common/container.h
+++ b/src/common/container.h
@@ -35,19 +35,14 @@ void smartlist_remove(smartlist_t *sl, const void *element);
void *smartlist_pop_last(smartlist_t *sl);
void smartlist_reverse(smartlist_t *sl);
void smartlist_string_remove(smartlist_t *sl, const char *element);
-int smartlist_isin(const smartlist_t *sl, const void *element) ATTR_PURE;
-int smartlist_string_isin(const smartlist_t *sl, const char *element)
- ATTR_PURE;
-int smartlist_string_pos(const smartlist_t *, const char *elt) ATTR_PURE;
-int smartlist_string_isin_case(const smartlist_t *sl, const char *element)
- ATTR_PURE;
-int smartlist_string_num_isin(const smartlist_t *sl, int num) ATTR_PURE;
-int smartlist_strings_eq(const smartlist_t *sl1, const smartlist_t *sl2)
- ATTR_PURE;
-int smartlist_digest_isin(const smartlist_t *sl, const char *element)
- ATTR_PURE;
-int smartlist_overlap(const smartlist_t *sl1, const smartlist_t *sl2)
- ATTR_PURE;
+int smartlist_isin(const smartlist_t *sl, const void *element);
+int smartlist_string_isin(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_strings_eq(const smartlist_t *sl1, const smartlist_t *sl2);
+int smartlist_digest_isin(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);
@@ -55,14 +50,14 @@ void smartlist_subtract(smartlist_t *sl1, const smartlist_t *sl2);
#ifdef DEBUG_SMARTLIST
/** Return the number of items in sl.
*/
-static INLINE int smartlist_len(const smartlist_t *sl) ATTR_PURE;
+static INLINE int smartlist_len(const smartlist_t *sl);
static INLINE int smartlist_len(const smartlist_t *sl) {
tor_assert(sl);
return (sl)->num_used;
}
/** Return the <b>idx</b>th element of sl.
*/
-static INLINE void *smartlist_get(const smartlist_t *sl, int idx) ATTR_PURE;
+static INLINE void *smartlist_get(const smartlist_t *sl, int idx);
static INLINE void *smartlist_get(const smartlist_t *sl, int idx) {
tor_assert(sl);
tor_assert(idx>=0);
@@ -114,8 +109,7 @@ void smartlist_uniq_strings(smartlist_t *sl);
void smartlist_uniq_digests(smartlist_t *sl);
void smartlist_uniq_digests256(smartlist_t *sl);
void *smartlist_bsearch(smartlist_t *sl, const void *key,
- int (*compare)(const void *key, const void **member))
- ATTR_PURE;
+ int (*compare)(const void *key, const void **member));
int smartlist_bsearch_idx(const smartlist_t *sl, const void *key,
int (*compare)(const void *key, const void **member),
int *found_out);
diff --git a/src/common/crypto.c b/src/common/crypto.c
index 9ad7575a7..62b0bcec6 100644
--- a/src/common/crypto.c
+++ b/src/common/crypto.c
@@ -64,8 +64,6 @@
#error "We require OpenSSL >= 0.9.7"
#endif
-#include <openssl/engine.h>
-
#ifdef ANDROID
/* Android's OpenSSL seems to have removed all of its Engine support. */
#define DISABLE_ENGINES
@@ -278,6 +276,9 @@ crypto_global_init(int useAccel, const char *accelName, const char *accelDir)
} else {
log_info(LD_CRYPTO, "NOT using OpenSSL engine support.");
}
+
+ evaluate_evp_for_aes(-1);
+
return crypto_seed_rng(1);
}
return 0;
@@ -290,37 +291,6 @@ crypto_thread_cleanup(void)
ERR_remove_state(0);
}
-/** Uninitialize the crypto library. Return 0 on success, -1 on failure.
- */
-int
-crypto_global_cleanup(void)
-{
- EVP_cleanup();
- ERR_remove_state(0);
- ERR_free_strings();
-
-#ifndef DISABLE_ENGINES
- ENGINE_cleanup();
-#endif
-
- CONF_modules_unload(1);
- CRYPTO_cleanup_all_ex_data();
-#ifdef TOR_IS_MULTITHREADED
- if (_n_openssl_mutexes) {
- int n = _n_openssl_mutexes;
- tor_mutex_t **ms = _openssl_mutexes;
- int i;
- _openssl_mutexes = NULL;
- _n_openssl_mutexes = 0;
- for (i=0;i<n;++i) {
- tor_mutex_free(ms[i]);
- }
- tor_free(ms);
- }
-#endif
- return 0;
-}
-
/** used by tortls.c: wrap an RSA* in a crypto_pk_env_t. */
crypto_pk_env_t *
_crypto_new_pk_env_rsa(RSA *rsa)
@@ -1206,9 +1176,6 @@ crypto_pk_asn1_decode(const char *str, size_t len)
{
RSA *rsa;
unsigned char *buf;
- /* This ifdef suppresses a type warning. Take out the first case once
- * everybody is using OpenSSL 0.9.7 or later.
- */
const unsigned char *cp;
cp = buf = tor_malloc(len);
memcpy(buf,str,len);
@@ -1249,6 +1216,32 @@ crypto_pk_get_digest(crypto_pk_env_t *pk, char *digest_out)
return 0;
}
+/** Compute all digests of the DER encoding of <b>pk</b>, and store them
+ * in <b>digests_out</b>. Return 0 on success, -1 on failure. */
+int
+crypto_pk_get_all_digests(crypto_pk_env_t *pk, digests_t *digests_out)
+{
+ unsigned char *buf, *bufp;
+ int len;
+
+ len = i2d_RSAPublicKey(pk->key, NULL);
+ if (len < 0)
+ return -1;
+ buf = bufp = tor_malloc(len+1);
+ len = i2d_RSAPublicKey(pk->key, &bufp);
+ if (len < 0) {
+ crypto_log_errors(LOG_WARN,"encoding public key");
+ tor_free(buf);
+ return -1;
+ }
+ if (crypto_digest_all(digests_out, (char*)buf, len) < 0) {
+ tor_free(buf);
+ return -1;
+ }
+ tor_free(buf);
+ return 0;
+}
+
/** Copy <b>in</b> to the <b>outlen</b>-byte buffer <b>out</b>, adding spaces
* every four spaces. */
/* static */ void
@@ -1667,6 +1660,10 @@ crypto_digest_get_digest(crypto_digest_env_t *digest,
SHA256_Final(r, &tmpenv.d.sha2);
break;
default:
+ log_warn(LD_BUG, "Called with unknown algorithm %d", digest->algorithm);
+ /* If fragile_assert is not enabled, then we should at least not
+ * leak anything. */
+ memset(r, 0xff, sizeof(r));
tor_fragile_assert();
break;
}
@@ -1714,8 +1711,79 @@ crypto_hmac_sha1(char *hmac_out,
(unsigned char*)hmac_out, NULL);
}
+/** Compute the HMAC-SHA-256 of the <b>msg_len</b> bytes in <b>msg</b>, using
+ * the <b>key</b> of length <b>key_len</b>. Store the DIGEST_LEN-byte result
+ * in <b>hmac_out</b>.
+ */
+void
+crypto_hmac_sha256(char *hmac_out,
+ const char *key, size_t key_len,
+ const char *msg, size_t msg_len)
+{
+#if (OPENSSL_VERSION_NUMBER >= 0x00908000l)
+ /* If we've got OpenSSL >=0.9.8 we can use its hmac implementation. */
+ tor_assert(key_len < INT_MAX);
+ tor_assert(msg_len < INT_MAX);
+ HMAC(EVP_sha256(), key, (int)key_len, (unsigned char*)msg, (int)msg_len,
+ (unsigned char*)hmac_out, NULL);
+#else
+ /* OpenSSL doesn't have an EVP implementation for SHA256. We'll need
+ to do HMAC on our own.
+
+ HMAC isn't so hard: To compute HMAC(key, msg):
+ 1. If len(key) > blocksize, key = H(key).
+ 2. If len(key) < blocksize, right-pad key up to blocksize with 0 bytes.
+ 3. let ipad = key xor 0x363636363636....36
+ let opad = key xor 0x5c5c5c5c5c5c....5c
+ The result is H(opad | H( ipad | msg ) )
+ */
+#define BLOCKSIZE 64
+#define DIGESTSIZE 32
+ uint8_t k[BLOCKSIZE];
+ uint8_t pad[BLOCKSIZE];
+ uint8_t d[DIGESTSIZE];
+ int i;
+ SHA256_CTX st;
+
+ tor_assert(key_len < INT_MAX);
+ tor_assert(msg_len < INT_MAX);
+
+ if (key_len <= BLOCKSIZE) {
+ memset(k, 0, sizeof(k));
+ memcpy(k, key, key_len); /* not time invariant in key_len */
+ } else {
+ SHA256((const uint8_t *)key, key_len, k);
+ memset(k+DIGESTSIZE, 0, sizeof(k)-DIGESTSIZE);
+ }
+ for (i = 0; i < BLOCKSIZE; ++i)
+ pad[i] = k[i] ^ 0x36;
+ SHA256_Init(&st);
+ SHA256_Update(&st, pad, BLOCKSIZE);
+ SHA256_Update(&st, (uint8_t*)msg, msg_len);
+ SHA256_Final(d, &st);
+
+ for (i = 0; i < BLOCKSIZE; ++i)
+ pad[i] = k[i] ^ 0x5c;
+ SHA256_Init(&st);
+ SHA256_Update(&st, pad, BLOCKSIZE);
+ SHA256_Update(&st, d, DIGESTSIZE);
+ SHA256_Final((uint8_t*)hmac_out, &st);
+
+ /* Now clear everything. */
+ memset(k, 0, sizeof(k));
+ memset(pad, 0, sizeof(pad));
+ memset(d, 0, sizeof(d));
+ memset(&st, 0, sizeof(st));
+#undef BLOCKSIZE
+#undef DIGESTSIZE
+#endif
+}
+
/* DH */
+/** Our DH 'g' parameter */
+#define DH_GENERATOR 2
+
/** Shared P parameter for our circuit-crypto DH key exchanges. */
static BIGNUM *dh_param_p = NULL;
/** Shared P parameter for our TLS DH key exchanges. */
@@ -1723,49 +1791,303 @@ static BIGNUM *dh_param_p_tls = NULL;
/** Shared G parameter for our DH key exchanges. */
static BIGNUM *dh_param_g = NULL;
+/** Generate and return a reasonable and safe DH parameter p. */
+static BIGNUM *
+crypto_generate_dynamic_dh_modulus(void)
+{
+ BIGNUM *dynamic_dh_modulus;
+ DH *dh_parameters;
+ int r, dh_codes;
+ char *s;
+
+ dynamic_dh_modulus = BN_new();
+ tor_assert(dynamic_dh_modulus);
+
+ dh_parameters = DH_generate_parameters(DH_BYTES*8, DH_GENERATOR, NULL, NULL);
+ tor_assert(dh_parameters);
+
+ r = DH_check(dh_parameters, &dh_codes);
+ tor_assert(r && !dh_codes);
+
+ BN_copy(dynamic_dh_modulus, dh_parameters->p);
+ tor_assert(dynamic_dh_modulus);
+
+ DH_free(dh_parameters);
+
+ { /* log the dynamic DH modulus: */
+ s = BN_bn2hex(dynamic_dh_modulus);
+ tor_assert(s);
+ log_info(LD_OR, "Dynamic DH modulus generated: [%s]", s);
+ OPENSSL_free(s);
+ }
+
+ return dynamic_dh_modulus;
+}
+
+/** Store our dynamic DH modulus (and its group parameters) to
+ <b>fname</b> for future use. */
+static int
+crypto_store_dynamic_dh_modulus(const char *fname)
+{
+ int len, new_len;
+ DH *dh = NULL;
+ unsigned char *dh_string_repr = NULL, *cp = NULL;
+ char *base64_encoded_dh = NULL;
+ int retval = -1;
+
+ tor_assert(fname);
+
+ if (!dh_param_p_tls) {
+ log_info(LD_CRYPTO, "Tried to store a DH modulus that does not exist.");
+ goto done;
+ }
+
+ if (!(dh = DH_new()))
+ goto done;
+ if (!(dh->p = BN_dup(dh_param_p_tls)))
+ goto done;
+ if (!(dh->g = BN_new()))
+ goto done;
+ if (!BN_set_word(dh->g, DH_GENERATOR))
+ goto done;
+
+ len = i2d_DHparams(dh, NULL);
+ if (len < 0) {
+ log_warn(LD_CRYPTO, "Error occured while DER encoding DH modulus (1).");
+ goto done;
+ }
+
+ cp = dh_string_repr = tor_malloc_zero(len+1);
+ len = i2d_DHparams(dh, &cp);
+ if ((len < 0) || ((cp - dh_string_repr) != len)) {
+ log_warn(LD_CRYPTO, "Error occured while DER encoding DH modulus (2).");
+ goto done;
+ }
+
+ base64_encoded_dh = tor_malloc_zero(len * 2); /* should be enough */
+ new_len = base64_encode(base64_encoded_dh, len * 2,
+ (char *)dh_string_repr, len);
+ if (new_len < 0) {
+ log_warn(LD_CRYPTO, "Error occured while base64-encoding DH modulus.");
+ goto done;
+ }
+
+ if (write_bytes_to_new_file(fname, base64_encoded_dh, new_len, 0) < 0) {
+ log_info(LD_CRYPTO, "'%s' was already occupied.", fname);
+ goto done;
+ }
+
+ retval = 0;
+
+ done:
+ if (dh)
+ DH_free(dh);
+ tor_free(dh_string_repr);
+ tor_free(base64_encoded_dh);
+
+ return retval;
+}
+
+/** Return the dynamic DH modulus stored in <b>fname</b>. If there is no
+ dynamic DH modulus stored in <b>fname</b>, return NULL. */
+static BIGNUM *
+crypto_get_stored_dynamic_dh_modulus(const char *fname)
+{
+ int retval;
+ char *contents = NULL;
+ int dh_codes;
+ char *fname_new = NULL;
+ DH *stored_dh = NULL;
+ BIGNUM *dynamic_dh_modulus = NULL;
+ int length = 0;
+ unsigned char *base64_decoded_dh = NULL;
+ const unsigned char *cp = NULL;
+
+ tor_assert(fname);
+
+ contents = read_file_to_str(fname, RFTS_IGNORE_MISSING, NULL);
+ if (!contents) {
+ log_info(LD_CRYPTO, "Could not open file '%s'", fname);
+ goto done; /*usually means that ENOENT. don't try to move file to broken.*/
+ }
+
+ /* 'fname' contains the DH parameters stored in base64-ed DER
+ format. We are only interested in the DH modulus. */
+
+ cp = base64_decoded_dh = tor_malloc_zero(strlen(contents));
+ length = base64_decode((char *)base64_decoded_dh, strlen(contents),
+ contents, strlen(contents));
+ if (length < 0) {
+ log_warn(LD_CRYPTO, "Stored dynamic DH modulus seems corrupted (base64).");
+ goto err;
+ }
+
+ stored_dh = d2i_DHparams(NULL, &cp, length);
+ if ((!stored_dh) || (cp - base64_decoded_dh != length)) {
+ log_warn(LD_CRYPTO, "Stored dynamic DH modulus seems corrupted (d2i).");
+ goto err;
+ }
+
+ { /* check the cryptographic qualities of the stored dynamic DH modulus: */
+ retval = DH_check(stored_dh, &dh_codes);
+ if (!retval || dh_codes) {
+ log_warn(LD_CRYPTO, "Stored dynamic DH modulus is not a safe prime.");
+ goto err;
+ }
+
+ retval = DH_size(stored_dh);
+ if (retval < DH_BYTES) {
+ log_warn(LD_CRYPTO, "Stored dynamic DH modulus is smaller "
+ "than '%d' bits.", DH_BYTES*8);
+ goto err;
+ }
+
+ if (!BN_is_word(stored_dh->g, 2)) {
+ log_warn(LD_CRYPTO, "Stored dynamic DH parameters do not use '2' "
+ "as the group generator.");
+ goto err;
+ }
+ }
+
+ { /* log the dynamic DH modulus: */
+ char *s = BN_bn2hex(stored_dh->p);
+ tor_assert(s);
+ log_info(LD_OR, "Found stored dynamic DH modulus: [%s]", s);
+ OPENSSL_free(s);
+ }
+
+ goto done;
+
+ err:
+
+ { /* move broken prime to $filename.broken */
+ fname_new = tor_malloc(strlen(fname) + 8);
+
+ /* no can do if these functions return error */
+ strlcpy(fname_new, fname, strlen(fname) + 8);
+ strlcat(fname_new, ".broken", strlen(fname) + 8);
+
+ log_warn(LD_CRYPTO, "Moving broken dynamic DH prime to '%s'.", fname_new);
+
+ if (replace_file(fname, fname_new))
+ log_notice(LD_CRYPTO, "Error while moving '%s' to '%s'.",
+ fname, fname_new);
+
+ tor_free(fname_new);
+ }
+
+ if (stored_dh) {
+ DH_free(stored_dh);
+ stored_dh = NULL;
+ }
+
+ done:
+ tor_free(contents);
+ tor_free(base64_decoded_dh);
+
+ if (stored_dh) {
+ dynamic_dh_modulus = BN_dup(stored_dh->p);
+ DH_free(stored_dh);
+ }
+
+ return dynamic_dh_modulus;
+}
+
+/** Set the global TLS Diffie-Hellman modulus.
+ * If <b>dynamic_dh_modulus_fname</b> is set, try to read a dynamic DH modulus
+ * off it and use it as the DH modulus. If that's not possible,
+ * generate a new dynamic DH modulus.
+ * If <b>dynamic_dh_modulus_fname</b> is NULL, use the Apache mod_ssl DH
+ * modulus. */
+void
+crypto_set_tls_dh_prime(const char *dynamic_dh_modulus_fname)
+{
+ BIGNUM *tls_prime = NULL;
+ int store_dh_prime_afterwards = 0;
+ int r;
+
+ /* If the space is occupied, free the previous TLS DH prime */
+ if (dh_param_p_tls) {
+ BN_free(dh_param_p_tls);
+ dh_param_p_tls = NULL;
+ }
+
+ if (dynamic_dh_modulus_fname) { /* use dynamic DH modulus: */
+ log_info(LD_OR, "Using stored dynamic DH modulus.");
+ tls_prime = crypto_get_stored_dynamic_dh_modulus(dynamic_dh_modulus_fname);
+
+ if (!tls_prime) {
+ log_notice(LD_OR, "Generating fresh dynamic DH modulus. "
+ "This might take a while...");
+ tls_prime = crypto_generate_dynamic_dh_modulus();
+
+ store_dh_prime_afterwards++;
+ }
+ } else { /* use the static DH prime modulus used by Apache in mod_ssl: */
+ tls_prime = BN_new();
+ tor_assert(tls_prime);
+
+ /* This is the 1024-bit safe prime that Apache uses for its DH stuff; see
+ * modules/ssl/ssl_engine_dh.c; Apache also uses a generator of 2 with this
+ * prime.
+ */
+ r =BN_hex2bn(&tls_prime,
+ "D67DE440CBBBDC1936D693D34AFD0AD50C84D239A45F520BB88174CB98"
+ "BCE951849F912E639C72FB13B4B4D7177E16D55AC179BA420B2A29FE324A"
+ "467A635E81FF5901377BEDDCFD33168A461AAD3B72DAE8860078045B07A7"
+ "DBCA7874087D1510EA9FCC9DDD330507DD62DB88AEAA747DE0F4D6E2BD68"
+ "B0E7393E0F24218EB3");
+ tor_assert(r);
+ }
+
+ tor_assert(tls_prime);
+
+ dh_param_p_tls = tls_prime;
+
+ if (store_dh_prime_afterwards)
+ /* save the new dynamic DH modulus to disk. */
+ if (crypto_store_dynamic_dh_modulus(dynamic_dh_modulus_fname)) {
+ log_notice(LD_CRYPTO, "Failed while storing dynamic DH modulus. "
+ "Make sure your data directory is sane.");
+ }
+}
+
/** Initialize dh_param_p and dh_param_g if they are not already
* set. */
static void
init_dh_param(void)
{
- BIGNUM *p, *p2, *g;
+ BIGNUM *circuit_dh_prime, *generator;
int r;
- if (dh_param_p && dh_param_g && dh_param_p_tls)
+ if (dh_param_p && dh_param_g)
return;
- p = BN_new();
- p2 = BN_new();
- g = BN_new();
- tor_assert(p);
- tor_assert(p2);
- tor_assert(g);
+ circuit_dh_prime = BN_new();
+ generator = BN_new();
+ tor_assert(circuit_dh_prime && generator);
+
+ /* Set our generator for all DH parameters */
+ r = BN_set_word(generator, DH_GENERATOR);
+ tor_assert(r);
/* This is from rfc2409, section 6.2. It's a safe prime, and
supposedly it equals:
2^1024 - 2^960 - 1 + 2^64 * { [2^894 pi] + 129093 }.
*/
- r = BN_hex2bn(&p,
+ r = BN_hex2bn(&circuit_dh_prime,
"FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E08"
"8A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B"
"302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9"
"A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE6"
"49286651ECE65381FFFFFFFFFFFFFFFF");
tor_assert(r);
- /* This is the 1024-bit safe prime that Apache uses for its DH stuff; see
- * modules/ssl/ssl_engine_dh.c */
- r = BN_hex2bn(&p2,
- "D67DE440CBBBDC1936D693D34AFD0AD50C84D239A45F520BB88174CB98"
- "BCE951849F912E639C72FB13B4B4D7177E16D55AC179BA420B2A29FE324A"
- "467A635E81FF5901377BEDDCFD33168A461AAD3B72DAE8860078045B07A7"
- "DBCA7874087D1510EA9FCC9DDD330507DD62DB88AEAA747DE0F4D6E2BD68"
- "B0E7393E0F24218EB3");
- tor_assert(r);
- r = BN_set_word(g, 2);
- tor_assert(r);
- dh_param_p = p;
- dh_param_p_tls = p2;
- dh_param_g = g;
+ /* Set the new values as the global DH parameters. */
+ dh_param_p = circuit_dh_prime;
+ dh_param_g = generator;
+
+ /* Should be already set by config.c. */
+ tor_assert(dh_param_p_tls);
}
/** Number of bits to use when choosing the x or y value in a Diffie-Hellman
@@ -2737,5 +3059,44 @@ setup_openssl_threading(void)
return 0;
}
#endif
+
+/** Uninitialize the crypto library. Return 0 on success, -1 on failure.
+ */
+int
+crypto_global_cleanup(void)
+{
+ EVP_cleanup();
+ ERR_remove_state(0);
+ ERR_free_strings();
+
+ if (dh_param_p)
+ BN_free(dh_param_p);
+ if (dh_param_p_tls)
+ BN_free(dh_param_p_tls);
+ if (dh_param_g)
+ BN_free(dh_param_g);
+
+#ifndef DISABLE_ENGINES
+ ENGINE_cleanup();
+#endif
+
+ CONF_modules_unload(1);
+ CRYPTO_cleanup_all_ex_data();
+#ifdef TOR_IS_MULTITHREADED
+ if (_n_openssl_mutexes) {
+ int n = _n_openssl_mutexes;
+ tor_mutex_t **ms = _openssl_mutexes;
+ int i;
+ _openssl_mutexes = NULL;
+ _n_openssl_mutexes = 0;
+ for (i=0;i<n;++i) {
+ tor_mutex_free(ms[i]);
+ }
+ tor_free(ms);
+ }
+#endif
+ return 0;
+}
+
/** @} */
diff --git a/src/common/crypto.h b/src/common/crypto.h
index 9b4eee622..771c49c2d 100644
--- a/src/common/crypto.h
+++ b/src/common/crypto.h
@@ -91,6 +91,8 @@ int crypto_global_cleanup(void);
crypto_pk_env_t *crypto_new_pk_env(void);
void crypto_free_pk_env(crypto_pk_env_t *env);
+void crypto_set_tls_dh_prime(const char *dynamic_dh_modulus_fname);
+
/* convenience function: wraps crypto_create_crypto_env, set_key, and init. */
crypto_cipher_env_t *crypto_create_init_cipher(const char *key,
int encrypt_mode);
@@ -150,6 +152,7 @@ int crypto_pk_private_hybrid_decrypt(crypto_pk_env_t *env, char *to,
int crypto_pk_asn1_encode(crypto_pk_env_t *pk, char *dest, size_t dest_len);
crypto_pk_env_t *crypto_pk_asn1_decode(const char *str, size_t len);
int crypto_pk_get_digest(crypto_pk_env_t *pk, char *digest_out);
+int crypto_pk_get_all_digests(crypto_pk_env_t *pk, digests_t *digests_out);
int crypto_pk_get_fingerprint(crypto_pk_env_t *pk, char *fp_out,int add_space);
int crypto_pk_check_fingerprint_syntax(const char *s);
@@ -195,6 +198,9 @@ void crypto_digest_assign(crypto_digest_env_t *into,
void crypto_hmac_sha1(char *hmac_out,
const char *key, size_t key_len,
const char *msg, size_t msg_len);
+void crypto_hmac_sha256(char *hmac_out,
+ const char *key, size_t key_len,
+ const char *msg, size_t msg_len);
/* Key negotiation */
#define DH_TYPE_CIRCUIT 1
diff --git a/src/common/mempool.c b/src/common/mempool.c
index 30d778804..1462c5f8f 100644
--- a/src/common/mempool.c
+++ b/src/common/mempool.c
@@ -62,7 +62,6 @@
#if 1
/* Tor dependencies */
-#include "orconfig.h"
#include "util.h"
#include "compat.h"
#include "torlog.h"
diff --git a/src/common/torgzip.c b/src/common/torgzip.c
index ae7d7cfc0..62e4a0703 100644
--- a/src/common/torgzip.c
+++ b/src/common/torgzip.c
@@ -14,11 +14,12 @@
#include <stdio.h>
#include <assert.h>
#include <string.h>
+#include "torint.h"
+
#ifdef HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif
-#include "torint.h"
#include "util.h"
#include "torlog.h"
#include "torgzip.h"
diff --git a/src/common/tortls.c b/src/common/tortls.c
index 1bb9c74ef..18f268470 100644
--- a/src/common/tortls.c
+++ b/src/common/tortls.c
@@ -52,7 +52,6 @@
#include <event2/bufferevent_ssl.h>
#include <event2/buffer.h>
#include <event2/event.h>
-#include "compat_libevent.h"
#endif
#define CRYPTO_PRIVATE /* to import prototypes from crypto.h */
@@ -64,6 +63,7 @@
#include "torlog.h"
#include "container.h"
#include <string.h>
+#include "compat_libevent.h"
/* Enable the "v2" TLS handshake.
*/
@@ -97,15 +97,27 @@ static int use_unsafe_renegotiation_op = 0;
* SSL3_FLAGS_ALLOW_UNSAFE_LEGACY_RENEGOTIATION? */
static int use_unsafe_renegotiation_flag = 0;
+/** Structure that we use for a single certificate. */
+struct tor_cert_t {
+ X509 *cert;
+ uint8_t *encoded;
+ size_t encoded_len;
+ unsigned pkey_digests_set : 1;
+ digests_t cert_digests;
+ digests_t pkey_digests;
+};
+
/** Holds a SSL_CTX object and related state used to configure TLS
* connections.
*/
typedef struct tor_tls_context_t {
int refcnt;
SSL_CTX *ctx;
- X509 *my_cert;
- X509 *my_id_cert;
- crypto_pk_env_t *key;
+ tor_cert_t *my_link_cert;
+ tor_cert_t *my_id_cert;
+ tor_cert_t *my_auth_cert;
+ crypto_pk_env_t *link_key;
+ crypto_pk_env_t *auth_key;
} tor_tls_context_t;
#define TOR_TLS_MAGIC 0x71571571
@@ -134,7 +146,7 @@ struct tor_tls_t {
/** True iff we should call negotiated_callback when we're done reading. */
unsigned int got_renegotiate:1;
/** Incremented every time we start the server side of a handshake. */
- uint8_t server_handshake_count;
+ unsigned int server_handshake_count:2;
size_t wantwrite_n; /**< 0 normally, >0 if we returned wantwrite last
* time. */
/** Last values retrieved from BIO_number_read()/write(); see
@@ -145,6 +157,11 @@ struct tor_tls_t {
/** If set, a callback to invoke whenever the client tries to renegotiate
* the handshake. */
void (*negotiated_callback)(tor_tls_t *tls, void *arg);
+
+ /** Callback to invoke whenever a client tries to renegotiate more
+ than once. */
+ void (*excess_renegotiations_callback)(void *);
+
/** Argument to pass to negotiated_callback. */
void *callback_arg;
};
@@ -195,9 +212,13 @@ static X509* tor_tls_create_certificate(crypto_pk_env_t *rsa,
static int tor_tls_context_init_one(tor_tls_context_t **ppcontext,
crypto_pk_env_t *identity,
- unsigned int key_lifetime);
+ unsigned int key_lifetime,
+ int is_client);
static tor_tls_context_t *tor_tls_context_new(crypto_pk_env_t *identity,
- unsigned int key_lifetime);
+ unsigned int key_lifetime,
+ int is_client);
+static int check_cert_lifetime_internal(int severity, const X509 *cert,
+ int past_tolerance, int future_tolerance);
/** Global TLS contexts. We keep them here because nobody else needs
* to touch them. */
@@ -564,7 +585,13 @@ tor_tls_create_certificate(crypto_pk_env_t *rsa,
const char *cname_sign,
unsigned int cert_lifetime)
{
+ /* OpenSSL generates self-signed certificates with random 64-bit serial
+ * numbers, so let's do that too. */
+#define SERIAL_NUMBER_SIZE 8
+
time_t start_time, end_time;
+ BIGNUM *serial_number = NULL;
+ unsigned char serial_tmp[SERIAL_NUMBER_SIZE];
EVP_PKEY *sign_pkey = NULL, *pkey=NULL;
X509 *x509 = NULL;
X509_NAME *name = NULL, *name_issuer=NULL;
@@ -585,8 +612,15 @@ tor_tls_create_certificate(crypto_pk_env_t *rsa,
goto error;
if (!(X509_set_version(x509, 2)))
goto error;
- if (!(ASN1_INTEGER_set(X509_get_serialNumber(x509), (long)start_time)))
- goto error;
+
+ { /* our serial number is 8 random bytes. */
+ if (crypto_rand((char *)serial_tmp, sizeof(serial_tmp)) < 0)
+ goto error;
+ if (!(serial_number = BN_bin2bn(serial_tmp, sizeof(serial_tmp), NULL)))
+ goto error;
+ if (!(BN_to_ASN1_INTEGER(serial_number, X509_get_serialNumber(x509))))
+ goto error;
+ }
if (!(name = tor_x509_name_new(cname)))
goto error;
@@ -619,11 +653,15 @@ tor_tls_create_certificate(crypto_pk_env_t *rsa,
EVP_PKEY_free(sign_pkey);
if (pkey)
EVP_PKEY_free(pkey);
+ if (serial_number)
+ BN_free(serial_number);
if (name)
X509_NAME_free(name);
if (name_issuer)
X509_NAME_free(name_issuer);
return x509;
+
+#undef SERIAL_NUMBER_SIZE
}
/** List of ciphers that servers should select from.*/
@@ -670,6 +708,137 @@ static const int N_CLIENT_CIPHERS =
SSL3_TXT_EDH_RSA_DES_192_CBC3_SHA)
#endif
+/** Free all storage held in <b>cert</b> */
+void
+tor_cert_free(tor_cert_t *cert)
+{
+ if (! cert)
+ return;
+ if (cert->cert)
+ X509_free(cert->cert);
+ tor_free(cert->encoded);
+ memset(cert, 0x03, sizeof(*cert));
+ tor_free(cert);
+}
+
+/**
+ * Allocate a new tor_cert_t to hold the certificate "x509_cert".
+ *
+ * Steals a reference to x509_cert.
+ */
+static tor_cert_t *
+tor_cert_new(X509 *x509_cert)
+{
+ tor_cert_t *cert;
+ EVP_PKEY *pkey;
+ RSA *rsa;
+ int length, length2;
+ unsigned char *cp;
+
+ if (!x509_cert)
+ return NULL;
+
+ length = i2d_X509(x509_cert, NULL);
+ cert = tor_malloc_zero(sizeof(tor_cert_t));
+ if (length <= 0) {
+ tor_free(cert);
+ log_err(LD_CRYPTO, "Couldn't get length of encoded x509 certificate");
+ X509_free(x509_cert);
+ return NULL;
+ }
+ cert->encoded_len = (size_t) length;
+ cp = cert->encoded = tor_malloc(length);
+ length2 = i2d_X509(x509_cert, &cp);
+ tor_assert(length2 == length);
+
+ cert->cert = x509_cert;
+
+ crypto_digest_all(&cert->cert_digests,
+ (char*)cert->encoded, cert->encoded_len);
+
+ if ((pkey = X509_get_pubkey(x509_cert)) &&
+ (rsa = EVP_PKEY_get1_RSA(pkey))) {
+ crypto_pk_env_t *pk = _crypto_new_pk_env_rsa(rsa);
+ crypto_pk_get_all_digests(pk, &cert->pkey_digests);
+ cert->pkey_digests_set = 1;
+ crypto_free_pk_env(pk);
+ EVP_PKEY_free(pkey);
+ }
+
+ return cert;
+}
+
+/** Read a DER-encoded X509 cert, of length exactly <b>certificate_len</b>,
+ * from a <b>certificate</b>. Return a newly allocated tor_cert_t on success
+ * and NULL on failure. */
+tor_cert_t *
+tor_cert_decode(const uint8_t *certificate, size_t certificate_len)
+{
+ X509 *x509;
+ const unsigned char *cp = (const unsigned char *)certificate;
+ tor_cert_t *newcert;
+ tor_assert(certificate);
+
+ if (certificate_len > INT_MAX)
+ return NULL;
+
+#if OPENSSL_VERSION_NUMBER < 0x00908000l
+ /* This ifdef suppresses a type warning. Take out this case once everybody
+ * is using OpenSSL 0.9.8 or later. */
+ x509 = d2i_X509(NULL, (unsigned char**)&cp, (int)certificate_len);
+#else
+ x509 = d2i_X509(NULL, &cp, (int)certificate_len);
+#endif
+ if (!x509)
+ return NULL; /* Couldn't decode */
+ if (cp - certificate != (int)certificate_len) {
+ X509_free(x509);
+ return NULL; /* Didn't use all the bytes */
+ }
+ newcert = tor_cert_new(x509);
+ if (!newcert) {
+ return NULL;
+ }
+ if (newcert->encoded_len != certificate_len ||
+ fast_memneq(newcert->encoded, certificate, certificate_len)) {
+ /* Cert wasn't in DER */
+ tor_cert_free(newcert);
+ return NULL;
+ }
+ return newcert;
+}
+
+/** Set *<b>encoded_out</b> and *<b>size_out/b> to <b>cert</b>'s encoded DER
+ * representation and length, respectively. */
+void
+tor_cert_get_der(const tor_cert_t *cert,
+ const uint8_t **encoded_out, size_t *size_out)
+{
+ tor_assert(cert);
+ tor_assert(encoded_out);
+ tor_assert(size_out);
+ *encoded_out = cert->encoded;
+ *size_out = cert->encoded_len;
+}
+
+/** Return a set of digests for the public key in <b>cert</b>, or NULL if this
+ * cert's public key is not one we know how to take the digest of. */
+const digests_t *
+tor_cert_get_id_digests(const tor_cert_t *cert)
+{
+ if (cert->pkey_digests_set)
+ return &cert->pkey_digests;
+ else
+ return NULL;
+}
+
+/** Return a set of digests for the public key in <b>cert</b>. */
+const digests_t *
+tor_cert_get_cert_digests(const tor_cert_t *cert)
+{
+ return &cert->cert_digests;
+}
+
/** Remove a reference to <b>ctx</b>, and free it if it has no more
* references. */
static void
@@ -678,13 +847,172 @@ tor_tls_context_decref(tor_tls_context_t *ctx)
tor_assert(ctx);
if (--ctx->refcnt == 0) {
SSL_CTX_free(ctx->ctx);
- X509_free(ctx->my_cert);
- X509_free(ctx->my_id_cert);
- crypto_free_pk_env(ctx->key);
+ tor_cert_free(ctx->my_link_cert);
+ tor_cert_free(ctx->my_id_cert);
+ tor_cert_free(ctx->my_auth_cert);
+ crypto_free_pk_env(ctx->link_key);
+ crypto_free_pk_env(ctx->auth_key);
tor_free(ctx);
}
}
+/** Set *<b>link_cert_out</b> and *<b>id_cert_out</b> to the link certificate
+ * and ID certificate that we're currently using for our V3 in-protocol
+ * handshake's certificate chain. If <b>server</b> is true, provide the certs
+ * that we use in server mode; otherwise, provide the certs that we use in
+ * client mode. */
+int
+tor_tls_get_my_certs(int server,
+ const tor_cert_t **link_cert_out,
+ const tor_cert_t **id_cert_out)
+{
+ tor_tls_context_t *ctx = server ? server_tls_context : client_tls_context;
+ if (! ctx)
+ return -1;
+ if (link_cert_out)
+ *link_cert_out = server ? ctx->my_link_cert : ctx->my_auth_cert;
+ if (id_cert_out)
+ *id_cert_out = ctx->my_id_cert;
+ return 0;
+}
+
+/**
+ * Return the authentication key that we use to authenticate ourselves as a
+ * client in the V3 in-protocol handshake.
+ */
+crypto_pk_env_t *
+tor_tls_get_my_client_auth_key(void)
+{
+ if (! client_tls_context)
+ return NULL;
+ return client_tls_context->auth_key;
+}
+
+/**
+ * Return a newly allocated copy of the public key that a certificate
+ * certifies. Return NULL if the cert's key is not RSA.
+ */
+crypto_pk_env_t *
+tor_tls_cert_get_key(tor_cert_t *cert)
+{
+ crypto_pk_env_t *result = NULL;
+ EVP_PKEY *pkey = X509_get_pubkey(cert->cert);
+ RSA *rsa;
+ if (!pkey)
+ return NULL;
+ rsa = EVP_PKEY_get1_RSA(pkey);
+ if (!rsa) {
+ EVP_PKEY_free(pkey);
+ return NULL;
+ }
+ result = _crypto_new_pk_env_rsa(rsa);
+ EVP_PKEY_free(pkey);
+ return result;
+}
+
+/** Return true iff <b>a</b> and <b>b</b> represent the same public key. */
+static int
+pkey_eq(EVP_PKEY *a, EVP_PKEY *b)
+{
+ /* We'd like to do this, but openssl 0.9.7 doesn't have it:
+ return EVP_PKEY_cmp(a,b) == 1;
+ */
+ unsigned char *a_enc=NULL, *b_enc=NULL, *a_ptr, *b_ptr;
+ int a_len1, b_len1, a_len2, b_len2, result;
+ a_len1 = i2d_PublicKey(a, NULL);
+ b_len1 = i2d_PublicKey(b, NULL);
+ if (a_len1 != b_len1)
+ return 0;
+ a_ptr = a_enc = tor_malloc(a_len1);
+ b_ptr = b_enc = tor_malloc(b_len1);
+ a_len2 = i2d_PublicKey(a, &a_ptr);
+ b_len2 = i2d_PublicKey(b, &b_ptr);
+ tor_assert(a_len2 == a_len1);
+ tor_assert(b_len2 == b_len1);
+ result = tor_memeq(a_enc, b_enc, a_len1);
+ tor_free(a_enc);
+ tor_free(b_enc);
+ return result;
+}
+
+/** Return true iff the other side of <b>tls</b> has authenticated to us, and
+ * the key certified in <b>cert</b> is the same as the key they used to do it.
+ */
+int
+tor_tls_cert_matches_key(const tor_tls_t *tls, const tor_cert_t *cert)
+{
+ X509 *peercert = SSL_get_peer_certificate(tls->ssl);
+ EVP_PKEY *link_key = NULL, *cert_key = NULL;
+ int result;
+
+ if (!peercert)
+ return 0;
+ link_key = X509_get_pubkey(peercert);
+ cert_key = X509_get_pubkey(cert->cert);
+
+ result = link_key && cert_key && pkey_eq(cert_key, link_key);
+
+ X509_free(peercert);
+ if (link_key)
+ EVP_PKEY_free(link_key);
+ if (cert_key)
+ EVP_PKEY_free(cert_key);
+
+ return result;
+}
+
+/** Check whether <b>cert</b> is well-formed, currently live, and correctly
+ * signed by the public key in <b>signing_cert</b>. If <b>check_rsa_1024</b>,
+ * make sure that it has an RSA key with 1024 bits; otherwise, just check that
+ * the key is long enough. Return 1 if the cert is good, and 0 if it's bad or
+ * we couldn't check it. */
+int
+tor_tls_cert_is_valid(int severity,
+ const tor_cert_t *cert,
+ const tor_cert_t *signing_cert,
+ int check_rsa_1024)
+{
+ EVP_PKEY *cert_key;
+ EVP_PKEY *signing_key = X509_get_pubkey(signing_cert->cert);
+ int r, key_ok = 0;
+ if (!signing_key)
+ return 0;
+ r = X509_verify(cert->cert, signing_key);
+ EVP_PKEY_free(signing_key);
+ if (r <= 0)
+ return 0;
+
+ /* okay, the signature checked out right. Now let's check the check the
+ * lifetime. */
+ if (check_cert_lifetime_internal(severity, cert->cert,
+ 48*60*60, 30*24*60*60) < 0)
+ return 0;
+
+ cert_key = X509_get_pubkey(cert->cert);
+ if (check_rsa_1024 && cert_key) {
+ RSA *rsa = EVP_PKEY_get1_RSA(cert_key);
+ if (rsa && BN_num_bits(rsa->n) == 1024)
+ key_ok = 1;
+ if (rsa)
+ RSA_free(rsa);
+ } else if (cert_key) {
+ int min_bits = 1024;
+#ifdef EVP_PKEY_EC
+ if (EVP_PKEY_type(cert_key->type) == EVP_PKEY_EC)
+ min_bits = 128;
+#endif
+ if (EVP_PKEY_bits(cert_key) >= min_bits)
+ key_ok = 1;
+ }
+ EVP_PKEY_free(cert_key);
+ if (!key_ok)
+ return 0;
+
+ /* XXXX compare DNs or anything? */
+
+ return 1;
+}
+
/** Increase the reference count of <b>ctx</b>. */
static void
tor_tls_context_incref(tor_tls_context_t *ctx)
@@ -715,7 +1043,7 @@ tor_tls_context_init(int is_public_server,
rv1 = tor_tls_context_init_one(&server_tls_context,
server_identity,
- key_lifetime);
+ key_lifetime, 0);
if (rv1 >= 0) {
new_ctx = server_tls_context;
@@ -731,7 +1059,8 @@ tor_tls_context_init(int is_public_server,
if (server_identity != NULL) {
rv1 = tor_tls_context_init_one(&server_tls_context,
server_identity,
- key_lifetime);
+ key_lifetime,
+ 0);
} else {
tor_tls_context_t *old_ctx = server_tls_context;
server_tls_context = NULL;
@@ -743,7 +1072,8 @@ tor_tls_context_init(int is_public_server,
rv2 = tor_tls_context_init_one(&client_tls_context,
client_identity,
- key_lifetime);
+ key_lifetime,
+ 1);
}
return MIN(rv1, rv2);
@@ -758,10 +1088,12 @@ tor_tls_context_init(int is_public_server,
static int
tor_tls_context_init_one(tor_tls_context_t **ppcontext,
crypto_pk_env_t *identity,
- unsigned int key_lifetime)
+ unsigned int key_lifetime,
+ int is_client)
{
tor_tls_context_t *new_ctx = tor_tls_context_new(identity,
- key_lifetime);
+ key_lifetime,
+ is_client);
tor_tls_context_t *old_ctx = *ppcontext;
if (new_ctx != NULL) {
@@ -783,39 +1115,61 @@ tor_tls_context_init_one(tor_tls_context_t **ppcontext,
* certificate.
*/
static tor_tls_context_t *
-tor_tls_context_new(crypto_pk_env_t *identity, unsigned int key_lifetime)
+tor_tls_context_new(crypto_pk_env_t *identity, unsigned int key_lifetime,
+ int is_client)
{
- crypto_pk_env_t *rsa = NULL;
+ crypto_pk_env_t *rsa = NULL, *rsa_auth = NULL;
EVP_PKEY *pkey = NULL;
tor_tls_context_t *result = NULL;
- X509 *cert = NULL, *idcert = NULL;
+ X509 *cert = NULL, *idcert = NULL, *authcert = NULL;
char *nickname = NULL, *nn2 = NULL;
tor_tls_init();
nickname = crypto_random_hostname(8, 20, "www.", ".net");
+#ifdef DISABLE_V3_LINKPROTO_SERVERSIDE
nn2 = crypto_random_hostname(8, 20, "www.", ".net");
+#else
+ nn2 = crypto_random_hostname(8, 20, "www.", ".com");
+#endif
- /* Generate short-term RSA key. */
+ /* Generate short-term RSA key for use with TLS. */
if (!(rsa = crypto_new_pk_env()))
goto error;
if (crypto_pk_generate_key(rsa)<0)
goto error;
- /* Create certificate signed by identity key. */
- cert = tor_tls_create_certificate(rsa, identity, nickname, nn2,
- key_lifetime);
- /* Create self-signed certificate for identity key. */
- idcert = tor_tls_create_certificate(identity, identity, nn2, nn2,
- IDENTITY_CERT_LIFETIME);
- if (!cert || !idcert) {
- log(LOG_WARN, LD_CRYPTO, "Error creating certificate");
- goto error;
+ if (!is_client) {
+ /* Generate short-term RSA key for use in the in-protocol ("v3")
+ * authentication handshake. */
+ if (!(rsa_auth = crypto_new_pk_env()))
+ goto error;
+ if (crypto_pk_generate_key(rsa_auth)<0)
+ goto error;
+ /* Create a link certificate signed by identity key. */
+ cert = tor_tls_create_certificate(rsa, identity, nickname, nn2,
+ key_lifetime);
+ /* Create self-signed certificate for identity key. */
+ idcert = tor_tls_create_certificate(identity, identity, nn2, nn2,
+ IDENTITY_CERT_LIFETIME);
+ /* Create an authentication certificate signed by identity key. */
+ authcert = tor_tls_create_certificate(rsa_auth, identity, nickname, nn2,
+ key_lifetime);
+ if (!cert || !idcert || !authcert) {
+ log(LOG_WARN, LD_CRYPTO, "Error creating certificate");
+ goto error;
+ }
}
result = tor_malloc_zero(sizeof(tor_tls_context_t));
result->refcnt = 1;
- result->my_cert = X509_dup(cert);
- result->my_id_cert = X509_dup(idcert);
- result->key = crypto_pk_dup_key(rsa);
+ if (!is_client) {
+ result->my_link_cert = tor_cert_new(X509_dup(cert));
+ result->my_id_cert = tor_cert_new(X509_dup(idcert));
+ result->my_auth_cert = tor_cert_new(X509_dup(authcert));
+ if (!result->my_link_cert || !result->my_id_cert || !result->my_auth_cert)
+ goto error;
+ result->link_key = crypto_pk_dup_key(rsa);
+ result->auth_key = crypto_pk_dup_key(rsa_auth);
+ }
#ifdef EVERYONE_HAS_AES
/* Tell OpenSSL to only use TLS1 */
@@ -847,27 +1201,31 @@ tor_tls_context_new(crypto_pk_env_t *identity, unsigned int key_lifetime)
#ifdef SSL_MODE_RELEASE_BUFFERS
SSL_CTX_set_mode(result->ctx, SSL_MODE_RELEASE_BUFFERS);
#endif
- if (cert && !SSL_CTX_use_certificate(result->ctx,cert))
- goto error;
- X509_free(cert); /* We just added a reference to cert. */
- cert=NULL;
- if (idcert) {
- X509_STORE *s = SSL_CTX_get_cert_store(result->ctx);
- tor_assert(s);
- X509_STORE_add_cert(s, idcert);
- X509_free(idcert); /* The context now owns the reference to idcert */
- idcert = NULL;
+ if (! is_client) {
+ if (cert && !SSL_CTX_use_certificate(result->ctx,cert))
+ goto error;
+ X509_free(cert); /* We just added a reference to cert. */
+ cert=NULL;
+ if (idcert) {
+ X509_STORE *s = SSL_CTX_get_cert_store(result->ctx);
+ tor_assert(s);
+ X509_STORE_add_cert(s, idcert);
+ X509_free(idcert); /* The context now owns the reference to idcert */
+ idcert = NULL;
+ }
}
SSL_CTX_set_session_cache_mode(result->ctx, SSL_SESS_CACHE_OFF);
- tor_assert(rsa);
- if (!(pkey = _crypto_pk_env_get_evp_pkey(rsa,1)))
- goto error;
- if (!SSL_CTX_use_PrivateKey(result->ctx, pkey))
- goto error;
- EVP_PKEY_free(pkey);
- pkey = NULL;
- if (!SSL_CTX_check_private_key(result->ctx))
- goto error;
+ if (!is_client) {
+ tor_assert(rsa);
+ if (!(pkey = _crypto_pk_env_get_evp_pkey(rsa,1)))
+ goto error;
+ if (!SSL_CTX_use_PrivateKey(result->ctx, pkey))
+ goto error;
+ EVP_PKEY_free(pkey);
+ pkey = NULL;
+ if (!SSL_CTX_check_private_key(result->ctx))
+ goto error;
+ }
{
crypto_dh_env_t *dh = crypto_dh_new(DH_TYPE_TLS);
tor_assert(dh);
@@ -881,6 +1239,9 @@ tor_tls_context_new(crypto_pk_env_t *identity, unsigned int key_lifetime)
if (rsa)
crypto_free_pk_env(rsa);
+ if (rsa_auth)
+ crypto_free_pk_env(rsa_auth);
+ X509_free(authcert);
tor_free(nickname);
tor_free(nn2);
return result;
@@ -893,12 +1254,16 @@ tor_tls_context_new(crypto_pk_env_t *identity, unsigned int key_lifetime)
EVP_PKEY_free(pkey);
if (rsa)
crypto_free_pk_env(rsa);
+ if (rsa_auth)
+ crypto_free_pk_env(rsa_auth);
if (result)
tor_tls_context_decref(result);
if (cert)
X509_free(cert);
if (idcert)
X509_free(idcert);
+ if (authcert)
+ X509_free(authcert);
return NULL;
}
@@ -954,55 +1319,42 @@ tor_tls_client_is_using_v2_ciphers(const SSL *ssl, const char *address)
return 1;
}
+/** We got an SSL ClientHello message. This might mean that the
+ * client wants to initiate a renegotiation and appropriate actions
+ * must be taken. */
static void
-tor_tls_debug_state_callback(const SSL *ssl, int type, int val)
+tor_tls_got_client_hello(tor_tls_t *tls)
{
- log_debug(LD_HANDSHAKE, "SSL %p is now in state %s [type=%d,val=%d].",
- ssl, ssl_state_to_string(ssl->state), type, val);
-}
+ if (tls->server_handshake_count < 3)
+ ++tls->server_handshake_count;
-/** Invoked when we're accepting a connection on <b>ssl</b>, and the connection
- * changes state. We use this:
- * <ul><li>To alter the state of the handshake partway through, so we
- * do not send or request extra certificates in v2 handshakes.</li>
- * <li>To detect renegotiation</li></ul>
- */
-static void
-tor_tls_server_info_callback(const SSL *ssl, int type, int val)
-{
- tor_tls_t *tls;
- (void) val;
+ if (tls->server_handshake_count == 2) {
+ if (!tls->negotiated_callback) {
+ log_warn(LD_BUG, "Got a renegotiation request but we don't"
+ " have a renegotiation callback set!");
+ }
- tor_tls_debug_state_callback(ssl, type, val);
+ tls->got_renegotiate = 1;
+ } else if (tls->server_handshake_count > 2 &&
+ tls->excess_renegotiations_callback) {
+ /* We got more than one renegotiation requests. The Tor protocol
+ needs just one renegotiation; more than that probably means
+ They are trying to DoS us and we have to stop them. */
- if (type != SSL_CB_ACCEPT_LOOP)
- return;
- if (ssl->state != SSL3_ST_SW_SRVR_HELLO_A)
- return;
-
- tls = tor_tls_get_by_ssl(ssl);
- if (tls) {
- /* Check whether we're watching for renegotiates. If so, this is one! */
- if (tls->negotiated_callback)
- tls->got_renegotiate = 1;
- if (tls->server_handshake_count < 127) /*avoid any overflow possibility*/
- ++tls->server_handshake_count;
- } else {
- log_warn(LD_BUG, "Couldn't look up the tls for an SSL*. How odd!");
- return;
+ tls->excess_renegotiations_callback(tls->callback_arg);
}
/* Now check the cipher list. */
- if (tor_tls_client_is_using_v2_ciphers(ssl, ADDR(tls))) {
+ if (tor_tls_client_is_using_v2_ciphers(tls->ssl, ADDR(tls))) {
/*XXXX_TLS keep this from happening more than once! */
/* Yes, we're casting away the const from ssl. This is very naughty of us.
* Let's hope openssl doesn't notice! */
/* Set SSL_MODE_NO_AUTO_CHAIN to keep from sending back any extra certs. */
- SSL_set_mode((SSL*) ssl, SSL_MODE_NO_AUTO_CHAIN);
+ SSL_set_mode((SSL*) tls->ssl, SSL_MODE_NO_AUTO_CHAIN);
/* Don't send a hello request. */
- SSL_set_verify((SSL*) ssl, SSL_VERIFY_NONE, NULL);
+ SSL_set_verify((SSL*) tls->ssl, SSL_VERIFY_NONE, NULL);
if (tls) {
tls->wasV2Handshake = 1;
@@ -1017,6 +1369,34 @@ tor_tls_server_info_callback(const SSL *ssl, int type, int val)
}
#endif
+/** This is a callback function for SSL_set_info_callback() and it
+ * will be called in every SSL state change.
+ * It logs the SSL state change, and executes any actions that must be
+ * taken. */
+static void
+tor_tls_state_changed_callback(const SSL *ssl, int type, int val)
+{
+ log_debug(LD_HANDSHAKE, "SSL %p is now in state %s [type=%d,val=%d].",
+ ssl, ssl_state_to_string(ssl->state), type, val);
+
+#ifdef V2_HANDSHAKE_SERVER
+ if (type == SSL_CB_ACCEPT_LOOP &&
+ ssl->state == SSL3_ST_SW_SRVR_HELLO_A) {
+
+ /* Call tor_tls_got_client_hello() for every SSL ClientHello we
+ receive. */
+
+ tor_tls_t *tls = tor_tls_get_by_ssl(ssl);
+ if (!tls) {
+ log_warn(LD_BUG, "Couldn't look up the tls for an SSL*. How odd!");
+ return;
+ }
+
+ tor_tls_got_client_hello(tls);
+ }
+#endif
+}
+
/** Replace *<b>ciphers</b> with a new list of SSL ciphersuites: specifically,
* a list designed to mimic a common web browser. Some of the ciphers in the
* list won't actually be implemented by OpenSSL: that's okay so long as the
@@ -1158,14 +1538,8 @@ tor_tls_new(int sock, int isServer)
log_warn(LD_NET, "Newly created BIO has read count %lu, write count %lu",
result->last_read_count, result->last_write_count);
}
-#ifdef V2_HANDSHAKE_SERVER
- if (isServer) {
- SSL_set_info_callback(result->ssl, tor_tls_server_info_callback);
- } else
-#endif
- {
- SSL_set_info_callback(result->ssl, tor_tls_debug_state_callback);
- }
+
+ SSL_set_info_callback(result->ssl, tor_tls_state_changed_callback);
/* Not expected to get called. */
tls_log_errors(NULL, LOG_WARN, LD_NET, "creating tor_tls_t object");
@@ -1183,25 +1557,22 @@ tor_tls_set_logged_address(tor_tls_t *tls, const char *address)
tls->address = tor_strdup(address);
}
-/** Set <b>cb</b> to be called with argument <b>arg</b> whenever <b>tls</b>
- * next gets a client-side renegotiate in the middle of a read. Do not
- * invoke this function until <em>after</em> initial handshaking is done!
+/** Set <b>cb</b> to be called with argument <b>arg</b> whenever
+ * <b>tls</b> next gets a client-side renegotiate in the middle of a
+ * read. Set <b>cb2</b> to be called with argument <b>arg</b> whenever
+ * <b>tls</b> gets excess renegotiation requests. Do not invoke this
+ * function until <em>after</em> initial handshaking is done!
*/
void
-tor_tls_set_renegotiate_callback(tor_tls_t *tls,
+tor_tls_set_renegotiate_callbacks(tor_tls_t *tls,
void (*cb)(tor_tls_t *, void *arg),
+ void (*cb2)(void *),
void *arg)
{
tls->negotiated_callback = cb;
+ tls->excess_renegotiations_callback = cb2;
tls->callback_arg = arg;
tls->got_renegotiate = 0;
-#ifdef V2_HANDSHAKE_SERVER
- if (cb) {
- SSL_set_info_callback(tls->ssl, tor_tls_server_info_callback);
- } else {
- SSL_set_info_callback(tls->ssl, tor_tls_debug_state_callback);
- }
-#endif
}
/** If this version of openssl requires it, turn on renegotiation on
@@ -1221,16 +1592,6 @@ tor_tls_unblock_renegotiation(tor_tls_t *tls)
}
}
-/** If this version of openssl supports it, turn off renegotiation on
- * <b>tls</b>. (Our protocol never requires this for security, but it's nice
- * to use belt-and-suspenders here.)
- */
-void
-tor_tls_block_renegotiation(tor_tls_t *tls)
-{
- tls->ssl->s3->flags &= ~SSL3_FLAGS_ALLOW_UNSAFE_LEGACY_RENEGOTIATION;
-}
-
void
tor_tls_assert_renegotiation_unblocked(tor_tls_t *tls)
{
@@ -1268,6 +1629,7 @@ tor_tls_free(tor_tls_t *tls)
SSL_free(tls->ssl);
tls->ssl = NULL;
tls->negotiated_callback = NULL;
+ tls->excess_renegotiations_callback = NULL;
if (tls->context)
tor_tls_context_decref(tls->context);
tor_free(tls->address);
@@ -1289,19 +1651,30 @@ tor_tls_read(tor_tls_t *tls, char *cp, size_t len)
tor_assert(tls->state == TOR_TLS_ST_OPEN);
tor_assert(len<INT_MAX);
r = SSL_read(tls->ssl, cp, (int)len);
- if (r > 0) {
+ if (r > 0) /* return the number of characters read */
+ return r;
+
+ /* If we got here, SSL_read() did not go as expected. */
+
+ err = tor_tls_get_error(tls, r, CATCH_ZERO, "reading", LOG_DEBUG, LD_NET);
+
#ifdef V2_HANDSHAKE_SERVER
- if (tls->got_renegotiate) {
- /* Renegotiation happened! */
- log_info(LD_NET, "Got a TLS renegotiation from %s", ADDR(tls));
- if (tls->negotiated_callback)
- tls->negotiated_callback(tls, tls->callback_arg);
- tls->got_renegotiate = 0;
+ if (tls->got_renegotiate) {
+ if (tls->server_handshake_count != 2) {
+ log_warn(LD_BUG, "We did not notice renegotiation in a timely "
+ "fashion (%u)!", tls->server_handshake_count);
}
-#endif
+
+ /* Renegotiation happened! */
+ log_info(LD_NET, "Got a TLS renegotiation from %s", ADDR(tls));
+ if (tls->negotiated_callback)
+ tls->negotiated_callback(tls, tls->callback_arg);
+ tls->got_renegotiate = 0;
+
return r;
}
- err = tor_tls_get_error(tls, r, CATCH_ZERO, "reading", LOG_DEBUG, LD_NET);
+#endif
+
if (err == _TOR_TLS_ZERORETURN || err == TOR_TLS_CLOSE) {
log_debug(LD_NET,"read returned r=%d; TLS is closed",r);
tls->state = TOR_TLS_ST_CLOSED;
@@ -1338,6 +1711,7 @@ tor_tls_write(tor_tls_t *tls, const char *cp, size_t n)
}
r = SSL_write(tls->ssl, cp, (int)n);
err = tor_tls_get_error(tls, r, 0, "writing", LOG_INFO, LD_NET);
+
if (err == TOR_TLS_DONE) {
return r;
}
@@ -1402,7 +1776,6 @@ tor_tls_finish_handshake(tor_tls_t *tls)
{
int r = TOR_TLS_DONE;
if (tls->isServer) {
- SSL_set_info_callback(tls->ssl, NULL);
SSL_set_verify(tls->ssl, SSL_VERIFY_PEER, always_accept_verify_cb);
/* There doesn't seem to be a clear OpenSSL API to clear mode flags. */
tls->ssl->mode &= ~SSL_MODE_NO_AUTO_CHAIN;
@@ -1569,9 +1942,21 @@ tor_tls_peer_has_cert(tor_tls_t *tls)
return 1;
}
+/** Return the peer certificate, or NULL if there isn't one. */
+tor_cert_t *
+tor_tls_get_peer_cert(tor_tls_t *tls)
+{
+ X509 *cert;
+ cert = SSL_get_peer_certificate(tls->ssl);
+ tls_log_errors(tls, LOG_WARN, LD_HANDSHAKE, "getting peer certificate");
+ if (!cert)
+ return NULL;
+ return tor_cert_new(cert);
+}
+
/** Warn that a certificate lifetime extends through a certain range. */
static void
-log_cert_lifetime(X509 *cert, const char *problem)
+log_cert_lifetime(int severity, const X509 *cert, const char *problem)
{
BIO *bio = NULL;
BUF_MEM *buf;
@@ -1581,9 +1966,10 @@ log_cert_lifetime(X509 *cert, const char *problem)
struct tm tm;
if (problem)
- log_warn(LD_GENERAL,
- "Certificate %s: is your system clock set incorrectly?",
- problem);
+ log(severity, LD_GENERAL,
+ "Certificate %s. Either their clock is set wrong, or your clock "
+ "is wrong.",
+ problem);
if (!(bio = BIO_new(BIO_s_mem()))) {
log_warn(LD_GENERAL, "Couldn't allocate BIO!"); goto end;
@@ -1605,9 +1991,9 @@ log_cert_lifetime(X509 *cert, const char *problem)
strftime(mytime, 32, "%b %d %H:%M:%S %Y GMT", tor_gmtime_r(&now, &tm));
- log_warn(LD_GENERAL,
- "(certificate lifetime runs from %s through %s. Your time is %s.)",
- s1,s2,mytime);
+ log(severity, LD_GENERAL,
+ "(certificate lifetime runs from %s through %s. Your time is %s.)",
+ s1,s2,mytime);
end:
/* Not expected to get invoked */
@@ -1709,34 +2095,25 @@ tor_tls_verify(int severity, tor_tls_t *tls, crypto_pk_env_t **identity_key)
return r;
}
-/** Check whether the certificate set on the connection <b>tls</b> is
- * expired or not-yet-valid, give or take <b>tolerance</b>
- * seconds. Return 0 for valid, -1 for failure.
+/** Check whether the certificate set on the connection <b>tls</b> is expired
+ * give or take <b>past_tolerance</b> seconds, or not-yet-valid give or take
+ * <b>future_tolerance</b> seconds. Return 0 for valid, -1 for failure.
*
* NOTE: you should call tor_tls_verify before tor_tls_check_lifetime.
*/
int
-tor_tls_check_lifetime(tor_tls_t *tls, int tolerance)
+tor_tls_check_lifetime(int severity, tor_tls_t *tls,
+ int past_tolerance, int future_tolerance)
{
- time_t now, t;
X509 *cert;
int r = -1;
- now = time(NULL);
-
if (!(cert = SSL_get_peer_certificate(tls->ssl)))
goto done;
- t = now + tolerance;
- if (X509_cmp_time(X509_get_notBefore(cert), &t) > 0) {
- log_cert_lifetime(cert, "not yet valid");
+ if (check_cert_lifetime_internal(severity, cert,
+ past_tolerance, future_tolerance) < 0)
goto done;
- }
- t = now - tolerance;
- if (X509_cmp_time(X509_get_notAfter(cert), &t) < 0) {
- log_cert_lifetime(cert, "already expired");
- goto done;
- }
r = 0;
done:
@@ -1748,6 +2125,32 @@ tor_tls_check_lifetime(tor_tls_t *tls, int tolerance)
return r;
}
+/** Helper: check whether <b>cert</b> is expired give or take
+ * <b>past_tolerance</b> seconds, or not-yet-valid give or take
+ * <b>future_tolerance</b> seconds. If it is live, return 0. If it is not
+ * live, log a message and return -1. */
+static int
+check_cert_lifetime_internal(int severity, const X509 *cert,
+ int past_tolerance, int future_tolerance)
+{
+ time_t now, t;
+
+ now = time(NULL);
+
+ t = now + future_tolerance;
+ if (X509_cmp_time(X509_get_notBefore(cert), &t) > 0) {
+ log_cert_lifetime(severity, cert, "not yet valid");
+ return -1;
+ }
+ t = now - past_tolerance;
+ if (X509_cmp_time(X509_get_notAfter(cert), &t) < 0) {
+ log_cert_lifetime(severity, cert, "already expired");
+ return -1;
+ }
+
+ return 0;
+}
+
/** Return the number of bytes available for reading from <b>tls</b>.
*/
int
@@ -1831,6 +2234,92 @@ tor_tls_used_v1_handshake(tor_tls_t *tls)
return 1;
}
+/** Return true iff <b>name</b> is a DN of a kind that could only
+ * occur in a v3-handshake-indicating certificate */
+static int
+dn_indicates_v3_cert(X509_NAME *name)
+{
+#ifdef DISABLE_V3_LINKPROTO_CLIENTSIDE
+ (void)name;
+ return 0;
+#else
+ X509_NAME_ENTRY *entry;
+ int n_entries;
+ ASN1_OBJECT *obj;
+ ASN1_STRING *str;
+ unsigned char *s;
+ int len, r;
+
+ n_entries = X509_NAME_entry_count(name);
+ if (n_entries != 1)
+ return 1; /* More than one entry in the DN. */
+ entry = X509_NAME_get_entry(name, 0);
+
+ obj = X509_NAME_ENTRY_get_object(entry);
+ if (OBJ_obj2nid(obj) != OBJ_txt2nid("commonName"))
+ return 1; /* The entry isn't a commonName. */
+
+ str = X509_NAME_ENTRY_get_data(entry);
+ len = ASN1_STRING_to_UTF8(&s, str);
+ if (len < 0)
+ return 0;
+ r = fast_memneq(s + len - 4, ".net", 4);
+ OPENSSL_free(s);
+ return r;
+#endif
+}
+
+/** Return true iff the peer certificate we're received on <b>tls</b>
+ * indicates that this connection should use the v3 (in-protocol)
+ * authentication handshake.
+ *
+ * Only the connection initiator should use this, and only once the initial
+ * handshake is done; the responder detects a v1 handshake by cipher types,
+ * and a v3/v2 handshake by Versions cell vs renegotiation.
+ */
+int
+tor_tls_received_v3_certificate(tor_tls_t *tls)
+{
+ X509 *cert = SSL_get_peer_certificate(tls->ssl);
+ EVP_PKEY *key = NULL;
+ X509_NAME *issuer_name, *subject_name;
+ int is_v3 = 0;
+
+ if (!cert) {
+ log_warn(LD_BUG, "Called on a connection with no peer certificate");
+ goto done;
+ }
+
+ subject_name = X509_get_subject_name(cert);
+ issuer_name = X509_get_issuer_name(cert);
+
+ if (X509_name_cmp(subject_name, issuer_name) == 0) {
+ is_v3 = 1; /* purportedly self signed */
+ goto done;
+ }
+
+ if (dn_indicates_v3_cert(subject_name) ||
+ dn_indicates_v3_cert(issuer_name)) {
+ is_v3 = 1; /* DN is fancy */
+ goto done;
+ }
+
+ key = X509_get_pubkey(cert);
+ if (EVP_PKEY_bits(key) != 1024 ||
+ EVP_PKEY_type(key->type) != EVP_PKEY_RSA) {
+ is_v3 = 1; /* Key is fancy */
+ goto done;
+ }
+
+ done:
+ if (key)
+ EVP_PKEY_free(key);
+ if (cert)
+ X509_free(cert);
+
+ return is_v3;
+}
+
/** Return the number of server handshakes that we've noticed doing on
* <b>tls</b>. */
int
@@ -1847,6 +2336,36 @@ tor_tls_server_got_renegotiate(tor_tls_t *tls)
return tls->got_renegotiate;
}
+/** Set the DIGEST256_LEN buffer at <b>secrets_out</b> to the value used in
+ * the v3 handshake to prove that the client knows the TLS secrets for the
+ * connection <b>tls</b>. Return 0 on success, -1 on failure.
+ */
+int
+tor_tls_get_tlssecrets(tor_tls_t *tls, uint8_t *secrets_out)
+{
+#define TLSSECRET_MAGIC "Tor V3 handshake TLS cross-certification"
+ char buf[128];
+ size_t len;
+ tor_assert(tls);
+ tor_assert(tls->ssl);
+ tor_assert(tls->ssl->s3);
+ tor_assert(tls->ssl->session);
+ /*
+ The value is an HMAC, using the TLS master key as the HMAC key, of
+ client_random | server_random | TLSSECRET_MAGIC
+ */
+ memcpy(buf + 0, tls->ssl->s3->client_random, 32);
+ memcpy(buf + 32, tls->ssl->s3->server_random, 32);
+ memcpy(buf + 64, TLSSECRET_MAGIC, strlen(TLSSECRET_MAGIC) + 1);
+ len = 64 + strlen(TLSSECRET_MAGIC) + 1;
+ crypto_hmac_sha256((char*)secrets_out,
+ (char*)tls->ssl->session->master_key,
+ tls->ssl->session->master_key_length,
+ buf, len);
+ memset(buf, 0, sizeof(buf));
+ return 0;
+}
+
/** Examine the amount of memory used and available for buffers in <b>tls</b>.
* Set *<b>rbuf_capacity</b> to the amount of storage allocated for the read
* buffer and *<b>rbuf_bytes</b> to the amount actually used.
diff --git a/src/common/tortls.h b/src/common/tortls.h
index 9b8108b42..9f86e3712 100644
--- a/src/common/tortls.h
+++ b/src/common/tortls.h
@@ -13,10 +13,14 @@
#include "crypto.h"
#include "compat.h"
+#include "compat_libevent.h"
/* Opaque structure to hold a TLS connection. */
typedef struct tor_tls_t tor_tls_t;
+/* Opaque structure to hold an X509 certificate. */
+typedef struct tor_cert_t tor_cert_t;
+
/* Possible return values for most tor_tls_* functions. */
#define _MIN_TOR_TLS_ERROR_VAL -9
#define TOR_TLS_ERROR_MISC -9
@@ -57,21 +61,24 @@ int tor_tls_context_init(int is_public_server,
unsigned int key_lifetime);
tor_tls_t *tor_tls_new(int sock, int is_server);
void tor_tls_set_logged_address(tor_tls_t *tls, const char *address);
-void tor_tls_set_renegotiate_callback(tor_tls_t *tls,
+void tor_tls_set_renegotiate_callbacks(tor_tls_t *tls,
void (*cb)(tor_tls_t *, void *arg),
+ void (*cb2)(void *),
void *arg);
int tor_tls_is_server(tor_tls_t *tls);
void tor_tls_free(tor_tls_t *tls);
int tor_tls_peer_has_cert(tor_tls_t *tls);
+tor_cert_t *tor_tls_get_peer_cert(tor_tls_t *tls);
int tor_tls_verify(int severity, tor_tls_t *tls, crypto_pk_env_t **identity);
-int tor_tls_check_lifetime(tor_tls_t *tls, int tolerance);
+int tor_tls_check_lifetime(int severity,
+ tor_tls_t *tls, int past_tolerance,
+ int future_tolerance);
int tor_tls_read(tor_tls_t *tls, char *cp, size_t len);
int tor_tls_write(tor_tls_t *tls, const char *cp, size_t n);
int tor_tls_handshake(tor_tls_t *tls);
int tor_tls_finish_handshake(tor_tls_t *tls);
int tor_tls_renegotiate(tor_tls_t *tls);
void tor_tls_unblock_renegotiation(tor_tls_t *tls);
-void tor_tls_block_renegotiation(tor_tls_t *tls);
void tor_tls_assert_renegotiation_unblocked(tor_tls_t *tls);
int tor_tls_shutdown(tor_tls_t *tls);
int tor_tls_get_pending_bytes(tor_tls_t *tls);
@@ -85,8 +92,10 @@ void tor_tls_get_buffer_sizes(tor_tls_t *tls,
size_t *wbuf_capacity, size_t *wbuf_bytes);
int tor_tls_used_v1_handshake(tor_tls_t *tls);
+int tor_tls_received_v3_certificate(tor_tls_t *tls);
int tor_tls_get_num_server_handshakes(tor_tls_t *tls);
int tor_tls_server_got_renegotiate(tor_tls_t *tls);
+int tor_tls_get_tlssecrets(tor_tls_t *tls, uint8_t *secrets_out);
/* Log and abort if there are unhandled TLS errors in OpenSSL's error stack.
*/
@@ -104,5 +113,23 @@ struct bufferevent *tor_tls_init_bufferevent(tor_tls_t *tls,
int filter);
#endif
+void tor_cert_free(tor_cert_t *cert);
+tor_cert_t *tor_cert_decode(const uint8_t *certificate,
+ size_t certificate_len);
+void tor_cert_get_der(const tor_cert_t *cert,
+ const uint8_t **encoded_out, size_t *size_out);
+const digests_t *tor_cert_get_id_digests(const tor_cert_t *cert);
+const digests_t *tor_cert_get_cert_digests(const tor_cert_t *cert);
+int tor_tls_get_my_certs(int server,
+ const tor_cert_t **link_cert_out,
+ const tor_cert_t **id_cert_out);
+crypto_pk_env_t *tor_tls_get_my_client_auth_key(void);
+crypto_pk_env_t *tor_tls_cert_get_key(tor_cert_t *cert);
+int tor_tls_cert_matches_key(const tor_tls_t *tls, const tor_cert_t *cert);
+int tor_tls_cert_is_valid(int severity,
+ const tor_cert_t *cert,
+ const tor_cert_t *signing_cert,
+ int check_rsa_1024);
+
#endif
diff --git a/src/common/util.c b/src/common/util.c
index db6b00f08..6d488d996 100644
--- a/src/common/util.c
+++ b/src/common/util.c
@@ -31,6 +31,7 @@
#include <direct.h>
#include <process.h>
#include <tchar.h>
+#include <Winbase.h>
#else
#include <dirent.h>
#include <pwd.h>
@@ -46,6 +47,7 @@
#include <stdio.h>
#include <string.h>
#include <assert.h>
+#include <signal.h>
#ifdef HAVE_NETINET_IN_H
#include <netinet/in.h>
@@ -338,10 +340,12 @@ tor_mathlog(double d)
long
tor_lround(double d)
{
-#ifdef _MSC_VER
- return (long)(d > 0 ? d + 0.5 : ceil(d - 0.5));
-#else
+#if defined(HAVE_LROUND)
return lround(d);
+#elif defined(HAVE_RINT)
+ return (long)rint(d);
+#else
+ return (long)(d > 0 ? d + 0.5 : ceil(d - 0.5));
#endif
}
@@ -767,6 +771,34 @@ find_str_at_start_of_line(const char *haystack, const char *needle)
return NULL;
}
+/** Returns true if <b>string</b> could be a C identifier.
+ A C identifier must begin with a letter or an underscore and the
+ rest of its characters can be letters, numbers or underscores. No
+ length limit is imposed. */
+int
+string_is_C_identifier(const char *string)
+{
+ size_t iter;
+ size_t length = strlen(string);
+ if (!length)
+ return 0;
+
+ for (iter = 0; iter < length ; iter++) {
+ if (iter == 0) {
+ if (!(TOR_ISALPHA(string[iter]) ||
+ string[iter] == '_'))
+ return 0;
+ } else {
+ if (!(TOR_ISALPHA(string[iter]) ||
+ TOR_ISDIGIT(string[iter]) ||
+ string[iter] == '_'))
+ return 0;
+ }
+ }
+
+ return 1;
+}
+
/** Return true iff the 'len' bytes at 'mem' are all zero. */
int
tor_mem_is_zero(const char *mem, size_t len)
@@ -2105,13 +2137,12 @@ write_chunks_to_file(const char *fname, const smartlist_t *chunks, int bin)
return write_chunks_to_file_impl(fname, chunks, flags);
}
-/** As write_str_to_file, but does not assume a NUL-terminated
- * string. Instead, we write <b>len</b> bytes, starting at <b>str</b>. */
-int
-write_bytes_to_file(const char *fname, const char *str, size_t len,
- int bin)
+/** Write <b>len</b> bytes, starting at <b>str</b>, to <b>fname</b>
+ using the open() flags passed in <b>flags</b>. */
+static int
+write_bytes_to_file_impl(const char *fname, const char *str, size_t len,
+ int flags)
{
- int flags = OPEN_FLAGS_REPLACE|(bin?O_BINARY:O_TEXT);
int r;
sized_chunk_t c = { str, len };
smartlist_t *chunks = smartlist_create();
@@ -2121,20 +2152,35 @@ write_bytes_to_file(const char *fname, const char *str, size_t len,
return r;
}
+/** As write_str_to_file, but does not assume a NUL-terminated
+ * string. Instead, we write <b>len</b> bytes, starting at <b>str</b>. */
+int
+write_bytes_to_file(const char *fname, const char *str, size_t len,
+ int bin)
+{
+ return write_bytes_to_file_impl(fname, str, len,
+ OPEN_FLAGS_REPLACE|(bin?O_BINARY:O_TEXT));
+}
+
/** As write_bytes_to_file, but if the file already exists, append the bytes
* to the end of the file instead of overwriting it. */
int
append_bytes_to_file(const char *fname, const char *str, size_t len,
int bin)
{
- int flags = OPEN_FLAGS_APPEND|(bin?O_BINARY:O_TEXT);
- int r;
- sized_chunk_t c = { str, len };
- smartlist_t *chunks = smartlist_create();
- smartlist_add(chunks, &c);
- r = write_chunks_to_file_impl(fname, chunks, flags);
- smartlist_free(chunks);
- return r;
+ return write_bytes_to_file_impl(fname, str, len,
+ OPEN_FLAGS_APPEND|(bin?O_BINARY:O_TEXT));
+}
+
+/** Like write_str_to_file(), but also return -1 if there was a file
+ already residing in <b>fname</b>. */
+int
+write_bytes_to_new_file(const char *fname, const char *str, size_t len,
+ int bin)
+{
+ return write_bytes_to_file_impl(fname, str, len,
+ OPEN_FLAGS_DONT_REPLACE|
+ (bin?O_BINARY:O_TEXT));
}
/** Read the contents of <b>filename</b> into a newly allocated
@@ -3127,6 +3173,72 @@ format_helper_exit_status(unsigned char child_state, int saved_errno,
/* Maximum number of file descriptors, if we cannot get it via sysconf() */
#define DEFAULT_MAX_FD 256
+/** Terminate the process of <b>process_handle</b>.
+ * Code borrowed from Python's os.kill. */
+int
+tor_terminate_process(process_handle_t *process_handle)
+{
+#ifdef MS_WINDOWS
+ if (tor_get_exit_code(process_handle, 0, NULL) == PROCESS_EXIT_RUNNING) {
+ HANDLE handle;
+ /* If the signal is outside of what GenerateConsoleCtrlEvent can use,
+ attempt to open and terminate the process. */
+ handle = OpenProcess(PROCESS_ALL_ACCESS, FALSE,
+ process_handle->pid.dwProcessId);
+ if (!handle)
+ return -1;
+
+ if (!TerminateProcess(handle, 0))
+ return -1;
+ else
+ return 0;
+ }
+#else /* Unix */
+ return kill(process_handle->pid, SIGTERM);
+#endif
+
+ return -1;
+}
+
+/** Return the Process ID of <b>process_handle</b>. */
+int
+tor_process_get_pid(process_handle_t *process_handle)
+{
+#ifdef MS_WINDOWS
+ return (int) process_handle->pid.dwProcessId;
+#else
+ return (int) process_handle->pid;
+#endif
+}
+
+#ifdef MS_WINDOWS
+HANDLE
+tor_process_get_stdout_pipe(process_handle_t *process_handle)
+{
+ return process_handle->stdout_pipe;
+}
+#else
+FILE *
+tor_process_get_stdout_pipe(process_handle_t *process_handle)
+{
+ return process_handle->stdout_handle;
+}
+#endif
+
+static process_handle_t *
+process_handle_new(void)
+{
+ process_handle_t *out = tor_malloc_zero(sizeof(process_handle_t));
+
+#ifndef MS_WINDOWS
+ out->stdout_pipe = -1;
+ out->stderr_pipe = -1;
+#endif
+
+ return out;
+}
+
+/*DOCDOC*/
#define CHILD_STATE_INIT 0
#define CHILD_STATE_PIPE 1
#define CHILD_STATE_MAXFD 2
@@ -3138,8 +3250,6 @@ format_helper_exit_status(unsigned char child_state, int saved_errno,
#define CHILD_STATE_EXEC 8
#define CHILD_STATE_FAILEXEC 9
-#define SPAWN_ERROR_MESSAGE "ERR: Failed to spawn background process - code "
-
/** Start a program in the background. If <b>filename</b> contains a '/', then
* it will be treated as an absolute or relative path. Otherwise, on
* non-Windows systems, the system path will be searched for <b>filename</b>.
@@ -3159,16 +3269,22 @@ format_helper_exit_status(unsigned char child_state, int saved_errno,
* Python, and example code from
* http://msdn.microsoft.com/en-us/library/ms682499%28v=vs.85%29.aspx.
*/
-
int
tor_spawn_background(const char *const filename, const char **argv,
- process_handle_t *process_handle)
+#ifdef MS_WINDOWS
+ LPVOID envp,
+#else
+ const char **envp,
+#endif
+ process_handle_t **process_handle_out)
{
#ifdef MS_WINDOWS
HANDLE stdout_pipe_read = NULL;
HANDLE stdout_pipe_write = NULL;
HANDLE stderr_pipe_read = NULL;
HANDLE stderr_pipe_write = NULL;
+ process_handle_t *process_handle;
+ int status;
STARTUPINFO siStartInfo;
BOOL retval = FALSE;
@@ -3176,8 +3292,7 @@ tor_spawn_background(const char *const filename, const char **argv,
SECURITY_ATTRIBUTES saAttr;
char *joined_argv;
- /* process_handle must not be NULL */
- tor_assert(process_handle != NULL);
+ (void)envp; // Unused on Windows
saAttr.nLength = sizeof(SECURITY_ATTRIBUTES);
saAttr.bInheritHandle = TRUE;
@@ -3185,21 +3300,20 @@ tor_spawn_background(const char *const filename, const char **argv,
saAttr.lpSecurityDescriptor = NULL;
/* Assume failure to start process */
- memset(process_handle, 0, sizeof(process_handle_t));
- process_handle->status = PROCESS_STATUS_ERROR;
+ status = PROCESS_STATUS_ERROR;
/* Set up pipe for stdout */
if (!CreatePipe(&stdout_pipe_read, &stdout_pipe_write, &saAttr, 0)) {
log_warn(LD_GENERAL,
"Failed to create pipe for stdout communication with child process: %s",
format_win32_error(GetLastError()));
- return process_handle->status;
+ return status;
}
if (!SetHandleInformation(stdout_pipe_read, HANDLE_FLAG_INHERIT, 0)) {
log_warn(LD_GENERAL,
"Failed to configure pipe for stdout communication with child "
"process: %s", format_win32_error(GetLastError()));
- return process_handle->status;
+ return status;
}
/* Set up pipe for stderr */
@@ -3207,13 +3321,13 @@ tor_spawn_background(const char *const filename, const char **argv,
log_warn(LD_GENERAL,
"Failed to create pipe for stderr communication with child process: %s",
format_win32_error(GetLastError()));
- return process_handle->status;
+ return status;
}
if (!SetHandleInformation(stderr_pipe_read, HANDLE_FLAG_INHERIT, 0)) {
log_warn(LD_GENERAL,
"Failed to configure pipe for stderr communication with child "
"process: %s", format_win32_error(GetLastError()));
- return process_handle->status;
+ return status;
}
/* Create the child process */
@@ -3222,6 +3336,9 @@ tor_spawn_background(const char *const filename, const char **argv,
*/
joined_argv = tor_join_win_cmdline(argv);
+ process_handle = process_handle_new();
+ process_handle->status = status;
+
ZeroMemory(&(process_handle->pid), sizeof(PROCESS_INFORMATION));
ZeroMemory(&siStartInfo, sizeof(STARTUPINFO));
siStartInfo.cb = sizeof(STARTUPINFO);
@@ -3241,7 +3358,7 @@ tor_spawn_background(const char *const filename, const char **argv,
/*(TODO: set CREATE_NEW CONSOLE/PROCESS_GROUP to make GetExitCodeProcess()
* work?) */
0, // creation flags
- NULL, // use parent's environment
+ envp, // use parent's environment
NULL, // use parent's current directory
&siStartInfo, // STARTUPINFO pointer
&(process_handle->pid)); // receives PROCESS_INFORMATION
@@ -3252,22 +3369,25 @@ tor_spawn_background(const char *const filename, const char **argv,
log_warn(LD_GENERAL,
"Failed to create child process %s: %s", filename?filename:argv[0],
format_win32_error(GetLastError()));
+ tor_free(process_handle);
} else {
/* TODO: Close hProcess and hThread in process_handle->pid? */
process_handle->stdout_pipe = stdout_pipe_read;
process_handle->stderr_pipe = stderr_pipe_read;
- process_handle->status = PROCESS_STATUS_RUNNING;
+ status = process_handle->status = PROCESS_STATUS_RUNNING;
}
/* TODO: Close pipes on exit */
-
- return process_handle->status;
+ *process_handle_out = process_handle;
+ return status;
#else // MS_WINDOWS
pid_t pid;
int stdout_pipe[2];
int stderr_pipe[2];
int fd, retval;
ssize_t nbytes;
+ process_handle_t *process_handle;
+ int status;
const char *error_message = SPAWN_ERROR_MESSAGE;
size_t error_message_length;
@@ -3280,9 +3400,7 @@ tor_spawn_background(const char *const filename, const char **argv,
static int max_fd = -1;
- /* Assume failure to start */
- memset(process_handle, 0, sizeof(process_handle_t));
- process_handle->status = PROCESS_STATUS_ERROR;
+ status = PROCESS_STATUS_ERROR;
/* We do the strlen here because strlen() is not signal handler safe,
and we are not allowed to use unsafe functions between fork and exec */
@@ -3296,7 +3414,7 @@ tor_spawn_background(const char *const filename, const char **argv,
log_warn(LD_GENERAL,
"Failed to set up pipe for stdout communication with child process: %s",
strerror(errno));
- return process_handle->status;
+ return status;
}
retval = pipe(stderr_pipe);
@@ -3304,7 +3422,7 @@ tor_spawn_background(const char *const filename, const char **argv,
log_warn(LD_GENERAL,
"Failed to set up pipe for stderr communication with child process: %s",
strerror(errno));
- return process_handle->status;
+ return status;
}
child_state = CHILD_STATE_MAXFD;
@@ -3370,7 +3488,10 @@ tor_spawn_background(const char *const filename, const char **argv,
/* Call the requested program. We need the cast because
execvp doesn't define argv as const, even though it
does not modify the arguments */
- execvp(filename, (char *const *) argv);
+ if (envp)
+ execve(filename, (char *const *) argv, (char*const*)envp);
+ else
+ execvp(filename, (char *const *) argv);
/* If we got here, the exec or open(/dev/null) failed */
@@ -3391,7 +3512,7 @@ tor_spawn_background(const char *const filename, const char **argv,
_exit(255);
/* Never reached, but avoids compiler warning */
- return process_handle->status;
+ return status;
}
/* In parent */
@@ -3402,9 +3523,11 @@ tor_spawn_background(const char *const filename, const char **argv,
close(stdout_pipe[1]);
close(stderr_pipe[0]);
close(stderr_pipe[1]);
- return process_handle->status;
+ return status;
}
+ process_handle = process_handle_new();
+ process_handle->status = status;
process_handle->pid = pid;
/* TODO: If the child process forked but failed to exec, waitpid it */
@@ -3428,7 +3551,7 @@ tor_spawn_background(const char *const filename, const char **argv,
strerror(errno));
}
- process_handle->status = PROCESS_STATUS_RUNNING;
+ status = process_handle->status = PROCESS_STATUS_RUNNING;
/* Set stdout/stderr pipes to be non-blocking */
fcntl(process_handle->stdout_pipe, F_SETFL, O_NONBLOCK);
fcntl(process_handle->stderr_pipe, F_SETFL, O_NONBLOCK);
@@ -3436,10 +3559,52 @@ tor_spawn_background(const char *const filename, const char **argv,
process_handle->stdout_handle = fdopen(process_handle->stdout_pipe, "r");
process_handle->stderr_handle = fdopen(process_handle->stderr_pipe, "r");
+ *process_handle_out = process_handle;
return process_handle->status;
#endif // MS_WINDOWS
}
+/** Destroy all resources allocated by the process handle in
+ * <b>process_handle</b>.
+ * If <b>also_terminate_process</b> is true, also terminate the
+ * process of the process handle. */
+void
+tor_process_handle_destroy(process_handle_t *process_handle,
+ int also_terminate_process)
+{
+ if (!process_handle)
+ return;
+
+ if (also_terminate_process) {
+ if (tor_terminate_process(process_handle) < 0) {
+ log_notice(LD_GENERAL, "Failed to terminate process with PID '%d'",
+ tor_process_get_pid(process_handle));
+ } else {
+ log_info(LD_GENERAL, "Terminated process with PID '%d'",
+ tor_process_get_pid(process_handle));
+ }
+ }
+
+ process_handle->status = PROCESS_STATUS_NOTRUNNING;
+
+#ifdef MS_WINDOWS
+ if (process_handle->stdout_pipe)
+ CloseHandle(process_handle->stdout_pipe);
+
+ if (process_handle->stderr_pipe)
+ CloseHandle(process_handle->stderr_pipe);
+#else
+ if (process_handle->stdout_handle)
+ fclose(process_handle->stdout_handle);
+
+ if (process_handle->stderr_handle)
+ fclose(process_handle->stderr_handle);
+#endif
+
+ memset(process_handle, 0x0f, sizeof(process_handle_t));
+ tor_free(process_handle);
+}
+
/** Get the exit code of a process specified by <b>process_handle</b> and store
* it in <b>exit_code</b>, if set to a non-NULL value. If <b>block</b> is set
* to true, the call will block until the process has exited. Otherwise if
@@ -3451,7 +3616,7 @@ tor_spawn_background(const char *const filename, const char **argv,
* probably not work in Tor, because waitpid() is called in main.c to reap any
* terminated child processes.*/
int
-tor_get_exit_code(const process_handle_t process_handle,
+tor_get_exit_code(const process_handle_t *process_handle,
int block, int *exit_code)
{
#ifdef MS_WINDOWS
@@ -3460,14 +3625,14 @@ tor_get_exit_code(const process_handle_t process_handle,
if (block) {
/* Wait for the process to exit */
- retval = WaitForSingleObject(process_handle.pid.hProcess, INFINITE);
+ retval = WaitForSingleObject(process_handle->pid.hProcess, INFINITE);
if (retval != WAIT_OBJECT_0) {
log_warn(LD_GENERAL, "WaitForSingleObject() failed (%d): %s",
(int)retval, format_win32_error(GetLastError()));
return PROCESS_EXIT_ERROR;
}
} else {
- retval = WaitForSingleObject(process_handle.pid.hProcess, 0);
+ retval = WaitForSingleObject(process_handle->pid.hProcess, 0);
if (WAIT_TIMEOUT == retval) {
/* Process has not exited */
return PROCESS_EXIT_RUNNING;
@@ -3479,7 +3644,7 @@ tor_get_exit_code(const process_handle_t process_handle,
}
if (exit_code != NULL) {
- success = GetExitCodeProcess(process_handle.pid.hProcess,
+ success = GetExitCodeProcess(process_handle->pid.hProcess,
(PDWORD)exit_code);
if (!success) {
log_warn(LD_GENERAL, "GetExitCodeProcess() failed: %s",
@@ -3491,19 +3656,19 @@ tor_get_exit_code(const process_handle_t process_handle,
int stat_loc;
int retval;
- retval = waitpid(process_handle.pid, &stat_loc, block?0:WNOHANG);
+ retval = waitpid(process_handle->pid, &stat_loc, block?0:WNOHANG);
if (!block && 0 == retval) {
/* Process has not exited */
return PROCESS_EXIT_RUNNING;
- } else if (retval != process_handle.pid) {
- log_warn(LD_GENERAL, "waitpid() failed for PID %d: %s", process_handle.pid,
- strerror(errno));
+ } else if (retval != process_handle->pid) {
+ log_warn(LD_GENERAL, "waitpid() failed for PID %d: %s",
+ process_handle->pid, strerror(errno));
return PROCESS_EXIT_ERROR;
}
if (!WIFEXITED(stat_loc)) {
log_warn(LD_GENERAL, "Process %d did not exit normally",
- process_handle.pid);
+ process_handle->pid);
return PROCESS_EXIT_ERROR;
}
@@ -3605,7 +3770,6 @@ tor_read_all_handle(FILE *h, char *buf, size_t count,
if (NULL == retval) {
if (feof(h)) {
log_debug(LD_GENERAL, "fgets() reached end of file");
- fclose(h);
if (eof)
*eof = 1;
break;
@@ -3618,7 +3782,6 @@ tor_read_all_handle(FILE *h, char *buf, size_t count,
} else {
log_warn(LD_GENERAL, "fgets() from handle failed: %s",
strerror(errno));
- fclose(h);
return -1;
}
}
@@ -3761,6 +3924,7 @@ log_from_handle(HANDLE *pipe, int severity)
}
#else
+
/** Read from stream, and send lines to log at the specified log level.
* Returns 1 if stream is closed normally, -1 if there is a error reading, and
* 0 otherwise. Handles lines from tor-fw-helper and
@@ -3771,72 +3935,110 @@ log_from_pipe(FILE *stream, int severity, const char *executable,
int *child_status)
{
char buf[256];
+ enum stream_status r;
for (;;) {
- char *retval;
- retval = fgets(buf, sizeof(buf), stream);
+ r = get_string_from_pipe(stream, buf, sizeof(buf) - 1);
- if (NULL == retval) {
- if (feof(stream)) {
- /* Program has closed stream (probably it exited) */
- /* TODO: check error */
- fclose(stream);
- return 1;
+ if (r == IO_STREAM_CLOSED) {
+ return 1;
+ } else if (r == IO_STREAM_EAGAIN) {
+ return 0;
+ } else if (r == IO_STREAM_TERM) {
+ return -1;
+ }
+
+ tor_assert(r == IO_STREAM_OKAY);
+
+ /* Check if buf starts with SPAWN_ERROR_MESSAGE */
+ if (strcmpstart(buf, SPAWN_ERROR_MESSAGE) == 0) {
+ /* Parse error message */
+ int retval, child_state, saved_errno;
+ retval = tor_sscanf(buf, SPAWN_ERROR_MESSAGE "%x/%x",
+ &child_state, &saved_errno);
+ if (retval == 2) {
+ log_warn(LD_GENERAL,
+ "Failed to start child process \"%s\" in state %d: %s",
+ executable, child_state, strerror(saved_errno));
+ if (child_status)
+ *child_status = 1;
} else {
- if (EAGAIN == errno) {
- /* Nothing more to read, try again next time */
- return 0;
- } else {
- /* There was a problem, abandon this child process */
- fclose(stream);
- return -1;
- }
+ /* Failed to parse message from child process, log it as a
+ warning */
+ log_warn(LD_GENERAL,
+ "Unexpected message from port forwarding helper \"%s\": %s",
+ executable, buf);
}
} else {
- /* We have some data, log it and keep asking for more */
- size_t len;
+ log_fn(severity, LD_GENERAL, "Port forwarding helper says: %s", buf);
+ }
+ }
- len = strlen(buf);
- if (buf[len - 1] == '\n') {
- /* Remove the trailing newline */
- buf[len - 1] = '\0';
- } else {
- /* No newline; check whether we overflowed the buffer */
- if (!feof(stream))
- log_warn(LD_GENERAL,
- "Line from port forwarding helper was truncated: %s", buf);
- /* TODO: What to do with this error? */
- }
+ /* We should never get here */
+ return -1;
+}
+#endif
- /* Check if buf starts with SPAWN_ERROR_MESSAGE */
- if (strcmpstart(buf, SPAWN_ERROR_MESSAGE) == 0) {
- /* Parse error message */
- int retval, child_state, saved_errno;
- retval = tor_sscanf(buf, SPAWN_ERROR_MESSAGE "%x/%x",
- &child_state, &saved_errno);
- if (retval == 2) {
- log_warn(LD_GENERAL,
- "Failed to start child process \"%s\" in state %d: %s",
- executable, child_state, strerror(saved_errno));
- if (child_status)
- *child_status = 1;
- } else {
- /* Failed to parse message from child process, log it as a
- warning */
- log_warn(LD_GENERAL,
- "Unexpected message from port forwarding helper \"%s\": %s",
- executable, buf);
- }
+/** Reads from <b>stream</b> and stores input in <b>buf_out</b> making
+ * sure it's below <b>count</b> bytes.
+ * If the string has a trailing newline, we strip it off.
+ *
+ * This function is specifically created to handle input from managed
+ * proxies, according to the pluggable transports spec. Make sure it
+ * fits your needs before using it.
+ *
+ * Returns:
+ * IO_STREAM_CLOSED: If the stream is closed.
+ * IO_STREAM_EAGAIN: If there is nothing to read and we should check back
+ * later.
+ * IO_STREAM_TERM: If something is wrong with the stream.
+ * IO_STREAM_OKAY: If everything went okay and we got a string
+ * in <b>buf_out</b>. */
+enum stream_status
+get_string_from_pipe(FILE *stream, char *buf_out, size_t count)
+{
+ char *retval;
+ size_t len;
+
+ tor_assert(count <= INT_MAX);
+
+ retval = fgets(buf_out, (int)count, stream);
+
+ if (!retval) {
+ if (feof(stream)) {
+ /* Program has closed stream (probably it exited) */
+ /* TODO: check error */
+ return IO_STREAM_CLOSED;
+ } else {
+ if (EAGAIN == errno) {
+ /* Nothing more to read, try again next time */
+ return IO_STREAM_EAGAIN;
} else {
- log_fn(severity, LD_GENERAL, "Port forwarding helper says: %s", buf);
+ /* There was a problem, abandon this child process */
+ return IO_STREAM_TERM;
}
}
+ } else {
+ len = strlen(buf_out);
+ tor_assert(len>0);
+
+ if (buf_out[len - 1] == '\n') {
+ /* Remove the trailing newline */
+ buf_out[len - 1] = '\0';
+ } else {
+ /* No newline; check whether we overflowed the buffer */
+ if (!feof(stream))
+ log_info(LD_GENERAL,
+ "Line from stream was truncated: %s", buf_out);
+ /* TODO: What to do with this error? */
+ }
+
+ return IO_STREAM_OKAY;
}
/* We should never get here */
- return -1;
+ return IO_STREAM_TERM;
}
-#endif
void
tor_check_port_forwarding(const char *filename, int dir_port, int or_port,
@@ -3850,7 +4052,7 @@ tor_check_port_forwarding(const char *filename, int dir_port, int or_port,
/* Static variables are initialized to zero, so child_handle.status=0
* which corresponds to it not running on startup */
- static process_handle_t child_handle;
+ static process_handle_t *child_handle=NULL;
static time_t time_to_run_helper = 0;
int stdout_status, stderr_status, retval;
@@ -3876,46 +4078,50 @@ tor_check_port_forwarding(const char *filename, int dir_port, int or_port,
argv[9] = NULL;
/* Start the child, if it is not already running */
- if (child_handle.status != PROCESS_STATUS_RUNNING &&
+ if ((!child_handle || child_handle->status != PROCESS_STATUS_RUNNING) &&
time_to_run_helper < now) {
+ int status;
+
/* Assume tor-fw-helper will succeed, start it later*/
time_to_run_helper = now + TIME_TO_EXEC_FWHELPER_SUCCESS;
+ if (child_handle) {
+ tor_process_handle_destroy(child_handle, 1);
+ child_handle = NULL;
+ }
+
#ifdef MS_WINDOWS
/* Passing NULL as lpApplicationName makes Windows search for the .exe */
- tor_spawn_background(NULL, argv, &child_handle);
+ status = tor_spawn_background(NULL, argv, NULL, &child_handle);
#else
- tor_spawn_background(filename, argv, &child_handle);
+ status = tor_spawn_background(filename, argv, NULL, &child_handle);
#endif
- if (PROCESS_STATUS_ERROR == child_handle.status) {
+
+ if (PROCESS_STATUS_ERROR == status) {
log_warn(LD_GENERAL, "Failed to start port forwarding helper %s",
filename);
time_to_run_helper = now + TIME_TO_EXEC_FWHELPER_FAIL;
return;
}
-#ifdef MS_WINDOWS
- log_info(LD_GENERAL,
- "Started port forwarding helper (%s)", filename);
-#else
+
log_info(LD_GENERAL,
- "Started port forwarding helper (%s) with pid %d", filename,
- child_handle.pid);
-#endif
+ "Started port forwarding helper (%s) with pid '%d'",
+ filename, tor_process_get_pid(child_handle));
}
/* If child is running, read from its stdout and stderr) */
- if (PROCESS_STATUS_RUNNING == child_handle.status) {
+ if (child_handle && PROCESS_STATUS_RUNNING == child_handle->status) {
/* Read from stdout/stderr and log result */
retval = 0;
#ifdef MS_WINDOWS
- stdout_status = log_from_handle(child_handle.stdout_pipe, LOG_INFO);
- stderr_status = log_from_handle(child_handle.stderr_pipe, LOG_WARN);
+ stdout_status = log_from_handle(child_handle->stdout_pipe, LOG_INFO);
+ stderr_status = log_from_handle(child_handle->stderr_pipe, LOG_WARN);
/* If we got this far (on Windows), the process started */
retval = 0;
#else
- stdout_status = log_from_pipe(child_handle.stdout_handle,
+ stdout_status = log_from_pipe(child_handle->stdout_handle,
LOG_INFO, filename, &retval);
- stderr_status = log_from_pipe(child_handle.stderr_handle,
+ stderr_status = log_from_pipe(child_handle->stderr_handle,
LOG_WARN, filename, &retval);
#endif
if (retval) {
@@ -3928,7 +4134,7 @@ tor_check_port_forwarding(const char *filename, int dir_port, int or_port,
/* There was a failure */
retval = -1;
#ifdef MS_WINDOWS
- else if (tor_get_exit_code(child_handle, 0, NULL) !=
+ else if (!child_handle || tor_get_exit_code(child_handle, 0, NULL) !=
PROCESS_EXIT_RUNNING) {
/* process has exited or there was an error */
/* TODO: Do something with the process return value */
@@ -3951,10 +4157,10 @@ tor_check_port_forwarding(const char *filename, int dir_port, int or_port,
if (0 != retval) {
if (1 == retval) {
log_info(LD_GENERAL, "Port forwarding helper terminated");
- child_handle.status = PROCESS_STATUS_NOTRUNNING;
+ child_handle->status = PROCESS_STATUS_NOTRUNNING;
} else {
log_warn(LD_GENERAL, "Failed to read from port forwarding helper");
- child_handle.status = PROCESS_STATUS_ERROR;
+ child_handle->status = PROCESS_STATUS_ERROR;
}
/* TODO: The child might not actually be finished (maybe it failed or
diff --git a/src/common/util.h b/src/common/util.h
index c8cce39f3..3a68f3993 100644
--- a/src/common/util.h
+++ b/src/common/util.h
@@ -173,19 +173,15 @@ int n_bits_set_u8(uint8_t v);
#define HEX_CHARACTERS "0123456789ABCDEFabcdef"
void tor_strlower(char *s) ATTR_NONNULL((1));
void tor_strupper(char *s) ATTR_NONNULL((1));
-int tor_strisprint(const char *s) ATTR_PURE ATTR_NONNULL((1));
-int tor_strisnonupper(const char *s) ATTR_PURE ATTR_NONNULL((1));
-int strcmp_opt(const char *s1, const char *s2) ATTR_PURE;
-int strcmpstart(const char *s1, const char *s2) ATTR_PURE ATTR_NONNULL((1,2));
-int strcmp_len(const char *s1, const char *s2, size_t len)
- ATTR_PURE ATTR_NONNULL((1,2));
-int strcasecmpstart(const char *s1, const char *s2)
- ATTR_PURE ATTR_NONNULL((1,2));
-int strcmpend(const char *s1, const char *s2) ATTR_PURE ATTR_NONNULL((1,2));
-int strcasecmpend(const char *s1, const char *s2)
- ATTR_PURE ATTR_NONNULL((1,2));
-int fast_memcmpstart(const void *mem, size_t memlen,
- const char *prefix) ATTR_PURE;
+int tor_strisprint(const char *s) ATTR_NONNULL((1));
+int tor_strisnonupper(const char *s) ATTR_NONNULL((1));
+int strcmp_opt(const char *s1, const char *s2);
+int strcmpstart(const char *s1, const char *s2) ATTR_NONNULL((1,2));
+int strcmp_len(const char *s1, const char *s2, size_t len) ATTR_NONNULL((1,2));
+int strcasecmpstart(const char *s1, const char *s2) ATTR_NONNULL((1,2));
+int strcmpend(const char *s1, const char *s2) ATTR_NONNULL((1,2));
+int strcasecmpend(const char *s1, const char *s2) ATTR_NONNULL((1,2));
+int fast_memcmpstart(const void *mem, size_t memlen, const char *prefix);
void tor_strstrip(char *s, const char *strip) ATTR_NONNULL((1,2));
long tor_parse_long(const char *s, int base, long min,
@@ -197,17 +193,19 @@ double tor_parse_double(const char *s, double min, double max, int *ok,
uint64_t tor_parse_uint64(const char *s, int base, uint64_t min,
uint64_t max, int *ok, char **next);
const char *hex_str(const char *from, size_t fromlen) ATTR_NONNULL((1));
-const char *eat_whitespace(const char *s) ATTR_PURE;
-const char *eat_whitespace_eos(const char *s, const char *eos) ATTR_PURE;
-const char *eat_whitespace_no_nl(const char *s) ATTR_PURE;
-const char *eat_whitespace_eos_no_nl(const char *s, const char *eos) ATTR_PURE;
-const char *find_whitespace(const char *s) ATTR_PURE;
-const char *find_whitespace_eos(const char *s, const char *eos) ATTR_PURE;
-const char *find_str_at_start_of_line(const char *haystack, const char *needle)
- ATTR_PURE;
-int tor_mem_is_zero(const char *mem, size_t len) ATTR_PURE;
-int tor_digest_is_zero(const char *digest) ATTR_PURE;
-int tor_digest256_is_zero(const char *digest) ATTR_PURE;
+const char *eat_whitespace(const char *s);
+const char *eat_whitespace_eos(const char *s, const char *eos);
+const char *eat_whitespace_no_nl(const char *s);
+const char *eat_whitespace_eos_no_nl(const char *s, const char *eos);
+const char *find_whitespace(const char *s);
+const char *find_whitespace_eos(const char *s, const char *eos);
+const char *find_str_at_start_of_line(const char *haystack,
+ const char *needle);
+int string_is_C_identifier(const char *string);
+
+int tor_mem_is_zero(const char *mem, size_t len);
+int tor_digest_is_zero(const char *digest);
+int tor_digest256_is_zero(const char *digest);
char *esc_for_log(const char *string) ATTR_MALLOC;
const char *escaped(const char *string);
struct smartlist_t;
@@ -286,6 +284,16 @@ char *rate_limit_log(ratelim_t *lim, time_t now);
ssize_t write_all(tor_socket_t fd, const char *buf, size_t count,int isSocket);
ssize_t read_all(tor_socket_t fd, char *buf, size_t count, int isSocket);
+/** Status of an I/O stream. */
+enum stream_status {
+ IO_STREAM_OKAY,
+ IO_STREAM_EAGAIN,
+ IO_STREAM_TERM,
+ IO_STREAM_CLOSED
+};
+
+enum stream_status get_string_from_pipe(FILE *stream, char *buf, size_t count);
+
/** Return values from file_status(); see that function's documentation
* for details. */
typedef enum { FN_ERROR, FN_NOENT, FN_FILE, FN_DIR } file_status_t;
@@ -303,6 +311,7 @@ int check_private_dir(const char *dirname, cpd_check_t check,
const char *effective_user);
#define OPEN_FLAGS_REPLACE (O_WRONLY|O_CREAT|O_TRUNC)
#define OPEN_FLAGS_APPEND (O_WRONLY|O_CREAT|O_APPEND)
+#define OPEN_FLAGS_DONT_REPLACE (O_CREAT|O_EXCL|O_APPEND|O_WRONLY)
typedef struct open_file_t open_file_t;
int start_writing_to_file(const char *fname, int open_flags, int mode,
open_file_t **data_out);
@@ -324,6 +333,8 @@ int write_chunks_to_file(const char *fname, const struct smartlist_t *chunks,
int bin);
int append_bytes_to_file(const char *fname, const char *str, size_t len,
int bin);
+int write_bytes_to_new_file(const char *fname, const char *str, size_t len,
+ int bin);
/** Flag for read_file_to_str: open the file in binary mode. */
#define RFTS_BIN 1
@@ -337,7 +348,7 @@ const char *parse_config_line_from_str(const char *line,
char **key_out, char **value_out);
char *expand_filename(const char *filename);
struct smartlist_t *tor_listdir(const char *dirname);
-int path_is_relative(const char *filename) ATTR_PURE;
+int path_is_relative(const char *filename);
/* Process helpers */
void start_daemon(void);
@@ -348,12 +359,20 @@ void write_pidfile(char *filename);
void tor_check_port_forwarding(const char *filename,
int dir_port, int or_port, time_t now);
+typedef struct process_handle_t process_handle_t;
+int tor_spawn_background(const char *const filename, const char **argv,
#ifdef MS_WINDOWS
-HANDLE load_windows_system_library(const TCHAR *library_name);
+ LPVOID envp,
+#else
+ const char **envp,
#endif
+ process_handle_t **process_handle_out);
-#ifdef UTIL_PRIVATE
-/* Prototypes for private functions only used by util.c (and unit tests) */
+#define SPAWN_ERROR_MESSAGE "ERR: Failed to spawn background process - code "
+
+#ifdef MS_WINDOWS
+HANDLE load_windows_system_library(const TCHAR *library_name);
+#endif
/* Values of process_handle_t.status. PROCESS_STATUS_NOTRUNNING must be
* 0 because tor_check_port_forwarding depends on this being the initial
@@ -361,7 +380,10 @@ HANDLE load_windows_system_library(const TCHAR *library_name);
#define PROCESS_STATUS_NOTRUNNING 0
#define PROCESS_STATUS_RUNNING 1
#define PROCESS_STATUS_ERROR -1
-typedef struct process_handle_s {
+
+#ifdef UTIL_PRIVATE
+/*DOCDOC*/
+struct process_handle_t {
int status;
#ifdef MS_WINDOWS
HANDLE stdout_pipe;
@@ -374,16 +396,14 @@ typedef struct process_handle_s {
FILE *stderr_handle;
pid_t pid;
#endif // MS_WINDOWS
-} process_handle_t;
-
-int tor_spawn_background(const char *const filename, const char **argv,
- process_handle_t *process_handle);
+};
+#endif
/* Return values of tor_get_exit_code() */
#define PROCESS_EXIT_RUNNING 1
#define PROCESS_EXIT_EXITED 0
#define PROCESS_EXIT_ERROR -1
-int tor_get_exit_code(const process_handle_t process_handle,
+int tor_get_exit_code(const process_handle_t *process_handle,
int block, int *exit_code);
int tor_split_lines(struct smartlist_t *sl, char *buf, int len);
#ifdef MS_WINDOWS
@@ -399,6 +419,21 @@ ssize_t tor_read_all_from_process_stdout(
ssize_t tor_read_all_from_process_stderr(
const process_handle_t *process_handle, char *buf, size_t count);
char *tor_join_win_cmdline(const char *argv[]);
+
+int tor_process_get_pid(process_handle_t *process_handle);
+#ifdef MS_WINDOWS
+HANDLE tor_process_get_stdout_pipe(process_handle_t *process_handle);
+#else
+FILE *tor_process_get_stdout_pipe(process_handle_t *process_handle);
+#endif
+
+int tor_terminate_process(process_handle_t *process_handle);
+void tor_process_handle_destroy(process_handle_t *process_handle,
+ int also_terminate_process);
+
+#ifdef UTIL_PRIVATE
+/* Prototypes for private functions only used by util.c (and unit tests) */
+
void format_helper_exit_status(unsigned char child_state,
int saved_errno, char *hex_errno);
diff --git a/src/config/geoip b/src/config/geoip
index 1cd6ecd35..9ada6a301 100644
--- a/src/config/geoip
+++ b/src/config/geoip
@@ -1,4 +1,4 @@
-# Last updated based on August 2 2011 Maxmind GeoLite Country
+# Last updated based on November 1 2011 Maxmind GeoLite Country
# wget http://geolite.maxmind.com/download/geoip/database/GeoIPCountryCSV.zip
# cut -d, -f3-5 < GeoIPCountryWhois.csv|sed 's/"//g' > geoip
16777216,16777471,AU
@@ -68,7 +68,8 @@
29884416,29949951,TW
29949952,30015487,KR
30015488,30408703,CN
-30408704,33554431,KR
+30408704,33488895,KR
+33488896,33554431,AU
33554432,34603007,FR
34603008,34604543,EU
34604544,34605055,DE
@@ -79,13 +80,19 @@
34636800,34637311,DE
34637312,34646527,EU
34646528,34647551,DE
-34647552,34664447,EU
+34647552,34648575,EU
+34648576,34649087,GR
+34649088,34659327,EU
+34659328,34660351,GR
+34660352,34664447,EU
34664448,34668543,DE
34668544,34673663,EU
34673664,34674687,DE
34674688,34733055,EU
34733056,34734079,DE
-34734080,34803711,EU
+34734080,34754559,EU
+34754560,34758655,GR
+34758656,34803711,EU
34803712,34807807,IT
34807808,34861055,EU
34861056,34865151,DE
@@ -106,8 +113,7 @@
34928640,34930687,EU
34930688,34938879,DE
34938880,34947071,FR
-34947072,34952703,EU
-34952704,34953215,SE
+34947072,34953215,EU
34953216,34954751,AT
34954752,34955263,NL
34955264,34959359,AT
@@ -120,16 +126,31 @@
34994176,34995711,FR
34995712,34995967,EU
34995968,34996223,NL
-34996224,35000319,EU
-35000320,35002367,SE
-35002368,35054079,EU
+34996224,34999295,EU
+34999296,35001343,GB
+35001344,35002367,FR
+35002368,35008511,EU
+35008512,35009023,FR
+35009024,35010303,EU
+35010304,35010559,BE
+35010560,35011583,FR
+35011584,35020799,EU
+35020800,35037183,GB
+35037184,35054079,FR
35054080,35054591,SE
-35054592,35055615,EU
+35054592,35055103,EU
+35055104,35055359,ES
+35055360,35055615,EU
35055616,35055871,GB
35055872,35056127,NL
-35056128,35069951,EU
-35069952,35074047,SE
-35074048,35127295,EU
+35056128,35059199,EU
+35059200,35059711,GB
+35059712,35060735,EU
+35060736,35061247,GB
+35061248,35061759,FR
+35061760,35090431,EU
+35090432,35094527,GR
+35094528,35127295,EU
35127296,35651583,GB
35651584,36700159,IT
36700160,36962303,AE
@@ -222,7 +243,9 @@
201620304,201620311,CA
201620312,201636503,US
201636504,201636511,PR
-201636512,201674095,US
+201636512,201673767,US
+201673768,201673775,CA
+201673776,201674095,US
201674096,201674111,CA
201674112,201745663,US
201745664,201745671,PR
@@ -238,9 +261,7 @@
202385408,202385919,PR
202385920,202517983,US
202517984,202517991,PR
-202517992,202621343,US
-202621344,202621351,PR
-202621352,202621431,US
+202517992,202621431,US
202621432,202621439,PR
202621440,202621479,US
202621480,202621487,PR
@@ -287,13 +308,14 @@
203658384,203658399,US
203658400,203658415,PR
203658416,203658423,VI
-203658424,203658479,US
+203658424,203658431,US
+203658432,203658479,VI
203658480,203658751,PR
203658752,203658831,VI
-203658832,203658847,US
-203658848,203658911,PR
-203658912,203658927,VI
-203658928,203658951,PR
+203658832,203658863,US
+203658864,203658911,PR
+203658912,203658935,VI
+203658936,203658951,PR
203658952,203658967,US
203658968,203658991,VI
203658992,203659007,PR
@@ -317,9 +339,10 @@
204047120,204047231,PR
204047232,204047247,VI
204047248,204047255,US
-204047256,204047263,PR
+204047256,204047263,VI
204047264,204047279,US
-204047280,204047303,VI
+204047280,204047295,PR
+204047296,204047303,US
204047304,204047311,PR
204047312,204047335,VI
204047336,204047359,US
@@ -336,11 +359,11 @@
204047552,204047559,VI
204047560,204047567,PR
204047568,204047591,VI
-204047592,204047999,PR
-204048000,204048007,VI
+204047592,204048007,PR
204048008,204048015,US
204048016,204048031,VI
-204048032,204048055,PR
+204048032,204048047,PR
+204048048,204048055,VI
204048056,204048063,US
204048064,204048127,VI
204048128,204048383,PR
@@ -376,17 +399,15 @@
209845144,209845151,DE
209845152,209867103,US
209867104,209867111,CA
-209867112,209965359,US
-209965360,209965367,PR
-209965368,209988527,US
+209867112,209988527,US
209988528,209988535,VI
209988536,210022479,US
210022480,210022487,PR
210022488,210439559,US
210439560,210439567,PR
-210439568,210784255,US
-210784256,210784383,BO
-210784384,210785023,US
+210439568,210458623,US
+210458624,210458631,PR
+210458632,210785023,US
210785024,210785575,BO
210785576,210785583,US
210785584,210785599,BO
@@ -400,9 +421,7 @@
211126784,211126911,PR
211126912,211129607,US
211129608,211129615,PR
-211129616,211313647,US
-211313648,211313655,PR
-211313656,211363751,US
+211129616,211363751,US
211363752,211363759,PR
211363760,211368655,US
211368656,211368663,PR
@@ -412,12 +431,7 @@
211410120,211410135,PR
211410136,211536367,US
211536368,211536375,PR
-211536376,211595575,US
-211595576,211595583,VI
-211595584,211595615,US
-211595616,211595623,VI
-211595624,211595639,PR
-211595640,211596823,US
+211536376,211596823,US
211596824,211596831,VI
211596832,211597055,US
211597056,211597071,VI
@@ -472,7 +486,9 @@
212787200,212788223,PR
212788224,212788479,US
212788480,212788607,VI
-212788608,212788631,US
+212788608,212788615,US
+212788616,212788623,VI
+212788624,212788631,US
212788632,212788647,VI
212788648,212788655,PR
212788656,212788663,VI
@@ -481,16 +497,14 @@
212788800,212788807,US
212788808,212788815,VI
212788816,212788823,PR
-212788824,212788863,US
+212788824,212788847,US
+212788848,212788863,VI
212788864,212789007,PR
212789008,212789039,US
-212789040,212789055,VI
-212789056,212789063,PR
-212789064,212789079,VI
+212789040,212789079,VI
212789080,212789087,US
212789088,212789095,VI
-212789096,212789111,US
-212789112,212789119,PR
+212789096,212789119,US
212789120,212789127,VI
212789128,212789135,US
212789136,212789143,PR
@@ -508,24 +522,22 @@
212791456,212791479,VI
212791480,212791807,PR
212791808,212791815,US
-212791816,212791839,VI
-212791840,212792191,US
+212791816,212792063,VI
+212792064,212792191,US
212792192,212792199,PR
-212792200,212792239,VI
-212792240,212792263,PR
-212792264,212792271,US
+212792200,212792231,VI
+212792232,212792239,US
+212792240,212792247,PR
+212792248,212792271,US
212792272,212792279,VI
212792280,212792287,US
212792288,212792319,PR
212792320,212793103,US
-212793104,212793111,VI
+212793104,212793111,PR
212793112,212793119,US
212793120,212793127,VI
-212793128,212793135,PR
-212793136,212793143,VI
-212793144,212793167,US
-212793168,212793175,VI
-212793176,212793199,US
+212793128,212793143,PR
+212793144,212793199,US
212793200,212793207,VI
212793208,212793215,PR
212793216,212793311,US
@@ -533,8 +545,8 @@
212793328,212793343,US
212793344,212794367,VI
212794368,212794559,PR
-212794560,212794575,US
-212794576,212794583,VI
+212794560,212794567,US
+212794568,212794583,VI
212794584,212794599,US
212794600,212794783,PR
212794784,212794791,VI
@@ -615,9 +627,12 @@
214187808,214187815,PR
214187816,214187823,US
214187824,214187831,PR
-214187832,214187887,US
-214187888,214187895,PR
-214187896,214188031,VI
+214187832,214187839,US
+214187840,214187863,PR
+214187864,214187871,VI
+214187872,214187887,US
+214187888,214187903,PR
+214187904,214188031,VI
214188032,214237247,US
214237248,214237311,PR
214237312,214249471,US
@@ -629,8 +644,8 @@
214698008,214698015,PR
214698016,214698023,US
214698024,214698031,PR
-214698032,214698095,VI
-214698096,214698103,PR
+214698032,214698087,VI
+214698088,214698103,PR
214698104,214698135,VI
214698136,214698143,PR
214698144,214698159,VI
@@ -641,16 +656,17 @@
214698272,214698279,US
214698280,214698319,VI
214698320,214698335,PR
-214698336,214698343,US
-214698344,214698351,VI
-214698352,214698359,US
+214698336,214698351,US
+214698352,214698359,VI
214698360,214698367,PR
-214698368,214698375,VI
-214698376,214698383,US
+214698368,214698383,US
214698384,214698639,PR
214698640,214698655,VI
-214698656,214699231,PR
-214699232,214699295,VI
+214698656,214698919,PR
+214698920,214698927,VI
+214698928,214699231,PR
+214699232,214699263,US
+214699264,214699295,VI
214699296,214699303,US
214699304,214699311,VI
214699312,214699335,PR
@@ -665,7 +681,9 @@
214700008,214700015,PR
214700016,214858655,US
214858656,214858671,NL
-214858672,216417663,US
+214858672,215001095,US
+215001096,215001103,VI
+215001104,216417663,US
216417664,216417727,PR
216417728,216627287,US
216627288,216627295,PR
@@ -698,7 +716,6 @@
234951680,234952703,HK
234952704,234954751,JP
234954752,234971135,NZ
-234971136,234979327,IN
234979328,235012095,MY
235012096,235077631,AU
235077632,235143167,JP
@@ -716,7 +733,6 @@
241602560,241604607,MY
241604608,241605631,ID
241605632,241606655,CN
-241606656,241614847,IN
241614848,241623039,JP
241623040,241627135,IN
241627136,241631231,HK
@@ -770,12 +786,18 @@
355993888,355993895,IT
355993896,368674047,US
368674048,368674303,ES
-368674304,405012479,US
+368674304,386924543,US
+386924544,387055615,CA
+387055616,387121151,PR
+387121152,387164415,US
+387164416,387164671,CA
+387164672,387448831,US
+387973120,390332415,US
+402653184,405012479,US
405012480,405143551,CA
405143552,405180415,US
405180416,405184511,CA
-405184512,405192703,US
-405209088,405372927,US
+405184512,405372927,US
405372928,405422079,PR
405422080,405798911,US
405798912,405831679,CA
@@ -791,7 +813,7 @@
406003712,406011903,US
406011904,406028287,BS
406028288,406110207,US
-406110208,406126591,CA
+406110208,406142975,CA
406142976,406147071,US
406147072,406151167,CA
406159360,406175743,US
@@ -810,15 +832,19 @@
408518656,408535039,US
408535040,408551423,CA
408551424,408719359,US
-408719360,408723455,VC
+408719360,408723455,LC
408723456,409337855,US
409337856,409354239,CA
409370624,409731071,US
409731072,409862143,CA
409862144,410124287,US
-410124288,410177751,CA
+410124288,410174779,CA
+410174780,410174787,US
+410174788,410177751,CA
410177752,410177755,US
-410177756,410178463,CA
+410177756,410178343,CA
+410178344,410178347,US
+410178348,410178463,CA
410178464,410178467,US
410178468,410180643,CA
410180644,410180647,US
@@ -826,15 +852,13 @@
410180696,410180703,US
410180704,410180711,CA
410180712,410180715,US
-410180716,410180771,CA
+410180716,410180759,CA
+410180760,410180763,US
+410180764,410180771,CA
410180772,410180775,US
-410180776,410185355,CA
-410185356,410185359,US
-410185360,410185407,CA
+410180776,410185407,CA
410185408,410185411,US
-410185412,410185519,CA
-410185520,410185523,US
-410185524,410185539,CA
+410185412,410185539,CA
410185540,410185543,US
410185544,410185551,CA
410185552,410185559,US
@@ -875,7 +899,9 @@
411779072,411828223,PR
411828224,411893759,US
411893760,411975679,CA
-411975680,412221439,US
+411975680,411979775,US
+411979776,411983871,CA
+411983872,412221439,US
412221440,412229631,CA
412254208,412483583,US
412483584,412549119,CA
@@ -888,6 +914,7 @@
412708864,412909567,US
412909568,412942335,CA
412942336,412946431,US
+412975104,413007871,CA
413007872,413908991,US
413908992,413925375,PR
413925376,415760383,US
@@ -900,8 +927,7 @@
416546816,416579583,CA
416612352,416628735,US
416628736,416636927,CA
-416636928,416641023,US
-416645120,416743423,US
+416636928,416743423,US
416743424,416776191,CA
416776192,417202175,US
417202176,417267711,CA
@@ -996,7 +1022,6 @@
459292672,459293695,NZ
459293696,459297791,JP
459297792,459298815,IN
-459298816,459299839,PK
459300864,459309055,SG
459309056,459325439,KR
459325440,459333631,AU
@@ -1205,6 +1230,7 @@
520318976,520323071,ES
520323072,520325119,CH
520325120,520327167,FR
+520327168,520329215,DE
520329216,520331263,SE
520331264,520339455,IT
520339456,520343551,UA
@@ -1212,17 +1238,25 @@
520355840,520421375,ES
520421376,520486911,AT
520486912,520488959,NL
-520488960,520491007,IT
+520488960,520489983,IT
+520489984,520491007,RU
520491008,520493567,GB
-520493568,520494079,FR
-520494080,520495871,IT
-520495872,520496383,DE
-520496384,520497663,IT
-520497664,520497919,FR
-520497920,520500479,IT
-520500480,520500735,DE
-520500736,520501759,IT
+520493568,520494335,FR
+520494336,520494591,TR
+520494592,520495103,CH
+520495104,520496383,DE
+520496384,520496895,TR
+520496896,520497151,ES
+520497152,520497407,FR
+520497408,520497663,ES
+520497664,520498175,FR
+520498176,520498687,CH
+520498688,520499711,FR
+520499712,520501247,DE
+520501248,520501503,IL
+520501504,520501759,AE
520501760,520503295,GB
+520503296,520505343,PL
520505344,520507391,GB
520507392,520511487,TR
520511488,520519679,UA
@@ -1230,6 +1264,7 @@
520552448,520554495,NL
520554496,520556543,GB
520556544,520560639,FI
+520560640,520562687,TR
520562688,520564735,PL
520564736,520566783,IE
520566784,520568831,CH
@@ -1237,7 +1272,10 @@
520589312,520593407,IT
520593408,520595455,AM
520595456,520597503,MK
-520597504,520601599,DE
+520597504,520598015,DE
+520598016,520598047,IT
+520598048,520598079,FR
+520598080,520601599,DE
520601600,520609791,SI
520609792,520613887,RU
520613888,520615935,CZ
@@ -1250,7 +1288,9 @@
520761344,520763391,IT
520763392,520765439,CZ
520765440,520781823,RU
-520781824,520822783,CH
+520781824,520822271,CH
+520822272,520822527,DE
+520822528,520822783,CH
520822784,520824831,IT
520824832,520826879,RO
520826880,520828927,QA
@@ -1261,7 +1301,11 @@
520882176,520884223,IT
520884224,520888319,MK
520888320,520896511,DE
-520896512,520898559,BE
+520896512,520897023,BE
+520897024,520897151,LU
+520897152,520897791,BE
+520897792,520897807,LU
+520897808,520898559,BE
520898560,520902655,GB
520902656,520902784,NL
520902785,520912895,GB
@@ -1294,6 +1338,7 @@
521101312,521103359,IT
521103360,521105407,GB
521105408,521107455,IS
+521107456,521109503,FI
521109504,521142271,SI
521142272,521404415,DE
521404416,521535487,NL
@@ -1305,9 +1350,13 @@
521545728,521547775,GB
521547776,521551871,AL
521551872,521553919,DE
-521555968,521558015,NL
+521553920,521555967,GB
+521555968,521556031,US
+521556032,521558015,NL
521558016,521560063,CY
521560064,521562111,PL
+521562112,521562879,DE
+521562880,521564159,GB
521564160,521566207,GR
521566208,521568255,LU
521568256,521601023,PT
@@ -1350,7 +1399,9 @@
521746432,521748479,NL
521748480,521750527,SE
521750528,521752575,PS
-521752576,521754623,FR
+521752576,521754367,FR
+521754368,521754383,US
+521754384,521754623,FR
521754624,521756671,IR
521756672,521758719,NL
521758720,521760767,IR
@@ -1386,7 +1437,10 @@
522027008,522059775,RU
522059776,522125311,CZ
522125312,522133503,MD
-522133504,522135551,NL
+522133504,522134783,NL
+522134784,522134911,GB
+522134912,522135551,NL
+522135552,522137599,IT
522137600,522141695,CH
522141696,522143743,RU
522143744,522145791,CZ
@@ -1459,7 +1513,10 @@
523018240,523022335,IT
523022336,523024639,RU
523024640,523024895,GB
-523024896,523026431,RU
+523024896,523025407,RU
+523025408,523025663,UA
+523025664,523025919,CH
+523025920,523026431,NL
523026432,523030527,TR
523030528,523034623,FR
523034624,523038719,SE
@@ -1531,7 +1588,7 @@
528748544,528752639,CZ
528752640,528760831,RO
528760832,528762879,PL
-528762880,528764927,RU
+528762880,528764927,AM
528764928,528769023,RO
528769024,528793599,RU
528793600,528795647,RO
@@ -1548,6 +1605,8 @@
528838656,528840703,UA
528840704,528842751,RU
528842752,528859135,CH
+528859136,528861183,RO
+528861184,528863231,RU
528863232,528867327,KZ
528867328,528887807,RU
528887808,528891903,PL
@@ -1571,20 +1630,20 @@
528990208,528994303,PL
528994304,528996351,UZ
528996352,528998399,LT
-529002496,529006591,RU
+528998400,529006591,RU
529006592,529268735,NL
529268736,529530879,TR
529530880,529596415,UA
529596416,529661951,TR
529661952,529727487,GE
529727488,529793023,HR
-529793024,529826815,RU
-529826816,529827839,GB
-529827840,529828863,RO
+529793024,529825791,RU
+529825792,529826303,UA
+529826304,529826815,RU
+529826816,529827839,DE
+529827840,529828863,CZ
529828864,529829887,RU
-529829888,529830399,UA
-529830400,529830911,RU
-529830912,529831935,DE
+529829888,529831935,NL
529831936,529832959,UA
529832960,529835007,RU
529835008,529836031,KG
@@ -1602,7 +1661,8 @@
529846784,529848319,RU
529848320,529855487,CZ
529855488,529856511,RU
-529856512,529857535,CZ
+529856512,529857279,CZ
+529857280,529857535,KZ
529857536,529858559,UA
529858560,529924095,NL
529924096,529989631,DE
@@ -1619,6 +1679,7 @@
531103744,531169279,IL
531169280,531177471,KZ
531177472,531179519,GB
+531179520,531181567,FR
531181568,531183615,GB
531183616,531185663,NL
531185664,531193855,TR
@@ -1632,7 +1693,8 @@
531234816,531236863,IE
531236864,531238911,FR
531238912,531240959,LV
-531240960,531243007,SE
+531240960,531242751,SE
+531242752,531243007,DE
531243008,531245055,RU
531245056,531247103,IT
531247104,531251199,IR
@@ -1646,6 +1708,7 @@
531276800,531277311,GB
531277312,531277823,US
531277824,531279871,RU
+531279872,531281919,CZ
531281920,531283967,RU
531283968,531292159,DE
531292160,531333119,AZ
@@ -1663,6 +1726,7 @@
531341312,531349503,KZ
531349504,531351551,RU
531351552,531355647,NL
+531355648,531357695,IR
531357696,531361791,HU
531361792,531365887,CH
531365888,531366399,DE
@@ -1677,13 +1741,17 @@
531400704,531402751,UA
531402752,531404799,LU
531404800,531406847,FI
-531406848,531415039,IM
531415040,531423231,RU
-531423232,531425279,NO
+531423232,531423487,GB
+531423488,531425279,NO
531425280,531425325,FR
531425326,531425327,GB
531425328,531425391,FR
-531425392,531431423,GB
+531425392,531426303,GB
+531426304,531426431,FR
+531426432,531426559,GB
+531426560,531426623,FR
+531426624,531431423,GB
531431424,531496959,RO
531496960,531628031,PL
531628032,531660799,TR
@@ -1692,6 +1760,7 @@
531695616,531697663,LT
531697664,531699711,GB
531699712,531701759,CZ
+531701760,531703807,NL
531703808,531705855,IT
531705856,531707903,ES
531707904,531709951,GR
@@ -1747,6 +1816,7 @@
532414464,532676607,IT
532676608,532692991,GE
532692992,532701183,CZ
+532701184,532703231,GB
532703232,532704511,RU
532704512,532704767,IN
532704768,532705279,RU
@@ -1759,35 +1829,7 @@
532736000,532738047,RU
532738048,532740095,GB
532740096,532742143,KG
-532742144,532742655,GB
-532742656,532742783,CN
-532742784,532742911,GB
-532742912,532743935,CN
-532743936,532744095,GB
-532744096,532744127,CN
-532744128,532744191,GB
-532744192,532744319,IN
-532744320,532744383,US
-532744384,532744479,CN
-532744480,532744511,IN
-532744512,532744575,BE
-532744576,532744639,GB
-532744640,532745215,CN
-532745216,532745599,GB
-532745600,532745663,CN
-532745664,532745727,US
-532745728,532745791,CN
-532745792,532745855,GB
-532745856,532745983,CN
-532745984,532746015,BE
-532746016,532746047,CN
-532746048,532746111,AU
-532746112,532746143,BE
-532746144,532746207,GB
-532746208,532746215,CN
-532746216,532746223,ES
-532746224,532746231,GB
-532746232,532746239,CN
+532742144,532746239,GB
532746240,532750335,IT
532750336,532752383,SM
532752384,532754431,BE
@@ -1816,26 +1858,208 @@
532807680,533200895,IT
533200896,533233663,TR
533233664,533250047,IE
-533250048,533262335,RU
+533250048,533254143,RU
+533254144,533256191,NL
+533256192,533262335,RU
533262336,533264383,ES
533264384,533266431,RU
-533266432,533266687,NL
-533266688,533266943,DE
-533266944,533267199,NL
-533267200,533267455,AX
-533267456,533267711,AL
-533267712,533267967,AD
-533267968,533268223,AM
-533268224,533268479,AT
-533268480,533268735,AZ
-533268736,533268991,BH
-533268992,533269247,BY
-533269248,533269503,BE
-533269504,533269759,BA
-533269760,533270015,BG
-533270016,533270271,HR
-533270272,533270527,CY
-533270528,533270783,CZ
+533266432,533266435,US
+533266436,533266439,CN
+533266440,533266443,JP
+533266444,533266447,DE
+533266448,533266451,FR
+533266452,533266455,GB
+533266456,533266459,BR
+533266460,533266463,IT
+533266464,533266467,CA
+533266468,533266471,IN
+533266472,533266475,RU
+533266476,533266479,ES
+533266480,533266483,AU
+533266484,533266487,MX
+533266488,533266491,KR
+533266492,533266495,NL
+533266496,533266499,TR
+533266500,533266503,ID
+533266504,533266507,CH
+533266508,533266511,PL
+533266512,533266515,BE
+533266516,533266519,SE
+533266520,533266523,SA
+533266524,533266527,TW
+533266528,533266531,SJ
+533266532,533266535,AT
+533266536,533266539,AR
+533266540,533266543,ZA
+533266544,533266547,IR
+533266548,533266551,TH
+533266552,533266555,DK
+533266556,533266559,GR
+533266560,533266563,AE
+533266564,533266567,VE
+533266568,533266571,CO
+533266572,533266575,FI
+533266576,533266579,MV
+533266580,533266583,PT
+533266584,533266587,HK
+533266588,533266591,SG
+533266592,533266595,EG
+533266596,533266599,NG
+533266600,533266603,IL
+533266604,533266607,IE
+533266608,533266611,CL
+533266612,533266615,CZ
+533266616,533266619,PH
+533266620,533266623,PK
+533266624,533266627,RO
+533266628,533266631,DZ
+533266632,533266635,PE
+533266636,533266639,NZ
+533266640,533266643,KZ
+533266644,533266647,UA
+533266648,533266651,KW
+533266652,533266655,QA
+533266656,533266687,DE
+533266688,533266691,HU
+533266692,533266695,BD
+533266696,533266699,VN
+533266700,533266703,MA
+533266704,533266707,SK
+533266708,533266711,AO
+533266712,533266715,IQ
+533266716,533266719,LY
+533266720,533266723,SD
+533266724,533266727,EC
+533266728,533266731,HR
+533266732,533266735,SY
+533266736,533266739,OM
+533266740,533266743,BY
+533266744,533266747,LU
+533266748,533266751,AZ
+533266752,533266755,DO
+533266756,533266759,LK
+533266760,533266763,SI
+533266764,533266767,FR
+533266768,533266771,BG
+533266772,533266775,TN
+533266776,533266779,GT
+533266780,533266783,UY
+533266784,533266787,LB
+533266788,533266791,UZ
+533266792,533266795,RS
+533266796,533266799,LT
+533266800,533266803,MM
+533266804,533266807,CR
+533266808,533266811,KE
+533266812,533266815,ET
+533266816,533266819,YE
+533266820,533266823,PA
+533266824,533266827,JO
+533266828,533266831,LV
+533266832,533266835,CY
+533266836,533266839,TZ
+533266840,533266843,CI
+533266844,533266847,CM
+533266848,533266851,SV
+533266852,533266855,BH
+533266856,533266859,TT
+533266860,533266863,EE
+533266864,533266867,BO
+533266868,533266871,GH
+533266872,533266875,PY
+533266876,533266879,UG
+533266880,533266883,AF
+533266884,533266887,BA
+533266888,533266891,ZM
+533266892,533266895,HN
+533266896,533266899,NP
+533266900,533266903,GQ
+533266904,533266907,JM
+533266908,533266911,IS
+533266912,533266943,DE
+533266944,533266947,SN
+533266948,533266951,CD
+533266952,533266955,GA
+533266956,533266959,US
+533266960,533266963,BN
+533266964,533266967,CG
+533266968,533266971,AL
+533266972,533266975,NA
+533266976,533266979,KH
+533266980,533266983,GE
+533266984,533266987,MK
+533266988,533266991,MU
+533266992,533266995,ML
+533266996,533266999,AM
+533267000,533267003,PG
+533267004,533267007,BF
+533267008,533267011,MG
+533267012,533267015,MT
+533267016,533267019,TD
+533267020,533267023,BS
+533267024,533267027,HT
+533267028,533267031,BJ
+533267032,533267035,NI
+533267036,533267039,LS
+533267040,533267043,MN
+533267044,533267047,RW
+533267048,533267051,NE
+533267052,533267055,TJ
+533267056,533267059,ZW
+533267060,533267063,MD
+533267064,533267067,MW
+533267068,533267071,KG
+533267072,533267075,GN
+533267076,533267079,BB
+533267080,533267083,ME
+533267084,533267087,MR
+533267088,533267091,SR
+533267092,533267095,SZ
+533267096,533267099,FJ
+533267100,533267103,TG
+533267104,533267107,ER
+533267108,533267111,GY
+533267112,533267115,CF
+533267116,533267119,SL
+533267120,533267123,LS
+533267124,533267127,CV
+533267128,533267131,BI
+533267132,533267135,MV
+533267136,533267139,BZ
+533267140,533267143,BT
+533267144,533267147,DJ
+533267148,533267151,AG
+533267152,533267155,GM
+533267156,533267159,LC
+533267160,533267163,LR
+533267164,533267167,SC
+533267168,533267199,DE
+533267200,533267423,US
+533267424,533267455,DE
+533267456,533267679,CN
+533267680,533267711,DE
+533267712,533267935,JP
+533267936,533268223,DE
+533268224,533268447,FR
+533268448,533268479,DE
+533268480,533268703,GB
+533268704,533268735,DE
+533268736,533268959,BR
+533268960,533268991,DE
+533268992,533269215,IT
+533269216,533269247,DE
+533269248,533269471,CA
+533269472,533269503,DE
+533269504,533269727,IN
+533269728,533269759,DE
+533269760,533269983,ES
+533269984,533270015,DE
+533270016,533270239,AU
+533270240,533270271,DE
+533270272,533270495,KR
+533270496,533270527,DE
+533270528,533270751,NL
+533270752,533270783,DE
533270784,533271039,DK
533271040,533271295,EE
533271296,533271551,FO
@@ -2041,6 +2265,7 @@
533331968,533397503,UA
533397504,533463039,KW
533463040,533479423,RU
+533479424,533481471,DE
533481472,533483519,NO
533483520,533485567,FR
533485568,533487615,LU
@@ -2067,17 +2292,33 @@
533817344,533817344,TR
533817345,533819391,CY
533819392,533823487,DE
-533823488,533823743,CD
-533823744,533825535,BE
-533827584,533831679,IS
+533823488,533823551,CD
+533823552,533823552,BE
+533823553,533823612,CD
+533823613,533823616,BE
+533823617,533823644,CD
+533823645,533823648,BE
+533823649,533823660,CD
+533823661,533823664,BE
+533823665,533823676,CD
+533823677,533823680,BE
+533823681,533823692,CD
+533823693,533823696,BE
+533823697,533823708,CD
+533823709,533823712,BE
+533823713,533823724,CD
+533823725,533825535,BE
+533825536,533831679,IS
533831680,533835775,DE
533835776,533837823,SE
533837824,533839871,DE
533839872,533856255,IS
533856256,533858303,FR
-533858304,533860351,HU
-533860352,533860863,DE
-533860864,533862399,NL
+533858304,533859343,HU
+533859344,533859351,SK
+533859352,533860351,HU
+533860352,533861375,DE
+533861376,533862399,NL
533862400,533864447,GB
533864448,533889023,TR
533889024,533891071,GB
@@ -2100,7 +2341,16 @@
533970944,533987327,SE
533987328,534118399,DE
534118400,534151167,KW
-534151168,534183935,DE
+534151168,534157759,DE
+534157760,534157823,US
+534157824,534166527,DE
+534166528,534166783,AU
+534166784,534167039,PL
+534167040,534167295,TR
+534167296,534175743,DE
+534175744,534179839,NL
+534179840,534181887,US
+534181888,534183935,DE
534183936,534249471,RO
534249472,534253567,GB
534253568,534257407,FR
@@ -2118,9 +2368,21 @@
534296576,534298623,BA
534298624,534306815,HR
534306816,534308863,SE
-534308864,534310911,IE
+534308864,534309943,IE
+534309944,534309967,GB
+534309968,534310911,IE
534310912,534315007,IT
534315008,534347775,HR
+534347776,534355967,GB
+534355968,534364159,GR
+534364160,534366207,FI
+534366208,534368255,IT
+534368256,534370303,IR
+534370304,534372351,AT
+534372352,534374399,KW
+534374400,534376447,FR
+534376448,534378495,IE
+534378496,534380543,FR
534380544,534511615,AE
534511616,534544383,DE
534544384,534546431,RO
@@ -2134,11 +2396,13 @@
534648832,534650879,CH
534650880,534652927,RU
534652928,534654975,AL
-534654976,534663167,GB
+534654976,534659583,GB
+534659584,534661119,CZ
+534661120,534663167,US
534663168,534675455,ES
534675456,534691839,GB
534691840,534693887,FR
-534693888,534695935,GB
+534693888,534700031,GB
534700032,534708223,JO
534708224,534740991,TR
534740992,534749183,BA
@@ -2150,7 +2414,9 @@
534767616,534769663,HU
534769664,534773759,IT
534773760,536870911,DE
-536870912,539624567,US
+536870912,539623999,US
+539624000,539624031,NL
+539624032,539624567,US
539624568,539624575,IE
539624576,539624703,US
539624704,539624735,GB
@@ -2241,7 +2507,8 @@
540813184,540813247,NL
540813248,540813287,US
540813288,540813295,DE
-540813296,540813311,US
+540813296,540813303,SG
+540813304,540813311,US
540813312,540813567,NL
540813568,540813639,DE
540813640,540813671,TW
@@ -2299,7 +2566,9 @@
604504064,605028351,JP
605028352,606412799,CN
606412800,606413823,HK
-606413824,606420991,CN
+606413824,606414335,CN
+606414336,606414591,AU
+606414592,606420991,CN
606420992,606437375,ID
606437376,606470143,KH
606470144,606601215,KR
@@ -2331,7 +2600,8 @@
654835712,655359999,TW
655360000,656408575,KR
656408576,658505727,PK
-658505728,661651455,CN
+658505728,660602879,CN
+660602880,661651455,HK
661651456,662700031,KR
662700032,666894335,CN
666894336,671088639,ID
@@ -2445,6 +2715,9 @@
692936704,692940799,ZA
692940800,692942847,MA
692942848,692944895,GA
+692944896,692946943,MZ
+692946944,692948991,EG
+692948992,692951039,ZM
692969472,692971519,TZ
692973568,692975615,MZ
692975616,692977663,EG
@@ -2457,7 +2730,7 @@
692984832,692987903,ZA
692987904,692988927,GH
692988928,692989951,ZW
-692989952,692990975,BF
+692989952,692991999,BF
692992000,692993023,MW
692993024,692994047,EG
692994048,692995071,TZ
@@ -2509,7 +2782,6 @@
693045248,693046271,KE
693046272,693047295,ZW
693047296,693049343,ZA
-693049344,693050367,SD
693050368,693051391,ZW
693051392,693052415,BW
693052416,693054463,ZA
@@ -2524,6 +2796,15 @@
693064704,693065727,GH
693065728,693066751,MW
693066752,693067775,ZA
+693067776,693068799,GH
+693068800,693069823,TZ
+693069824,693071871,ZA
+693071872,693072895,ZW
+693072896,693073919,NG
+693074944,693075967,CV
+693075968,693076991,CM
+693076992,693078015,ZW
+693084160,693085183,MU
693101568,693102591,KE
693102592,693103615,CD
693103616,693104639,GN
@@ -2630,7 +2911,7 @@
700342272,700350463,NA
700350464,700358655,UG
700358656,700366847,MZ
-700366848,700375039,UG
+700366848,700375039,MW
700375040,700376063,CM
700376064,700377087,NE
700377088,700378111,KE
@@ -2652,7 +2933,7 @@
700408832,700409855,CM
700409856,700410879,LR
700410880,700411903,NG
-700411904,700412927,KE
+700411904,700412927,ZA
700412928,700413951,ZM
700413952,700414975,SC
700414976,700432383,ZA
@@ -2672,7 +2953,9 @@
700588032,700588286,KM
700588287,700589567,A2
700589568,700589695,TZ
-700589696,700592383,A2
+700589696,700590335,A2
+700590336,700590591,NE
+700590592,700592383,A2
700592384,700592639,KE
700592640,700593151,A2
700593152,700594175,NG
@@ -2721,7 +3004,9 @@
701382656,701390847,CI
701390848,701399039,GA
701399040,701407231,EG
-701407232,701415423,CA
+701407232,701408511,CA
+701408512,701408767,ZA
+701408768,701415423,CA
701415424,701423615,ZA
701423616,701431807,NG
701431808,701439999,CI
@@ -2997,7 +3282,9 @@
771751936,771817471,RU
771817472,771948543,TR
771948544,772014079,RU
-772014080,772050575,DE
+772014080,772047647,DE
+772047648,772047663,IT
+772047664,772050575,DE
772050576,772050583,TR
772050584,772051223,DE
772051224,772051231,CH
@@ -3045,11 +3332,13 @@
772837376,772839423,KZ
772839424,772841471,CH
772841472,772843519,GB
-772843520,772844287,IT
-772844288,772844799,US
-772844800,772845567,IT
+772843520,772844799,IT
+772844800,772845311,US
+772845312,772845567,IT
772845568,772847615,RU
-772847616,772849663,GB
+772847616,772848128,GB
+772848129,772848191,JO
+772848192,772849663,GB
772849664,772851711,BG
772851712,772853759,CH
772853760,772855807,GB
@@ -3098,7 +3387,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
@@ -3109,7 +3400,6 @@
772950016,772952063,ES
772952064,772954111,GB
772954112,772958207,FR
-772958208,772960255,PL
772960256,772962303,GB
772962304,772966399,FR
772966400,772968447,IT
@@ -3168,11 +3458,11 @@
773062912,773063167,US
773063168,773063424,TR
773063425,773063436,US
-773063437,773064447,TR
-773064448,773064703,US
-773064704,773065088,TR
+773063437,773065088,TR
773065089,773065215,US
-773065216,773066751,TR
+773065216,773065584,TR
+773065585,773065590,GB
+773065591,773066751,TR
773066752,773070847,AT
773070848,773071231,DE
773071232,773071263,NA
@@ -3202,19 +3492,29 @@
773148672,773152767,IR
773152768,773153791,SE
773153792,773154815,US
-773154816,773156863,SE
-773156864,773157887,FR
-773157888,773158911,DE
+773154816,773155583,SE
+773155584,773155839,US
+773155840,773156863,SE
+773156864,773158143,FR
+773158144,773158911,DE
773158912,773160447,FR
773160448,773160959,ES
773160960,773165055,FR
773165056,773166591,NL
-773166592,773167103,US
-773167104,773167615,NL
-773167616,773169151,US
+773166592,773167207,US
+773167208,773167215,NL
+773167216,773167359,US
+773167360,773167615,NL
+773167616,773168639,US
+773168640,773168671,NL
+773168672,773169151,US
773169152,773171343,NL
773171344,773171359,BE
-773171360,773172223,NL
+773171360,773171599,NL
+773171600,773171607,BE
+773171608,773171615,NL
+773171616,773171647,BE
+773171648,773172223,NL
773172224,773172287,BE
773172288,773172351,GB
773172352,773172479,NL
@@ -3238,9 +3538,7 @@
773234688,773238783,PL
773238784,773242879,NL
773242880,773246975,FR
-773246976,773247871,EE
-773247872,773247999,US
-773248000,773251071,EE
+773246976,773251071,EE
773251072,773255167,AZ
773255168,773259263,RU
773259264,773263359,SI
@@ -3282,10 +3580,12 @@
773621760,773623807,PS
773623808,773625855,SE
773625856,773627903,IS
+773627904,773629951,ES
773629952,773631999,FR
773632000,773634047,CY
773634048,773636095,DE
773636096,773638143,UA
+773638144,773640191,CH
773640192,773642239,ES
773642240,773644287,HU
773644288,773646335,RU
@@ -3309,13 +3609,11 @@
773672960,773675007,SA
773675008,773677055,GB
773677056,773679103,DE
-773679104,773679135,IT
-773679136,773679327,A2
-773679328,773679359,IT
+773679104,773679359,IT
773679360,773679423,GB
-773679424,773679615,A2
-773679616,773680191,IT
-773680192,773681151,A2
+773679424,773680383,IT
+773680384,773680639,A2
+773680640,773681151,IT
773681152,773683199,RU
773683200,773684223,FR
773684224,773684239,GB
@@ -3325,7 +3623,7 @@
773685248,773687295,UA
773687296,773689343,HU
773689344,773691391,PL
-773691392,773695487,RU
+773691392,773693439,RU
773695488,773697535,MK
773697536,773699583,LU
773699584,773701631,CZ
@@ -3336,9 +3634,7 @@
773709824,773711871,CZ
773711872,773713919,RU
773713920,773715967,NL
-773715968,773715999,SE
-773716000,773716063,US
-773716064,773716991,SE
+773715968,773716991,SE
773716992,773718015,US
773718016,773720063,DE
773720064,773722111,GB
@@ -3348,7 +3644,9 @@
773730304,773732351,GB
773732352,773734399,DE
773734400,773736447,CZ
-773736448,773740543,DE
+773736448,773739071,DE
+773739072,773739079,AT
+773739080,773740543,DE
773740544,773742591,CZ
773742592,773744639,GB
773744640,773746687,ES
@@ -3363,23 +3661,30 @@
773763072,773765119,TR
773765120,773767167,NL
773767168,773769215,GB
+773769216,773771263,FR
773771264,773773311,DK
773773312,773775359,IT
773775360,773777407,IQ
773777408,773779455,CZ
-773781504,773783551,IT
+773779456,773783551,IT
773783552,773785599,RU
773785600,773787647,NL
773787648,773789695,DK
773789696,773791743,RU
773791744,773793791,PL
-773793792,773795839,FR
+773793792,773794527,FR
+773794528,773794535,GB
+773794536,773794543,IT
+773794544,773794551,ES
+773794552,773794559,DE
+773794560,773795839,FR
773795840,773797887,NL
773797888,773799935,ES
773799936,773800447,GB
773800448,773800703,CY
773800704,773800959,GB
-773800960,773801727,CY
+773800960,773801215,SG
+773801216,773801727,US
773801728,773801983,GB
773801984,773804031,IQ
773804032,773806079,GB
@@ -3421,7 +3726,11 @@
773980160,773988351,GB
773988352,774003199,ES
774003200,774003263,TR
-774003264,774003711,ES
+774003264,774003311,ES
+774003312,774003391,TR
+774003392,774003439,ES
+774003440,774003455,TR
+774003456,774003711,ES
774003712,774004223,BE
774004224,774004479,ES
774004480,774004511,BE
@@ -3440,9 +3749,7 @@
774059216,774059223,ZA
774059224,774060031,DE
774060032,774060047,ES
-774060048,774060671,DE
-774060672,774060799,HR
-774060800,774061007,DE
+774060048,774061007,DE
774061008,774061023,CZ
774061024,774061103,DE
774061104,774061111,GI
@@ -3542,10 +3849,10 @@
774161439,774161448,MK
774161449,774161458,PS
774161459,774161468,UZ
-774161469,774161478,BD
-774161479,774161488,KP
+774161469,774161478,MS
+774161479,774161488,US
774161489,774161498,MN
-774161499,774161518,VA
+774161499,774161518,US
774161519,774161528,TW
774161529,774161538,DO
774161539,774161548,PY
@@ -3554,22 +3861,20 @@
774161569,774161578,LC
774161579,774161588,VE
774161589,774161598,TC
-774161599,774161608,US
-774161609,774161618,LI
-774161619,774161628,AE
+774161599,774161628,US
774161629,774161638,PA
774161639,774161648,RU
774161649,774161658,HK
774161659,774161664,VA
-774161665,774161674,CY
+774161665,774161674,US
774161675,774161684,CL
-774161685,774161694,NI
+774161685,774161694,GR
774161695,774161704,AG
774161705,774161714,AM
-774161715,774161724,IR
+774161715,774161724,GB
774161725,774161734,RO
774161735,774161744,UA
-774161745,774161754,NP
+774161745,774161754,AU
774161755,774161764,PG
774161765,774161774,ZA
774161775,774161784,SN
@@ -3603,10 +3908,10 @@
774161976,774161980,US
774161981,774161985,GB
774161986,774161990,IQ
-774161991,774161995,AF
+774161991,774161995,LT
774161996,774162000,ER
774162001,774162005,KE
-774162006,774162010,MG
+774162006,774162010,DE
774162011,774162015,TN
774162016,774162020,TT
774162021,774162025,BO
@@ -3617,7 +3922,7 @@
774162046,774162050,HR
774162051,774162055,ME
774162056,774162060,SY
-774162061,774162065,YE
+774162061,774162065,US
774162066,774162070,HT
774162071,774162075,EC
774162076,774162080,SH
@@ -3626,11 +3931,11 @@
774162091,774162095,VN
774162096,774162100,FM
774162101,774162105,US
-774162106,774162110,LY
+774162106,774162110,GB
774162111,774162115,SO
774162116,774162120,FI
774162121,774162125,DZ
-774162126,774162130,CD
+774162126,774162130,MO
774162131,774162135,MR
774162136,774162140,CM
774162141,774162145,SV
@@ -3657,7 +3962,15 @@
774162307,774162316,RE
774162317,774162326,TK
774162327,774162336,CV
-774162337,774162432,VA
+774162337,774162346,AZ
+774162347,774162366,US
+774162367,774162376,MX
+774162377,774162386,GB
+774162387,774162396,ZW
+774162397,774162406,SZ
+774162407,774162416,SD
+774162417,774162426,BF
+774162427,774162432,VA
774162433,774162442,GB
774162443,774162452,BA
774162453,774162462,WS
@@ -3680,250 +3993,21 @@
774162638,774162642,NF
774162643,774162687,US
774162688,774162688,VA
-774162689,774162718,US
-774162719,774168575,VA
+774162689,774162748,US
+774162749,774162753,PR
+774162754,774162778,US
+774162779,774162798,CA
+774162799,774162803,BN
+774162804,774162808,TM
+774162809,774162943,VA
+774162944,774163199,CH
+774163200,774168575,VA
774168576,774176767,PL
774176768,774184959,IT
774184960,774193151,GB
774193152,774209535,ES
774209536,774217727,RU
-774217728,774217823,GB
-774217824,774217855,AE
-774217856,774217887,US
-774217888,774217927,GB
-774217928,774217935,LK
-774217936,774217983,CN
-774217984,774218047,CA
-774218048,774218111,GB
-774218112,774218495,US
-774218496,774218503,SG
-774218504,774218519,CN
-774218520,774218527,PK
-774218528,774218535,CN
-774218536,774218543,IN
-774218544,774218551,HR
-774218552,774218559,CN
-774218560,774218567,GB
-774218568,774218575,TW
-774218576,774218591,GB
-774218592,774218599,CN
-774218600,774218607,PT
-774218608,774218615,TR
-774218616,774218631,PT
-774218632,774218639,IN
-774218640,774218647,TW
-774218648,774218655,PT
-774218656,774218663,RU
-774218664,774218671,PT
-774218672,774218679,CL
-774218680,774218687,CN
-774218688,774218695,GB
-774218696,774218703,SG
-774218704,774218711,CN
-774218712,774218719,GB
-774218720,774218727,CN
-774218728,774218735,RU
-774218736,774218743,TW
-774218744,774219007,GB
-774219008,774219263,US
-774219264,774219271,CN
-774219272,774219279,TR
-774219280,774219287,GB
-774219288,774219295,CY
-774219296,774219327,GB
-774219328,774219335,TW
-774219336,774219343,EG
-774219344,774219359,CN
-774219360,774219367,PT
-774219368,774219375,IN
-774219376,774219383,GB
-774219384,774219391,IN
-774219392,774219399,US
-774219400,774219407,IN
-774219408,774219423,CN
-774219424,774219431,IN
-774219432,774219439,HU
-774219440,774219447,CN
-774219448,774219455,ES
-774219456,774219479,CN
-774219480,774219487,HU
-774219488,774219495,CN
-774219496,774219503,EG
-774219504,774219511,CN
-774219512,774219519,SG
-774219520,774219551,CN
-774219552,774219559,PS
-774219560,774219575,CN
-774219576,774219583,GR
-774219584,774219591,TR
-774219592,774219599,US
-774219600,774219607,CN
-774219608,774219679,GB
-774219680,774219687,PK
-774219688,774219711,GB
-774219712,774219727,BE
-774219728,774219743,RU
-774219744,774219751,GB
-774219752,774219759,PK
-774219760,774219775,RU
-774219776,774219839,CN
-774219840,774219847,UA
-774219848,774219855,CN
-774219856,774219863,GB
-774219864,774219871,IT
-774219872,774219879,RU
-774219880,774219887,CN
-774219888,774219895,RU
-774219896,774219903,LK
-774219904,774219967,US
-774219968,774219975,PK
-774219976,774219991,CN
-774219992,774219999,RU
-774220000,774220007,GB
-774220008,774220015,CN
-774220016,774220159,GB
-774220160,774220191,US
-774220192,774220207,GB
-774220208,774220223,CN
-774220224,774220287,GB
-774220288,774220543,CN
-774220544,774220799,GB
-774220800,774221055,PK
-774221056,774221311,US
-774221312,774221567,CN
-774221568,774221823,US
-774221824,774222079,CN
-774222080,774222335,US
-774222336,774222495,GB
-774222496,774222511,FI
-774222512,774222527,HK
-774222528,774222591,GB
-774222592,774222655,CN
-774222656,774222687,BE
-774222688,774222719,GB
-774222720,774222783,CN
-774222784,774222799,GB
-774222800,774222815,UA
-774222816,774222847,GB
-774222848,774222863,UA
-774222864,774222879,IT
-774222880,774222895,US
-774222896,774222951,GB
-774222952,774222967,CN
-774222968,774222975,GR
-774222976,774223007,GB
-774223008,774223039,CN
-774223040,774223071,IT
-774223072,774223103,CN
-774223104,774223119,UA
-774223120,774223151,CN
-774223152,774223167,PK
-774223168,774223183,GB
-774223184,774223199,PK
-774223200,774223231,GB
-774223232,774223239,CN
-774223240,774223247,ME
-774223248,774223255,TR
-774223256,774223263,ID
-774223264,774223271,DE
-774223272,774223279,CN
-774223280,774223287,GB
-774223288,774223295,CN
-774223296,774223303,TR
-774223304,774223311,CN
-774223312,774223319,IN
-774223320,774223327,ID
-774223328,774223335,PK
-774223336,774223351,PT
-774223352,774223359,GB
-774223360,774223375,UA
-774223376,774223391,RU
-774223392,774223407,PK
-774223408,774223743,GB
-774223744,774223807,US
-774223808,774223839,CN
-774223840,774223871,US
-774223872,774223951,GB
-774223952,774223959,RU
-774223960,774223967,CN
-774223968,774223975,RU
-774223976,774223983,US
-774223984,774223991,RU
-774223992,774223999,PK
-774224000,774224007,IT
-774224008,774224023,CN
-774224024,774224031,AE
-774224032,774224039,TW
-774224040,774224047,CA
-774224048,774224055,CN
-774224056,774224079,IN
-774224080,774224087,DE
-774224088,774224095,CN
-774224096,774224103,BY
-774224104,774224111,RU
-774224112,774224119,CN
-774224120,774224127,IN
-774224128,774224159,BE
-774224160,774224191,GB
-774224192,774224223,US
-774224224,774224255,LT
-774224256,774224383,GB
-774224384,774224399,UA
-774224400,774224407,LT
-774224408,774224415,GB
-774224416,774224423,TW
-774224424,774224431,GB
-774224432,774224439,CN
-774224440,774224447,GB
-774224448,774224511,CN
-774224512,774224767,GB
-774224768,774224831,CN
-774224832,774224847,UA
-774224848,774224967,GB
-774224968,774224975,UA
-774224976,774224983,RU
-774224984,774224991,CN
-774224992,774224999,LK
-774225000,774225007,CN
-774225008,774225015,PK
-774225016,774225023,CN
-774225024,774225055,US
-774225056,774225151,RU
-774225152,774225343,GB
-774225344,774225351,CN
-774225352,774225359,LT
-774225360,774225375,UA
-774225376,774225391,JO
-774225392,774225415,UA
-774225416,774225423,CN
-774225424,774225431,TR
-774225432,774225439,DE
-774225440,774225447,CN
-774225448,774225455,BY
-774225456,774225463,GB
-774225464,774225471,CN
-774225472,774225479,IT
-774225480,774225487,IN
-774225488,774225495,CN
-774225496,774225503,UA
-774225504,774225511,CN
-774225512,774225519,TR
-774225520,774225527,RU
-774225528,774225535,CA
-774225536,774225567,GB
-774225568,774225599,RU
-774225600,774225615,PK
-774225616,774225647,GB
-774225648,774225663,UA
-774225664,774225671,LK
-774225672,774225687,RU
-774225688,774225695,PK
-774225696,774225703,CN
-774225704,774225727,GB
-774225728,774225743,LT
-774225744,774225823,GB
-774225824,774225855,US
-774225856,774225919,IN
+774217728,774225919,GB
774225920,774234111,UA
774234112,774242303,IT
774242304,774258687,RU
@@ -3952,9 +4036,7 @@
774520832,774537215,BH
774537216,774553599,RU
774553600,774569983,RO
-774569984,774579199,GB
-774579200,774580223,IT
-774580224,774586367,GB
+774569984,774586367,GB
774586368,774602751,PS
774602752,774619135,GB
774619136,774651903,RU
@@ -3967,8 +4049,7 @@
774750208,774782975,RU
774782976,774799359,UA
774799360,774815743,RU
-774815744,774830079,NO
-774830080,774832127,SE
+774815744,774832127,NO
774832128,774848511,RU
774848512,774864895,BG
774864896,774881279,CZ
@@ -4069,9 +4150,10 @@
778666016,778666031,FR
778666032,778666047,PL
778666048,778666063,FR
-778666064,778666095,PL
-778666096,778666099,DE
-778666100,778666103,ES
+778666064,778666079,IE
+778666080,778666095,ES
+778666096,778666099,PL
+778666100,778666103,LT
778666104,778666107,GB
778666108,778666111,IE
778666112,778666119,FR
@@ -4081,10 +4163,17 @@
778666144,778666151,FR
778666152,778666155,GB
778666156,778666159,ES
-778666160,778666175,PL
-778666176,778666207,FR
-778666208,778666239,PL
-778666240,778666367,FR
+778666160,778666175,IE
+778666176,778666191,FR
+778666192,778666239,PL
+778666240,778666247,GB
+778666248,778666259,FR
+778666260,778666263,PL
+778666264,778666271,CH
+778666272,778666295,FR
+778666296,778666299,ES
+778666300,778666303,GB
+778666304,778666367,FR
778666368,778666371,PL
778666372,778666375,GB
778666376,778666383,FR
@@ -4124,7 +4213,7 @@
778667480,778667483,GB
778667484,778667487,NL
778667488,778667491,PL
-778667492,778667495,FR
+778667492,778667495,CH
778667496,778667499,DE
778667500,778667503,GB
778667504,778667839,FR
@@ -4172,8 +4261,7 @@
778668576,778668607,FR
778668608,778668615,IE
778668616,778668619,PL
-778668620,778668623,GB
-778668624,778668639,FR
+778668620,778668639,FR
778668640,778668671,PL
778668672,778668703,NL
778668704,778668707,PL
@@ -4181,7 +4269,9 @@
778668712,778668715,FR
778668716,778668719,PL
778668720,778668723,PT
-778668724,778668735,PL
+778668724,778668727,PL
+778668728,778668731,PT
+778668732,778668735,DE
778668736,778668799,IT
778668800,778669103,FR
778669104,778669107,PL
@@ -4214,13 +4304,14 @@
778669568,778669615,FR
778669616,778669623,GB
778669624,778669631,PL
-778669632,778669695,FR
+778669632,778669663,FR
+778669664,778669695,GB
778669696,778669727,PT
778669728,778669759,NL
778669760,778669767,DE
778669768,778669771,GB
778669772,778669775,PL
-778669776,778669791,FR
+778669776,778669791,ES
778669792,778669807,DE
778669808,778669823,FR
778669824,778669855,ES
@@ -4236,12 +4327,17 @@
778670000,778670007,PL
778670008,778670011,CZ
778670012,778670015,LT
-778670016,778670143,FR
+778670016,778670019,NL
+778670020,778670035,IT
+778670036,778670039,GB
+778670040,778670043,ES
+778670044,778670079,GB
+778670080,778670143,FR
778670144,778670151,CZ
778670152,778670159,CH
778670160,778670163,FR
-778670164,778670167,GB
-778670168,778670175,FR
+778670164,778670171,GB
+778670172,778670175,FR
778670176,778670207,GB
778670208,778670211,DE
778670212,778670215,IT
@@ -4261,7 +4357,9 @@
778670356,778670359,FR
778670360,778670383,DE
778670384,778670387,PL
-778670388,778670399,GB
+778670388,778670391,NL
+778670392,778670395,CZ
+778670396,778670399,GB
778670400,778670407,PL
778670408,778670411,DE
778670412,778670415,NL
@@ -4287,17 +4385,18 @@
778671120,778671127,DE
778671128,778671135,PT
778671136,778671167,BE
-778671168,778671203,FR
+778671168,778671183,FI
+778671184,778671203,FR
778671204,778671211,PL
778671212,778671231,FR
778671232,778671239,GB
778671240,778671243,PL
-778671244,778671247,FR
+778671244,778671247,ES
778671248,778671263,PL
778671264,778671279,GB
778671280,778671311,FR
778671312,778671327,PT
-778671328,778671331,FR
+778671328,778671331,ES
778671332,778671335,DE
778671336,778671631,FR
778671632,778671647,PL
@@ -4363,7 +4462,13 @@
778673084,778673087,PT
778673088,778673119,FR
778673120,778673151,ES
-778673152,778673215,FR
+778673152,778673183,FR
+778673184,778673195,ES
+778673196,778673199,GB
+778673200,778673203,CZ
+778673204,778673207,IE
+778673208,778673211,DE
+778673212,778673215,ES
778673216,778673247,FI
778673248,778673263,FR
778673264,778673279,IT
@@ -4381,7 +4486,14 @@
778673824,778673839,ES
778673840,778673843,FR
778673844,778673855,DE
-778673856,778673919,FR
+778673856,778673879,FR
+778673880,778673883,CZ
+778673884,778673887,FI
+778673888,778673903,FR
+778673904,778673907,DE
+778673908,778673911,CH
+778673912,778673915,FR
+778673916,778673919,ES
778673920,778674175,NL
778674176,778674367,FR
778674368,778674387,DE
@@ -4399,7 +4511,9 @@
778674464,778674471,CH
778674472,778674475,BE
778674476,778674479,CH
-778674480,778674495,FR
+778674480,778674487,FR
+778674488,778674491,CZ
+778674492,778674495,PL
778674496,778674499,CZ
778674500,778674503,DE
778674504,778674507,PL
@@ -4420,11 +4534,15 @@
778675004,778675007,GB
778675008,778675039,ES
778675040,778675071,FR
-778675072,778675079,IT
+778675072,778675075,DE
+778675076,778675079,IT
778675080,778675087,ES
-778675088,778675135,FR
-778675136,778675199,ES
-778675200,778675215,DE
+778675088,778675159,FR
+778675160,778675163,PL
+778675164,778675167,DE
+778675168,778675199,FR
+778675200,778675207,ES
+778675208,778675215,PL
778675216,778675219,PT
778675220,778675227,FR
778675228,778675231,NL
@@ -4441,7 +4559,9 @@
778675444,778675447,FR
778675448,778675451,PL
778675452,778675455,DE
-778675456,778675471,NL
+778675456,778675459,PL
+778675460,778675463,FR
+778675464,778675471,ES
778675472,778675475,BE
778675476,778675479,ES
778675480,778675483,CH
@@ -4460,9 +4580,9 @@
778675624,778675631,PL
778675632,778675639,ES
778675640,778675647,DE
-778675648,778675663,GB
-778675664,778675679,FR
-778675680,778675695,DE
+778675648,778675687,FR
+778675688,778675691,ES
+778675692,778675695,FR
778675696,778675711,NL
778675712,778675839,FR
778675840,778675843,FI
@@ -4485,7 +4605,7 @@
778676096,778676099,DE
778676100,778676103,CZ
778676104,778676111,GB
-778676112,778676127,DE
+778676112,778676127,IT
778676128,778676131,ES
778676132,778676135,CZ
778676136,778676139,DE
@@ -4520,11 +4640,15 @@
778676624,778676631,PL
778676632,778676635,FR
778676636,778676639,DE
-778676640,778676671,GB
-778676672,778676687,FR
+778676640,778676655,ES
+778676656,778676687,FR
778676688,778676691,ES
778676692,778676703,PL
-778676704,778676735,FR
+778676704,778676719,FR
+778676720,778676723,GB
+778676724,778676727,PT
+778676728,778676731,PL
+778676732,778676735,IT
778676736,778676743,PL
778676744,778676747,CH
778676748,778676751,CZ
@@ -4533,29 +4657,38 @@
778676772,778676775,ES
778676776,778676779,PL
778676780,778676799,FR
-778676800,778676815,IE
+778676800,778676803,GB
+778676804,778676807,IT
+778676808,778676811,FI
+778676812,778676815,IE
778676816,778676823,LT
778676824,778676827,GB
-778676828,778676831,FR
-778676832,778676847,ES
+778676828,778676847,FR
778676848,778676851,NL
778676852,778676855,LT
-778676856,778676859,FR
+778676856,778676859,IE
778676860,778676863,DE
778676864,778676991,PL
778676992,778676999,FR
-778677000,778677003,PL
-778677004,778677075,FR
+778677000,778677007,PL
+778677008,778677023,FR
+778677024,778677055,DE
+778677056,778677075,FR
778677076,778677079,DE
778677080,778677083,IT
-778677084,778677119,DE
-778677120,778677151,FR
+778677084,778677123,DE
+778677124,778677127,GB
+778677128,778677131,FR
+778677132,778677135,BE
+778677136,778677151,FR
778677152,778677167,DE
778677168,778677175,CZ
778677176,778677183,NL
-778677184,778677247,GB
+778677184,778677215,GB
+778677216,778677247,PL
778677248,778677503,FR
-778677504,778677511,DE
+778677504,778677507,IE
+778677508,778677511,FR
778677512,778677515,IT
778677516,778677519,GB
778677520,778677523,FR
@@ -4600,17 +4733,18 @@
778678028,778678031,FR
778678032,778678047,PL
778678048,778678115,FR
-778678116,778678127,ES
+778678116,778678119,ES
+778678120,778678127,IT
778678128,778678143,FR
778678144,778678159,GB
778678160,778678163,PL
778678164,778678167,BE
778678168,778678191,PL
-778678192,778678207,NL
+778678192,778678207,FR
778678208,778678271,PL
778678272,778678783,DE
778678784,778678799,FR
-778678800,778678803,DE
+778678800,778678803,PL
778678804,778678807,GB
778678808,778678815,FR
778678816,778678831,PL
@@ -4624,7 +4758,8 @@
778678864,778678871,PL
778678872,778678875,ES
778678876,778678879,NL
-778678880,778678903,FR
+778678880,778678895,FR
+778678896,778678903,GB
778678904,778678911,PL
778678912,778678919,FR
778678920,778678927,ES
@@ -4634,8 +4769,9 @@
778678968,778678975,GB
778678976,778679007,FR
778679008,778679023,PL
-778679024,778679039,ES
-778679040,778679055,PL
+778679024,778679031,GB
+778679032,778679035,FR
+778679036,778679055,PL
778679056,778679071,BE
778679072,778679103,ES
778679104,778679123,PL
@@ -4646,20 +4782,22 @@
778679200,778679215,FR
778679216,778679231,PT
778679232,778679263,ES
-778679264,778679271,FR
+778679264,778679267,IT
+778679268,778679271,FR
778679272,778679279,PL
778679280,778679295,PT
778679296,778679495,FR
778679496,778679519,PL
-778679520,778679527,FR
+778679520,778679523,LT
+778679524,778679527,PL
778679528,778679531,DE
778679532,778679535,GB
778679536,778679551,ES
778679552,778679615,FR
778679616,778679679,ES
778679680,778679695,PT
-778679696,778679743,GB
-778679744,778679807,ES
+778679696,778679711,GB
+778679712,778679807,FR
778679808,778679823,IT
778679824,778679843,PL
778679844,778679847,DE
@@ -4680,7 +4818,10 @@
778680152,778680155,ES
778680156,778680159,BE
778680160,778680175,PT
-778680176,778680207,PL
+778680176,778680183,ES
+778680184,778680199,IT
+778680200,778680203,NL
+778680204,778680207,PL
778680208,778680227,FR
778680228,778680231,IE
778680232,778680239,GB
@@ -4688,7 +4829,7 @@
778680256,778680271,IT
778680272,778680279,BE
778680280,778680287,PL
-778680288,778680319,FR
+778680288,778680319,DE
778680320,778680447,GB
778680448,778680451,PT
778680452,778680455,IE
@@ -4699,7 +4840,9 @@
778680576,778680639,NL
778680640,778680647,DE
778680648,778680671,ES
-778680672,778680687,LT
+778680672,778680679,FR
+778680680,778680683,PL
+778680684,778680687,DE
778680688,778680767,FR
778680768,778680831,BE
778680832,778680895,IT
@@ -4710,20 +4853,26 @@
778681152,778681215,PL
778681216,778681235,FR
778681236,778681239,ES
-778681240,778681247,FR
-778681248,778681263,GB
-778681264,778681279,FR
+778681240,778681243,FR
+778681244,778681247,GB
+778681248,778681251,FR
+778681252,778681255,DE
+778681256,778681279,FR
778681280,778681295,DE
778681296,778681311,IE
778681312,778681315,NL
778681316,778681319,FR
778681320,778681327,ES
778681328,778681359,GB
-778681360,778681367,FR
-778681368,778681383,CZ
-778681384,778681399,IT
-778681400,778681415,NL
-778681416,778681419,GB
+778681360,778681367,ES
+778681368,778681371,NL
+778681372,778681375,CH
+778681376,778681383,FR
+778681384,778681391,DE
+778681392,778681399,FR
+778681400,778681403,DE
+778681404,778681407,ES
+778681408,778681419,GB
778681420,778681423,BE
778681424,778681431,FR
778681432,778681435,DE
@@ -4735,11 +4884,13 @@
778681472,778681475,DE
778681476,778681479,PT
778681480,778681503,FR
-778681504,778681519,GB
-778681520,778681523,PL
+778681504,778681507,ES
+778681508,778681511,FR
+778681512,778681515,PL
+778681516,778681523,ES
778681524,778681527,FR
778681528,778681531,PL
-778681532,778681535,CH
+778681532,778681535,IT
778681536,778681543,FR
778681544,778681547,GB
778681548,778681551,PT
@@ -4748,20 +4899,25 @@
778681588,778681591,FR
778681592,778681595,LT
778681596,778681599,GB
-778681600,778681615,ES
-778681616,778681623,DE
-778681624,778681663,FR
-778681664,778681679,DE
-778681680,778681703,FR
+778681600,778681623,DE
+778681624,778681631,FR
+778681632,778681639,IT
+778681640,778681643,PL
+778681644,778681647,DE
+778681648,778681651,FR
+778681652,778681655,ES
+778681656,778681671,DE
+778681672,778681675,GB
+778681676,778681703,FR
778681704,778681707,IE
778681708,778681711,ES
-778681712,778681727,PL
+778681712,778681727,FR
778681728,778682111,GB
778682112,778682115,IT
778682116,778682119,PL
778682120,778682123,CH
778682124,778682127,FR
-778682128,778682143,GB
+778682128,778682143,IE
778682144,778682175,CH
778682176,778682195,IT
778682196,778682199,NL
@@ -4770,9 +4926,7 @@
778682208,778682239,FR
778682240,778682243,BE
778682244,778682247,DE
-778682248,778682271,FR
-778682272,778682287,PL
-778682288,778682295,FR
+778682248,778682295,FR
778682296,778682303,PL
778682304,778682331,FR
778682332,778682335,NL
@@ -4785,9 +4939,9 @@
778690640,778690655,IT
778690656,778690687,PT
778690688,778690703,PL
-778690704,778690719,FR
-778690720,778690735,PL
-778690736,778690751,FR
+778690704,778690723,FR
+778690724,778690727,GB
+778690728,778690751,FR
778690752,778690783,DE
778690784,778690815,FR
778690816,778690879,ES
@@ -4807,34 +4961,52 @@
778691044,778691047,ES
778691048,778691051,PL
778691052,778691055,PT
-778691056,778691343,FR
-778691344,778691359,IT
+778691056,778691063,NL
+778691064,778691067,LT
+778691068,778691359,FR
778691360,778691583,PT
-778691584,778691743,FR
+778691584,778691615,FR
+778691616,778691619,DE
+778691620,778691627,NL
+778691628,778691631,PL
+778691632,778691743,FR
778691744,778691747,PL
778691748,778691751,ES
778691752,778691755,FI
778691756,778691759,FR
-778691760,778691807,GB
+778691760,778691791,GB
+778691792,778691795,DE
+778691796,778691799,PL
+778691800,778691803,ES
+778691804,778691807,PL
778691808,778691839,ES
778691840,778691855,CH
778691856,778691975,FR
778691976,778691983,ES
-778691984,778692015,PL
+778691984,778691987,BE
+778691988,778691991,IT
+778691992,778691999,FR
+778692000,778692015,PL
778692016,778692031,IE
-778692032,778692039,FR
+778692032,778692039,DE
778692040,778692063,PL
778692064,778692095,CH
778692096,778692099,PL
778692100,778692103,DE
778692104,778692107,CH
-778692108,778692111,FI
-778692112,778692115,PL
+778692108,778692115,PL
778692116,778692127,FR
778692128,778692143,NL
778692144,778692159,DE
-778692160,778692207,GB
-778692208,778692615,FR
+778692160,778692191,FR
+778692192,778692195,ES
+778692196,778692199,CZ
+778692200,778692207,ES
+778692208,778692223,FR
+778692224,778692255,DE
+778692256,778692319,FR
+778692320,778692351,IE
+778692352,778692615,FR
778692616,778692619,PL
778692620,778692623,IE
778692624,778692639,NL
@@ -4842,35 +5014,43 @@
778692652,778692671,PL
778692672,778692679,DE
778692680,778692683,ES
-778692684,778692687,FR
-778692688,778692703,GB
+778692684,778692703,FR
778692704,778692723,PL
778692724,778692735,FR
-778692736,778692751,NL
+778692736,778692739,ES
+778692740,778692743,PL
+778692744,778692747,PT
+778692748,778692751,ES
778692752,778692767,FR
778692768,778692783,FI
778692784,778692787,GB
778692788,778692791,DE
778692792,778692799,FR
-778692800,778692831,DE
+778692800,778692807,IE
+778692808,778692811,PL
+778692812,778692815,DE
+778692816,778692823,NL
+778692824,778692831,FR
778692832,778692835,BE
778692836,778692839,PT
778692840,778692843,ES
778692844,778692847,PL
778692848,778692863,ES
-778692864,778692879,FR
+778692864,778692879,IE
778692880,778692883,PL
-778692884,778692887,IT
+778692884,778692887,FR
778692888,778692891,PL
778692892,778692895,GB
778692896,778692911,FR
778692912,778692927,NL
-778692928,778692959,FR
-778692960,778692975,GB
+778692928,778692959,DE
+778692960,778692967,FR
+778692968,778692971,LT
+778692972,778692975,PT
778692976,778692983,DE
778692984,778692991,FR
778692992,778693023,GB
-778693024,778693027,LT
+778693024,778693027,PL
778693028,778693031,ES
778693032,778693035,FR
778693036,778693039,DE
@@ -4884,16 +5064,22 @@
778693080,778693087,FR
778693088,778693091,IE
778693092,778693095,FR
-778693096,778693103,IE
-778693104,778693119,IT
-778693120,778693151,BE
-778693152,778693167,GB
+778693096,778693099,IT
+778693100,778693103,ES
+778693104,778693119,FR
+778693120,778693135,GB
+778693136,778693139,FR
+778693140,778693143,PL
+778693144,778693151,FR
+778693152,778693155,GB
+778693156,778693159,FR
+778693160,778693163,BE
+778693164,778693167,DE
778693168,778693171,CZ
-778693172,778693175,NL
-778693176,778693215,FR
-778693216,778693223,PL
+778693172,778693183,FR
+778693184,778693223,PL
778693224,778693227,FR
-778693228,778693231,ES
+778693228,778693231,IT
778693232,778693235,DE
778693236,778693239,PL
778693240,778693243,ES
@@ -4902,25 +5088,322 @@
778693280,778693295,IT
778693296,778693327,FR
778693328,778693391,GB
-778693392,778693407,FR
-778693408,778693439,PT
+778693392,778693423,FR
+778693424,778693439,ES
778693440,778693455,FR
778693456,778693459,DE
-778693460,778693535,FR
-778693536,778693567,NL
+778693460,778693511,FR
+778693512,778693515,CZ
+778693516,778693567,FR
778693568,778693599,BE
778693600,778693631,NL
778693632,778693663,FR
778693664,778693679,NL
-778693680,778693727,DE
-778693728,778693759,CZ
-778693760,778693775,DE
+778693680,778693695,DE
+778693696,778693759,IE
+778693760,778693763,NL
+778693764,778693767,ES
+778693768,778693771,PL
+778693772,778693775,FR
778693776,778693791,IT
-778693792,778693823,FR
+778693792,778693799,ES
+778693800,778693807,FR
+778693808,778693823,PL
778693824,778693839,PT
-778693840,778693855,ES
+778693840,778693855,FR
778693856,778693887,DE
-778693888,778698751,FR
+778693888,778693919,PT
+778693920,778693927,CH
+778693928,778693931,PL
+778693932,778693935,DE
+778693936,778693951,GB
+778693952,778693967,FR
+778693968,778693971,ES
+778693972,778693975,PL
+778693976,778693983,GB
+778693984,778694015,IE
+778694016,778694143,FR
+778694144,778694147,DE
+778694148,778694159,PL
+778694160,778694163,GB
+778694164,778694171,PL
+778694172,778694183,FR
+778694184,778694187,PL
+778694188,778694191,ES
+778694192,778694195,BE
+778694196,778694199,PL
+778694200,778694203,IT
+778694204,778694291,FR
+778694292,778694295,DE
+778694296,778694299,FR
+778694300,778694335,PL
+778694336,778694351,IT
+778694352,778694415,FR
+778694416,778694463,IT
+778694464,778694479,FR
+778694480,778694511,IT
+778694512,778694515,LT
+778694516,778694527,ES
+778694528,778694543,PL
+778694544,778694555,DE
+778694556,778694559,FR
+778694560,778694563,PL
+778694564,778694567,DE
+778694568,778694571,PT
+778694572,778694575,BE
+778694576,778694591,PT
+778694592,778694623,FR
+778694624,778694627,DE
+778694628,778694639,FR
+778694640,778694643,PL
+778694644,778694647,PT
+778694648,778694655,FR
+778694656,778694663,DE
+778694664,778694671,PT
+778694672,778694679,FR
+778694680,778694687,PL
+778694688,778694703,GB
+778694704,778694719,FR
+778694720,778694783,IT
+778694784,778694815,FR
+778694816,778694823,BE
+778694824,778694827,FI
+778694828,778694831,PT
+778694832,778694839,IT
+778694840,778694843,FI
+778694844,778694847,CZ
+778694848,778694911,FR
+778694912,778694943,GB
+778694944,778694959,FR
+778694960,778694975,ES
+778694976,778695007,GB
+778695008,778695039,ES
+778695040,778695167,GB
+778695168,778695183,FR
+778695184,778695191,GB
+778695192,778695203,PL
+778695204,778695207,ES
+778695208,778695215,FR
+778695216,778695231,DE
+778695232,778695295,NL
+778695296,778695327,PT
+778695328,778695331,IE
+778695332,778695335,GB
+778695336,778695339,PL
+778695340,778695343,FR
+778695344,778695347,PL
+778695348,778695351,ES
+778695352,778695383,FR
+778695384,778695399,DE
+778695400,778695415,GB
+778695416,778695423,IT
+778695424,778695431,PT
+778695432,778695439,ES
+778695440,778695447,FI
+778695448,778695455,NL
+778695456,778695471,FR
+778695472,778695475,PL
+778695476,778695479,NL
+778695480,778695487,FR
+778695488,778695503,BE
+778695504,778695519,FR
+778695520,778695535,GB
+778695536,778695551,FR
+778695552,778695555,BE
+778695556,778695559,CH
+778695560,778695563,DE
+778695564,778695575,PL
+778695576,778695579,ES
+778695580,778695583,FI
+778695584,778695615,PL
+778695616,778695623,DE
+778695624,778695627,CZ
+778695628,778695663,FR
+778695664,778695679,NL
+778695680,778695711,PT
+778695712,778695763,FR
+778695764,778695767,PL
+778695768,778695775,ES
+778695776,778695795,FR
+778695796,778695799,ES
+778695800,778695807,FR
+778695808,778695823,DE
+778695824,778695839,FR
+778695840,778695903,DE
+778695904,778695911,FI
+778695912,778695919,FR
+778695920,778695923,PL
+778695924,778695927,CZ
+778695928,778695931,FI
+778695932,778695943,ES
+778695944,778695951,FI
+778695952,778695967,DE
+778695968,778695971,ES
+778695972,778695975,PL
+778695976,778695983,FR
+778695984,778695987,PL
+778695988,778695991,FR
+778695992,778695995,GB
+778695996,778695999,BE
+778696000,778696015,FR
+778696016,778696019,PL
+778696020,778696023,ES
+778696024,778696027,DE
+778696028,778696031,GB
+778696032,778696047,FR
+778696048,778696063,ES
+778696064,778696099,FR
+778696100,778696103,GB
+778696104,778696107,FR
+778696108,778696111,DE
+778696112,778696127,FR
+778696128,778696159,DE
+778696160,778696175,GB
+778696176,778696183,DE
+778696184,778696187,NL
+778696188,778696199,FR
+778696200,778696203,IT
+778696204,778696207,ES
+778696208,778696211,IE
+778696212,778696215,DE
+778696216,778696219,IT
+778696220,778696255,GB
+778696256,778696263,IT
+778696264,778696287,ES
+778696288,778696335,DE
+778696336,778696339,PL
+778696340,778696343,IT
+778696344,778696347,CH
+778696348,778696351,PL
+778696352,778696383,ES
+778696384,778696415,IE
+778696416,778696419,FR
+778696420,778696423,NL
+778696424,778696479,FR
+778696480,778696495,IT
+778696496,778696499,ES
+778696500,778696503,FR
+778696504,778696511,IT
+778696512,778696543,DE
+778696544,778696559,FR
+778696560,778696567,DE
+778696568,778696575,ES
+778696576,778696591,GB
+778696592,778696639,IE
+778696640,778696643,ES
+778696644,778696647,NL
+778696648,778696655,FR
+778696656,778696659,NL
+778696660,778696663,CH
+778696664,778696667,FI
+778696668,778696671,IE
+778696672,778696687,FR
+778696688,778696691,BE
+778696692,778696695,FI
+778696696,778696699,FR
+778696700,778696703,GB
+778696704,778696959,FR
+778696960,778696975,IT
+778696976,778696979,GB
+778696980,778696983,FR
+778696984,778696987,ES
+778696988,778696991,FR
+778696992,778696995,NL
+778696996,778696999,ES
+778697000,778697015,FR
+778697016,778697019,PL
+778697020,778697023,ES
+778697024,778697055,DE
+778697056,778697059,GB
+778697060,778697063,FR
+778697064,778697067,PL
+778697068,778697071,FR
+778697072,778697087,IT
+778697088,778697095,IE
+778697096,778697099,FR
+778697100,778697103,PL
+778697104,778697151,IE
+778697152,778697167,ES
+778697168,778697171,FR
+778697172,778697175,DE
+778697176,778697179,PL
+778697180,778697183,GB
+778697184,778697343,FR
+778697344,778697375,DE
+778697376,778697387,FR
+778697388,778697391,ES
+778697392,778697407,FR
+778697408,778697415,PT
+778697416,778697423,BE
+778697424,778697435,FR
+778697436,778697439,GB
+778697440,778697455,FR
+778697456,778697459,IT
+778697460,778697463,CZ
+778697464,778697467,NL
+778697468,778697471,PL
+778697472,778697679,FR
+778697680,778697683,PL
+778697684,778697687,FR
+778697688,778697695,ES
+778697696,778697727,FR
+778697728,778697791,FI
+778697792,778697807,ES
+778697808,778697811,DE
+778697812,778697815,PL
+778697816,778697819,FR
+778697820,778697823,IT
+778697824,778697951,PT
+778697952,778697955,DE
+778697956,778697959,IE
+778697960,778697967,ES
+778697968,778697975,FR
+778697976,778697979,BE
+778697980,778697983,FI
+778697984,778698239,NL
+778698240,778698247,GB
+778698248,778698251,ES
+778698252,778698255,PL
+778698256,778698287,FR
+778698288,778698295,FI
+778698296,778698303,IE
+778698304,778698399,FR
+778698400,778698447,IE
+778698448,778698451,NL
+778698452,778698455,PL
+778698456,778698459,CZ
+778698460,778698463,PL
+778698464,778698467,NL
+778698468,778698471,PL
+778698472,778698479,IT
+778698480,778698495,FR
+778698496,778698499,IE
+778698500,778698503,FR
+778698504,778698511,CH
+778698512,778698519,FI
+778698520,778698527,FR
+778698528,778698531,IT
+778698532,778698535,CH
+778698536,778698539,PL
+778698540,778698543,FR
+778698544,778698559,PL
+778698560,778698627,FR
+778698628,778698631,DE
+778698632,778698635,PL
+778698636,778698639,DE
+778698640,778698643,NL
+778698644,778698647,PL
+778698648,778698655,ES
+778698656,778698667,FR
+778698668,778698671,ES
+778698672,778698687,IE
+778698688,778698695,LT
+778698696,778698703,FR
+778698704,778698707,DE
+778698708,778698711,ES
+778698712,778698715,IE
+778698716,778698719,ES
+778698720,778698751,FR
778698752,778764287,TR
778764288,778829823,HU
778829824,778895359,RO
@@ -5271,7 +5754,6 @@
781711360,781713407,UA
781713408,781844479,SA
781844480,781975551,TR
-781975552,782106623,GB
782106624,782254079,RU
782254080,782270463,UA
782270464,782319615,RU
@@ -5284,8 +5766,10 @@
782417920,782434303,AM
782434304,782449151,SI
782449152,782449407,HR
-782449408,782450175,SI
-782450176,782450687,BA
+782449408,782449663,SI
+782449664,782449695,BA
+782449696,782449919,SI
+782449920,782450687,BA
782450688,782467071,DE
782467072,782483455,RU
782483456,782499839,FI
@@ -5302,14 +5786,16 @@
782664704,782664704,GB
782664705,782665471,NL
782665472,782666495,US
-782666496,782667007,GB
+782666496,782666751,GB
+782666752,782667007,US
782667008,782667519,RU
782667520,782667775,LU
782667776,782668287,FR
782668288,782668799,RU
782668800,782669567,NL
-782669568,782671615,DE
-782671616,782680063,GB
+782669568,782669823,GB
+782669824,782671871,DE
+782671872,782680063,GB
782680064,782696447,RU
782696448,782712831,DE
782712832,782729215,RU
@@ -5476,6 +5962,7 @@
785645568,785711103,NO
785711104,785776639,SY
785776640,785842175,RO
+785842176,785907711,PL
785907712,785973247,BY
785973248,786038783,MK
786038784,786104319,FR
@@ -5524,7 +6011,9 @@
786638848,786640895,ES
786640896,786642943,GB
786642944,786644991,GR
-786644992,786649087,SE
+786644992,786645759,SE
+786645760,786646015,MT
+786646016,786649087,SE
786649088,786651135,FR
786651136,786655231,DE
786655232,786657279,PL
@@ -5572,7 +6061,9 @@
786792448,786796543,RU
786796544,786800639,PL
786800640,786801023,US
-786801024,786804735,UA
+786801024,786801151,UA
+786801152,786801663,US
+786801664,786804735,UA
786804736,786808831,RU
786808832,786812927,BG
786812928,786817023,RU
@@ -5605,6 +6096,7 @@
786939904,786941951,FI
786941952,786943999,CH
786944000,786946047,RU
+786946048,786948095,FR
786948096,786950143,UA
786950144,786952191,DE
786952192,786952703,NE
@@ -5633,7 +6125,15 @@
787054592,787070975,IT
787070976,787087359,RU
787087360,787095551,TR
-787095552,787103743,EU
+787095552,787095567,EU
+787095568,787095599,CH
+787095600,787095807,EU
+787095808,787096063,CH
+787096064,787096575,EU
+787096576,787098367,CH
+787098368,787099647,EU
+787099648,787102975,CH
+787102976,787103743,EU
787103744,787111935,HR
787111936,787120127,CZ
787120128,787128319,ES
@@ -5740,7 +6240,9 @@
787843072,787845119,GR
787845120,787847167,CH
787847168,787849215,SE
-787849216,787851263,TR
+787849216,787850496,TR
+787850497,787850751,NL
+787850752,787851263,TR
787851264,787853311,RU
787853312,787855359,DE
787855360,787857407,CH
@@ -5750,7 +6252,9 @@
787863552,787865599,DE
787865600,787869695,FR
787869696,787873791,GB
-787873792,787906559,SE
+787873792,787894271,SE
+787894272,787896319,US
+787896320,787906559,SE
787906560,787939327,GR
787939328,787972095,GB
787972096,788004863,UA
@@ -5861,8 +6365,7 @@
788455424,788457471,FR
788457472,788459519,IT
788459520,788461567,RU
-788461568,788463615,JE
-788463616,788465663,GB
+788461568,788465663,GB
788465664,788467711,CZ
788467712,788469759,NO
788469760,788471807,NL
@@ -5884,10 +6387,14 @@
788502528,788504575,IE
788504576,788506623,FR
788506624,788508671,CH
-788508672,788509199,FR
-788509200,788509695,AT
-788509696,788509951,FR
-788509952,788510719,AT
+788508672,788509215,FR
+788509216,788509231,AT
+788509232,788509247,FR
+788509248,788509279,AT
+788509280,788509631,FR
+788509632,788509695,AT
+788509696,788509999,FR
+788510000,788510719,AT
788510720,788512767,ES
788512768,788514815,FI
788514816,788516863,FR
@@ -5959,7 +6466,9 @@
831389696,831512575,KR
831512576,831513599,AU
831513600,831514623,NZ
-831514624,831515647,HK
+831514624,831514887,HK
+831514888,831514895,AU
+831514896,831515647,HK
831515648,831516671,AU
831516672,831518719,JP
831518720,831519743,AU
@@ -6042,8 +6551,12 @@
839095808,839096063,CA
839096064,839101695,US
839101696,839102207,CA
-839102208,839112447,US
-839112448,839112703,CA
+839102208,839103231,US
+839103232,839103487,CA
+839103488,839104255,US
+839104256,839104511,CA
+839104512,839112191,US
+839112192,839112703,CA
839112704,839113215,US
839113216,839113471,CA
839113472,840269823,US
@@ -6079,14 +6592,27 @@
842542408,842542415,US
842542416,842542423,NZ
842542424,842542431,JO
-842542432,843055103,US
+842542432,842565975,US
+842565976,842565979,AU
+842565980,842566015,US
+842566016,842566019,BR
+842566020,842597639,US
+842597640,842597647,GT
+842597648,842598703,US
+842598704,842598719,CZ
+842598720,842601607,US
+842601608,842601615,AR
+842601616,842602423,US
+842602424,842602431,IN
+842602432,843055103,US
843055104,843644927,CA
843644928,844890111,US
844890112,844988415,CA
844988416,845283327,US
845283328,845545471,CA
-845545472,846462975,US
-847249408,855638015,US
+845545472,846442495,US
+846442496,846446591,CA
+846446592,855638015,US
855638016,872415231,GB
872415232,889192447,US
889192448,905969663,DE
@@ -6534,9 +7060,7 @@
1030750208,1031798783,JP
1031798784,1035993087,CN
1035993088,1037565951,JP
-1037565952,1037591499,TW
-1037591500,1037591503,CN
-1037591504,1038614527,TW
+1037565952,1038614527,TW
1038614528,1039007743,CN
1039007744,1039138815,HK
1039138816,1039400959,CN
@@ -6558,12 +7082,10 @@
1040187392,1040252927,IL
1040252928,1040318463,GR
1040318464,1040383999,CH
-1040384000,1040386559,SA
-1040386560,1040391167,A2
-1040391168,1040392191,SA
+1040384000,1040392191,SA
1040392192,1040392447,GB
-1040392448,1040399359,SA
-1040399360,1040400127,GB
+1040392448,1040399615,SA
+1040399616,1040400127,GB
1040400128,1040400383,SA
1040400384,1040416767,GB
1040416768,1040424959,SE
@@ -6624,7 +7146,9 @@
1040471488,1040471519,NL
1040471520,1040472575,EU
1040472576,1040472831,DE
-1040472832,1040474111,EU
+1040472832,1040473071,EU
+1040473072,1040473087,DE
+1040473088,1040474111,EU
1040474112,1040482303,CZ
1040482304,1040515071,BE
1040515072,1040547839,GB
@@ -6654,8 +7178,8 @@
1040984216,1040984219,TZ
1040984220,1040990207,A2
1040990208,1040994303,CY
-1040994304,1040994815,RU
-1040994816,1040998399,CY
+1040994304,1040994559,RU
+1040994560,1040998399,CY
1040998400,1041006591,EG
1041006592,1041039359,CH
1041039360,1041051647,SE
@@ -6722,9 +7246,9 @@
1041699768,1041699807,GB
1041699808,1041700423,FR
1041700424,1041700535,GB
-1041700536,1041700559,FR
-1041700560,1041700607,GB
-1041700608,1041700983,FR
+1041700536,1041700583,FR
+1041700584,1041700591,GB
+1041700592,1041700983,FR
1041700984,1041700991,GB
1041700992,1041701175,FR
1041701176,1041701183,GB
@@ -6740,9 +7264,7 @@
1041701720,1041701727,GB
1041701728,1041701863,FR
1041701864,1041701871,GB
-1041701872,1041701903,FR
-1041701904,1041701919,GB
-1041701920,1041701967,FR
+1041701872,1041701967,FR
1041701968,1041701975,GB
1041701976,1041702167,FR
1041702168,1041702175,GB
@@ -6754,9 +7276,7 @@
1041702352,1041702399,GB
1041702400,1041702751,FR
1041702752,1041702759,GB
-1041702760,1041703575,FR
-1041703576,1041703583,GB
-1041703584,1041703639,FR
+1041702760,1041703639,FR
1041703640,1041703647,GB
1041703648,1041703975,FR
1041703976,1041703983,GB
@@ -6766,19 +7286,19 @@
1041704160,1041704175,GB
1041704176,1041704207,FR
1041704208,1041704215,GB
-1041704216,1041704255,FR
-1041704256,1041704263,GB
-1041704264,1041704407,FR
+1041704216,1041704247,FR
+1041704248,1041704263,GB
+1041704264,1041704319,FR
+1041704320,1041704335,GB
+1041704336,1041704351,FR
+1041704352,1041704383,GB
+1041704384,1041704407,FR
1041704408,1041704431,GB
1041704432,1041704439,FR
-1041704440,1041704455,GB
-1041704456,1041704479,FR
-1041704480,1041704487,GB
-1041704488,1041704551,FR
+1041704440,1041704447,GB
+1041704448,1041704551,FR
1041704552,1041704575,GB
-1041704576,1041704751,FR
-1041704752,1041704759,GB
-1041704760,1041704775,FR
+1041704576,1041704775,FR
1041704776,1041704783,GB
1041704784,1041704815,FR
1041704816,1041704823,GB
@@ -6828,9 +7348,7 @@
1041706112,1041706143,GB
1041706144,1041706191,FR
1041706192,1041706239,GB
-1041706240,1041706447,FR
-1041706448,1041706463,GB
-1041706464,1041706479,FR
+1041706240,1041706479,FR
1041706480,1041706487,GB
1041706488,1041706791,FR
1041706792,1041706799,GB
@@ -6964,11 +7482,9 @@
1041714112,1041714175,GB
1041714176,1041714511,FR
1041714512,1041714519,GB
-1041714520,1041714655,FR
-1041714656,1041714687,GB
-1041714688,1041714775,FR
-1041714776,1041714783,GB
-1041714784,1041714815,FR
+1041714520,1041714663,FR
+1041714664,1041714687,GB
+1041714688,1041714815,FR
1041714816,1041714847,GB
1041714848,1041714855,FR
1041714856,1041714879,GB
@@ -6981,18 +7497,18 @@
1041715088,1041715095,FR
1041715096,1041715103,GB
1041715104,1041715119,FR
-1041715120,1041715143,GB
-1041715144,1041715151,FR
-1041715152,1041715167,GB
-1041715168,1041715183,FR
-1041715184,1041715199,GB
-1041715200,1041715527,FR
+1041715120,1041715135,GB
+1041715136,1041715159,FR
+1041715160,1041715167,GB
+1041715168,1041715527,FR
1041715528,1041715535,GB
1041715536,1041715583,FR
1041715584,1041715615,GB
1041715616,1041715631,FR
1041715632,1041715647,GB
-1041715648,1041715767,FR
+1041715648,1041715727,FR
+1041715728,1041715735,GB
+1041715736,1041715767,FR
1041715768,1041715791,GB
1041715792,1041715807,FR
1041715808,1041715823,GB
@@ -7034,7 +7550,9 @@
1041717632,1041717639,GB
1041717640,1041717687,FR
1041717688,1041717695,GB
-1041717696,1041718112,FR
+1041717696,1041717711,FR
+1041717712,1041717719,GB
+1041717720,1041718112,FR
1041718113,1041718119,GB
1041718120,1041718127,FR
1041718128,1041718135,GB
@@ -7078,7 +7596,9 @@
1041719229,1041719231,GB
1041719232,1041719247,FR
1041719248,1041719263,GB
-1041719264,1041719743,FR
+1041719264,1041719567,FR
+1041719568,1041719583,GB
+1041719584,1041719743,FR
1041719744,1041719759,GB
1041719760,1041719887,FR
1041719888,1041719903,GB
@@ -7112,8 +7632,8 @@
1041721776,1041721791,GB
1041721792,1041721815,FR
1041721816,1041721823,GB
-1041721824,1041722167,FR
-1041722168,1041722191,GB
+1041721824,1041722175,FR
+1041722176,1041722191,GB
1041722192,1041722207,FR
1041722208,1041722215,GB
1041722216,1041722223,FR
@@ -7136,9 +7656,7 @@
1041722704,1041722711,GB
1041722712,1041722743,FR
1041722744,1041722751,GB
-1041722752,1041722951,FR
-1041722952,1041722959,GB
-1041722960,1041722983,FR
+1041722752,1041722983,FR
1041722984,1041723007,GB
1041723008,1041723047,FR
1041723048,1041723135,GB
@@ -7153,8 +7671,8 @@
1041723872,1041723887,FR
1041723888,1041723903,GB
1041723904,1041724455,FR
-1041724456,1041724463,GB
-1041724464,1041724511,FR
+1041724456,1041724471,GB
+1041724472,1041724511,FR
1041724512,1041724519,GB
1041724520,1041724671,FR
1041724672,1041724927,GB
@@ -7188,7 +7706,9 @@
1041726640,1041726655,GB
1041726656,1041726671,FR
1041726672,1041726687,GB
-1041726688,1041726735,FR
+1041726688,1041726719,FR
+1041726720,1041726727,GB
+1041726728,1041726735,FR
1041726736,1041726751,GB
1041726752,1041726847,FR
1041726848,1041726855,GB
@@ -7326,8 +7846,8 @@
1041737128,1041737151,GB
1041737152,1041737167,FR
1041737168,1041737183,GB
-1041737184,1041737247,FR
-1041737248,1041737279,GB
+1041737184,1041737215,FR
+1041737216,1041737279,GB
1041737280,1041737295,FR
1041737296,1041737303,GB
1041737304,1041737375,FR
@@ -7340,7 +7860,9 @@
1041737488,1041737495,GB
1041737496,1041737503,FR
1041737504,1041737511,GB
-1041737512,1041737591,FR
+1041737512,1041737535,FR
+1041737536,1041737567,GB
+1041737568,1041737591,FR
1041737592,1041737599,GB
1041737600,1041737607,FR
1041737608,1041737615,GB
@@ -7389,8 +7911,8 @@
1041739300,1041739303,GB
1041739304,1041739375,FR
1041739376,1041739383,BE
-1041739384,1041739391,FR
-1041739392,1041739423,GB
+1041739384,1041739407,FR
+1041739408,1041739423,GB
1041739424,1041739463,FR
1041739464,1041739471,GB
1041739472,1041739487,FR
@@ -7405,7 +7927,9 @@
1041740104,1041740119,GB
1041740120,1041740135,FR
1041740136,1041740143,GB
-1041740144,1041740263,FR
+1041740144,1041740167,FR
+1041740168,1041740175,GB
+1041740176,1041740263,FR
1041740264,1041740271,GB
1041740272,1041740567,FR
1041740568,1041740575,GB
@@ -7423,13 +7947,13 @@
1041741064,1041741087,GB
1041741088,1041741135,FR
1041741136,1041741151,GB
-1041741152,1041741239,FR
-1041741240,1041741263,GB
+1041741152,1041741231,FR
+1041741232,1041741263,GB
1041741264,1041741279,FR
1041741280,1041741295,GB
1041741296,1041741567,FR
-1041741568,1041741575,GB
-1041741576,1041741607,FR
+1041741568,1041741583,GB
+1041741584,1041741607,FR
1041741608,1041741615,GB
1041741616,1041741631,FR
1041741632,1041741647,GB
@@ -7485,7 +8009,9 @@
1041743832,1041743847,GB
1041743848,1041743863,FR
1041743864,1041743871,GB
-1041743872,1041744287,FR
+1041743872,1041744263,FR
+1041744264,1041744271,GB
+1041744272,1041744287,FR
1041744288,1041744295,GB
1041744296,1041744311,FR
1041744312,1041744327,GB
@@ -7497,7 +8023,9 @@
1041744416,1041744447,GB
1041744448,1041744479,FR
1041744480,1041744543,GB
-1041744544,1041744599,FR
+1041744544,1041744575,FR
+1041744576,1041744583,GB
+1041744584,1041744599,FR
1041744600,1041744607,GB
1041744608,1041744623,FR
1041744624,1041744639,GB
@@ -7525,9 +8053,7 @@
1041745360,1041745375,GB
1041745376,1041745399,FR
1041745400,1041745407,GB
-1041745408,1041745415,FR
-1041745416,1041745423,GB
-1041745424,1041745447,FR
+1041745408,1041745447,FR
1041745448,1041745471,GB
1041745472,1041745479,FR
1041745480,1041745487,GB
@@ -7591,7 +8117,9 @@
1041750744,1041750751,GB
1041750752,1041750775,FR
1041750776,1041750783,GB
-1041750784,1041751303,FR
+1041750784,1041750831,FR
+1041750832,1041750839,GB
+1041750840,1041751303,FR
1041751304,1041751311,GB
1041751312,1041751351,FR
1041751352,1041751359,GB
@@ -7599,7 +8127,9 @@
1041751568,1041751575,GB
1041751576,1041751695,FR
1041751696,1041751719,GB
-1041751720,1041751775,FR
+1041751720,1041751759,FR
+1041751760,1041751767,GB
+1041751768,1041751775,FR
1041751776,1041751807,GB
1041751808,1041753319,FR
1041753320,1041753327,GB
@@ -7832,7 +8362,8 @@
1042892976,1042892983,CH
1042892984,1042892991,NL
1042892992,1042893007,FR
-1042893008,1042893055,NL
+1042893008,1042893039,NL
+1042893040,1042893055,DE
1042893056,1042893087,GB
1042893088,1042893135,NL
1042893136,1042893143,DE
@@ -7864,7 +8395,9 @@
1042896128,1042896255,GB
1042896256,1042900479,NL
1042900480,1042900735,GB
-1042900736,1042939903,NL
+1042900736,1042915375,NL
+1042915376,1042915391,DE
+1042915392,1042939903,NL
1042939904,1043070975,ES
1043070976,1043079167,CZ
1043079168,1043087359,DE
@@ -7883,7 +8416,9 @@
1043356032,1043357695,DE
1043357696,1043365887,CH
1043365888,1043398655,PT
-1043398656,1043464311,GB
+1043398656,1043464191,GB
+1043464192,1043464287,NL
+1043464288,1043464311,GB
1043464312,1043464351,NL
1043464352,1043464383,GB
1043464384,1043464799,NL
@@ -7949,8 +8484,8 @@
1043468064,1043468127,NL
1043468128,1043468159,GB
1043468160,1043468191,NL
-1043468192,1043468543,GB
-1043468544,1043468575,NL
+1043468192,1043468415,GB
+1043468416,1043468575,NL
1043468576,1043468655,GB
1043468656,1043468663,NL
1043468664,1043468671,GB
@@ -8008,13 +8543,19 @@
1043472476,1043472487,GB
1043472488,1043472495,DE
1043472496,1043472503,GB
-1043472504,1043472895,DE
+1043472504,1043472743,DE
+1043472744,1043472751,GB
+1043472752,1043472895,DE
1043472896,1043473151,GB
-1043473152,1043473411,DE
+1043473152,1043473247,DE
+1043473248,1043473255,GB
+1043473256,1043473411,DE
1043473412,1043473415,GB
1043473416,1043473579,DE
1043473580,1043473583,GB
-1043473584,1043474031,DE
+1043473584,1043473983,DE
+1043473984,1043474015,GB
+1043474016,1043474031,DE
1043474032,1043474047,GB
1043474048,1043474455,DE
1043474456,1043474463,GB
@@ -8030,7 +8571,11 @@
1043475984,1043475991,GB
1043475992,1043476319,DE
1043476320,1043476351,GB
-1043476352,1043476735,DE
+1043476352,1043476543,DE
+1043476544,1043476559,GB
+1043476560,1043476575,DE
+1043476576,1043476607,GB
+1043476608,1043476735,DE
1043476736,1043476767,GB
1043476768,1043476815,DE
1043476816,1043476991,GB
@@ -8038,16 +8583,8 @@
1043477504,1043477759,GB
1043477760,1043478179,DE
1043478180,1043478271,GB
-1043478272,1043478511,DE
-1043478512,1043478527,GB
-1043478528,1043478623,DE
-1043478624,1043478639,GB
-1043478640,1043478655,DE
-1043478656,1043478671,GB
-1043478672,1043478735,DE
-1043478736,1043478751,GB
-1043478752,1043478783,DE
-1043478784,1043479295,GB
+1043478272,1043478287,DE
+1043478288,1043479295,GB
1043479296,1043479551,DE
1043479552,1043480063,GB
1043480064,1043480351,DE
@@ -8257,7 +8794,9 @@
1043898624,1043898751,TZ
1043898752,1043899391,A2
1043899392,1043899647,CG
-1043899648,1043910143,A2
+1043899648,1043907071,A2
+1043907072,1043907327,NG
+1043907328,1043910143,A2
1043910144,1043910399,TZ
1043910400,1043912703,A2
1043912704,1043913215,ZM
@@ -8589,7 +9128,9 @@
1044455424,1044463615,EE
1044463616,1044479999,SE
1044480000,1044488191,CH
-1044488192,1044496383,SK
+1044488192,1044494911,SK
+1044494912,1044494943,SR
+1044494944,1044496383,SK
1044496384,1044512767,EE
1044512768,1044578303,DK
1044578304,1044580607,DE
@@ -8626,7 +9167,9 @@
1044592656,1044592671,GB
1044592672,1044592703,DE
1044592704,1044592831,GB
-1044592832,1044594431,DE
+1044592832,1044593151,DE
+1044593152,1044593663,GB
+1044593664,1044594431,DE
1044594432,1044625407,GB
1044625408,1044625463,DE
1044625464,1044625471,GB
@@ -8634,24 +9177,23 @@
1044625536,1044625663,GB
1044625664,1044625679,DE
1044625680,1044627455,GB
-1044627456,1044628479,DE
-1044628480,1044629503,GB
+1044627456,1044628223,DE
+1044628224,1044629503,GB
1044629504,1044629759,DE
1044629760,1044631551,GB
1044631552,1044631903,DE
1044631904,1044631951,GB
1044631952,1044631967,DE
1044631968,1044632063,GB
-1044632064,1044633855,DE
-1044633856,1044634111,GB
-1044634112,1044634367,DE
-1044634368,1044634623,GB
+1044632064,1044633087,DE
+1044633088,1044633343,GB
+1044633344,1044633855,DE
+1044633856,1044634623,GB
1044634624,1044634879,DE
-1044634880,1044635135,GB
-1044635136,1044635391,DE
-1044635392,1044635647,GB
+1044634880,1044635647,GB
1044635648,1044636159,US
-1044636160,1044638207,DE
+1044636160,1044636415,GB
+1044636416,1044638207,DE
1044638208,1044638223,GB
1044638224,1044638239,DE
1044638240,1044638463,GB
@@ -8800,9 +9342,7 @@
1044932728,1044932735,BE
1044932736,1044932799,GB
1044932800,1044932831,BE
-1044932832,1044932839,GB
-1044932840,1044932847,BE
-1044932848,1044932863,GB
+1044932832,1044932863,GB
1044932864,1044932935,BE
1044932936,1044932947,GB
1044932948,1044932951,BE
@@ -8825,8 +9365,8 @@
1044933408,1044933411,GB
1044933412,1044933415,BE
1044933416,1044933439,GB
-1044933440,1044933511,BE
-1044933512,1044933519,GB
+1044933440,1044933503,BE
+1044933504,1044933519,GB
1044933520,1044933551,BE
1044933552,1044933555,GB
1044933556,1044933583,BE
@@ -8847,7 +9387,9 @@
1044933864,1044933871,GB
1044933872,1044933919,BE
1044933920,1044933935,GB
-1044933936,1044934191,BE
+1044933936,1044934111,BE
+1044934112,1044934119,GB
+1044934120,1044934191,BE
1044934192,1044934199,GB
1044934200,1044934239,BE
1044934240,1044934247,GB
@@ -8859,7 +9401,9 @@
1044934576,1044934583,GB
1044934584,1044934591,BE
1044934592,1044934599,GB
-1044934600,1044934719,BE
+1044934600,1044934607,BE
+1044934608,1044934615,GB
+1044934616,1044934719,BE
1044934720,1044934783,GB
1044934784,1044934815,BE
1044934816,1044934819,GB
@@ -8892,32 +9436,34 @@
1044935752,1044935839,BE
1044935840,1044935847,GB
1044935848,1044935851,BE
-1044935852,1044935863,GB
-1044935864,1044935879,BE
+1044935852,1044935871,GB
+1044935872,1044935879,BE
1044935880,1044935887,GB
-1044935888,1044935903,BE
-1044935904,1044936095,GB
+1044935888,1044935895,BE
+1044935896,1044936095,GB
1044936096,1044936103,BE
1044936104,1044936111,GB
1044936112,1044936123,BE
1044936124,1044936151,GB
1044936152,1044936207,BE
1044936208,1044936215,GB
-1044936216,1044936271,BE
+1044936216,1044936231,BE
+1044936232,1044936239,GB
+1044936240,1044936271,BE
1044936272,1044936287,GB
1044936288,1044936303,BE
1044936304,1044936311,GB
1044936312,1044936335,BE
1044936336,1044936351,GB
1044936352,1044936439,BE
-1044936440,1044936447,GB
-1044936448,1044936455,BE
-1044936456,1044936463,GB
+1044936440,1044936463,GB
1044936464,1044936495,BE
1044936496,1044936503,GB
1044936504,1044936711,BE
1044936712,1044936719,GB
-1044936720,1044937183,BE
+1044936720,1044936847,BE
+1044936848,1044936863,GB
+1044936864,1044937183,BE
1044937184,1044937187,GB
1044937188,1044937287,BE
1044937288,1044937311,GB
@@ -8953,16 +9499,20 @@
1044938104,1044938107,GB
1044938108,1044938111,BE
1044938112,1044938143,GB
-1044938144,1044938235,BE
+1044938144,1044938175,BE
+1044938176,1044938207,GB
+1044938208,1044938235,BE
1044938236,1044938271,GB
-1044938272,1044938367,BE
+1044938272,1044938335,BE
+1044938336,1044938343,GB
+1044938344,1044938367,BE
1044938368,1044938399,GB
1044938400,1044938407,BE
1044938408,1044938415,GB
1044938416,1044938423,BE
1044938424,1044938431,GB
-1044938432,1044938487,BE
-1044938488,1044938511,GB
+1044938432,1044938479,BE
+1044938480,1044938511,GB
1044938512,1044938519,BE
1044938520,1044938523,GB
1044938524,1044938559,BE
@@ -9005,18 +9555,19 @@
1045154560,1045154591,NL
1045154592,1045154623,DE
1045154624,1045154655,GB
-1045154656,1045154687,DE
+1045154656,1045154687,MA
1045154688,1045154719,US
1045154720,1045154751,RU
1045154752,1045154783,SE
-1045154784,1045155071,DE
+1045154784,1045154815,BR
+1045154816,1045155071,DE
1045155072,1045155327,CH
1045155328,1045160959,DE
1045160960,1045160991,TR
1045160992,1045161023,DE
1045161024,1045161055,AT
-1045161056,1045161087,US
-1045161088,1045161119,DE
+1045161056,1045161087,DE
+1045161088,1045161119,IN
1045161120,1045161151,SC
1045161152,1045168127,DE
1045168128,1045233663,RU
@@ -9069,9 +9620,7 @@
1045461728,1045461735,ES
1045461736,1045461743,NL
1045461744,1045463039,DE
-1045463040,1045467487,FI
-1045467488,1045467519,AX
-1045467520,1045471231,FI
+1045463040,1045471231,FI
1045471232,1045479423,UA
1045479424,1045487615,SE
1045487616,1045495807,LT
@@ -9110,19 +9659,18 @@
1045742848,1045742983,SE
1045742984,1045742991,GB
1045742992,1045743007,SE
-1045743008,1045743031,GB
+1045743008,1045743015,FI
+1045743016,1045743031,GB
1045743032,1045743039,SE
1045743040,1045743063,GB
-1045743064,1045743071,SE
-1045743072,1045743087,GB
-1045743088,1045743095,SE
+1045743064,1045743095,SE
1045743096,1045743103,GB
1045743104,1045743231,SE
1045743232,1045743251,GB
1045743252,1045743263,SE
1045743264,1045743299,GB
-1045743300,1045743647,SE
-1045743648,1045743871,GB
+1045743300,1045743623,SE
+1045743624,1045743871,GB
1045743872,1045744007,SE
1045744008,1045744015,GB
1045744016,1045744031,SE
@@ -9132,11 +9680,10 @@
1045744672,1045745407,GB
1045745408,1045745607,SE
1045745608,1045745615,FI
-1045745616,1045745623,GB
-1045745624,1045745627,SE
+1045745616,1045745627,SE
1045745628,1045745631,GB
1045745632,1045745647,SE
-1045745648,1045745663,GB
+1045745648,1045745663,FI
1045745664,1045745695,SE
1045745696,1045745759,GB
1045745760,1045745768,SE
@@ -9191,7 +9738,9 @@
1046225656,1046229111,NO
1046229112,1046229119,SE
1046229120,1046282239,NO
-1046282240,1046283007,DE
+1046282240,1046282623,DE
+1046282624,1046282751,US
+1046282752,1046283007,DE
1046283008,1046283135,BZ
1046283136,1046283263,DE
1046283264,1046283327,LU
@@ -9268,8 +9817,8 @@
1046338048,1046339839,EU
1046339840,1046340095,FR
1046340096,1046343423,EU
-1046343424,1046343935,NL
-1046343936,1046344959,EU
+1046343424,1046343679,NL
+1046343680,1046344959,EU
1046344960,1046345215,DE
1046345216,1046345327,EU
1046345328,1046345727,DE
@@ -9332,8 +9881,8 @@
1046485496,1046485503,GB
1046485504,1046486055,DE
1046486056,1046486063,GB
-1046486064,1046486159,DE
-1046486160,1046486175,GB
+1046486064,1046486151,DE
+1046486152,1046486175,GB
1046486176,1046486183,DE
1046486184,1046486191,GB
1046486192,1046486375,DE
@@ -9363,7 +9912,9 @@
1046493088,1046493095,DE
1046493096,1046493103,GB
1046493104,1046493391,DE
-1046493392,1046493471,GB
+1046493392,1046493399,GB
+1046493400,1046493407,DE
+1046493408,1046493471,GB
1046493472,1046493487,DE
1046493488,1046493511,GB
1046493512,1046493519,DE
@@ -9644,9 +10195,7 @@
1046872064,1046872583,BE
1046872584,1046872607,EU
1046872608,1046872615,BE
-1046872616,1046872655,EU
-1046872656,1046872671,BE
-1046872672,1046872975,EU
+1046872616,1046872975,EU
1046872976,1046872999,BE
1046873000,1046873087,EU
1046873088,1046873279,BE
@@ -9718,13 +10267,13 @@
1046882304,1046884383,BE
1046884384,1046885375,EU
1046885376,1046888447,BE
-1046888448,1046895103,GB
-1046895104,1046896383,EU
+1046888448,1046895359,GB
+1046895360,1046896383,EU
1046896384,1046897663,GB
1046897664,1046898431,BE
1046898432,1046898687,EU
-1046898688,1046898975,BE
-1046898976,1046899167,EU
+1046898688,1046898943,BE
+1046898944,1046899167,EU
1046899168,1046904831,BE
1046904832,1046906879,SK
1046906880,1046908927,IR
@@ -9774,7 +10323,9 @@
1047340800,1047341055,NO
1047341056,1047343871,SE
1047343872,1047344127,NO
-1047344128,1047346431,SE
+1047344128,1047346351,SE
+1047346352,1047346359,FI
+1047346360,1047346431,SE
1047346432,1047346687,FI
1047346688,1047347199,SE
1047347200,1047363583,DE
@@ -9787,7 +10338,9 @@
1047527424,1047535615,BE
1047535616,1047551999,DE
1047552000,1047560191,RU
-1047560192,1047561747,DE
+1047560192,1047561151,DE
+1047561152,1047561159,AT
+1047561160,1047561747,DE
1047561748,1047561751,ES
1047561752,1047561887,DE
1047561888,1047561891,US
@@ -9818,8 +10371,10 @@
1047565132,1047565135,GB
1047565136,1047565343,DE
1047565344,1047565359,CH
-1047565360,1047565855,DE
-1047565856,1047565887,CH
+1047565360,1047565503,DE
+1047565504,1047565507,CZ
+1047565508,1047565839,DE
+1047565840,1047565887,CH
1047565888,1047566363,DE
1047566364,1047566367,CH
1047566368,1047566403,DE
@@ -9877,9 +10432,7 @@
1047567160,1047567163,DE
1047567164,1047567167,AT
1047567168,1047567175,CH
-1047567176,1047567183,DE
-1047567184,1047567191,CH
-1047567192,1047567211,DE
+1047567176,1047567211,DE
1047567212,1047567227,CH
1047567228,1047567239,DE
1047567240,1047567243,CH
@@ -9927,8 +10480,8 @@
1047567872,1047567875,CH
1047567876,1047567879,AT
1047567880,1047567883,CH
-1047567884,1047567935,DE
-1047567936,1047567939,CH
+1047567884,1047567903,DE
+1047567904,1047567939,CH
1047567940,1047568047,DE
1047568048,1047568051,CH
1047568052,1047568055,DE
@@ -9965,15 +10518,15 @@
1047740480,1047740543,EU
1047740544,1047740671,DE
1047740672,1047740927,A2
-1047740928,1047781663,EU
-1047781664,1047781671,GB
-1047781672,1047782695,EU
+1047740928,1047782695,EU
1047782696,1047782703,GB
1047782704,1047782719,EU
1047782720,1047782751,SE
1047782752,1047782783,NO
1047782784,1047782815,FI
-1047782816,1047789375,EU
+1047782816,1047785471,EU
+1047785472,1047788031,DE
+1047788032,1047789375,EU
1047789376,1047789383,GB
1047789384,1047789407,EU
1047789408,1047789423,DE
@@ -9996,7 +10549,9 @@
1047941376,1047986175,RU
1047986176,1047997439,SE
1047997440,1047997503,NO
-1047997504,1048012383,SE
+1047997504,1048003503,SE
+1048003504,1048003511,NO
+1048003512,1048012383,SE
1048012384,1048012391,DE
1048012392,1048051711,SE
1048051712,1048117247,SA
@@ -10040,15 +10595,17 @@
1048604688,1048604751,UA
1048604752,1048604759,EE
1048604760,1048604927,UA
-1048604928,1048605079,LT
+1048604928,1048604945,LT
+1048604946,1048604947,UA
+1048604948,1048604991,LT
+1048604992,1048605055,UA
+1048605056,1048605079,LT
1048605080,1048605087,UA
1048605088,1048605095,LT
1048605096,1048605103,UA
1048605104,1048605119,LT
1048605120,1048607231,UA
-1048607232,1048607247,EE
-1048607248,1048607487,UA
-1048607488,1048607519,EE
+1048607232,1048607519,EE
1048607520,1048607743,UA
1048607744,1048607759,EE
1048607760,1048607775,UA
@@ -10502,7 +11059,9 @@
1048887040,1048887047,DE
1048887048,1048887935,NL
1048887936,1048887999,DE
-1048888000,1048891391,NL
+1048888000,1048889983,NL
+1048889984,1048890015,DE
+1048890016,1048891391,NL
1048891392,1048891399,DE
1048891400,1048891823,NL
1048891824,1048891831,DE
@@ -10761,9 +11320,7 @@
1049004544,1049006079,DE
1049006080,1049007103,EU
1049007104,1049007111,DE
-1049007112,1049007119,EU
-1049007120,1049007135,DE
-1049007136,1049007359,EU
+1049007112,1049007359,EU
1049007360,1049009535,DE
1049009536,1049009559,EU
1049009560,1049009567,DE
@@ -10932,7 +11489,9 @@
1049759984,1049759999,AE
1049760000,1049760639,DE
1049760640,1049760703,IT
-1049760704,1049760927,DE
+1049760704,1049760767,DE
+1049760768,1049760775,ES
+1049760776,1049760927,DE
1049760928,1049760959,DK
1049760960,1049761023,PL
1049761024,1049761791,DE
@@ -11457,7 +12016,9 @@
1052020736,1052022527,EU
1052022528,1052022783,DE
1052022784,1052024831,EU
-1052024832,1052041279,DE
+1052024832,1052041247,DE
+1052041248,1052041255,EU
+1052041256,1052041279,DE
1052041280,1052041295,EU
1052041296,1052041327,DE
1052041328,1052041335,EU
@@ -11467,9 +12028,7 @@
1052041600,1052041727,EU
1052041728,1052041863,DE
1052041864,1052041983,EU
-1052041984,1052042047,DE
-1052042048,1052042087,NL
-1052042088,1052042095,DE
+1052041984,1052042095,DE
1052042096,1052042143,EU
1052042144,1052042183,DE
1052042184,1052042223,EU
@@ -12406,13 +12965,17 @@
1052876800,1052884991,NG
1052884992,1052901375,FR
1052901376,1053032447,NL
-1053032448,1053097983,IT
+1053032448,1053047367,IT
+1053047368,1053047375,TR
+1053047376,1053097983,IT
1053097984,1053106175,DE
1053106176,1053114367,GB
1053114368,1053130751,BE
1053130752,1053138943,NL
1053138944,1053147135,FI
-1053147136,1053163519,SK
+1053147136,1053155071,SK
+1053155072,1053155327,SR
+1053155328,1053163519,SK
1053163520,1053294591,DK
1053294592,1053294847,EU
1053294848,1053295103,AT
@@ -12501,13 +13064,9 @@
1053312912,1053312927,EU
1053312928,1053312959,DK
1053312960,1053313023,EU
-1053313024,1053313343,GB
-1053313344,1053313407,EU
-1053313408,1053313471,GB
+1053313024,1053313471,GB
1053313472,1053313479,EU
-1053313480,1053313671,GB
-1053313672,1053313679,EU
-1053313680,1053313791,GB
+1053313480,1053313791,GB
1053313792,1053313919,EU
1053313920,1053314047,GB
1053314048,1053314063,EU
@@ -12532,7 +13091,9 @@
1053319168,1053320191,DE
1053320192,1053320223,EU
1053320224,1053320319,DE
-1053320320,1053326335,EU
+1053320320,1053320447,EU
+1053320448,1053320703,DE
+1053320704,1053326335,EU
1053326336,1053326399,BE
1053326400,1053326431,EU
1053326432,1053326447,GB
@@ -12642,8 +13203,8 @@
1053350360,1053350375,EU
1053350376,1053350391,IE
1053350392,1053350399,EU
-1053350400,1053350479,BE
-1053350480,1053350655,EU
+1053350400,1053350487,BE
+1053350488,1053350655,EU
1053350656,1053350911,BE
1053350912,1053351935,EU
1053351936,1053352191,IL
@@ -12695,6 +13256,7 @@
1053687808,1053702635,DE
1053702636,1053702639,GB
1053702640,1053753343,DE
+1053753344,1053818879,NL
1053818880,1053819391,DE
1053819392,1053819423,EU
1053819424,1053819439,DE
@@ -12761,9 +13323,7 @@
1053851904,1053851919,FR
1053851920,1053852031,EU
1053852032,1053852047,IT
-1053852048,1053852095,EU
-1053852096,1053852103,DE
-1053852104,1053852111,EU
+1053852048,1053852111,EU
1053852112,1053852127,GB
1053852128,1053852159,DE
1053852160,1053855743,EU
@@ -12852,7 +13412,9 @@
1053896704,1053900799,DE
1053900800,1053917183,NO
1053917184,1053925375,UZ
-1053925376,1053933567,SE
+1053925376,1053927159,SE
+1053927160,1053927163,FI
+1053927164,1053933567,SE
1053933568,1053949951,CZ
1053949952,1053984415,FR
1053984416,1053984447,US
@@ -12868,11 +13430,17 @@
1054130176,1054138367,LT
1054138368,1054146559,AZ
1054146560,1054179327,RU
-1054179328,1054180095,GB
-1054180096,1054180351,DE
-1054180352,1054181375,GB
-1054181376,1054186495,DE
-1054186496,1054187519,GB
+1054179328,1054180351,GB
+1054180352,1054181120,DE
+1054181121,1054181375,GB
+1054181376,1054183168,DE
+1054183169,1054183423,GB
+1054183424,1054185216,DE
+1054185217,1054185471,GB
+1054185472,1054186240,DE
+1054186241,1054186495,GB
+1054186496,1054187264,DE
+1054187265,1054187519,GB
1054187520,1054195711,BG
1054195712,1054212095,BE
1054212096,1054212519,DE
@@ -12966,9 +13534,7 @@
1054943232,1054943487,PL
1054943488,1054949807,DE
1054949808,1054949815,ES
-1054949816,1054963255,DE
-1054963256,1054963263,ES
-1054963264,1054969031,DE
+1054949816,1054969031,DE
1054969032,1054969039,AT
1054969040,1054978815,DE
1054978816,1054979071,FR
@@ -13123,9 +13689,7 @@
1055490048,1055522815,PL
1055522816,1055588351,NL
1055588352,1055653887,BE
-1055653888,1055681055,FI
-1055681056,1055681071,SE
-1055681072,1055784959,FI
+1055653888,1055784959,FI
1055784960,1055850495,NL
1055850496,1055916031,GB
1055916032,1055924223,RS
@@ -13381,13 +13945,20 @@
1064973056,1064973183,AU
1064973184,1065049471,US
1065049472,1065049535,CA
-1065049536,1065517087,US
+1065049536,1065389439,US
+1065389440,1065389455,MY
+1065389456,1065390591,US
+1065390592,1065390599,MY
+1065390600,1065390655,US
+1065390656,1065390687,MX
+1065390688,1065517087,US
1065517088,1065517119,A2
1065517120,1065519359,US
1065519360,1065519487,CA
1065519488,1065520895,US
1065520896,1065520911,CA
-1065520912,1065583423,US
+1065520912,1065520927,IT
+1065520928,1065583423,US
1065583424,1065583439,HK
1065583440,1065611263,US
1065611264,1065615359,PR
@@ -13403,7 +13974,7 @@
1066311680,1066315775,CA
1066315776,1066332159,US
1066332160,1066336255,CA
-1066336256,1066344447,US
+1066336256,1066352639,US
1066352640,1066369023,JM
1066369024,1066584063,US
1066584064,1066586111,PE
@@ -13590,7 +14161,15 @@
1071477248,1071480831,CA
1071480832,1071488447,US
1071488448,1071488479,HK
-1071488480,1071985631,US
+1071488480,1071599105,US
+1071599106,1071599134,PH
+1071599135,1071599300,US
+1071599301,1071599313,PH
+1071599314,1071599392,US
+1071599393,1071599415,PH
+1071599416,1071599477,US
+1071599478,1071599490,PH
+1071599491,1071985631,US
1071985632,1071985663,ML
1071985664,1072512951,US
1072512952,1072512959,CA
@@ -13730,12 +14309,10 @@
1073045248,1073045503,PR
1073045504,1073047551,CO
1073047552,1073049599,PR
-1073049600,1073053695,BS
-1073053696,1073091397,US
+1073049600,1073052671,BS
+1073052672,1073091397,US
1073091398,1073091407,CH
-1073091408,1073092335,US
-1073092336,1073092351,CA
-1073092352,1073093646,US
+1073091408,1073093646,US
1073093647,1073093654,PE
1073093655,1073094557,US
1073094558,1073094570,IT
@@ -13889,9 +14466,7 @@
1074229248,1074241535,CA
1074241536,1074249791,US
1074249792,1074249807,BB
-1074249808,1074371583,US
-1074371584,1074372095,A1
-1074372096,1074375935,US
+1074249808,1074375935,US
1074375936,1074376191,A1
1074376192,1074397439,US
1074397440,1074399039,CA
@@ -14002,11 +14577,11 @@
1075479104,1075479111,GB
1075479112,1075479135,CA
1075479136,1075479151,US
-1075479152,1075479567,CA
-1075479568,1075479583,US
-1075479584,1075479607,CA
+1075479152,1075479607,CA
1075479608,1075479615,US
-1075479616,1075484263,CA
+1075479616,1075480415,CA
+1075480416,1075480423,US
+1075480424,1075484263,CA
1075484264,1075484271,US
1075484272,1075494911,CA
1075494912,1075513151,US
@@ -14115,7 +14690,8 @@
1075597168,1075597183,CA
1075597184,1075597375,US
1075597376,1075597407,CA
-1075597408,1075597439,IL
+1075597408,1075597423,US
+1075597424,1075597439,IL
1075597440,1075597551,US
1075597552,1075597599,CA
1075597600,1075598367,US
@@ -14142,9 +14718,13 @@
1075972352,1075973887,US
1075973888,1075974143,CA
1075974144,1075975167,US
-1075975168,1075976175,CA
+1075975168,1075975679,CA
+1075975680,1075975815,US
+1075975816,1075976175,CA
1075976176,1075976191,US
-1075976192,1075976511,CA
+1075976192,1075976447,CA
+1075976448,1075976479,US
+1075976480,1075976511,CA
1075976512,1075976543,US
1075976544,1075976647,CA
1075976648,1075976655,US
@@ -14267,8 +14847,8 @@
1076004472,1076004479,CA
1076004480,1076004495,US
1076004496,1076004511,CA
-1076004512,1076004559,US
-1076004560,1076004591,CA
+1076004512,1076004543,US
+1076004544,1076004591,CA
1076004592,1076004607,US
1076004608,1076004639,CA
1076004640,1076004703,US
@@ -14284,8 +14864,8 @@
1076005248,1076005263,US
1076005264,1076005279,CA
1076005280,1076005311,US
-1076005312,1076005319,CA
-1076005320,1076005375,US
+1076005312,1076005343,CA
+1076005344,1076005375,US
1076005376,1076005887,CA
1076005888,1076006015,US
1076006016,1076006047,CA
@@ -14332,8 +14912,8 @@
1076026608,1076026623,SG
1076026624,1076026975,CA
1076026976,1076027031,US
-1076027032,1076027263,CA
-1076027264,1076027295,US
+1076027032,1076027199,CA
+1076027200,1076027295,US
1076027296,1076027407,CA
1076027408,1076027423,US
1076027424,1076027711,CA
@@ -14354,7 +14934,9 @@
1076029224,1076029231,DM
1076029232,1076029239,CA
1076029240,1076029247,US
-1076029248,1076029311,CA
+1076029248,1076029255,CA
+1076029256,1076029263,US
+1076029264,1076029311,CA
1076029312,1076029319,GB
1076029320,1076029415,CA
1076029416,1076029422,US
@@ -14393,7 +14975,9 @@
1076035296,1076035327,EG
1076035328,1076035415,US
1076035416,1076035423,EG
-1076035424,1076036247,US
+1076035424,1076035519,US
+1076035520,1076035583,IN
+1076035584,1076036247,US
1076036248,1076036255,IL
1076036256,1076036351,US
1076036352,1076036605,ES
@@ -14441,9 +15025,13 @@
1076179162,1076179163,IN
1076179164,1076179196,US
1076179197,1076179198,IN
-1076179199,1076180795,US
+1076179199,1076180201,US
+1076180202,1076180222,PK
+1076180223,1076180795,US
1076180796,1076180799,IN
-1076180800,1076183039,US
+1076180800,1076181236,US
+1076181237,1076181237,CA
+1076181238,1076183039,US
1076183040,1076183071,IN
1076183072,1076183231,US
1076183232,1076183295,CA
@@ -15304,24 +15892,19 @@
1077626240,1077626271,WS
1077626272,1077627167,US
1077627168,1077627199,EC
-1077627200,1077628959,US
-1077628960,1077628991,ES
-1077628992,1077629071,US
+1077627200,1077629071,US
1077629072,1077629087,CR
-1077629088,1077629119,US
-1077629120,1077629151,NL
+1077629088,1077629151,US
1077629152,1077629183,CA
1077629184,1077629535,US
1077629536,1077629567,CA
1077629568,1077629903,US
1077629904,1077629919,AN
-1077629920,1077630015,US
-1077630016,1077630047,CA
-1077630048,1077632159,US
+1077629920,1077631167,US
+1077631168,1077631231,NL
+1077631232,1077632159,US
1077632160,1077632191,GB
-1077632192,1077632447,US
-1077632448,1077632479,NL
-1077632480,1077633823,US
+1077632192,1077633823,US
1077633824,1077633855,AN
1077633856,1077640799,US
1077640800,1077640831,EC
@@ -15660,7 +16243,8 @@
1077937827,1077937846,US
1077937847,1077937850,TH
1077937851,1077937854,US
-1077937855,1077937866,TH
+1077937855,1077937862,TH
+1077937863,1077937866,SA
1077937867,1077937870,GB
1077937871,1077937878,US
1077937879,1077937882,GB
@@ -15715,9 +16299,7 @@
1077938206,1077938209,AR
1077938210,1077938221,US
1077938222,1077938225,IN
-1077938226,1077938233,US
-1077938234,1077938237,AR
-1077938238,1077938258,US
+1077938226,1077938258,US
1077938259,1077938262,PE
1077938263,1077938266,CA
1077938267,1077938269,GB
@@ -15907,9 +16489,13 @@
1077939492,1077939495,GB
1077939496,1077939523,US
1077939524,1077939533,CA
-1077939534,1077939569,US
+1077939534,1077939557,US
+1077939558,1077939561,MU
+1077939562,1077939569,US
1077939570,1077939574,OM
-1077939575,1077939625,US
+1077939575,1077939582,US
+1077939583,1077939586,GH
+1077939587,1077939625,US
1077939626,1077939630,UY
1077939631,1077939634,GB
1077939635,1077939644,US
@@ -15933,7 +16519,9 @@
1077939986,1077939997,US
1077939998,1077940001,GB
1077940002,1077940005,EG
-1077940006,1077940072,US
+1077940006,1077940064,US
+1077940065,1077940068,GB
+1077940069,1077940072,US
1077940073,1077940076,BE
1077940077,1077940133,US
1077940134,1077940137,IN
@@ -16276,8 +16864,8 @@
1078285664,1078285695,CA
1078285696,1078285703,MX
1078285704,1078285711,US
-1078285712,1078285919,CA
-1078285920,1078285943,US
+1078285712,1078285935,CA
+1078285936,1078285943,US
1078285944,1078285951,CA
1078285952,1078286015,US
1078286016,1078286047,CA
@@ -16318,9 +16906,7 @@
1078287328,1078287343,US
1078287344,1078287759,CA
1078287760,1078287767,US
-1078287768,1078287775,CA
-1078287776,1078287807,US
-1078287808,1078287839,CA
+1078287768,1078287839,CA
1078287840,1078287863,US
1078287864,1078288383,CA
1078288384,1078309695,US
@@ -16458,9 +17044,7 @@
1078621696,1078621951,IN
1078621952,1078651055,US
1078651056,1078651071,CA
-1078651072,1078653695,US
-1078653696,1078653727,CZ
-1078653728,1078654431,US
+1078651072,1078654431,US
1078654432,1078654439,AU
1078654440,1078660799,US
1078660800,1078660831,CN
@@ -16695,9 +17279,7 @@
1079385088,1079385343,US
1079385344,1079385471,CA
1079385472,1079385599,US
-1079385600,1079385855,CA
-1079385856,1079386111,SZ
-1079386112,1079386623,CA
+1079385600,1079386623,CA
1079386624,1079386879,SG
1079386880,1079387135,EG
1079387136,1079387903,US
@@ -16766,24 +17348,28 @@
1079408448,1079408639,CA
1079408640,1079408895,US
1079408896,1079409407,PK
-1079409408,1079409919,LR
+1079409408,1079409919,US
1079409920,1079410687,CA
1079410688,1079410943,US
1079410944,1079411199,CA
1079411200,1079411455,US
1079411456,1079411711,PK
-1079411712,1079413311,CA
+1079411712,1079412735,CA
+1079412736,1079413247,US
+1079413248,1079413311,CA
1079413312,1079413343,US
1079413344,1079413535,CA
1079413536,1079413567,US
-1079413568,1079414783,CA
-1079414784,1079415039,US
+1079413568,1079414271,CA
+1079414272,1079415039,US
1079415040,1079415295,HN
1079415296,1079415807,CA
1079415808,1079416319,US
1079416320,1079421951,CA
1079421952,1079422207,US
-1079422208,1079425023,CA
+1079422208,1079422239,CA
+1079422240,1079422271,US
+1079422272,1079425023,CA
1079425024,1079425279,US
1079425280,1079425535,CA
1079425536,1079425551,US
@@ -17012,7 +17598,9 @@
1081368744,1081368767,CO
1081368768,1081369119,US
1081369120,1081369151,CO
-1081369152,1081369599,US
+1081369152,1081369183,US
+1081369184,1081369215,CO
+1081369216,1081369599,US
1081369600,1081370111,CO
1081370112,1081377079,US
1081377080,1081377087,VE
@@ -17075,8 +17663,8 @@
1081401568,1081401599,AR
1081401600,1081401615,US
1081401616,1081401735,AR
-1081401736,1081401751,US
-1081401752,1081401775,AR
+1081401736,1081401743,US
+1081401744,1081401775,AR
1081401776,1081401791,US
1081401792,1081401807,AR
1081401808,1081401815,US
@@ -17159,31 +17747,31 @@
1081479168,1081483247,CA
1081483248,1081483255,US
1081483256,1081483263,CA
-1081483264,1081487359,US
-1081487360,1081487375,A2
-1081487376,1081487383,US
-1081487384,1081487391,A2
-1081487392,1081487407,US
-1081487408,1081487567,A2
-1081487568,1081487583,US
-1081487584,1081487919,A2
-1081487920,1081487927,US
-1081487928,1081487959,A2
-1081487960,1081487967,US
-1081487968,1081488055,A2
-1081488056,1081488079,US
-1081488080,1081488087,A2
-1081488088,1081488095,US
-1081488096,1081488135,A2
-1081488136,1081488151,US
-1081488152,1081488199,A2
-1081488200,1081488215,US
-1081488216,1081488223,A2
-1081488224,1081488247,US
-1081488248,1081488255,A2
-1081488256,1081488287,US
-1081488288,1081491455,A2
-1081491456,1081565183,US
+1081483264,1081487367,US
+1081487368,1081487375,A2
+1081487376,1081487407,US
+1081487408,1081487519,A2
+1081487520,1081487583,US
+1081487584,1081487871,A2
+1081487872,1081487979,US
+1081487980,1081487991,A2
+1081487992,1081488111,US
+1081488112,1081488119,A2
+1081488120,1081488123,US
+1081488124,1081488135,A2
+1081488136,1081488159,US
+1081488160,1081488167,A2
+1081488168,1081488295,US
+1081488296,1081488303,A2
+1081488304,1081488335,US
+1081488336,1081488343,A2
+1081488344,1081488351,US
+1081488352,1081488383,A2
+1081488384,1081489671,US
+1081489672,1081489679,A2
+1081489680,1081489687,US
+1081489688,1081489919,A2
+1081489920,1081565183,US
1081565184,1081573375,CA
1081573376,1081581615,US
1081581616,1081581623,JP
@@ -17282,7 +17870,19 @@
1081589112,1081589759,US
1081589760,1081593855,BB
1081593856,1081597951,CA
-1081597952,1081609823,US
+1081597952,1081608191,US
+1081608192,1081608207,CA
+1081608208,1081608223,US
+1081608224,1081608231,CA
+1081608232,1081608319,US
+1081608320,1081608327,CA
+1081608328,1081608335,US
+1081608336,1081608343,CA
+1081608344,1081608503,US
+1081608504,1081608511,CA
+1081608512,1081608575,US
+1081608576,1081608583,CA
+1081608584,1081609823,US
1081609824,1081609831,LK
1081609832,1081609887,US
1081609888,1081609919,IN
@@ -17306,13 +17906,26 @@
1081612016,1081612023,IN
1081612024,1081612159,US
1081612160,1081612191,IN
-1081612192,1081612663,US
+1081612192,1081612655,US
+1081612656,1081612663,CA
1081612664,1081612671,IN
-1081612672,1081616831,US
+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,1081616831,US
1081616832,1081616839,GB
1081616840,1081618951,US
1081618952,1081618959,GB
-1081618960,1081803287,US
+1081618960,1081619775,US
+1081619776,1081619791,CA
+1081619792,1081625775,US
+1081625776,1081625783,CA
+1081625784,1081803287,US
1081803288,1081803295,PR
1081803296,1081803895,US
1081803896,1081803903,PR
@@ -17404,9 +18017,13 @@
1082434240,1082434255,IN
1082434256,1082621987,US
1082621988,1082621991,ME
-1082621992,1082683391,US
+1082621992,1082679807,US
1082683392,1082687487,CA
-1082687488,1082885311,US
+1082687488,1082788447,US
+1082788448,1082788455,SG
+1082788456,1082788767,US
+1082788768,1082788799,SG
+1082788800,1082885311,US
1082885312,1082885343,CA
1082885344,1082885855,US
1082885856,1082885887,CA
@@ -17615,7 +18232,13 @@
1086922752,1086923343,CA
1086923344,1086923351,US
1086923352,1086930943,CA
-1086930944,1086955519,US
+1086930944,1086941831,US
+1086941832,1086941835,CA
+1086941836,1086942079,US
+1086942080,1086942087,CA
+1086942088,1086942975,US
+1086942976,1086943231,CA
+1086943232,1086955519,US
1086955520,1086971903,CA
1086971904,1087008767,US
1087008768,1087009279,CY
@@ -17628,7 +18251,7 @@
1087420160,1087440895,US
1087440896,1087442943,PR
1087442944,1087444223,US
-1087444224,1087444479,CY
+1087444224,1087444479,GB
1087444480,1087495519,US
1087495520,1087495535,TW
1087495536,1087496703,US
@@ -17852,7 +18475,18 @@
1089265664,1089265919,GB
1089265920,1089266431,US
1089266432,1089266943,GB
-1089266944,1089306623,US
+1089266944,1089282059,US
+1089282060,1089282063,CA
+1089282064,1089282075,US
+1089282076,1089282079,CA
+1089282080,1089282095,US
+1089282096,1089282099,CA
+1089282100,1089282687,US
+1089282688,1089282703,A1
+1089282704,1089282711,CA
+1089282712,1089285439,US
+1089285440,1089285455,A1
+1089285456,1089306623,US
1089306624,1089339391,PR
1089339392,1089393295,US
1089393296,1089393407,CA
@@ -18054,9 +18688,7 @@
1091695214,1091695223,CA
1091695224,1091695283,US
1091695284,1091695293,CA
-1091695294,1091797263,US
-1091797264,1091797279,IT
-1091797280,1091797855,US
+1091695294,1091797855,US
1091797856,1091797871,IT
1091797872,1091798639,US
1091798640,1091798647,CN
@@ -18956,9 +19588,7 @@
1096890880,1096891135,GB
1096891136,1096925183,US
1096925184,1096941567,CA
-1096941568,1096942679,US
-1096942680,1096942687,IE
-1096942688,1096947471,US
+1096941568,1096947471,US
1096947472,1096947479,MY
1096947480,1096950551,US
1096950552,1096950559,CA
@@ -18982,13 +19612,19 @@
1096960768,1096960895,GB
1096960896,1096964263,US
1096964264,1096964271,IN
-1096964272,1096968127,US
+1096964272,1096966303,US
+1096966304,1096966311,IN
+1096966312,1096968127,US
1096968128,1096968159,CA
1096968160,1096968191,US
1096968192,1096968319,GB
-1096968320,1096969471,US
+1096968320,1096969071,US
+1096969072,1096969079,CA
+1096969080,1096969471,US
1096969472,1096969479,IN
-1096969480,1097057623,US
+1096969480,1097056559,US
+1097056560,1097056575,SE
+1097056576,1097057623,US
1097057624,1097057631,IT
1097057632,1097057655,US
1097057656,1097057663,NZ
@@ -19026,7 +19662,9 @@
1097731456,1097736191,CA
1097736192,1097768959,US
1097768960,1097777151,CA
-1097777152,1097830399,US
+1097777152,1097797631,US
+1097797632,1097797887,DE
+1097797888,1097830399,US
1097830400,1097834495,CA
1097834496,1097896191,US
1097896192,1097896711,VI
@@ -19437,9 +20075,7 @@
1106605696,1106605703,DE
1106605704,1106685047,US
1106685048,1106685055,CA
-1106685056,1106740991,US
-1106740992,1106741247,CR
-1106741248,1106758655,US
+1106685056,1106758655,US
1106758656,1106759167,EC
1106759168,1106759679,CO
1106759680,1106767871,US
@@ -19462,15 +20098,15 @@
1107288064,1107292159,CA
1107292160,1107701759,US
1107701760,1107705855,CA
-1107705856,1107800063,US
-1107800064,1107800319,CA
-1107800320,1107801367,US
+1107705856,1107801367,US
1107801368,1107801375,CA
1107801376,1107808842,US
1107808843,1107808846,PE
1107808847,1107808877,US
1107808878,1107808881,PE
-1107808882,1107820543,US
+1107808882,1107809850,US
+1107809851,1107809851,CA
+1107809852,1107820543,US
1107820544,1107853311,ZA
1107853312,1107895039,US
1107895040,1107895807,GB
@@ -19844,8 +20480,8 @@
1110700032,1110704127,CA
1110704128,1110863871,US
1110863872,1110865919,JM
-1110865920,1110867200,KY
-1110867201,1110867967,JM
+1110865920,1110867455,KY
+1110867456,1110867967,JM
1110867968,1110870791,US
1110870792,1110870799,HK
1110870800,1110870815,US
@@ -19878,7 +20514,20 @@
1112433152,1112440831,CA
1112440832,1112530943,US
1112530944,1112539135,CA
-1112539136,1113212479,US
+1112539136,1112900711,US
+1112900712,1112900719,MV
+1112900720,1112901623,US
+1112901624,1112901631,EG
+1112901632,1112901759,US
+1112901760,1112901767,EG
+1112901768,1112903711,US
+1112903712,1112903719,TR
+1112903720,1112906431,US
+1112906432,1112906439,GB
+1112906440,1112907919,US
+1112907920,1112907935,EG
+1112907936,1112915967,US
+1112924160,1113212479,US
1113212480,1113212495,CA
1113212496,1113591807,US
1113591808,1113595903,CA
@@ -19985,10 +20634,11 @@
1114875392,1114876159,CA
1114876160,1114876447,US
1114876448,1114876463,CA
-1114876464,1114876479,US
+1114876464,1114876479,AD
1114876480,1114876543,CA
1114876544,1114876575,GB
-1114876576,1114876927,US
+1114876576,1114876911,US
+1114876912,1114876927,AD
1114876928,1114877183,CA
1114877184,1114877439,CY
1114877440,1114877695,US
@@ -20012,7 +20662,9 @@
1114881472,1114881535,CY
1114881536,1114928863,US
1114928864,1114928871,GB
-1114928872,1114930175,US
+1114928872,1114929071,US
+1114929072,1114929087,RU
+1114929088,1114930175,US
1114930176,1114930303,GB
1114930304,1114966815,US
1114966816,1114966831,GB
@@ -20397,13 +21049,7 @@
1117814824,1117814831,CN
1117814832,1117815295,US
1117815296,1117815551,CN
-1117815552,1117816831,US
-1117816832,1117816863,CN
-1117816864,1117816879,US
-1117816880,1117816887,CN
-1117816888,1117816895,US
-1117816896,1117816959,CN
-1117816960,1117817919,US
+1117815552,1117817919,US
1117817920,1117817983,CA
1117817984,1117818495,US
1117818496,1117818623,IT
@@ -20500,8 +21146,8 @@
1118133632,1118133695,US
1118133696,1118133759,IN
1118133760,1118133887,CA
-1118133888,1118134783,US
-1118134784,1118134879,CA
+1118133888,1118134815,US
+1118134816,1118134879,CA
1118134880,1118134911,US
1118134912,1118134975,CA
1118134976,1118135007,US
@@ -20510,9 +21156,7 @@
1118135568,1118135583,CA
1118135584,1118135615,US
1118135616,1118135631,TZ
-1118135632,1118135647,US
-1118135648,1118135663,CA
-1118135664,1118135807,US
+1118135632,1118135807,US
1118135808,1118136191,CA
1118136192,1118136831,US
1118136832,1118136863,IN
@@ -20648,8 +21292,7 @@
1118476896,1118477535,CA
1118477536,1118477543,US
1118477544,1118478335,CA
-1118478336,1118502911,US
-1118507008,1118511103,US
+1118478336,1118511103,US
1118511104,1118519295,CA
1118519296,1118527487,US
1118527488,1118531583,CA
@@ -20657,7 +21300,9 @@
1118535680,1118539775,CA
1118539776,1118543871,US
1118543872,1118547967,CA
-1118547968,1118564607,US
+1118547968,1118563839,US
+1118563840,1118564351,BZ
+1118564352,1118564607,US
1118564608,1118564639,NO
1118564640,1118564655,US
1118564656,1118564671,IN
@@ -20698,7 +21343,7 @@
1118795808,1118795895,US
1118795896,1118795903,CY
1118795904,1118796543,US
-1118796544,1118796799,CY
+1118796544,1118796799,GB
1118796800,1118797063,US
1118797064,1118797071,CR
1118797072,1118961663,US
@@ -20882,7 +21527,7 @@
1118973160,1118973167,NI
1118973168,1118973183,A2
1118973184,1118973439,VE
-1118973440,1118973695,HK
+1118973440,1118973695,US
1118973696,1118973951,NG
1118973952,1118974015,GY
1118974016,1118974047,A2
@@ -21036,7 +21681,9 @@
1118983424,1118983679,NI
1118983680,1118983743,TZ
1118983744,1118983759,VE
-1118983760,1118983871,A2
+1118983760,1118983807,A2
+1118983808,1118983839,NG
+1118983840,1118983871,A2
1118983872,1118983879,TZ
1118983880,1118983919,US
1118983920,1118984447,A2
@@ -21302,11 +21949,15 @@
1120315136,1120315391,US
1120315392,1120321535,CA
1120321536,1120346111,US
-1120346112,1120347527,CA
+1120346112,1120347039,CA
+1120347040,1120347055,US
+1120347056,1120347135,CA
+1120347136,1120347391,US
+1120347392,1120347527,CA
1120347528,1120347535,US
1120347536,1120347591,CA
-1120347592,1120347599,US
-1120347600,1120350207,CA
+1120347592,1120347607,US
+1120347608,1120350207,CA
1120350208,1120370687,US
1120370688,1120371199,CA
1120371200,1120371455,US
@@ -21346,8 +21997,8 @@
1120376304,1120376327,CA
1120376328,1120376383,US
1120376384,1120376447,CA
-1120376448,1120376479,US
-1120376480,1120376494,CA
+1120376448,1120376455,US
+1120376456,1120376494,CA
1120376495,1120376559,US
1120376560,1120376647,CA
1120376648,1120376671,US
@@ -21377,7 +22028,9 @@
1120380128,1120380131,CA
1120380132,1120380223,US
1120380224,1120380239,CA
-1120380240,1120380415,US
+1120380240,1120380263,US
+1120380264,1120380271,CA
+1120380272,1120380415,US
1120380416,1120380431,VG
1120380432,1120380447,CA
1120380448,1120380479,US
@@ -21545,35 +22198,46 @@
1120874496,1120874503,A2
1120874504,1120874511,US
1120874512,1120874519,A2
-1120874520,1120874527,US
-1120874528,1120874631,A2
+1120874520,1120874543,US
+1120874544,1120874563,A2
+1120874564,1120874575,US
+1120874576,1120874587,A2
+1120874588,1120874591,US
+1120874592,1120874631,A2
1120874632,1120874639,US
-1120874640,1120874655,A2
-1120874656,1120874703,US
+1120874640,1120874651,A2
+1120874652,1120874703,US
1120874704,1120874719,CA
1120874720,1120874727,A2
-1120874728,1120874751,US
-1120874752,1120874783,A2
-1120874784,1120874815,US
-1120874816,1120874855,A2
-1120874856,1120874871,US
-1120874872,1120874911,A2
+1120874728,1120874763,US
+1120874764,1120874767,A2
+1120874768,1120874775,US
+1120874776,1120874779,A2
+1120874780,1120874815,US
+1120874816,1120874831,A2
+1120874832,1120874839,US
+1120874840,1120874847,A2
+1120874848,1120874879,US
+1120874880,1120874887,A2
+1120874888,1120874895,US
+1120874896,1120874911,A2
1120874912,1120874935,US
1120874936,1120874943,A2
1120874944,1120874959,CA
-1120874960,1120874967,A2
-1120874968,1120874975,US
-1120874976,1120874983,A2
-1120874984,1120875007,US
-1120875008,1120875263,A2
-1120875264,1120876287,US
+1120874960,1120874979,US
+1120874980,1120874983,A2
+1120874984,1120876287,US
1120876288,1120876543,A2
1120876544,1120876567,JO
1120876568,1120876575,A2
1120876576,1120876591,JO
1120876592,1120876599,A2
1120876600,1120876607,JO
-1120876608,1120876799,A2
+1120876608,1120876615,A2
+1120876616,1120876623,US
+1120876624,1120876655,A2
+1120876656,1120876671,US
+1120876672,1120876799,A2
1120876800,1120878359,US
1120878360,1120878591,A2
1120878592,1120886783,US
@@ -21584,7 +22248,7 @@
1120911360,1120914415,CA
1120914416,1120914431,AT
1120914432,1120918623,CA
-1120918624,1120918639,US
+1120918624,1120918639,NA
1120918640,1120919551,CA
1120919552,1121005567,US
1121005568,1121009663,CA
@@ -21624,7 +22288,7 @@
1121247568,1121247583,MT
1121247584,1121247591,CY
1121247592,1121247615,CA
-1121247616,1121247631,PA
+1121247616,1121247631,BZ
1121247632,1121247639,AW
1121247640,1121247647,VG
1121247648,1121247663,US
@@ -21712,18 +22376,19 @@
1121251048,1121251055,AW
1121251056,1121251071,CA
1121251072,1121251079,GB
-1121251080,1121251095,CY
+1121251080,1121251087,CA
+1121251088,1121251095,CY
1121251096,1121251103,CA
1121251104,1121251119,BZ
1121251120,1121251135,CA
1121251136,1121251167,AG
1121251168,1121251199,VG
1121251200,1121251263,AW
-1121251264,1121251271,CA
-1121251272,1121251279,KN
-1121251280,1121251295,CA
+1121251264,1121251279,CA
+1121251280,1121251287,BZ
+1121251288,1121251295,CA
1121251296,1121251311,IM
-1121251312,1121251327,PA
+1121251312,1121251327,BZ
1121251328,1121251583,CA
1121251584,1121251591,BZ
1121251592,1121251599,MT
@@ -21735,15 +22400,14 @@
1121251664,1121251671,MT
1121251672,1121251679,CA
1121251680,1121251687,AG
-1121251688,1121251775,BZ
-1121251776,1121251791,CA
+1121251688,1121251791,BZ
1121251792,1121251807,VG
1121251808,1121251831,CA
1121251832,1121251839,VG
1121251840,1121251847,BZ
1121251848,1121251855,PA
1121251856,1121251863,AN
-1121251864,1121251871,CA
+1121251864,1121251871,BZ
1121251872,1121251887,VG
1121251888,1121251895,CY
1121251896,1121251903,CA
@@ -22113,7 +22777,9 @@
1122101376,1122101383,CO
1122101384,1122101431,US
1122101432,1122101439,SG
-1122101440,1122103471,US
+1122101440,1122101471,US
+1122101472,1122101479,VE
+1122101480,1122103471,US
1122103472,1122103479,BE
1122103480,1122125996,US
1122125997,1122126004,GB
@@ -22215,17 +22881,24 @@
1123582272,1123582399,US
1123582400,1123582431,DE
1123582432,1123582463,CA
-1123582464,1123583455,US
-1123583456,1123583519,CY
+1123582464,1123583487,US
+1123583488,1123583519,CY
1123583520,1123584351,US
1123584352,1123584383,DE
1123584384,1123588063,US
1123588064,1123588095,CY
-1123588096,1123588351,DE
-1123588352,1123590143,US
+1123588096,1123589631,US
+1123589632,1123589887,DE
+1123589888,1123590143,US
1123590144,1123598335,VI
1123598336,1123651583,US
-1123651584,1123655679,JM
+1123651584,1123651839,JM
+1123651840,1123652095,BB
+1123652096,1123653119,JM
+1123653120,1123653375,BB
+1123653376,1123653631,JM
+1123653632,1123654655,KY
+1123654656,1123655679,JM
1123655680,1123663871,US
1123663872,1123667967,SV
1123667968,1123670015,PR
@@ -22418,7 +23091,9 @@
1125396484,1125396491,LK
1125396492,1125396999,US
1125397000,1125397007,ES
-1125397008,1125454007,US
+1125397008,1125398466,US
+1125398467,1125398468,LK
+1125398469,1125454007,US
1125454008,1125454015,GB
1125454016,1125454111,US
1125454112,1125454119,ES
@@ -22566,11 +23241,15 @@
1125541544,1125541551,CN
1125541552,1125541807,CA
1125541808,1125541815,US
-1125541816,1125543543,CA
+1125541816,1125541951,CA
+1125541952,1125541959,BM
+1125541960,1125543543,CA
1125543544,1125543551,US
1125543552,1125543687,CA
1125543688,1125543695,US
-1125543696,1125543935,CA
+1125543696,1125543887,CA
+1125543888,1125543903,US
+1125543904,1125543935,CA
1125543936,1125545983,US
1125548032,1125548291,CA
1125548292,1125548351,US
@@ -22591,11 +23270,19 @@
1125623296,1125623551,IN
1125623552,1125628671,US
1125628672,1125628703,NZ
-1125628704,1125642674,US
+1125628704,1125641790,US
+1125641791,1125641792,CA
+1125641793,1125642185,US
+1125642186,1125642189,CA
+1125642190,1125642301,US
+1125642302,1125642303,IN
+1125642304,1125642674,US
1125642675,1125642694,BO
-1125642695,1126009343,US
-1126009344,1126009599,AR
-1126009600,1126504223,US
+1125642695,1125644770,US
+1125644771,1125644771,PK
+1125644772,1125645449,US
+1125645450,1125645453,CA
+1125645454,1126504223,US
1126504224,1126504231,PR
1126504232,1126551767,US
1126551768,1126551775,PR
@@ -22712,8 +23399,14 @@
1133785504,1133785567,US
1133785568,1133785599,BE
1133785600,1134029055,US
-1134029056,1134029567,A2
-1134029568,1134444543,US
+1134029056,1134029151,A2
+1134029152,1134029159,US
+1134029160,1134029183,A2
+1134029184,1134029215,US
+1134029216,1134029567,A2
+1134029568,1134440447,US
+1134440448,1134443520,CN
+1134443521,1134444543,US
1134444544,1134448639,CA
1134448640,1134545919,US
1134545920,1134545951,BH
@@ -23475,8 +24168,8 @@
1137376464,1137376479,US
1137376480,1137376511,CA
1137376512,1137376639,US
-1137376640,1137376671,CA
-1137376672,1137377311,US
+1137376640,1137376703,CA
+1137376704,1137377311,US
1137377312,1137377327,DE
1137377328,1137383455,US
1137383456,1137383471,DE
@@ -23489,7 +24182,9 @@
1137524736,1137541119,CA
1137541120,1137623039,US
1137623040,1137639423,PR
-1137639424,1137704967,US
+1137639424,1137692671,US
+1137692672,1137696767,A1
+1137696768,1137704967,US
1137704968,1137705287,CA
1137705288,1137705295,US
1137705296,1137705383,CA
@@ -23767,7 +24462,9 @@
1137928064,1137928191,PA
1137928192,1137928255,CA
1137928256,1137928319,BZ
-1137928320,1137930143,CA
+1137928320,1137929727,CA
+1137929728,1137929983,IE
+1137929984,1137930143,CA
1137930144,1137930159,MT
1137930160,1137934335,CA
1137934336,1137946145,US
@@ -23906,11 +24603,13 @@
1138337208,1138417663,US
1138417664,1138417695,CA
1138417696,1138417727,DE
-1138417728,1138421759,US
+1138417728,1138419711,US
+1138419712,1138419967,DE
+1138419968,1138421759,US
1138421760,1138421791,DE
-1138421792,1138422783,US
-1138422784,1138423039,PA
-1138423040,1138425855,US
+1138421792,1138422271,US
+1138422272,1138422527,DE
+1138422528,1138425855,US
1138425856,1138427519,KN
1138427520,1138427647,US
1138427648,1138429951,KN
@@ -24002,9 +24701,11 @@
1138512896,1138512927,ID
1138512928,1138544895,US
1138544896,1138545151,GB
-1138545152,1138548735,US
-1138548736,1138556927,CA
-1138556928,1138593791,US
+1138545152,1138548991,US
+1138548992,1138549247,CA
+1138549248,1138553087,US
+1138553088,1138553343,CA
+1138553344,1138593791,US
1138593792,1138597887,CA
1138597888,1138600447,US
1138600448,1138600703,BE
@@ -24020,7 +24721,11 @@
1138655459,1138655486,CA
1138655487,1138655503,US
1138655504,1138655521,MX
-1138655522,1138655609,US
+1138655522,1138655581,US
+1138655582,1138655583,MX
+1138655584,1138655587,US
+1138655588,1138655589,MX
+1138655590,1138655609,US
1138655610,1138655617,MX
1138655618,1138655629,US
1138655630,1138655637,EG
@@ -24046,12 +24751,14 @@
1138656207,1138656222,US
1138656223,1138656230,EG
1138656231,1138656597,US
-1138656598,1138656605,EG
-1138656606,1138656661,US
+1138656598,1138656613,EG
+1138656614,1138656661,US
1138656662,1138656669,MA
1138656670,1138656745,US
1138656746,1138656753,AE
-1138656754,1138657101,US
+1138656754,1138656909,US
+1138656910,1138656917,IN
+1138656918,1138657101,US
1138657102,1138657109,IN
1138657110,1138657123,US
1138657124,1138657131,EG
@@ -24074,7 +24781,8 @@
1138658058,1138658123,GB
1138658124,1138658131,US
1138658132,1138658163,EG
-1138658164,1138658175,US
+1138658164,1138658167,US
+1138658168,1138658175,EG
1138658176,1138658302,GB
1138658303,1138658431,US
1138658432,1138658496,PK
@@ -24082,7 +24790,9 @@
1138658498,1138658525,PK
1138658526,1138659081,US
1138659082,1138659207,ES
-1138659208,1138659369,US
+1138659208,1138659307,US
+1138659308,1138659315,EG
+1138659316,1138659369,US
1138659370,1138659401,GB
1138659402,1138659465,US
1138659466,1138659497,GB
@@ -24097,11 +24807,13 @@
1138659706,1138659713,CA
1138659714,1138659723,US
1138659724,1138659731,ID
-1138659732,1138659789,US
+1138659732,1138659781,US
+1138659782,1138659789,NZ
1138659790,1138659797,ID
1138659798,1138659805,US
1138659806,1138659813,ID
-1138659814,1138659823,US
+1138659814,1138659821,LK
+1138659822,1138659823,US
1138659824,1138659831,ID
1138659832,1138659849,US
1138659850,1138659857,MA
@@ -24112,7 +24824,9 @@
1138659984,1138659999,EG
1138660000,1138660035,US
1138660036,1138660043,IN
-1138660044,1138660105,US
+1138660044,1138660050,US
+1138660051,1138660058,PH
+1138660059,1138660105,US
1138660106,1138660137,GB
1138660138,1138660169,US
1138660170,1138660177,MA
@@ -24143,9 +24857,7 @@
1138660806,1138660821,EG
1138660822,1138660873,US
1138660874,1138660881,EG
-1138660882,1138660889,US
-1138660890,1138660897,EG
-1138660898,1138660921,US
+1138660882,1138660921,US
1138660922,1138660929,EG
1138660930,1138660958,US
1138660959,1138660966,MA
@@ -24169,7 +24881,7 @@
1138661308,1138661417,US
1138661418,1138661425,LK
1138661426,1138661457,US
-1138661458,1138661465,IN
+1138661458,1138661465,EG
1138661466,1138661521,US
1138661522,1138661529,EG
1138661530,1138661553,US
@@ -24191,9 +24903,7 @@
1138661822,1138661829,MA
1138661830,1138661913,US
1138661914,1138661954,EG
-1138661955,1138661977,US
-1138661978,1138661993,EG
-1138661994,1138662057,US
+1138661955,1138662057,US
1138662058,1138662089,EG
1138662090,1138662097,ID
1138662098,1138662105,US
@@ -24261,8 +24971,8 @@
1139146752,1139154943,GT
1139154944,1139167231,JM
1139167232,1139167743,US
-1139167744,1139169023,PR
-1139169024,1139169279,US
+1139167744,1139168895,PR
+1139168896,1139169279,US
1139169280,1139170047,PR
1139170048,1139171327,US
1139171328,1139175423,GT
@@ -24285,7 +24995,7 @@
1139195136,1139195391,GB
1139195392,1139195775,US
1139195776,1139195903,CA
-1139195904,1139261439,US
+1139195904,1139265535,US
1139265536,1139269631,CA
1139269632,1142187775,US
1142187776,1142187783,PR
@@ -24297,9 +25007,7 @@
1142204104,1142204111,PR
1142204112,1142204327,US
1142204328,1142204335,PR
-1142204336,1145053455,US
-1145053456,1145053471,NG
-1145053472,1145056703,US
+1142204336,1145056703,US
1145056704,1145056719,CO
1145056720,1145188351,US
1145188352,1145192447,CA
@@ -24319,9 +25027,7 @@
1145261312,1145261375,IN
1145261376,1145307135,US
1145307136,1145311231,CA
-1145311232,1145331711,US
-1145331712,1145331967,DK
-1145331968,1145333031,US
+1145311232,1145333031,US
1145333032,1145333039,IT
1145333040,1145333191,US
1145333192,1145333199,CN
@@ -24359,7 +25065,9 @@
1145413632,1145421823,US
1145421824,1145430015,CA
1145430016,1145475071,US
-1145475072,1145479167,CA
+1145475072,1145476887,CA
+1145476888,1145476895,US
+1145476896,1145479167,CA
1145479168,1145483583,US
1145483584,1145483591,VG
1145483592,1145484031,US
@@ -24368,7 +25076,9 @@
1145503744,1145520127,CA
1145520128,1145552895,US
1145552896,1145556991,CA
-1145556992,1150043135,US
+1145556992,1145567839,US
+1145567840,1145567871,CN
+1145567872,1150043135,US
1150043136,1150044159,VA
1150044160,1150046207,US
1150046208,1150050303,JP
@@ -24444,8 +25154,8 @@
1156130016,1156130303,CA
1156130304,1156131327,US
1156131328,1156131583,CA
-1156131584,1156259839,US
-1156259840,1156265983,CA
+1156131584,1156263935,US
+1156263936,1156265983,CA
1156265984,1156296703,US
1156296704,1156300799,CA
1156300800,1157670431,US
@@ -24740,7 +25450,9 @@
1158732885,1158736241,US
1158736242,1158736249,IN
1158736250,1158774783,US
-1158774784,1158791167,CA
+1158774784,1158776947,CA
+1158776948,1158776951,US
+1158776952,1158791167,CA
1158791168,1158794239,BM
1158794240,1158794495,US
1158794496,1158799359,BM
@@ -24788,7 +25500,9 @@
1158945096,1158945103,TH
1158945104,1158945111,RU
1158945112,1158945119,CA
-1158945120,1158945271,US
+1158945120,1158945127,US
+1158945128,1158945135,MX
+1158945136,1158945271,US
1158945272,1158945287,CA
1158945288,1158945319,US
1158945320,1158945335,CA
@@ -24860,9 +25574,7 @@
1158949288,1158949295,CA
1158949296,1158949407,US
1158949408,1158949415,ZA
-1158949416,1158949775,US
-1158949776,1158949783,GB
-1158949784,1158950105,US
+1158949416,1158950105,US
1158950106,1158950107,CA
1158950108,1158950319,US
1158950320,1158950327,CA
@@ -24891,7 +25603,9 @@
1158951744,1158951751,IN
1158951752,1158951839,US
1158951840,1158951855,CA
-1158951856,1158952743,US
+1158951856,1158952711,US
+1158952712,1158952719,IN
+1158952720,1158952743,US
1158952744,1158952751,FI
1158952752,1158952815,US
1158952816,1158952823,CA
@@ -24917,22 +25631,23 @@
1158957472,1158957647,US
1158957648,1158957655,AU
1158957656,1158957663,PE
-1158957664,1158957695,US
-1158957696,1158957703,TH
-1158957704,1158958295,US
+1158957664,1158958295,US
1158958296,1158958303,AG
1158958304,1158958311,ES
1158958312,1158958367,US
1158958368,1158958375,CA
1158958376,1158958591,US
1158958592,1158958599,ZA
-1158958600,1158958671,US
+1158958600,1158958607,IL
+1158958608,1158958671,US
1158958672,1158958679,SA
1158958680,1158958719,US
1158958720,1158958751,CA
1158958752,1158959031,US
1158959032,1158959039,CA
-1158959040,1158959135,US
+1158959040,1158959079,US
+1158959080,1158959081,BG
+1158959082,1158959135,US
1158959136,1158959151,BD
1158959152,1158959679,US
1158959680,1158959687,CR
@@ -24954,7 +25669,9 @@
1158961256,1158961263,ES
1158961264,1158961775,US
1158961776,1158961783,CA
-1158961784,1158962175,US
+1158961784,1158962023,US
+1158962024,1158962027,IL
+1158962028,1158962175,US
1158962176,1158962183,GB
1158962184,1158962287,US
1158962288,1158962295,ZA
@@ -25084,9 +25801,12 @@
1159262492,1159262727,US
1159262728,1159262731,DE
1159262732,1159262735,RU
-1159262736,1159262743,US
-1159262744,1159262747,RU
-1159262748,1159266935,US
+1159262736,1159262739,US
+1159262740,1159262743,DE
+1159262744,1159262751,RU
+1159262752,1159262967,US
+1159262968,1159262975,RU
+1159262976,1159266935,US
1159266936,1159266943,PR
1159266944,1159269119,US
1159269120,1159269375,AR
@@ -25094,17 +25814,15 @@
1159274496,1159274751,GB
1159274752,1159276799,US
1159276800,1159277055,A2
-1159277056,1159279359,US
-1159279360,1159279615,PR
-1159279616,1159281151,US
-1159281152,1159281407,HK
-1159281408,1159281679,US
+1159277056,1159281679,US
1159281680,1159281695,HK
1159281696,1159281727,US
1159281728,1159281743,HK
1159281744,1159281919,US
-1159281920,1159282175,HK
-1159282176,1159292807,US
+1159281920,1159282175,GB
+1159282176,1159290655,US
+1159290656,1159290687,CA
+1159290688,1159292807,US
1159292808,1159292815,AU
1159292816,1159293343,US
1159293344,1159293359,KR
@@ -25190,9 +25908,7 @@
1159521824,1159521855,US
1159521856,1159522031,CA
1159522032,1159522047,US
-1159522048,1159522063,CA
-1159522064,1159522071,US
-1159522072,1159522095,CA
+1159522048,1159522095,CA
1159522096,1159522111,US
1159522112,1159522143,CA
1159522144,1159522167,US
@@ -25308,7 +26024,9 @@
1160017160,1160019967,CA
1160019968,1160364031,US
1160364032,1160368127,CA
-1160368128,1160397007,US
+1160368128,1160393727,US
+1160393728,1160396799,CA
+1160396800,1160397007,US
1160397008,1160397023,GB
1160397024,1160405631,US
1160405632,1160406015,DO
@@ -25427,7 +26145,9 @@
1160662488,1160662495,GB
1160662496,1160662743,US
1160662744,1160662751,GB
-1160662752,1160665623,US
+1160662752,1160663679,US
+1160663680,1160663711,HK
+1160663712,1160665623,US
1160665624,1160665631,GB
1160665632,1160665807,US
1160665808,1160665815,GB
@@ -25669,17 +26389,21 @@
1161627704,1161627711,DE
1161627712,1161627727,US
1161627728,1161627743,AR
-1161627744,1161627751,RO
-1161627752,1161627759,US
+1161627744,1161627751,US
+1161627752,1161627759,PL
1161627760,1161627775,GB
-1161627776,1161627807,US
+1161627776,1161627783,US
+1161627784,1161627791,GB
+1161627792,1161627807,US
1161627808,1161627815,SI
1161627816,1161627823,US
1161627824,1161627831,AU
1161627832,1161627839,US
-1161627840,1161627863,AR
+1161627840,1161627847,AR
+1161627848,1161627855,US
+1161627856,1161627863,AR
1161627864,1161627871,CA
-1161627872,1161627879,HR
+1161627872,1161627879,SI
1161627880,1161627895,US
1161627896,1161627903,CA
1161627904,1161628447,US
@@ -25687,7 +26411,9 @@
1161628456,1161628463,GB
1161628464,1161628479,US
1161628480,1161628487,GB
-1161628488,1161628607,US
+1161628488,1161628519,US
+1161628520,1161628527,PL
+1161628528,1161628607,US
1161628608,1161628639,AR
1161628640,1161628647,IN
1161628648,1161628663,US
@@ -25704,7 +26430,7 @@
1161629344,1161629375,FI
1161629376,1161629383,CA
1161629384,1161629391,AR
-1161629392,1161629399,IE
+1161629392,1161629399,GB
1161629400,1161629407,IL
1161629408,1161629415,GB
1161629416,1161629423,SI
@@ -25713,10 +26439,10 @@
1161629440,1161629519,US
1161629520,1161629527,GB
1161629528,1161629535,MY
-1161629536,1161629567,GB
-1161629568,1161629583,US
+1161629536,1161629583,US
1161629584,1161629599,GB
-1161629600,1161629615,US
+1161629600,1161629607,PL
+1161629608,1161629615,US
1161629616,1161629631,GB
1161629632,1161629663,US
1161629664,1161629671,AU
@@ -25724,7 +26450,8 @@
1161629696,1161629951,PL
1161629952,1161630223,US
1161630224,1161630231,NL
-1161630232,1161630255,US
+1161630232,1161630247,US
+1161630248,1161630255,HR
1161630256,1161630263,NL
1161630264,1161630271,AR
1161630272,1161630335,US
@@ -25809,13 +26536,26 @@
1161632632,1161632639,GB
1161632640,1161632655,US
1161632656,1161632663,GB
-1161632664,1161632719,US
+1161632664,1161632687,US
+1161632688,1161632703,GB
+1161632704,1161632719,US
1161632720,1161632735,GB
-1161632736,1161633023,US
+1161632736,1161632943,US
+1161632944,1161632959,CA
+1161632960,1161633023,US
1161633024,1161633055,CA
1161633056,1161633215,US
1161633216,1161633231,EE
-1161633232,1161633631,US
+1161633232,1161633239,US
+1161633240,1161633247,AU
+1161633248,1161633263,US
+1161633264,1161633271,PL
+1161633272,1161633543,US
+1161633544,1161633551,AR
+1161633552,1161633559,US
+1161633560,1161633567,IL
+1161633568,1161633583,PL
+1161633584,1161633631,US
1161633632,1161633639,CA
1161633640,1161634055,US
1161634056,1161634063,IN
@@ -25831,29 +26571,26 @@
1161634224,1161634231,VN
1161634232,1161634239,US
1161634240,1161634247,GB
-1161634248,1161634271,US
-1161634272,1161634287,CH
-1161634288,1161634335,US
-1161634336,1161634352,PL
-1161634353,1161634495,US
+1161634248,1161634335,US
+1161634336,1161634351,PL
+1161634352,1161634495,US
1161634496,1161634503,GB
1161634504,1161634519,US
1161634520,1161634527,BG
-1161634528,1161634943,US
+1161634528,1161634815,US
+1161634816,1161634831,PL
+1161634832,1161634943,US
1161634944,1161634959,PL
-1161634960,1161634975,US
-1161634976,1161635007,PL
+1161634960,1161635007,US
1161635008,1161635071,KW
1161635072,1161635855,US
1161635856,1161635871,BE
-1161635872,1161636063,US
-1161636064,1161636095,IL
+1161635872,1161635887,PL
+1161635888,1161636095,US
1161636096,1161636127,GB
1161636128,1161636159,US
1161636160,1161636223,IL
-1161636224,1161636415,US
-1161636416,1161636447,PL
-1161636448,1161636463,US
+1161636224,1161636463,US
1161636464,1161636471,EG
1161636472,1161636495,US
1161636496,1161636503,CA
@@ -25906,8 +26643,7 @@
1161639688,1161639695,KW
1161639696,1161639703,US
1161639704,1161639711,BZ
-1161639712,1161639719,PL
-1161639720,1161639727,US
+1161639712,1161639727,US
1161639728,1161639743,GB
1161639744,1161639831,US
1161639832,1161639839,AR
@@ -26078,14 +26814,18 @@
1161791322,1161791330,CA
1161791331,1161791381,US
1161791382,1161791386,CA
-1161791387,1161795979,US
+1161791387,1161794468,US
+1161794469,1161794472,ZA
+1161794473,1161794649,US
+1161794650,1161794654,ZA
+1161794655,1161795979,US
1161795980,1161795983,CA
1161795984,1161818111,US
1161818112,1161822207,CA
1161822208,1161832767,US
1161832768,1161832831,BR
1161832832,1161833759,US
-1161833760,1161833791,FR
+1161833760,1161833791,TR
1161833792,1161833855,US
1161833856,1161833887,FR
1161833888,1161833919,US
@@ -26190,7 +26930,7 @@
1162383072,1162393759,US
1162393760,1162393767,IN
1162393768,1162394463,US
-1162394464,1162394471,IE
+1162394464,1162394471,GB
1162394472,1162401519,US
1162401520,1162401527,IN
1162401528,1162408455,US
@@ -26342,7 +27082,9 @@
1163398144,1163398239,A2
1163398240,1163398303,BD
1163398304,1163398367,A2
-1163398368,1163399039,BD
+1163398368,1163398399,BD
+1163398400,1163398655,US
+1163398656,1163399039,BD
1163399040,1163399103,A2
1163399104,1163399295,BD
1163399296,1163399679,A2
@@ -26396,17 +27138,15 @@
1163477728,1163478047,US
1163478048,1163478063,JP
1163478064,1163526143,US
-1163526144,1163526463,CA
-1163526464,1163526655,US
+1163526144,1163526471,CA
+1163526472,1163526655,US
1163526656,1163527023,CA
1163527024,1163527039,BV
1163527040,1163527059,CA
1163527060,1163527071,US
1163527072,1163527103,CA
1163527104,1163527135,US
-1163527136,1163527679,CA
-1163527680,1163527743,US
-1163527744,1163527783,CA
+1163527136,1163527783,CA
1163527784,1163527791,US
1163527792,1163529215,CA
1163529216,1163530239,US
@@ -26424,9 +27164,7 @@
1163530960,1163530967,US
1163530968,1163533023,CA
1163533024,1163533055,US
-1163533056,1163533511,CA
-1163533512,1163533519,US
-1163533520,1163533551,CA
+1163533056,1163533551,CA
1163533552,1163533567,PA
1163533568,1163533695,CA
1163533696,1163533727,US
@@ -26520,9 +27258,7 @@
1163547536,1163547539,US
1163547540,1163547567,CA
1163547568,1163547583,VG
-1163547584,1163547647,CA
-1163547648,1163547903,US
-1163547904,1163547951,CA
+1163547584,1163547951,CA
1163547952,1163547983,US
1163547984,1163550335,CA
1163550336,1163550351,US
@@ -26550,7 +27286,9 @@
1163552576,1163552607,PA
1163552608,1163552679,CA
1163552680,1163552687,US
-1163552688,1163553855,CA
+1163552688,1163552695,CA
+1163552696,1163552703,US
+1163552704,1163553855,CA
1163553856,1163553871,US
1163553872,1163553919,CA
1163553920,1163553935,BV
@@ -26592,9 +27330,7 @@
1163570496,1163571199,US
1163571200,1163571983,CA
1163571984,1163571999,US
-1163572000,1163572031,CA
-1163572032,1163572063,BE
-1163572064,1163572175,CA
+1163572000,1163572175,CA
1163572176,1163572183,US
1163572184,1163572687,CA
1163572688,1163572703,US
@@ -26645,18 +27381,8 @@
1163581568,1163581583,CA
1163581584,1163581615,US
1163581616,1163581631,CA
-1163581632,1163581703,US
-1163581704,1163581799,CA
-1163581800,1163581807,US
-1163581808,1163581839,CA
-1163581840,1163581895,US
-1163581896,1163581903,CA
-1163581904,1163581907,US
-1163581908,1163581915,CA
-1163581916,1163581919,US
-1163581920,1163581943,CA
-1163581944,1163581951,US
-1163581952,1163581983,CA
+1163581632,1163581695,US
+1163581696,1163581983,CA
1163581984,1163582015,US
1163582016,1163582111,CA
1163582112,1163582127,US
@@ -26664,12 +27390,12 @@
1163582160,1163582167,FI
1163582168,1163582183,CA
1163582184,1163582191,US
-1163582192,1163583487,CA
-1163583488,1163585199,US
+1163582192,1163583231,CA
+1163583232,1163585199,US
1163585200,1163585215,CA
1163585216,1163585855,US
-1163585856,1163585887,CA
-1163585888,1163585889,US
+1163585856,1163585871,CA
+1163585872,1163585889,US
1163585890,1163585905,GB
1163585906,1163586740,US
1163586741,1163586743,CA
@@ -26685,12 +27411,14 @@
1163588216,1163588223,US
1163588224,1163588607,CA
1163588608,1163588608,US
-1163588609,1163588655,CA
-1163588656,1163588671,US
-1163588672,1163588695,CA
+1163588609,1163588695,CA
1163588696,1163588703,US
1163588704,1163588727,CA
-1163588728,1163588863,US
+1163588728,1163588799,US
+1163588800,1163588815,CA
+1163588816,1163588831,US
+1163588832,1163588847,CA
+1163588848,1163588863,US
1163588864,1163589631,CA
1163589632,1163870575,US
1163870576,1163870583,CN
@@ -26702,7 +27430,13 @@
1167319112,1167319119,ZA
1167319120,1167319255,US
1167319256,1167319263,CA
-1167319264,1167321959,US
+1167319264,1167319359,US
+1167319360,1167319367,CA
+1167319368,1167320071,US
+1167320072,1167320079,CA
+1167320080,1167321447,US
+1167321448,1167321455,CA
+1167321456,1167321959,US
1167321960,1167321967,GB
1167321968,1167322695,US
1167322696,1167322703,IN
@@ -26714,10 +27448,16 @@
1167324048,1167324055,CA
1167324056,1167324287,US
1167324288,1167324295,GB
-1167324296,1167325935,US
+1167324296,1167324311,US
+1167324312,1167324319,CA
+1167324320,1167325727,US
+1167325728,1167325735,CA
+1167325736,1167325935,US
1167325936,1167325951,CA
1167325952,1167326207,US
-1167326208,1167326271,IN
+1167326208,1167326231,IN
+1167326232,1167326239,CA
+1167326240,1167326271,IN
1167326272,1167326303,US
1167326304,1167326335,IN
1167326336,1167326367,SI
@@ -26727,7 +27467,9 @@
1167326440,1167326447,IN
1167326448,1167326983,US
1167326984,1167326991,IN
-1167326992,1167327111,US
+1167326992,1167327023,US
+1167327024,1167327031,CA
+1167327032,1167327111,US
1167327112,1167327119,IN
1167327120,1167327207,US
1167327208,1167327215,IN
@@ -26761,7 +27503,9 @@
1168394512,1168394751,CA
1168394752,1168420863,US
1168420864,1168424959,CA
-1168424960,1168474111,US
+1168424960,1168453631,US
+1168453632,1168457727,A1
+1168457728,1168474111,US
1168474112,1168506879,CA
1168508928,1168510975,US
1168510976,1168515071,CA
@@ -26803,9 +27547,7 @@
1168954076,1168954079,CA
1168954080,1168954623,US
1168954624,1168954687,IN
-1168954688,1168954751,US
-1168954752,1168954879,CA
-1168954880,1168955647,US
+1168954688,1168955647,US
1168955648,1168956159,CA
1168956160,1168957439,US
1168957440,1168958047,CA
@@ -26820,7 +27562,8 @@
1168958212,1168958215,CA
1168958216,1168958223,US
1168958224,1168958231,SG
-1168958232,1168958423,CA
+1168958232,1168958239,US
+1168958240,1168958423,CA
1168958424,1168958463,US
1168958464,1168958479,CA
1168958480,1168958495,US
@@ -26895,8 +27638,7 @@
1170457664,1170458063,US
1170458064,1170458079,DE
1170458080,1170461055,US
-1170461056,1170461439,CO
-1170461440,1170461695,US
+1170461056,1170461695,CO
1170461696,1170462719,IL
1170462720,1170465791,US
1170465792,1170466047,CY
@@ -26907,7 +27649,14 @@
1170467840,1170468351,DO
1170468352,1170469055,US
1170469056,1170469071,VG
-1170469072,1170472959,US
+1170469072,1170470911,US
+1170470912,1170471167,ES
+1170471168,1170471375,US
+1170471376,1170471391,UY
+1170471392,1170471903,US
+1170471904,1170471919,BE
+1170471920,1170472703,US
+1170472704,1170472959,VG
1170472960,1170481151,CA
1170481152,1170489343,US
1170489344,1170497535,CA
@@ -26924,22 +27673,24 @@
1170539461,1170539461,PK
1170539462,1170539522,US
1170539523,1170539523,AU
-1170539524,1170539589,US
+1170539524,1170539586,US
+1170539587,1170539587,SC
+1170539588,1170539589,US
1170539590,1170539590,SA
1170539591,1170539591,CN
1170539592,1170539592,AU
-1170539593,1170539650,US
-1170539651,1170539651,TR
-1170539652,1170539652,US
+1170539593,1170539652,US
1170539653,1170539653,GB
1170539654,1170539712,US
1170539713,1170539713,CN
1170539714,1170539714,US
1170539715,1170539715,PK
-1170539716,1170539777,US
+1170539716,1170539776,US
+1170539777,1170539777,SC
1170539778,1170539778,CN
-1170539779,1170539780,US
-1170539781,1170539781,KR
+1170539779,1170539779,SC
+1170539780,1170539780,US
+1170539781,1170539781,PR
1170539782,1170539841,US
1170539842,1170539842,BD
1170539843,1170539843,MY
@@ -26957,9 +27708,7 @@
1170540106,1170540106,CN
1170540107,1170540163,US
1170540164,1170540164,RO
-1170540165,1170540228,US
-1170540229,1170540229,TR
-1170540230,1170540230,US
+1170540165,1170540230,US
1170540231,1170540231,KR
1170540232,1170540232,CN
1170540233,1170540288,US
@@ -26968,8 +27717,7 @@
1170540292,1170540292,TR
1170540293,1170540294,US
1170540295,1170540295,CN
-1170540296,1170540296,TR
-1170540297,1170540353,US
+1170540296,1170540353,US
1170540354,1170540354,CN
1170540355,1170540359,US
1170540360,1170540360,CN
@@ -26984,17 +27732,21 @@
1170540429,1170540429,TR
1170540430,1170540480,US
1170540481,1170540481,TR
-1170540482,1170540485,US
-1170540486,1170540487,TR
+1170540482,1170540486,US
+1170540487,1170540487,TR
1170540488,1170540491,US
1170540492,1170540494,TR
-1170540495,1170540608,US
+1170540495,1170540496,US
+1170540497,1170540497,CZ
+1170540498,1170540608,US
1170540609,1170540609,CN
1170540610,1170540616,US
1170540617,1170540617,TR
1170540618,1170542863,US
1170542864,1170542871,CN
-1170542872,1170544127,US
+1170542872,1170543747,US
+1170543748,1170543751,PR
+1170543752,1170544127,US
1170544128,1170544191,CN
1170544192,1170544195,US
1170544196,1170544199,BD
@@ -27010,19 +27762,20 @@
1170544396,1170544431,US
1170544432,1170544439,CN
1170544440,1170544443,AU
-1170544444,1170544511,US
-1170544512,1170544543,TR
-1170544544,1170544807,US
+1170544444,1170544807,US
1170544808,1170544815,CN
1170544816,1170544831,US
1170544832,1170544959,CN
1170544960,1170544983,US
1170544984,1170544987,CN
-1170544988,1170545055,US
+1170544988,1170544991,US
+1170544992,1170545023,SC
+1170545024,1170545055,US
1170545056,1170545087,CN
1170545088,1170545407,US
1170545408,1170545439,TR
-1170545440,1170545595,US
+1170545440,1170545471,SC
+1170545472,1170545595,US
1170545596,1170545599,CN
1170545600,1170552607,US
1170552608,1170552611,CN
@@ -27048,16 +27801,15 @@
1170553628,1170553631,TR
1170553632,1170553635,US
1170553636,1170553643,SA
-1170553644,1170553647,TR
-1170553648,1170553651,US
+1170553644,1170553651,US
1170553652,1170553655,TR
1170553656,1170553663,US
1170553664,1170553667,SA
-1170553668,1170553683,US
+1170553668,1170553675,US
+1170553676,1170553679,SC
+1170553680,1170553683,US
1170553684,1170553687,CN
-1170553688,1170553707,US
-1170553708,1170553711,TR
-1170553712,1170553855,US
+1170553688,1170553855,US
1170553856,1170553983,MY
1170553984,1170554047,CN
1170554048,1170554367,US
@@ -27091,7 +27843,9 @@
1176512152,1176512159,GB
1176512160,1176512703,US
1176512704,1176512711,ZA
-1176512712,1176513879,US
+1176512712,1176513479,US
+1176513480,1176513487,CA
+1176513488,1176513879,US
1176513880,1176513887,GB
1176513888,1176514271,US
1176514272,1176514303,IN
@@ -27119,10 +27873,8 @@
1176620512,1176620743,CA
1176620744,1176620783,US
1176620784,1176620863,CA
-1176620864,1176620895,US
-1176620896,1176620911,CA
-1176620912,1176620927,US
-1176620928,1176620967,CA
+1176620864,1176620879,US
+1176620880,1176620967,CA
1176620968,1176620975,US
1176620976,1176620991,CA
1176620992,1176620999,US
@@ -27137,7 +27889,10 @@
1176621888,1176622047,CA
1176622048,1176622079,US
1176622080,1176622335,GB
-1176622336,1176622591,US
+1176622336,1176622431,CA
+1176622432,1176622455,US
+1176622456,1176622559,CA
+1176622560,1176622591,US
1176622592,1176623359,CA
1176623360,1176623487,US
1176623488,1176623567,CA
@@ -27459,7 +28214,9 @@
1177165312,1177165823,CA
1177165824,1177167743,US
1177167744,1177167751,LB
-1177167752,1177168223,US
+1177167752,1177167839,US
+1177167840,1177167847,IL
+1177167848,1177168223,US
1177168224,1177168231,IE
1177168232,1177175199,US
1177175200,1177175231,CZ
@@ -27752,7 +28509,9 @@
1208205984,1208205991,GB
1208205992,1208206439,US
1208206440,1208206463,CA
-1208206464,1208207183,US
+1208206464,1208207095,US
+1208207096,1208207097,IN
+1208207098,1208207183,US
1208207184,1208207191,AU
1208207192,1208207303,US
1208207304,1208207311,ZA
@@ -27886,7 +28645,8 @@
1208338176,1208516607,US
1208516608,1208516623,MX
1208516624,1208516639,US
-1208516640,1208516735,TR
+1208516640,1208516671,TR
+1208516672,1208516735,US
1208516736,1208516799,ID
1208516800,1208516855,US
1208516856,1208516859,CN
@@ -27928,8 +28688,9 @@
1208518400,1208518655,ID
1208518656,1208519167,US
1208519168,1208519423,CN
-1208519424,1208519551,TR
-1208519552,1208521983,US
+1208519424,1208519679,US
+1208519680,1208519935,GB
+1208519936,1208521983,US
1208521984,1208522239,CN
1208522240,1208522271,US
1208522272,1208522303,TR
@@ -27943,8 +28704,7 @@
1208523992,1208523995,TR
1208523996,1208523999,US
1208524000,1208524031,TR
-1208524032,1208524047,US
-1208524048,1208524055,TR
+1208524032,1208524055,US
1208524056,1208524059,CN
1208524060,1208524063,US
1208524064,1208524079,CN
@@ -27969,21 +28729,23 @@
1208526080,1208526335,US
1208526336,1208526591,CN
1208526592,1208526607,TR
-1208526608,1208526623,US
-1208526624,1208526655,TR
-1208526656,1208526815,US
+1208526608,1208526815,US
1208526816,1208526847,CN
1208526848,1208527871,US
1208527872,1208527887,VN
1208527888,1208527903,US
-1208527904,1208528127,VN
+1208527904,1208528015,VN
+1208528016,1208528031,SC
+1208528032,1208528127,VN
1208528128,1208531007,US
1208531008,1208531071,CN
1208531072,1208531455,US
1208531456,1208531583,CN
1208531584,1208531711,US
1208531712,1208531967,PK
-1208531968,1208532287,US
+1208531968,1208531995,US
+1208531996,1208531999,GB
+1208532000,1208532287,US
1208532288,1208532351,PK
1208532352,1208586364,US
1208586365,1208586372,MA
@@ -27995,7 +28757,7 @@
1208586527,1208586536,TR
1208586537,1208586573,US
1208586574,1208586581,MX
-1208586582,1208586589,US
+1208586582,1208586589,LK
1208586590,1208586597,NZ
1208586598,1208586662,US
1208586663,1208586670,GB
@@ -28019,7 +28781,9 @@
1208587026,1208587033,NZ
1208587034,1208587045,US
1208587046,1208587053,IN
-1208587054,1208587169,US
+1208587054,1208587087,US
+1208587088,1208587095,LK
+1208587096,1208587169,US
1208587170,1208587177,MX
1208587178,1208587187,US
1208587188,1208587195,EG
@@ -28095,15 +28859,21 @@
1208588973,1208588985,GB
1208588986,1208588989,US
1208588990,1208589000,GB
-1208589001,1208589065,US
+1208589001,1208589043,US
+1208589044,1208589051,BH
+1208589052,1208589065,US
1208589066,1208589081,CA
1208589082,1208589156,US
1208589157,1208589165,GB
1208589166,1208589174,US
1208589175,1208589186,CA
-1208589187,1208589321,US
+1208589187,1208589299,US
+1208589300,1208589307,LK
+1208589308,1208589321,US
1208589322,1208589329,CA
-1208589330,1208589379,US
+1208589330,1208589341,US
+1208589342,1208589349,ID
+1208589350,1208589379,US
1208589380,1208589387,EG
1208589388,1208589577,US
1208589578,1208589585,GB
@@ -28111,11 +28881,19 @@
1208589640,1208589651,TR
1208589652,1208589857,US
1208589858,1208589865,MA
-1208589866,1208589970,US
+1208589866,1208589901,US
+1208589902,1208589913,EG
+1208589914,1208589915,US
+1208589916,1208589917,EG
+1208589918,1208589970,US
1208589971,1208590002,GB
1208590003,1208590004,US
1208590005,1208590014,GB
-1208590015,1208590061,US
+1208590015,1208590031,US
+1208590032,1208590033,EG
+1208590034,1208590041,US
+1208590042,1208590055,EG
+1208590056,1208590061,US
1208590062,1208590071,CN
1208590072,1208590091,US
1208590092,1208590108,GB
@@ -28300,10 +29078,11 @@
1209271084,1209271087,BR
1209271088,1209271127,US
1209271128,1209271131,SA
-1209271132,1209271187,US
-1209271188,1209271191,TR
+1209271132,1209271191,US
1209271192,1209271195,RO
-1209271196,1209271215,US
+1209271196,1209271207,US
+1209271208,1209271211,SC
+1209271212,1209271215,US
1209271216,1209271219,IN
1209271220,1209271367,US
1209271368,1209271371,TR
@@ -28324,8 +29103,7 @@
1209271544,1209271551,CN
1209271552,1209271567,US
1209271568,1209271571,PL
-1209271572,1209271575,TR
-1209271576,1209271579,US
+1209271572,1209271579,US
1209271580,1209271583,BD
1209271584,1209271607,US
1209271608,1209271611,KH
@@ -28355,7 +29133,9 @@
1209271848,1209271855,IN
1209271856,1209271867,US
1209271868,1209271871,BR
-1209271872,1209271951,US
+1209271872,1209271923,US
+1209271924,1209271927,CA
+1209271928,1209271951,US
1209271952,1209271955,KH
1209271956,1209271963,US
1209271964,1209271967,TR
@@ -28363,20 +29143,15 @@
1209271972,1209271975,TR
1209271976,1209271979,CA
1209271980,1209271983,ZA
-1209271984,1209271999,US
+1209271984,1209271995,US
+1209271996,1209271999,SC
1209272000,1209272007,TR
1209272008,1209272011,PL
-1209272012,1209272043,US
-1209272044,1209272047,TR
-1209272048,1209272079,US
-1209272080,1209272095,TR
-1209272096,1209272127,US
+1209272012,1209272127,US
1209272128,1209272159,CN
1209272160,1209272175,US
1209272176,1209272191,BR
-1209272192,1209272223,TR
-1209272224,1209272239,US
-1209272240,1209272255,TR
+1209272192,1209272255,US
1209272256,1209272287,CN
1209272288,1209272383,US
1209272384,1209272399,CN
@@ -28394,11 +29169,9 @@
1209272624,1209272655,US
1209272656,1209272671,TR
1209272672,1209272719,US
-1209272720,1209272767,CN
-1209272768,1209272783,TR
-1209272784,1209272847,US
-1209272848,1209272863,TR
-1209272864,1209272895,US
+1209272720,1209272735,PR
+1209272736,1209272767,CN
+1209272768,1209272895,US
1209272896,1209272959,CN
1209272960,1209273023,BR
1209273024,1209273055,US
@@ -28412,15 +29185,18 @@
1209273280,1209273311,BR
1209273312,1209273359,US
1209273360,1209273407,TR
-1209273408,1209273555,US
+1209273408,1209273471,CZ
+1209273472,1209273555,US
1209273556,1209273559,CA
1209273560,1209273647,US
1209273648,1209273655,CN
1209273656,1209273663,AU
1209273664,1209273671,BD
-1209273672,1209273999,US
-1209274000,1209274015,TR
-1209274016,1209274023,US
+1209273672,1209273675,US
+1209273676,1209273679,GB
+1209273680,1209273991,US
+1209273992,1209273999,SC
+1209274000,1209274023,US
1209274024,1209274031,RO
1209274032,1209274039,TR
1209274040,1209274047,US
@@ -28428,28 +29204,34 @@
1209274112,1209274115,US
1209274116,1209274119,CZ
1209274120,1209274135,US
-1209274136,1209274151,TR
-1209274152,1209274367,US
-1209274368,1209274495,TR
+1209274136,1209274143,TR
+1209274144,1209274175,US
+1209274176,1209274239,SC
+1209274240,1209274495,US
1209274496,1209274527,CN
1209274528,1209274543,US
1209274544,1209274559,TR
-1209274560,1209274815,US
+1209274560,1209274607,US
+1209274608,1209274623,SC
+1209274624,1209274815,US
1209274816,1209274879,CA
-1209274880,1209274911,CZ
+1209274880,1209274911,CN
1209274912,1209274927,US
1209274928,1209274943,TR
1209274944,1209274959,US
1209274960,1209274967,PH
1209274968,1209275071,US
1209275072,1209275135,GB
-1209275136,1209275679,US
+1209275136,1209275647,US
+1209275648,1209275679,SC
1209275680,1209275695,TR
1209275696,1209275791,US
1209275792,1209275799,TR
1209275800,1209275823,US
1209275824,1209275827,CN
-1209275828,1209275906,US
+1209275828,1209275863,US
+1209275864,1209275871,SC
+1209275872,1209275906,US
1209275907,1209275908,KH
1209275909,1209275913,US
1209275914,1209275914,KH
@@ -28480,7 +29262,9 @@
1209276808,1209276903,US
1209276904,1209276911,CN
1209276912,1209276927,TR
-1209276928,1209277103,US
+1209276928,1209277087,US
+1209277088,1209277095,SC
+1209277096,1209277103,US
1209277104,1209277119,TR
1209277120,1209277135,RO
1209277136,1209277143,US
@@ -28492,7 +29276,10 @@
1209277158,1209277158,IN
1209277159,1209277159,US
1209277160,1209277160,CN
-1209277161,1209277166,US
+1209277161,1209277161,SC
+1209277162,1209277163,US
+1209277164,1209277165,SC
+1209277166,1209277166,GB
1209277167,1209277167,CN
1209277168,1209277168,AU
1209277169,1209277171,US
@@ -28548,8 +29335,7 @@
1209279232,1209279295,BR
1209279296,1209279615,US
1209279616,1209279743,GB
-1209279744,1209279855,US
-1209279856,1209279871,TR
+1209279744,1209279871,US
1209279872,1209279935,MY
1209279936,1209279951,GB
1209279952,1209279967,US
@@ -28560,7 +29346,8 @@
1209280032,1209280047,IN
1209280048,1209280191,US
1209280192,1209280255,ID
-1209280256,1209280419,US
+1209280256,1209280319,SC
+1209280320,1209280419,US
1209280420,1209280423,CN
1209280424,1209280439,US
1209280440,1209280447,CN
@@ -28570,27 +29357,25 @@
1209280512,1209280515,US
1209280516,1209280519,TR
1209280520,1209280527,AU
-1209280528,1209280623,US
-1209280624,1209280639,TR
-1209280640,1209280895,US
+1209280528,1209280575,US
+1209280576,1209280607,SC
+1209280608,1209280895,US
1209280896,1209280959,BR
-1209280960,1209281007,US
-1209281008,1209281023,TR
-1209281024,1209281151,US
+1209280960,1209281151,US
1209281152,1209281231,CN
1209281232,1209281247,US
1209281248,1209281279,CA
1209281280,1209281535,KH
1209281536,1209281791,IN
-1209281792,1209281871,US
-1209281872,1209281887,TR
-1209281888,1209281927,US
+1209281792,1209281863,US
+1209281864,1209281871,SC
+1209281872,1209281927,US
1209281928,1209281935,IN
-1209281936,1209281983,US
-1209281984,1209282047,TR
-1209282048,1209282063,US
+1209281936,1209282063,US
1209282064,1209282067,SA
-1209282068,1209282159,US
+1209282068,1209282111,US
+1209282112,1209282143,SC
+1209282144,1209282159,US
1209282160,1209282175,CN
1209282176,1209282559,US
1209282560,1209282623,CN
@@ -28608,16 +29393,16 @@
1209283752,1209283759,BD
1209283760,1209283775,US
1209283776,1209283807,ZA
-1209283808,1209283839,CA
-1209283840,1209283871,US
-1209283872,1209283875,TR
-1209283876,1209283887,US
+1209283808,1209283839,MY
+1209283840,1209283887,US
1209283888,1209283903,BR
1209283904,1209283915,US
1209283916,1209283919,KR
-1209283920,1209284159,US
+1209283920,1209284095,US
+1209284096,1209284127,CA
+1209284128,1209284159,US
1209284160,1209284223,TR
-1209284224,1209284351,IE
+1209284224,1209284351,CN
1209284352,1209284391,US
1209284392,1209284399,RO
1209284400,1209284415,TR
@@ -28626,18 +29411,15 @@
1209284448,1209284607,US
1209284608,1209284671,TR
1209284672,1209284735,CN
-1209284736,1209284767,US
+1209284736,1209284759,US
+1209284760,1209284767,SC
1209284768,1209284799,MY
1209284800,1209284831,TR
-1209284832,1209284839,US
-1209284840,1209284843,TR
-1209284844,1209284855,US
+1209284832,1209284855,US
1209284856,1209284863,CN
1209284864,1209284993,US
1209284994,1209284994,TR
-1209284995,1209284995,US
-1209284996,1209284996,TR
-1209284997,1209284997,US
+1209284995,1209284997,US
1209284998,1209284998,CN
1209284999,1209284999,US
1209285000,1209285000,CA
@@ -28724,7 +29506,11 @@
1209877935,1209877938,PK
1209877939,1209879554,US
1209879555,1209879558,PE
-1209879559,1209884671,US
+1209879559,1209880125,US
+1209880126,1209880126,CA
+1209880127,1209882516,US
+1209882517,1209882517,CA
+1209882518,1209884671,US
1209884672,1209884679,IT
1209884680,1209884687,ES
1209884688,1209884823,US
@@ -29189,7 +29975,9 @@
1210101280,1210101311,US
1210101312,1210101319,IE
1210101320,1210101327,IL
-1210101328,1210101559,US
+1210101328,1210101519,US
+1210101520,1210101527,IL
+1210101528,1210101559,US
1210101560,1210101567,AU
1210101568,1210101727,US
1210101728,1210101743,GB
@@ -29466,9 +30254,7 @@
1211039088,1211039103,RU
1211039104,1211039503,US
1211039504,1211039519,A2
-1211039520,1211039551,US
-1211039552,1211039567,BM
-1211039568,1211039647,US
+1211039520,1211039647,US
1211039648,1211039663,AR
1211039664,1211039679,US
1211039680,1211039695,BR
@@ -29590,13 +30376,17 @@
1211394064,1211394079,ES
1211394080,1211394751,US
1211394752,1211395071,IT
-1211395072,1211407293,US
+1211395072,1211404421,US
+1211404422,1211404422,CA
+1211404423,1211407293,US
1211407294,1211407333,MX
1211407334,1211413247,US
1211413248,1211413503,CA
1211413504,1211419489,US
1211419490,1211419497,CA
-1211419498,1211432959,US
+1211419498,1211421739,US
+1211421740,1211421740,CA
+1211421741,1211432959,US
1211432960,1211473919,CA
1211473920,1211596799,US
1211596800,1211613183,CA
@@ -29814,13 +30604,25 @@
1247483096,1247483111,US
1247483112,1247483119,CN
1247483120,1247483647,US
-1247483648,1247484671,CN
+1247483648,1247483951,CN
+1247483952,1247483967,US
+1247483968,1247484031,CN
+1247484032,1247484047,US
+1247484048,1247484287,CN
+1247484288,1247484319,US
+1247484320,1247484543,CN
+1247484544,1247484551,US
+1247484552,1247484559,CN
+1247484560,1247484567,US
+1247484568,1247484671,CN
1247484672,1247484927,US
1247484928,1247485191,CN
1247485192,1247485231,US
1247485232,1247485263,CN
1247485264,1247485439,US
-1247485440,1247485543,CN
+1247485440,1247485471,CN
+1247485472,1247485479,US
+1247485480,1247485543,CN
1247485544,1247485615,US
1247485616,1247485623,CN
1247485624,1247485631,US
@@ -29847,7 +30649,9 @@
1248897264,1248897271,FR
1248897272,1248899071,US
1248899072,1248900095,CA
-1248900096,1248903695,US
+1248900096,1248902143,US
+1248902144,1248903167,CA
+1248903168,1248903695,US
1248903696,1248903711,ZA
1248903712,1248903775,US
1248903776,1248903791,FR
@@ -29940,9 +30744,7 @@
1249105120,1249105127,AR
1249105128,1249105135,US
1249105136,1249105143,CH
-1249105144,1249105183,US
-1249105184,1249105191,ZA
-1249105192,1249105279,US
+1249105144,1249105279,US
1249105280,1249105295,CA
1249105296,1249105367,US
1249105368,1249105375,ES
@@ -30000,7 +30802,9 @@
1249229217,1249229217,CA
1249229218,1249229289,US
1249229290,1249229291,CA
-1249229292,1249236991,US
+1249229292,1249229591,US
+1249229592,1249229599,ES
+1249229600,1249236991,US
1249236992,1249239039,KY
1249239040,1249245183,US
1249245184,1249247231,CA
@@ -30068,7 +30872,9 @@
1249440280,1249440287,FR
1249440288,1249452031,US
1249452032,1249453055,CA
-1249453056,1249474559,US
+1249453056,1249460671,US
+1249460672,1249460687,CA
+1249460688,1249474559,US
1249474560,1249475583,CA
1249475584,1249484799,US
1249484800,1249486847,CA
@@ -30093,7 +30899,9 @@
1249572864,1249577087,US
1249577088,1249577232,CA
1249577233,1249577343,US
-1249577344,1249577480,CA
+1249577344,1249577403,CA
+1249577404,1249577468,US
+1249577469,1249577480,CA
1249577481,1249577545,US
1249577546,1249577730,CA
1249577731,1249577794,US
@@ -30181,7 +30989,9 @@
1254704904,1254704911,PH
1254704912,1254713359,US
1254713360,1254713407,CA
-1254713408,1254924687,US
+1254713408,1254752191,US
+1254752192,1254752207,CH
+1254752208,1254924687,US
1254924688,1254924703,RO
1254924704,1254948927,US
1254948928,1254948935,SG
@@ -30469,9 +31279,7 @@
1254966928,1254966943,FR
1254966944,1254966975,US
1254966976,1254966991,IL
-1254966992,1254967007,US
-1254967008,1254967023,AE
-1254967024,1254967079,US
+1254966992,1254967079,US
1254967080,1254967087,PH
1254967088,1254967127,US
1254967128,1254967143,BM
@@ -30561,7 +31369,8 @@
1254970336,1254970343,CH
1254970344,1254970527,US
1254970528,1254970543,GB
-1254970544,1254970607,US
+1254970544,1254970591,US
+1254970592,1254970607,PH
1254970608,1254970623,GH
1254970624,1254970631,MX
1254970632,1254970903,US
@@ -30727,9 +31536,7 @@
1255057888,1255057919,NL
1255057920,1255058671,US
1255058672,1255058687,GB
-1255058688,1255059151,US
-1255059152,1255059167,GB
-1255059168,1255059327,US
+1255058688,1255059327,US
1255059328,1255059343,NL
1255059344,1255059359,US
1255059360,1255059391,CA
@@ -30755,7 +31562,9 @@
1255063552,1255071743,PR
1255071744,1255210495,US
1255210496,1255211007,DE
-1255211008,1255265279,US
+1255211008,1255264511,US
+1255264512,1255264767,SG
+1255264768,1255265279,US
1255265280,1255266303,SG
1255266304,1255274047,US
1255274048,1255274079,GB
@@ -30763,11 +31572,9 @@
1255274496,1255274751,SG
1255274752,1255276543,US
1255276544,1255342079,CA
-1255342080,1255369055,US
-1255369056,1255369087,DE
-1255369088,1255373759,US
-1255373760,1255373791,DE
-1255373792,1255489535,US
+1255342080,1255367167,US
+1255367168,1255367423,DE
+1255367424,1255489535,US
1255489536,1255505919,PR
1255505920,1255514111,US
1255514112,1255522303,CA
@@ -30787,9 +31594,7 @@
1255770368,1255770623,CA
1255770624,1255776431,US
1255776432,1255776439,LB
-1255776440,1255780351,US
-1255780352,1255782399,CA
-1255782400,1255784959,US
+1255776440,1255784959,US
1255784960,1255784967,BE
1255784968,1255788511,US
1255788512,1255788543,BE
@@ -30846,16 +31651,25 @@
1264737280,1264738175,US
1264738176,1264738207,IL
1264738208,1264762879,US
-1264762880,1264766975,CA
-1264766976,1264980735,US
+1264762880,1264763391,CA
+1264763392,1264763647,IE
+1264763648,1264764927,CA
+1264764928,1264764959,US
+1264764960,1264766975,CA
+1264766976,1264978623,US
+1264978624,1264978639,CA
+1264978640,1264980735,US
1264980736,1264980743,CA
-1264980744,1264982895,US
+1264980744,1264982847,US
+1264982848,1264982855,CA
+1264982856,1264982895,US
1264982896,1264982903,AF
1264982904,1264983031,US
1264983032,1264983039,AU
1264983040,1264984703,US
1264984704,1264984711,CA
-1264984712,1264984799,US
+1264984712,1264984791,US
+1264984792,1264984799,CA
1264984800,1264984807,AF
1264984808,1266107759,US
1266107760,1266107775,UM
@@ -31232,7 +32046,9 @@
1279828568,1279828575,CA
1279828576,1279828615,US
1279828616,1279828623,CA
-1279828624,1279848447,US
+1279828624,1279829711,US
+1279829712,1279829759,FR
+1279829760,1279848447,US
1279848448,1279852543,PR
1279852544,1279921919,US
1279921920,1279922047,IE
@@ -31263,13 +32079,15 @@
1279953760,1279953791,GB
1279953792,1279953951,CA
1279953952,1279953967,US
-1279953968,1279954095,CA
+1279953968,1279954015,CA
+1279954016,1279954047,US
+1279954048,1279954095,CA
1279954096,1279954119,US
1279954120,1279954303,CA
1279954304,1279954431,US
1279954432,1279954527,CA
-1279954528,1279954559,US
-1279954560,1279954623,CA
+1279954528,1279954543,US
+1279954544,1279954623,CA
1279954624,1279954655,FI
1279954656,1279954719,CA
1279954720,1279954727,US
@@ -31341,11 +32159,15 @@
1279960528,1279960535,US
1279960536,1279960559,CA
1279960560,1279960567,MX
-1279960568,1279962175,US
+1279960568,1279961087,US
+1279961088,1279961343,IN
+1279961344,1279962175,US
1279962176,1279962207,CA
1279962208,1279962223,US
1279962224,1279962239,CA
-1279962240,1279962895,US
+1279962240,1279962783,US
+1279962784,1279962791,CN
+1279962792,1279962895,US
1279962896,1279962911,CA
1279962912,1279962927,CN
1279962928,1279962943,US
@@ -31672,8 +32494,8 @@
1296247808,1296247871,US
1296247872,1296247999,FR
1296248000,1296248063,IE
-1296248064,1296248127,FR
-1296248128,1296248255,IE
+1296248064,1296248191,FR
+1296248192,1296248255,IE
1296248256,1296248318,BE
1296248319,1296248319,FR
1296248320,1296248383,BE
@@ -31691,7 +32513,7 @@
1296250080,1296250111,IL
1296250112,1296250143,IE
1296250144,1296250175,GB
-1296250176,1296250207,BE
+1296250176,1296250207,FR
1296250208,1296250239,ES
1296250240,1296250271,BE
1296250272,1296250303,DE
@@ -31707,12 +32529,13 @@
1296251360,1296251391,DE
1296251392,1296251775,NL
1296251776,1296251903,DE
-1296251904,1296251935,FR
+1296251904,1296251919,IR
+1296251920,1296251935,BE
1296251936,1296251967,US
1296251968,1296252015,NL
1296252016,1296252039,US
1296252040,1296252055,DE
-1296252056,1296252063,BE
+1296252056,1296252063,FR
1296252064,1296252079,IT
1296252080,1296252087,IE
1296252088,1296252095,FR
@@ -31729,7 +32552,8 @@
1296252256,1296252271,GB
1296252272,1296252303,FR
1296252304,1296252319,IL
-1296252320,1296252367,FR
+1296252320,1296252335,GB
+1296252336,1296252367,FR
1296252368,1296252383,DE
1296252384,1296252399,FR
1296252400,1296252415,IE
@@ -31737,8 +32561,7 @@
1296252672,1296252679,GB
1296252680,1296252687,FR
1296252688,1296252695,NL
-1296252696,1296252703,FR
-1296252704,1296252711,DE
+1296252696,1296252711,DE
1296252712,1296252719,FR
1296252720,1296252727,BE
1296252728,1296252735,IL
@@ -31751,8 +32574,8 @@
1296252840,1296252847,DE
1296252848,1296252855,GB
1296252856,1296252871,IE
-1296252872,1296252879,BE
-1296252880,1296252887,FR
+1296252872,1296252879,FR
+1296252880,1296252887,DE
1296252888,1296252895,IE
1296252896,1296252911,BE
1296252912,1296252919,GB
@@ -31772,7 +32595,7 @@
1296260608,1296262143,DE
1296262144,1296262399,FR
1296262400,1296262655,US
-1296262656,1296262911,CA
+1296262656,1296262911,FR
1296262912,1296263935,US
1296263936,1296263943,FR
1296263944,1296263999,US
@@ -31837,12 +32660,10 @@
1296466656,1296466671,BJ
1296466672,1296466687,NO
1296466688,1296466719,BJ
-1296466720,1296466751,NO
-1296466752,1296466759,ML
+1296466720,1296466759,NO
1296466760,1296466767,SL
1296466768,1296466775,BF
-1296466776,1296466783,GN
-1296466784,1296468479,NO
+1296466776,1296468479,NO
1296468480,1296469247,NG
1296469248,1296472383,NO
1296472384,1296472415,BI
@@ -32004,7 +32825,7 @@
1296754688,1296756735,DE
1296756736,1296758783,FR
1296758784,1296760831,RS
-1296762880,1296764927,RU
+1296760832,1296764927,RU
1296764928,1296769023,AT
1296769024,1296771071,TR
1296771072,1296773119,LT
@@ -32195,7 +33016,6 @@
1298110464,1298112511,ES
1298112512,1298114559,IE
1298114560,1298116607,IT
-1298116608,1298118655,RU
1298118656,1298120703,AM
1298120704,1298122751,CZ
1298122752,1298124799,RU
@@ -32203,6 +33023,19 @@
1298126848,1298127615,SA
1298127616,1298128127,IR
1298128128,1298128895,SA
+1298128896,1298129465,NL
+1298129466,1298129466,IR
+1298129467,1298129738,NL
+1298129739,1298129739,IT
+1298129740,1298129744,NL
+1298129745,1298129745,US
+1298129746,1298129751,NL
+1298129752,1298129755,US
+1298129756,1298129788,NL
+1298129789,1298129792,IT
+1298129793,1298130180,NL
+1298130181,1298130426,TR
+1298130427,1298130943,NL
1298130944,1298132991,BG
1298132992,1298135039,FI
1298135040,1298137087,NL
@@ -32220,7 +33053,9 @@
1298841600,1298857983,RU
1298857984,1298874367,SE
1298874368,1298907135,GB
-1298907136,1298923519,IE
+1298907136,1298915199,IE
+1298915200,1298915215,CA
+1298915216,1298923519,IE
1298923520,1298939903,IT
1298939904,1298956287,RU
1298956288,1298972671,GB
@@ -32289,7 +33124,9 @@
1306238976,1306263551,SE
1306263552,1306271743,KE
1306271744,1306279935,RU
-1306279936,1306286079,IT
+1306279936,1306285775,IT
+1306285776,1306285783,US
+1306285784,1306286079,IT
1306286080,1306287103,CH
1306287104,1306287615,IT
1306287616,1306287903,CH
@@ -32565,9 +33402,9 @@
1307983360,1307983423,ZA
1307983424,1307983487,BW
1307983488,1307983551,ZM
-1307983552,1307983583,MZ
-1307983584,1307983615,ZA
-1307983616,1307983871,GB
+1307983552,1307983615,MZ
+1307983616,1307983743,ZA
+1307983744,1307983871,ZM
1307983872,1307987967,LB
1307987968,1307992063,FR
1307992064,1307996159,RU
@@ -32612,7 +33449,7 @@
1308086272,1308088319,RU
1308088320,1308090367,UA
1308090368,1308092415,SK
-1308092416,1308094463,RU
+1308092416,1308096511,RU
1308096512,1308098559,RS
1308098560,1308360703,NL
1308360704,1308622847,PL
@@ -32822,7 +33659,7 @@
1310257152,1310259199,FR
1310259200,1310261247,GB
1310261248,1310277631,UA
-1310294016,1310310399,RU
+1310277632,1310310399,RU
1310310400,1310326783,GB
1310326784,1310343167,NO
1310343168,1310359551,IT
@@ -32888,8 +33725,10 @@
1311263616,1311263679,FR
1311263680,1311263871,CH
1311263872,1311263999,FR
-1311264000,1311264095,CH
-1311264096,1311264767,FR
+1311264000,1311264119,CH
+1311264120,1311264127,FR
+1311264128,1311264191,CH
+1311264192,1311264767,FR
1311264768,1311266815,RU
1311266816,1311268863,FR
1311268864,1311270911,BE
@@ -32996,7 +33835,9 @@
1311676024,1311676031,IT
1311676032,1311707655,DE
1311707656,1311707663,NL
-1311707664,1311756823,DE
+1311707664,1311755407,DE
+1311755408,1311755415,IT
+1311755416,1311756823,DE
1311756824,1311756831,ES
1311756832,1311757439,DE
1311757440,1311757447,ES
@@ -33154,6 +33995,8 @@
1315774424,1315774431,NA
1315774432,1315774463,UA
1315774464,1315778559,RU
+1315778560,1315780607,AZ
+1315780608,1315782655,DE
1315782656,1315786751,AM
1315786752,1315790592,FR
1315790593,1315790593,IT
@@ -33199,7 +34042,9 @@
1315926016,1315930111,CZ
1315930112,1315930623,DE
1315930624,1315930879,LB
-1315930880,1315934207,DE
+1315930880,1315931135,DE
+1315931136,1315931391,LB
+1315931392,1315934207,DE
1315934208,1315938303,RU
1315938304,1315942399,DK
1315942400,1315946495,UA
@@ -33215,23 +34060,23 @@
1317113104,1317113119,IE
1317113120,1317113855,GB
1317113856,1317114111,US
-1317114112,1317115135,GB
-1317115136,1317115391,IE
-1317115392,1317118207,GB
+1317114112,1317118207,GB
1317118208,1317118463,IN
-1317118464,1317119103,GB
-1317119104,1317119167,IT
-1317119168,1317126399,GB
+1317118464,1317126399,GB
1317126400,1317126655,US
1317126656,1317129279,GB
1317129280,1317129343,CA
1317129344,1317129471,GB
1317129472,1317129727,IT
-1317129728,1317135615,GB
+1317129728,1317133055,GB
+1317133056,1317133183,LV
+1317133184,1317135615,GB
1317135616,1317135871,DE
1317135872,1317136895,GB
1317136896,1317137151,EE
-1317137152,1317137663,GB
+1317137152,1317137183,GB
+1317137184,1317137215,CH
+1317137216,1317137663,GB
1317137664,1317137919,SE
1317137920,1317140095,GB
1317140096,1317140223,US
@@ -33289,7 +34134,8 @@
1317650096,1317650135,IE
1317650136,1317650143,GB
1317650144,1317650431,IE
-1317666816,1317666823,IQ
+1317650432,1317666815,PT
+1317666816,1317666823,A2
1317666824,1317666831,CD
1317666832,1317666839,A2
1317666840,1317666855,GH
@@ -33316,7 +34162,9 @@
1317667160,1317667167,AO
1317667168,1317667175,NG
1317667176,1317667191,A2
-1317667192,1317667231,NG
+1317667192,1317667207,NG
+1317667208,1317667215,A2
+1317667216,1317667231,NG
1317667232,1317667239,A2
1317667240,1317667247,NG
1317667248,1317667263,A2
@@ -33330,8 +34178,7 @@
1317667352,1317667359,AO
1317667360,1317667367,A2
1317667368,1317667375,NG
-1317667376,1317667407,A2
-1317667408,1317667423,NG
+1317667376,1317667423,A2
1317667424,1317667431,TD
1317667432,1317667439,GH
1317667440,1317667455,A2
@@ -33341,9 +34188,7 @@
1317667496,1317667503,NG
1317667504,1317667551,A2
1317667552,1317667567,NG
-1317667568,1317667711,A2
-1317667712,1317667719,NG
-1317667720,1317667735,A2
+1317667568,1317667735,A2
1317667736,1317667743,NG
1317667744,1317667751,A2
1317667752,1317667759,NG
@@ -33354,7 +34199,8 @@
1317667792,1317667799,NG
1317667800,1317667807,A2
1317667808,1317667815,NG
-1317667816,1317668095,A2
+1317667816,1317667824,UG
+1317667825,1317668095,A2
1317668096,1317668103,GH
1317668104,1317668143,A2
1317668144,1317668151,AO
@@ -33459,7 +34305,7 @@
1317670480,1317670511,A2
1317670512,1317670519,CI
1317670520,1317670543,NG
-1317670544,1317670551,IQ
+1317670544,1317670551,A2
1317670552,1317670559,UG
1317670560,1317670567,NG
1317670568,1317670575,A2
@@ -33491,15 +34337,17 @@
1317670864,1317670879,A2
1317670880,1317670887,NG
1317670888,1317670896,A2
-1317670897,1317670911,NG
-1317670912,1317671175,A2
+1317670897,1317670903,NG
+1317670904,1317671175,A2
1317671176,1317671191,NG
1317671192,1317671239,A2
1317671240,1317671247,CI
1317671248,1317671255,A2
1317671256,1317671263,CI
1317671264,1317671279,A2
-1317671280,1317671303,NG
+1317671280,1317671287,NG
+1317671288,1317671295,A2
+1317671296,1317671303,NG
1317671304,1317671319,A2
1317671320,1317671327,NG
1317671328,1317671335,A2
@@ -33517,8 +34365,8 @@
1317671448,1317671487,NG
1317671488,1317671527,A2
1317671528,1317671535,NG
-1317671536,1317671543,A2
-1317671544,1317671551,GH
+1317671536,1317671543,LR
+1317671544,1317671551,A2
1317671552,1317671567,NG
1317671568,1317671583,A2
1317671584,1317671591,NG
@@ -33531,7 +34379,7 @@
1317671688,1317671719,A2
1317671720,1317671727,NG
1317671728,1317671759,A2
-1317671760,1317671767,IQ
+1317671760,1317671767,AO
1317671768,1317671783,A2
1317671784,1317671807,NG
1317671808,1317671823,CI
@@ -33553,9 +34401,7 @@
1317672472,1317672479,A2
1317672480,1317672487,ZM
1317672488,1317672503,NG
-1317672504,1317672543,A2
-1317672544,1317672551,CD
-1317672552,1317672583,A2
+1317672504,1317672583,A2
1317672584,1317672591,CD
1317672592,1317672615,A2
1317672616,1317672623,NG
@@ -33570,8 +34416,7 @@
1317672760,1317672767,NG
1317672768,1317672815,A2
1317672816,1317672823,BW
-1317672824,1317672831,NG
-1317672832,1317672839,A2
+1317672824,1317672839,A2
1317672840,1317672847,NG
1317672848,1317672863,A2
1317672864,1317672871,NG
@@ -33580,9 +34425,10 @@
1317672920,1317672927,GH
1317672928,1317672935,A2
1317672936,1317672943,NG
-1317672944,1317672951,UG
-1317672952,1317672959,A2
-1317672960,1317673247,NG
+1317672944,1317672959,A2
+1317672960,1317673231,NG
+1317673232,1317673239,A2
+1317673240,1317673247,NG
1317673248,1317673263,A2
1317673264,1317673271,UG
1317673272,1317673279,A2
@@ -33606,8 +34452,8 @@
1317673496,1317673527,NG
1317673528,1317673535,A2
1317673536,1317673551,ZW
-1317673552,1317673559,A2
-1317673560,1317673575,NG
+1317673552,1317673567,A2
+1317673568,1317673575,NG
1317673576,1317673583,CD
1317673584,1317673607,A2
1317673608,1317673615,NG
@@ -33664,7 +34510,7 @@
1317674544,1317674567,NG
1317674568,1317674607,A2
1317674608,1317674615,NG
-1317674616,1317674623,IQ
+1317674616,1317674623,A2
1317674624,1317674631,NG
1317674632,1317674639,A2
1317674640,1317674647,NG
@@ -33697,9 +34543,7 @@
1317674952,1317674959,NG
1317674960,1317674967,GH
1317674968,1317674983,NG
-1317674984,1317674999,A2
-1317675000,1317675007,NG
-1317675008,1317675031,A2
+1317674984,1317675031,A2
1317675032,1317675039,NG
1317675040,1317675055,A2
1317675056,1317675063,NG
@@ -33716,9 +34560,7 @@
1317675320,1317675351,A2
1317675352,1317675359,IQ
1317675360,1317675367,NG
-1317675368,1317675407,A2
-1317675408,1317675415,NG
-1317675416,1317675423,A2
+1317675368,1317675423,A2
1317675424,1317675439,NG
1317675440,1317675447,A2
1317675448,1317675455,NG
@@ -33755,24 +34597,24 @@
1317675800,1317675807,GB
1317675808,1317675815,NG
1317675816,1317675823,A2
-1317675824,1317675847,NG
+1317675824,1317675839,NG
+1317675840,1317675847,A2
1317675848,1317675855,TD
1317675856,1317675863,NG
1317675864,1317675887,A2
1317675888,1317675895,CD
1317675896,1317675903,A2
1317675904,1317675911,UG
-1317675912,1317675919,A2
+1317675912,1317675919,NG
1317675920,1317675927,UG
1317675928,1317675935,LR
1317675936,1317675951,A2
1317675952,1317675959,NG
1317675960,1317675967,A2
1317675968,1317675975,NG
-1317675976,1317675983,A2
-1317675984,1317675991,ML
+1317675976,1317675991,A2
1317675992,1317675999,NG
-1317676000,1317676007,GN
+1317676000,1317676007,A2
1317676008,1317676015,GH
1317676016,1317676023,SD
1317676024,1317676031,GQ
@@ -33780,7 +34622,7 @@
1317676040,1317676055,A2
1317676056,1317676063,NG
1317676064,1317676071,GH
-1317676072,1317676079,A2
+1317676072,1317676079,NG
1317676080,1317676087,AO
1317676088,1317676095,NG
1317676096,1317676103,CM
@@ -33805,7 +34647,7 @@
1317676272,1317676279,A2
1317676280,1317676287,NG
1317676288,1317676543,LR
-1317676544,1317676551,A2
+1317676544,1317676551,NG
1317676552,1317676559,AO
1317676560,1317676567,NG
1317676568,1317676575,LR
@@ -33813,7 +34655,8 @@
1317676584,1317676591,NG
1317676592,1317676599,AO
1317676600,1317676607,UG
-1317676608,1317676639,A2
+1317676608,1317676631,A2
+1317676632,1317676639,NG
1317676640,1317676647,CD
1317676648,1317676655,A2
1317676656,1317676671,NG
@@ -33821,8 +34664,7 @@
1317676688,1317676695,LR
1317676696,1317676711,A2
1317676712,1317676719,NG
-1317676720,1317676751,A2
-1317676752,1317676759,ML
+1317676720,1317676759,A2
1317676760,1317676767,LR
1317676768,1317676775,A2
1317676776,1317676783,UG
@@ -33836,14 +34678,15 @@
1317676864,1317676871,TG
1317676872,1317676879,NG
1317676880,1317676903,A2
-1317676904,1317676927,NG
+1317676904,1317676911,NG
+1317676912,1317676919,A2
+1317676920,1317676927,NG
1317676928,1317676943,A2
1317676944,1317676951,CM
1317676952,1317676983,A2
1317676984,1317676999,NG
1317677000,1317677007,IQ
-1317677008,1317677015,CD
-1317677016,1317677023,A2
+1317677008,1317677023,A2
1317677024,1317677039,NG
1317677040,1317677047,A2
1317677048,1317677055,NG
@@ -33857,13 +34700,13 @@
1317677128,1317677135,NG
1317677136,1317677191,A2
1317677192,1317677199,SD
-1317677200,1317677207,A2
-1317677208,1317677215,NG
+1317677200,1317677215,NG
1317677216,1317677231,A2
1317677232,1317677239,UG
1317677240,1317677247,A2
1317677248,1317677271,NG
-1317677272,1317677303,A2
+1317677272,1317677279,FR
+1317677280,1317677303,A2
1317677304,1317677311,NG
1317677312,1317677319,CD
1317677320,1317677327,AO
@@ -33888,7 +34731,8 @@
1317677496,1317677527,NG
1317677528,1317677535,GQ
1317677536,1317677551,CD
-1317677552,1317677567,NG
+1317677552,1317677559,A2
+1317677560,1317677567,NG
1317677568,1317677663,A2
1317677664,1317677671,GB
1317677672,1317677823,A2
@@ -33922,7 +34766,9 @@
1317678224,1317678231,NG
1317678232,1317678239,BF
1317678240,1317678247,CD
-1317678248,1317678271,A2
+1317678248,1317678255,A2
+1317678256,1317678263,CD
+1317678264,1317678271,A2
1317678272,1317678287,NG
1317678288,1317678295,GR
1317678296,1317678311,A2
@@ -33947,8 +34793,8 @@
1317678464,1317678479,A2
1317678480,1317678487,CD
1317678488,1317678495,ML
-1317678496,1317678543,A2
-1317678544,1317678551,CD
+1317678496,1317678535,A2
+1317678536,1317678551,CD
1317678552,1317678559,ML
1317678560,1317678567,NG
1317678568,1317678575,CD
@@ -33964,22 +34810,30 @@
1317679672,1317679687,NG
1317679688,1317679695,A2
1317679696,1317679703,LU
-1317679704,1317679727,NG
+1317679704,1317679719,NG
+1317679720,1317679727,A2
1317679728,1317679735,GN
1317679736,1317679743,NG
1317679744,1317679751,AO
1317679752,1317679767,NG
1317679768,1317679775,A2
1317679776,1317679799,NG
-1317679800,1317679815,A2
+1317679800,1317679807,A2
+1317679808,1317679815,AO
1317679816,1317679831,NG
1317679832,1317679839,A2
1317679840,1317679847,NG
-1317679848,1317679855,A2
-1317679856,1317679863,NG
-1317679864,1317681183,A2
-1317681184,1317681191,NG
-1317681192,1317683199,A2
+1317679848,1317679863,A2
+1317679864,1317679871,NG
+1317679872,1317681159,A2
+1317681160,1317681167,NG
+1317681168,1317681175,A2
+1317681176,1317681191,NG
+1317681192,1317681279,A2
+1317681280,1317681287,NG
+1317681288,1317681927,A2
+1317681928,1317681931,NG
+1317681932,1317683199,A2
1317683200,1317683839,DE
1317683840,1317683855,CH
1317683856,1317683863,DE
@@ -34002,7 +34856,7 @@
1317831840,1317831871,CA
1317831872,1317832191,NL
1317832192,1317832447,GB
-1317832448,1317832511,SC
+1317832448,1317832511,CY
1317832512,1317832575,NL
1317832576,1317832703,GI
1317832704,1317832959,NL
@@ -34018,7 +34872,7 @@
1317835712,1317835775,GI
1317835776,1317836031,CY
1317836032,1317836863,NL
-1317836864,1317836927,SC
+1317836864,1317836927,CY
1317836928,1317836991,NL
1317836992,1317837007,GB
1317837008,1317837023,RU
@@ -34036,16 +34890,16 @@
1317841408,1317841439,SC
1317841440,1317841471,MT
1317841472,1317841535,CY
-1317841536,1317841599,NL
+1317841536,1317841567,HK
+1317841568,1317841599,NL
1317841600,1317841663,GI
1317841664,1317841727,HK
-1317841728,1317841791,SC
-1317841792,1317841855,CY
+1317841728,1317841855,CY
1317841856,1317841887,IL
1317841888,1317842943,NL
1317842944,1317843071,CY
1317843072,1317843135,HK
-1317843136,1317843199,SC
+1317843136,1317843199,CY
1317843200,1317843391,US
1317843392,1317843423,NL
1317843424,1317843455,PR
@@ -34064,17 +34918,22 @@
1317928960,1317945343,BG
1317945344,1317965047,AT
1317965048,1317965055,DE
-1317965056,1317978111,AT
-1317994496,1317995519,NL
-1317995520,1317996095,DE
+1317965056,1317977407,AT
+1317977408,1317977415,MT
+1317977416,1317978111,AT
+1317978112,1317994495,RU
+1317994496,1317995007,NL
+1317995008,1317996095,DE
1317996096,1317996287,NL
1317996288,1317998207,DE
-1317998208,1317998591,NL
-1317998592,1318000383,DE
+1317998208,1317998335,NL
+1317998336,1318000383,DE
1318000384,1318000447,NL
1318000448,1318002175,DE
1318002176,1318002431,NL
-1318002432,1318005631,DE
+1318002432,1318003711,DE
+1318003712,1318003967,NL
+1318003968,1318005631,DE
1318005632,1318005759,NL
1318005760,1318006271,DE
1318006272,1318006783,NL
@@ -34122,16 +34981,14 @@
1318708624,1318708627,GB
1318708628,1318708639,FR
1318708640,1318708647,GB
-1318708648,1318708723,FR
-1318708724,1318708727,GB
-1318708728,1318708735,FR
+1318708648,1318708735,FR
1318708736,1318708991,GB
1318708992,1318711647,FR
1318711648,1318711663,IT
-1318711664,1318712975,FR
-1318712976,1318712991,GB
+1318711664,1318712983,FR
+1318712984,1318712991,GB
1318712992,1318713855,FR
-1318713856,1318714111,CH
+1318713856,1318714111,GB
1318714112,1318715390,FR
1318715391,1318715391,GB
1318715392,1318723583,BG
@@ -34156,8 +35013,8 @@
1318871040,1318879231,DK
1318879232,1318887423,CZ
1318887424,1318895615,PL
-1318895616,1318899711,SE
-1318899712,1318903807,DK
+1318895616,1318897663,SE
+1318897664,1318903807,DK
1318903808,1318911999,RU
1318912000,1318920191,MK
1318920192,1318928383,IR
@@ -34232,7 +35089,6 @@
1331832832,1331834879,IT
1331834880,1331836927,BY
1331836928,1331838975,FR
-1331838976,1331841023,GR
1331841024,1331843071,CZ
1331843072,1331845119,GB
1331845120,1331847167,RU
@@ -34282,9 +35138,10 @@
1331937280,1331937407,PL
1331937408,1331937471,GB
1331937472,1331937519,NG
-1331937520,1331937535,GB
+1331937520,1331937535,LB
1331937536,1331937567,SM
-1331937568,1331937583,US
+1331937568,1331937575,NG
+1331937576,1331937583,GB
1331937584,1331937599,ZA
1331937600,1331937663,GB
1331937664,1331937727,DE
@@ -34298,7 +35155,9 @@
1331938168,1331938175,KW
1331938176,1331938191,GB
1331938192,1331938207,AE
-1331938208,1331938319,GB
+1331938208,1331938271,GB
+1331938272,1331938303,QA
+1331938304,1331938319,GB
1331938320,1331938335,AE
1331938336,1331938375,GB
1331938376,1331938383,AE
@@ -34314,12 +35173,11 @@
1331938912,1331938927,NG
1331938928,1331938935,RU
1331938936,1331938943,NG
-1331938944,1331938958,US
-1331938959,1331938959,GB
-1331938960,1331938967,US
+1331938944,1331938967,US
1331938968,1331938983,GB
1331938984,1331938999,NG
-1331939000,1331939327,GB
+1331939000,1331939007,QA
+1331939008,1331939327,GB
1331939328,1331941375,BE
1331941376,1331943423,ES
1331943424,1331945471,RU
@@ -34347,6 +35205,7 @@
1332477952,1332609023,ES
1332609024,1332613119,PL
1332613120,1332617215,UA
+1332617216,1332621311,CZ
1332621312,1332625407,UA
1332625408,1332629503,RU
1332629504,1332633599,DE
@@ -34479,7 +35338,9 @@
1334651904,1334652159,DE
1334652160,1334652543,GB
1334652544,1334652559,NL
-1334652560,1334652927,GB
+1334652560,1334652863,GB
+1334652864,1334652895,FR
+1334652896,1334652927,GB
1334652928,1334661119,RU
1334661120,1334665215,CH
1334665216,1334669311,NO
@@ -34513,7 +35374,15 @@
1334726144,1334726655,NL
1334726656,1334729983,RU
1334729984,1334730027,KZ
-1334730028,1334730239,RU
+1334730028,1334730031,RU
+1334730032,1334730043,KZ
+1334730044,1334730047,RU
+1334730048,1334730055,KZ
+1334730056,1334730063,RU
+1334730064,1334730107,KZ
+1334730108,1334730111,RU
+1334730112,1334730127,KZ
+1334730128,1334730239,RU
1334730240,1334730431,KZ
1334730432,1334730439,RU
1334730440,1334730443,KZ
@@ -34598,6 +35467,7 @@
1336614912,1336616959,GB
1336616960,1336619007,ES
1336619008,1336621055,AL
+1336621056,1336623103,DE
1336623104,1336625151,BE
1336625152,1336625823,IE
1336625824,1336625839,GB
@@ -34644,7 +35514,9 @@
1336852480,1336868863,FR
1336868864,1336885247,RU
1336885248,1336901631,RS
-1336901632,1336911103,IR
+1336901632,1336910528,IR
+1336910529,1336910560,SE
+1336910561,1336911103,IR
1336911104,1336911359,SE
1336911360,1336911749,IR
1336911750,1336911759,AE
@@ -34765,7 +35637,9 @@
1346500640,1346500735,IM
1346500736,1346500767,GB
1346500768,1346500863,IM
-1346500864,1346501231,GB
+1346500864,1346501135,GB
+1346501136,1346501151,IM
+1346501152,1346501231,GB
1346501232,1346501247,IM
1346501248,1346501343,GB
1346501344,1346501375,IM
@@ -34802,17 +35676,23 @@
1346538016,1346538031,CH
1346538032,1346538143,BE
1346538144,1346538175,HR
-1346538176,1346539519,BE
+1346538176,1346538239,BE
+1346538240,1346538303,AT
+1346538304,1346539519,BE
1346539520,1346543615,RU
1346543616,1346547711,FI
1346547712,1346551807,IR
1346551808,1346555903,DE
1346555904,1346559999,IT
-1346560000,1346563071,LI
+1346560000,1346561535,LI
+1346561536,1346561599,CH
+1346561600,1346563071,LI
1346563072,1346563327,CH
1346563328,1346564095,LI
1346564096,1346568191,EE
-1346568192,1346571775,SE
+1346568192,1346571199,SE
+1346571200,1346571207,SK
+1346571208,1346571775,SE
1346571776,1346572287,A1
1346572288,1346576383,DE
1346576384,1346580479,DK
@@ -34867,7 +35747,11 @@
1346703484,1346703487,US
1346703488,1346703503,GB
1346703504,1346703511,US
-1346703512,1346703871,GB
+1346703512,1346703567,GB
+1346703568,1346703571,US
+1346703572,1346703603,GB
+1346703604,1346703607,US
+1346703608,1346703871,GB
1346703872,1346704127,LI
1346704128,1346704383,GB
1346704384,1346704447,US
@@ -34953,21 +35837,7 @@
1347010560,1347014655,RU
1347014656,1347018751,GG
1347018752,1347022847,IT
-1347022848,1347024911,AT
-1347024912,1347024927,GB
-1347024928,1347024959,AT
-1347024960,1347025071,GB
-1347025072,1347025079,FR
-1347025080,1347025087,GB
-1347025088,1347025103,AT
-1347025104,1347025111,FR
-1347025112,1347025119,GB
-1347025120,1347025151,AT
-1347025152,1347025215,US
-1347025216,1347025279,GB
-1347025280,1347025343,ES
-1347025344,1347025407,DE
-1347025408,1347026943,AT
+1347022848,1347026943,AT
1347026944,1347035135,GB
1347035136,1347039231,CZ
1347039232,1347043327,RO
@@ -34989,7 +35859,6 @@
1347117056,1347121151,FI
1347121152,1347125247,CH
1347125248,1347129343,RU
-1347129344,1347133439,GB
1347133440,1347141631,EG
1347141632,1347145727,CH
1347145728,1347146239,GB
@@ -35074,7 +35943,9 @@
1347250784,1347252223,SE
1347252224,1347255903,HU
1347255904,1347255919,SC
-1347255920,1347256319,HU
+1347255920,1347256271,HU
+1347256272,1347256287,SC
+1347256288,1347256319,HU
1347256320,1347260415,FO
1347260416,1347264511,MK
1347264512,1347268607,RU
@@ -35082,7 +35953,9 @@
1347272704,1347276799,MT
1347276800,1347278831,DE
1347278832,1347278847,BR
-1347278848,1347280895,DE
+1347278848,1347280543,DE
+1347280544,1347280575,MY
+1347280576,1347280895,DE
1347280896,1347284991,FR
1347284992,1347286271,GB
1347286272,1347286335,BN
@@ -35168,9 +36041,7 @@
1347309840,1347309855,CH
1347309856,1347313663,DE
1347313664,1347321855,RU
-1347321856,1347323775,KW
-1347323776,1347323903,IR
-1347323904,1347325951,KW
+1347321856,1347325951,KW
1347325952,1347327231,CZ
1347327232,1347327487,SK
1347327488,1347327743,CZ
@@ -35190,17 +36061,7 @@
1347379200,1347383295,NL
1347383296,1347384111,EE
1347384112,1347384115,FI
-1347384116,1347384703,EE
-1347384704,1347384831,US
-1347384832,1347385063,EE
-1347385064,1347385071,RU
-1347385072,1347385599,EE
-1347385600,1347385855,US
-1347385856,1347386559,EE
-1347386560,1347386567,RU
-1347386568,1347386655,EE
-1347386656,1347386671,US
-1347386672,1347386751,EE
+1347384116,1347386751,EE
1347386752,1347386815,MY
1347386816,1347387011,EE
1347387012,1347387015,DE
@@ -35223,7 +36084,9 @@
1347420792,1347420799,US
1347420800,1347420831,DK
1347420832,1347420847,US
-1347420848,1347420991,DK
+1347420848,1347420887,DK
+1347420888,1347420895,PT
+1347420896,1347420991,DK
1347420992,1347421007,CH
1347421008,1347423775,DK
1347423776,1347423807,NO
@@ -35321,17 +36184,7 @@
1347694592,1347706879,GB
1347706880,1347710975,IT
1347710976,1347715071,RU
-1347715072,1347715519,ES
-1347715520,1347715527,SA
-1347715528,1347716151,ES
-1347716152,1347716159,LB
-1347716160,1347716207,ES
-1347716208,1347716223,CY
-1347716224,1347719711,ES
-1347719712,1347719719,SO
-1347719720,1347722495,ES
-1347722496,1347722751,LB
-1347722752,1347723263,ES
+1347715072,1347723263,ES
1347723264,1347727359,GB
1347727360,1347731455,UA
1347731456,1347739647,DE
@@ -35366,9 +36219,7 @@
1347756032,1347760127,NL
1347760128,1347764223,HU
1347764224,1347772415,GB
-1347772416,1347775953,MT
-1347775954,1347775954,GB
-1347775955,1347776511,MT
+1347772416,1347776511,MT
1347776512,1347780607,SE
1347780608,1347784703,NL
1347784704,1347788799,RU
@@ -35391,11 +36242,14 @@
1347837952,1347846143,RO
1347846144,1347850239,NO
1347850240,1347854335,IT
-1347854336,1347854871,DE
+1347854336,1347854847,EU
+1347854848,1347854871,DE
1347854872,1347854879,EU
1347854880,1347854887,DE
1347854888,1347854911,EU
-1347854912,1347855071,DE
+1347854912,1347855023,DE
+1347855024,1347855039,EU
+1347855040,1347855071,DE
1347855072,1347855087,EU
1347855088,1347855103,DE
1347855104,1347855359,CH
@@ -35409,13 +36263,17 @@
1347856064,1347856079,EU
1347856080,1347856087,DE
1347856088,1347856095,EU
-1347856096,1347856239,DE
+1347856096,1347856127,DE
+1347856128,1347856191,EU
+1347856192,1347856239,DE
1347856240,1347856255,EU
1347856256,1347856383,DE
1347856384,1347856399,EU
-1347856400,1347856431,DE
-1347856432,1347856447,EU
-1347856448,1347856639,DE
+1347856400,1347856423,DE
+1347856424,1347856447,EU
+1347856448,1347856591,DE
+1347856592,1347856607,EU
+1347856608,1347856639,DE
1347856640,1347856895,AT
1347856896,1347858495,DE
1347858496,1347858503,EU
@@ -35430,8 +36288,8 @@
1347859344,1347859351,DE
1347859352,1347859359,EU
1347859360,1347859383,DE
-1347859384,1347859407,EU
-1347859408,1347859423,DE
+1347859384,1347859391,EU
+1347859392,1347859423,DE
1347859424,1347859455,EU
1347859456,1347860863,DE
1347860864,1347860879,EU
@@ -35789,7 +36647,9 @@
1352058432,1352058495,US
1352058496,1352139671,DE
1352139672,1352139679,IT
-1352139680,1352144519,DE
+1352139680,1352141311,DE
+1352141312,1352141567,NL
+1352141568,1352144519,DE
1352144520,1352144527,IT
1352144528,1352144535,US
1352144536,1352147007,DE
@@ -35824,7 +36684,9 @@
1352149856,1352149871,SE
1352149872,1352277535,DE
1352277536,1352277567,IT
-1352277568,1352402791,DE
+1352277568,1352304639,DE
+1352304640,1352304895,CH
+1352304896,1352402791,DE
1352402792,1352402799,BE
1352402800,1352404599,DE
1352404600,1352404607,NL
@@ -35875,11 +36737,17 @@
1353265952,1353266959,GB
1353266960,1353266975,IE
1353266976,1353267455,GB
-1353267456,1353268223,IE
+1353267456,1353267711,IE
+1353267712,1353267719,GB
+1353267720,1353268223,IE
1353268224,1353268479,GB
1353268480,1353268599,BE
1353268600,1353268607,GB
-1353268608,1353269247,BE
+1353268608,1353269007,BE
+1353269008,1353269015,GB
+1353269016,1353269223,BE
+1353269224,1353269231,FR
+1353269232,1353269247,BE
1353269248,1353270527,GB
1353270528,1353270783,IE
1353270784,1353271295,GB
@@ -35887,13 +36755,12 @@
1353271424,1353271815,GB
1353271816,1353271831,ES
1353271832,1353271839,GB
-1353271840,1353272031,ES
-1353272032,1353272039,FR
+1353271840,1353272039,ES
1353272040,1353272047,GB
1353272048,1353272055,ES
-1353272056,1353272063,GB
-1353272064,1353272191,ES
-1353272192,1353272207,GB
+1353272056,1353272071,GB
+1353272072,1353272199,ES
+1353272200,1353272207,GB
1353272208,1353272245,ES
1353272246,1353272247,GB
1353272248,1353272691,ES
@@ -35909,15 +36776,17 @@
1353274368,1353274759,ES
1353274760,1353274767,GB
1353274768,1353274791,ES
-1353274792,1353274799,GB
-1353274800,1353274895,ES
+1353274792,1353274807,GB
+1353274808,1353274895,ES
1353274896,1353274911,GB
1353274912,1353275007,ES
1353275008,1353275015,GB
1353275016,1353275391,ES
1353275392,1353277439,GB
1353277440,1353279487,CH
-1353279488,1353279743,IT
+1353279488,1353279615,IT
+1353279616,1353279623,GB
+1353279624,1353279743,IT
1353279744,1353279751,GB
1353279752,1353279759,IT
1353279760,1353279763,GB
@@ -35925,17 +36794,15 @@
1353280120,1353280127,GB
1353280128,1353280143,IT
1353280144,1353280151,GB
-1353280152,1353280159,IT
-1353280160,1353280167,GB
-1353280168,1353280191,IT
+1353280152,1353280191,IT
1353280192,1353280199,GB
1353280200,1353280287,IT
1353280288,1353280295,GB
1353280296,1353280463,IT
1353280464,1353280479,GB
-1353280480,1353280671,IT
-1353280672,1353280679,GB
-1353280680,1353281023,IT
+1353280480,1353280567,IT
+1353280568,1353280575,GB
+1353280576,1353281023,IT
1353281024,1353281535,BE
1353281536,1353282047,GB
1353282048,1353282103,IT
@@ -35947,14 +36814,10 @@
1353282224,1353282559,IT
1353282560,1353283071,GB
1353283072,1353283327,IT
-1353283328,1353287327,GB
-1353287328,1353287359,IE
-1353287360,1353287679,GB
+1353283328,1353287679,GB
1353287680,1353288031,IE
1353288032,1353288063,GB
-1353288064,1353288127,IE
-1353288128,1353288143,GB
-1353288144,1353288151,IE
+1353288064,1353288151,IE
1353288152,1353288159,GB
1353288160,1353288167,IE
1353288168,1353288191,GB
@@ -35980,12 +36843,13 @@
1353288992,1353288999,GB
1353289000,1353289023,IE
1353289024,1353289031,NL
-1353289032,1353289087,GB
+1353289032,1353289047,IE
+1353289048,1353289055,GB
+1353289056,1353289083,IE
+1353289084,1353289087,GB
1353289088,1353289247,IE
1353289248,1353289255,GB
-1353289256,1353289279,IE
-1353289280,1353289295,GB
-1353289296,1353289359,IE
+1353289256,1353289359,IE
1353289360,1353289367,GB
1353289368,1353289391,IE
1353289392,1353289407,GB
@@ -36015,8 +36879,8 @@
1353298832,1353298839,SE
1353298840,1353298847,IE
1353298848,1353298863,SE
-1353298864,1353298879,GB
-1353298880,1353298881,SE
+1353298864,1353298871,GB
+1353298872,1353298881,SE
1353298882,1353298887,GB
1353298888,1353299503,SE
1353299504,1353299511,GB
@@ -36024,13 +36888,16 @@
1353299648,1353299839,GB
1353299840,1353299847,SE
1353299848,1353299863,GB
-1353299864,1353299951,SE
+1353299864,1353299919,SE
+1353299920,1353299927,GB
+1353299928,1353299951,SE
1353299952,1353299967,GB
-1353299968,1353300079,SE
-1353300080,1353300095,PT
-1353300096,1353300103,GB
+1353299968,1353300095,SE
+1353300096,1353300103,CH
1353300104,1353300111,SE
-1353300112,1353300175,GB
+1353300112,1353300119,FI
+1353300120,1353300127,SE
+1353300128,1353300175,GB
1353300176,1353300191,SE
1353300192,1353300239,GB
1353300240,1353300247,SE
@@ -36038,7 +36905,9 @@
1353300280,1353300735,SE
1353300736,1353301095,GB
1353301096,1353301103,US
-1353301104,1353306111,GB
+1353301104,1353304335,GB
+1353304336,1353304351,DE
+1353304352,1353306111,GB
1353306112,1353306623,ES
1353306624,1353306687,GB
1353306688,1353306735,BE
@@ -36059,20 +36928,16 @@
1353311072,1353311079,GB
1353311080,1353311135,IT
1353311136,1353311143,GB
-1353311144,1353311151,IT
-1353311152,1353311167,GB
-1353311168,1353311175,IT
+1353311144,1353311175,IT
1353311176,1353311183,ES
-1353311184,1353311214,IT
-1353311215,1353311223,GB
-1353311224,1353311231,IT
+1353311184,1353311231,IT
1353311232,1353312255,GB
1353312256,1353312767,CH
-1353312768,1353312775,IT
-1353312776,1353312783,GB
-1353312784,1353312815,IT
+1353312768,1353312815,IT
1353312816,1353312823,GB
-1353312824,1353312999,IT
+1353312824,1353312879,IT
+1353312880,1353312887,GB
+1353312888,1353312999,IT
1353313000,1353313007,GB
1353313008,1353313191,IT
1353313192,1353313199,GB
@@ -36260,7 +37125,8 @@
1357250560,1357316095,IL
1357316096,1357316607,ES
1357316608,1357317119,LU
-1357317120,1357317631,EU
+1357317120,1357317375,GB
+1357317376,1357317631,EU
1357317632,1357318143,LY
1357318144,1357320191,QA
1357320192,1357320703,FR
@@ -36273,10 +37139,9 @@
1357321024,1357321087,KE
1357321088,1357321215,HK
1357321216,1357321471,GB
-1357321472,1357321503,ES
-1357321504,1357321727,EU
+1357321472,1357321727,ES
1357321728,1357321983,CY
-1357321984,1357322239,SO
+1357321984,1357322239,GB
1357322240,1357322751,DE
1357322752,1357323263,BH
1357323264,1357323519,ES
@@ -36434,7 +37299,9 @@
1357875216,1357875247,DE
1357875248,1357875263,US
1357875264,1357875279,AT
-1357875280,1357875423,DE
+1357875280,1357875295,DE
+1357875296,1357875327,EU
+1357875328,1357875423,DE
1357875424,1357875439,GB
1357875440,1357875711,DE
1357875712,1357875967,PL
@@ -36484,22 +37351,23 @@
1357881088,1357881343,DE
1357881344,1357883391,FR
1357883392,1357883407,ES
-1357883408,1357883423,EU
-1357883424,1357883519,FR
+1357883408,1357883455,EU
+1357883456,1357883519,FR
1357883520,1357883535,EU
1357883536,1357883543,FR
1357883544,1357883583,EU
-1357883584,1357883727,FR
+1357883584,1357883711,FR
+1357883712,1357883719,EU
+1357883720,1357883727,FR
1357883728,1357883743,DE
1357883744,1357883759,IT
1357883760,1357883775,FR
1357883776,1357883807,RU
-1357883808,1357883839,EU
-1357883840,1357883903,FR
-1357883904,1357883999,EU
+1357883808,1357883839,GB
+1357883840,1357883999,EU
1357884000,1357884031,FR
1357884032,1357884095,RU
-1357884096,1357884159,EU
+1357884096,1357884159,SE
1357884160,1357884415,GB
1357884416,1357884423,FR
1357884424,1357884427,BE
@@ -36536,7 +37404,8 @@
1357890944,1357891327,NL
1357891328,1357891391,EU
1357891392,1357891399,NL
-1357891400,1357891455,EU
+1357891400,1357891423,EU
+1357891424,1357891455,DE
1357891456,1357891583,SE
1357891584,1357891647,EU
1357891648,1357891679,NL
@@ -36554,7 +37423,7 @@
1357892200,1357892207,NL
1357892208,1357892215,SE
1357892216,1357892223,US
-1357892224,1357892351,EU
+1357892224,1357892351,FR
1357892352,1357893119,NL
1357893120,1357893375,SE
1357893376,1357893407,EU
@@ -36562,10 +37431,22 @@
1357893440,1357893471,IT
1357893472,1357893503,PL
1357893504,1357893631,DE
-1357893632,1357897855,EU
+1357893632,1357894911,EU
+1357894912,1357895423,FR
+1357895424,1357897215,EU
+1357897216,1357897279,SE
+1357897280,1357897343,EU
+1357897344,1357897375,HU
+1357897376,1357897471,EU
+1357897472,1357897487,DE
+1357897488,1357897535,EU
+1357897536,1357897543,CZ
+1357897544,1357897551,SE
+1357897552,1357897855,EU
1357897856,1357898495,DE
1357898496,1357898751,EU
-1357898752,1357899019,DE
+1357898752,1357899015,DE
+1357899016,1357899019,EU
1357899020,1357899023,NL
1357899024,1357899039,DE
1357899040,1357899047,EU
@@ -36579,7 +37460,8 @@
1357899280,1357899287,RU
1357899288,1357899527,EU
1357899528,1357899535,BR
-1357899536,1357899551,EU
+1357899536,1357899543,CZ
+1357899544,1357899551,EU
1357899552,1357899567,AT
1357899568,1357899647,EU
1357899648,1357899775,GB
@@ -36756,8 +37638,8 @@
1358225128,1358225135,DE
1358225136,1358225183,IT
1358225184,1358225191,DE
-1358225192,1358225199,IT
-1358225200,1358225407,DE
+1358225192,1358225207,IT
+1358225208,1358225407,DE
1358225408,1358229503,RU
1358229504,1358230111,DE
1358230112,1358230115,AT
@@ -36771,8 +37653,12 @@
1358232912,1358233599,DE
1358233600,1358237695,ES
1358237696,1358239231,FR
-1358239232,1358239743,CH
-1358239744,1358241791,FR
+1358239232,1358239487,CH
+1358239488,1358239743,FR
+1358239744,1358239999,CH
+1358240000,1358240255,FR
+1358240256,1358240319,CH
+1358240320,1358241791,FR
1358241792,1358241823,BE
1358241824,1358241951,FR
1358241952,1358241983,BE
@@ -36982,7 +37868,9 @@
1358668068,1358668071,GB
1358668072,1358668271,PT
1358668272,1358668279,ES
-1358668280,1358668359,PT
+1358668280,1358668287,PT
+1358668288,1358668319,GB
+1358668320,1358668359,PT
1358668360,1358668367,GB
1358668368,1358668463,PT
1358668464,1358668479,ES
@@ -36997,7 +37885,9 @@
1358669464,1358669471,GB
1358669472,1358669543,PT
1358669544,1358669551,GB
-1358669552,1358669975,PT
+1358669552,1358669823,PT
+1358669824,1358669855,GB
+1358669856,1358669975,PT
1358669976,1358669983,GB
1358669984,1358670015,PT
1358670016,1358670023,GB
@@ -37006,7 +37896,9 @@
1358670192,1358670943,PT
1358670944,1358670951,FR
1358670952,1358671047,PT
-1358671048,1358671103,GB
+1358671048,1358671055,ES
+1358671056,1358671095,PT
+1358671096,1358671103,GB
1358671104,1358671415,PT
1358671416,1358671423,GB
1358671424,1358671431,PT
@@ -37052,7 +37944,9 @@
1358734344,1358734347,NL
1358734348,1358734715,SE
1358734716,1358734719,NL
-1358734720,1358734975,SE
+1358734720,1358734727,SE
+1358734728,1358734731,US
+1358734732,1358734975,SE
1358734976,1358734979,NL
1358734980,1358735139,SE
1358735140,1358735143,NL
@@ -37064,7 +37958,9 @@
1358735712,1358735715,FR
1358735716,1358735743,SE
1358735744,1358735751,FR
-1358735752,1358736927,SE
+1358735752,1358736071,SE
+1358736072,1358736075,US
+1358736076,1358736927,SE
1358736928,1358736943,NL
1358736944,1358737383,SE
1358737384,1358737387,NL
@@ -37095,9 +37991,7 @@
1358740884,1358740887,NL
1358740888,1358740927,SE
1358740928,1358740943,DK
-1358740944,1358741055,SE
-1358741056,1358741071,GB
-1358741072,1358741503,SE
+1358740944,1358741503,SE
1358741504,1358745599,IT
1358745600,1358749695,SE
1358749696,1358753791,IT
@@ -37140,7 +38034,8 @@
1358862336,1358862847,US
1358862848,1358863103,DK
1358863104,1358863359,CH
-1358863360,1358864383,US
+1358863360,1358863871,US
+1358863872,1358864383,GB
1358864384,1358864399,CH
1358864400,1358864407,IN
1358864408,1358864535,CH
@@ -37152,7 +38047,12 @@
1358884864,1358888959,SE
1358888960,1358889599,DE
1358889600,1358889631,IN
-1358889632,1358893055,DE
+1358889632,1358890943,DE
+1358890944,1358890975,GB
+1358890976,1358891007,IT
+1358891008,1358891647,DE
+1358891648,1358891679,IT
+1358891680,1358893055,DE
1358893056,1358897151,RU
1358897152,1358898175,A2
1358898176,1358898239,CA
@@ -37295,7 +38195,7 @@
1359003648,1359020031,CZ
1359020032,1359036415,FR
1359036416,1359052799,GB
-1359069184,1359101951,RU
+1359052800,1359101951,RU
1359101952,1359118335,GB
1359118336,1359118591,DE
1359118592,1359118719,NL
@@ -37366,8 +38266,8 @@
1359467488,1359467495,DE
1359467496,1359467647,US
1359467648,1359467775,DE
-1359467776,1359467839,US
-1359467840,1359467903,DE
+1359467776,1359467855,US
+1359467856,1359467903,DE
1359467904,1359468063,US
1359468064,1359468575,DE
1359468576,1359468583,SG
@@ -37448,6 +38348,7 @@
1360060416,1360064511,LT
1360064512,1360068607,GE
1360068608,1360072703,RU
+1360072704,1360076799,CH
1360076800,1360084991,NL
1360084992,1360089087,GB
1360089088,1360093183,AZ
@@ -37529,8 +38430,10 @@
1360282240,1360282751,NL
1360282752,1360282783,GB
1360282784,1360285183,NL
-1360285184,1360285247,ES
-1360285248,1360285695,NL
+1360285184,1360285335,ES
+1360285336,1360285343,NL
+1360285344,1360285375,ES
+1360285376,1360285695,NL
1360285696,1360289791,DE
1360289792,1360293887,RU
1360293888,1360302079,DE
@@ -37575,9 +38478,7 @@
1360441344,1360445439,HU
1360445440,1360453631,RU
1360453632,1360457727,DE
-1360457728,1360459103,FI
-1360459104,1360459135,IL
-1360459136,1360461823,FI
+1360457728,1360461823,FI
1360461824,1360465919,RU
1360465920,1360470015,UA
1360470016,1360474111,FR
@@ -37614,14 +38515,15 @@
1360621568,1360625663,ES
1360625664,1360626687,DE
1360626688,1360627199,LB
-1360627200,1360627455,DE
+1360627200,1360627455,A2
1360627456,1360627520,IQ
1360627521,1360627711,DE
1360627712,1360627743,LB
1360627744,1360627967,DE
1360627968,1360628095,IQ
1360628096,1360628223,LU
-1360628224,1360628735,LB
+1360628224,1360628479,A2
+1360628480,1360628735,LB
1360628736,1360628991,IQ
1360628992,1360629055,TR
1360629056,1360629247,DE
@@ -37746,7 +38648,11 @@
1360961536,1360965631,UA
1360965632,1360977919,RU
1360977920,1360986111,CZ
-1360986112,1360990207,GB
+1360986112,1360987935,GB
+1360987936,1360987983,SK
+1360987984,1360988055,GB
+1360988056,1360988063,SK
+1360988064,1360990207,GB
1360990208,1360990463,CZ
1360990464,1360994303,GB
1360994304,1360998399,CZ
@@ -38090,6 +38996,7 @@
1361038320,1361038335,US
1361038336,1361039359,NL
1361039360,1361043455,PL
+1361043456,1361051647,IR
1361051648,1362100223,ES
1362100224,1362395135,FR
1362395136,1362395183,CH
@@ -38285,17 +39192,18 @@
1365004288,1365008383,FR
1365008384,1365012479,CH
1365012480,1365012735,FR
-1365012736,1365013503,DE
+1365012736,1365013503,US
1365013504,1365013631,FR
-1365013632,1365015551,DE
+1365013632,1365015551,US
1365015552,1365015839,FR
-1365015840,1365015927,DE
+1365015840,1365015919,US
+1365015920,1365015927,DE
1365015928,1365015935,ES
-1365015936,1365016063,DE
+1365015936,1365016063,US
1365016064,1365016079,FR
-1365016080,1365016095,DE
+1365016080,1365016095,US
1365016096,1365016111,FR
-1365016112,1365016575,DE
+1365016112,1365016575,US
1365016576,1365020671,ES
1365020672,1365024767,CZ
1365024768,1365027839,DE
@@ -38395,17 +39303,15 @@
1365103744,1365103775,ES
1365103776,1365103791,GB
1365103792,1365103871,ES
-1365103872,1365104135,GB
-1365104136,1365104199,ES
+1365103872,1365104127,GB
+1365104128,1365104199,ES
1365104200,1365104207,GB
1365104208,1365106687,ES
1365106688,1365110783,GB
1365110784,1365114879,FR
1365114880,1365118975,BA
1365118976,1365127167,RU
-1365127168,1365127427,AT
-1365127428,1365127431,TR
-1365127432,1365130271,AT
+1365127168,1365130271,AT
1365130272,1365130303,IT
1365130304,1365130495,AT
1365130496,1365131007,IT
@@ -38651,7 +39557,19 @@
1369559040,1369563135,RU
1369563136,1369567231,PL
1369567232,1369571327,BG
-1369571328,1369636863,DE
+1369636864,1369638911,IR
+1369638912,1369640959,PL
+1369640960,1369655295,RU
+1369655296,1369657343,LV
+1369657344,1369659391,RU
+1369659392,1369661439,UA
+1369661440,1369665535,RU
+1369665536,1369669631,RO
+1369669632,1369677823,UA
+1369677824,1369686015,RU
+1369686016,1369690111,PL
+1369690112,1369694207,UA
+1369694208,1369702399,RU
1369702400,1369833471,BE
1369833472,1369964543,NO
1369964544,1369997311,GB
@@ -38846,8 +39764,8 @@
1372589824,1372618751,IT
1372618752,1372651519,GB
1372651520,1372684287,FI
-1372684288,1372685599,DE
-1372685600,1372685655,EU
+1372684288,1372685631,DE
+1372685632,1372685655,EU
1372685656,1372685663,DE
1372685664,1372685695,EU
1372685696,1372685823,DE
@@ -38886,8 +39804,8 @@
1372694784,1372694815,DE
1372694816,1372694831,EU
1372694832,1372695039,DE
-1372695040,1372695167,EU
-1372695168,1372695423,DE
+1372695040,1372695295,EU
+1372695296,1372695423,DE
1372695424,1372695551,EU
1372695552,1372695807,CZ
1372695808,1372696007,DK
@@ -38900,7 +39818,9 @@
1372697280,1372697343,EU
1372697344,1372698471,DE
1372698472,1372698559,EU
-1372698560,1372700159,DE
+1372698560,1372699135,DE
+1372699136,1372699391,EU
+1372699392,1372700159,DE
1372700160,1372700415,SE
1372700416,1372700671,EU
1372700672,1372702463,DE
@@ -38914,14 +39834,8 @@
1372703328,1372703391,DE
1372703392,1372703423,EU
1372703424,1372703487,DE
-1372703488,1372703743,EU
-1372703744,1372713327,DE
-1372713328,1372713343,EU
-1372713344,1372713375,DE
-1372713376,1372713471,EU
-1372713472,1372714239,DE
-1372714240,1372714495,EU
-1372714496,1372717055,DE
+1372703488,1372704767,EU
+1372704768,1372717055,DE
1372717056,1372749823,PL
1372749824,1372782591,DE
1372782592,1372815359,RU
@@ -38984,9 +39898,7 @@
1382091312,1382091327,MC
1382091328,1382091375,FR
1382091376,1382091391,MC
-1382091392,1382091775,FR
-1382091776,1382092031,MC
-1382092032,1382092367,FR
+1382091392,1382092367,FR
1382092368,1382092399,MC
1382092400,1382092815,FR
1382092816,1382092831,MC
@@ -39028,7 +39940,9 @@
1382179248,1382179279,GB
1382179280,1382182547,DE
1382182548,1382182551,CH
-1382182552,1382182799,DE
+1382182552,1382182655,DE
+1382182656,1382182687,US
+1382182688,1382182799,DE
1382182800,1382182831,GB
1382182832,1382182895,DE
1382182896,1382182911,GB
@@ -39129,8 +40043,16 @@
1383097344,1383098111,GB
1383098112,1383098367,DE
1383098368,1383098879,GB
-1383098880,1383099151,DE
-1383099152,1383099391,GB
+1383098880,1383099159,DE
+1383099160,1383099163,BE
+1383099164,1383099167,NL
+1383099168,1383099171,IT
+1383099172,1383099175,RU
+1383099176,1383099179,GB
+1383099180,1383099183,DE
+1383099184,1383099199,GB
+1383099200,1383099263,DE
+1383099264,1383099391,GB
1383099392,1383099679,DE
1383099680,1383099687,GB
1383099688,1383099695,DE
@@ -39150,6 +40072,9 @@
1383104024,1383104255,GB
1383104256,1383104511,FR
1383104512,1383112703,JE
+1383112704,1383114751,LB
+1383114752,1383116799,GB
+1383116800,1383120895,RU
1383120896,1383129031,IT
1383129032,1383129039,ES
1383129040,1383129087,IT
@@ -39234,6 +40159,9 @@
1383440384,1383448575,RU
1383448576,1383456767,RS
1383456768,1383464959,UA
+1383464960,1383469055,BA
+1383469056,1383471103,UA
+1383471104,1383473151,SE
1383473152,1383481343,DE
1383481344,1383481599,GB
1383481600,1383481615,US
@@ -39245,9 +40173,7 @@
1383481776,1383481791,SA
1383481792,1383482367,GB
1383482368,1383482879,NL
-1383482880,1383483375,GB
-1383483376,1383483383,US
-1383483384,1383483887,GB
+1383482880,1383483887,GB
1383483888,1383483903,JP
1383483904,1383485375,GB
1383485376,1383485407,US
@@ -39345,9 +40271,7 @@
1384794128,1384794143,CH
1384794144,1384794271,FR
1384794272,1384794287,CH
-1384794288,1384794815,FR
-1384794816,1384794847,BE
-1384794848,1384794879,FR
+1384794288,1384794879,FR
1384794880,1384795135,CH
1384795136,1384795279,FR
1384795280,1384795327,BE
@@ -39491,6 +40415,7 @@
1385480192,1385488383,NL
1385488384,1385496575,GB
1385496576,1385504767,SI
+1385504768,1385512959,IT
1385512960,1385521151,DE
1385521152,1385529343,AT
1385529344,1385537535,RU
@@ -39540,8 +40465,8 @@
1385567088,1385567103,FR
1385567104,1385567135,EU
1385567136,1385567155,FR
-1385567156,1385567167,EU
-1385567168,1385567215,FR
+1385567156,1385567159,EU
+1385567160,1385567215,FR
1385567216,1385567223,EU
1385567224,1385567227,FR
1385567228,1385567231,EU
@@ -39550,8 +40475,7 @@
1385568768,1385569279,EU
1385569280,1385569407,FR
1385569408,1385569487,CZ
-1385569488,1385569503,FR
-1385569504,1385569791,EU
+1385569488,1385569791,EU
1385569792,1385570303,FR
1385570304,1385578495,HU
1385578496,1385586687,TR
@@ -39637,14 +40561,12 @@
1388388944,1388388951,NG
1388388952,1388388959,IT
1388388960,1388388967,NG
-1388388968,1388389119,IT
-1388389120,1388389135,NG
-1388389136,1388389151,IT
+1388388968,1388389151,IT
1388389152,1388389167,NG
1388389168,1388389567,IT
1388389568,1388389631,NG
-1388389632,1388389927,IT
-1388389928,1388390015,NG
+1388389632,1388389943,IT
+1388389944,1388390015,NG
1388390016,1388390143,IT
1388390144,1388394495,NG
1388394496,1388396031,IT
@@ -39741,9 +40663,7 @@
1388679168,1388679423,FR
1388679424,1388679455,DE
1388679456,1388679679,EU
-1388679680,1388680703,DE
-1388680704,1388680959,EU
-1388680960,1388682239,DE
+1388679680,1388682239,DE
1388682240,1388682751,EU
1388682752,1388683263,DE
1388683264,1388689639,CH
@@ -39751,20 +40671,20 @@
1388689648,1388691455,CH
1388691456,1388699647,NL
1388699648,1388707839,SE
-1388707840,1388708607,RU
+1388707840,1388708095,RU
+1388708096,1388708607,LB
1388708608,1388709119,LT
1388709120,1388709375,IQ
1388709376,1388709887,RU
-1388709888,1388710143,LB
-1388710144,1388710399,RU
-1388710400,1388710911,LB
+1388709888,1388710911,LB
1388710912,1388711167,IQ
1388711168,1388711679,RU
1388711680,1388711935,IQ
1388711936,1388712191,RU
1388712192,1388712703,LT
1388712704,1388713215,LB
-1388713216,1388713727,RU
+1388713216,1388713471,SE
+1388713472,1388713727,RU
1388713728,1388713983,LT
1388713984,1388714751,RU
1388714752,1388715007,IQ
@@ -39774,30 +40694,16 @@
1388716032,1388724223,ES
1388724224,1388728600,DE
1388728601,1388728608,CZ
-1388728609,1388728640,DE
-1388728641,1388728673,AT
-1388728674,1388728734,DE
-1388728735,1388728762,AT
-1388728763,1388728783,DE
-1388728784,1388728799,AT
-1388728800,1388728815,DE
-1388728816,1388728820,AT
-1388728821,1388729208,DE
-1388729209,1388729240,AT
-1388729241,1388729280,DE
-1388729281,1388729296,AT
-1388729297,1388729304,DE
-1388729305,1388729320,AT
-1388729321,1388729856,DE
-1388729857,1388729888,AT
-1388729889,1388731136,DE
-1388731137,1388731391,AT
-1388731392,1388732415,DE
+1388728609,1388732415,DE
1388732416,1388740607,ES
1388740608,1388740623,GB
-1388740624,1388740719,IE
+1388740624,1388740703,IE
+1388740704,1388740707,GB
+1388740708,1388740719,IE
1388740720,1388740735,GB
-1388740736,1388741375,IE
+1388740736,1388740847,IE
+1388740848,1388740863,GB
+1388740864,1388741375,IE
1388741376,1388741443,GB
1388741444,1388741535,IE
1388741536,1388741551,GB
@@ -39811,9 +40717,9 @@
1388741746,1388741747,GB
1388741748,1388741751,IE
1388741752,1388741759,GB
-1388741760,1388741775,IE
-1388741776,1388741787,GB
-1388741788,1388741799,IE
+1388741760,1388741787,IE
+1388741788,1388741791,GB
+1388741792,1388741799,IE
1388741800,1388741800,GB
1388741801,1388741807,IE
1388741808,1388741815,GB
@@ -39825,7 +40731,9 @@
1388742020,1388742023,GB
1388742024,1388742024,IE
1388742025,1388742031,GB
-1388742032,1388742655,IE
+1388742032,1388742067,IE
+1388742068,1388742079,GB
+1388742080,1388742655,IE
1388742656,1388742719,GB
1388742720,1388742731,IE
1388742732,1388742735,IR
@@ -39846,10 +40754,12 @@
1388743452,1388743555,IE
1388743556,1388743559,GB
1388743560,1388743571,IE
-1388743572,1388743583,GB
-1388743584,1388743919,IE
+1388743572,1388743582,GB
+1388743583,1388743919,IE
1388743920,1388743935,GB
-1388743936,1388744087,IE
+1388743936,1388744047,IE
+1388744048,1388744055,GB
+1388744056,1388744087,IE
1388744088,1388744095,GB
1388744096,1388744117,IE
1388744118,1388744127,GB
@@ -39863,51 +40773,47 @@
1388745500,1388745503,GB
1388745504,1388745559,IE
1388745560,1388745563,GB
-1388745564,1388745651,IE
-1388745652,1388745663,GB
-1388745664,1388745683,IE
-1388745684,1388745727,GB
+1388745564,1388745671,IE
+1388745672,1388745687,GB
+1388745688,1388745726,IE
+1388745727,1388745727,GB
1388745728,1388745911,IE
-1388745912,1388745919,GB
-1388745920,1388745927,IE
+1388745912,1388745915,GB
+1388745916,1388745927,IE
1388745928,1388745931,GB
1388745932,1388746155,IE
1388746156,1388746159,GB
-1388746160,1388746175,IE
-1388746176,1388746239,GB
-1388746240,1388746659,IE
+1388746160,1388746187,IE
+1388746188,1388746191,GB
+1388746192,1388746659,IE
1388746660,1388746671,GB
1388746672,1388746675,IE
1388746676,1388746695,GB
1388746696,1388746703,IE
-1388746704,1388746719,GB
-1388746720,1388746895,IE
-1388746896,1388746903,GB
-1388746904,1388746959,IE
-1388746960,1388746975,GB
-1388746976,1388747083,IE
-1388747084,1388747087,GB
-1388747088,1388747543,IE
-1388747544,1388747555,GB
-1388747556,1388747575,IE
-1388747576,1388747647,GB
-1388747648,1388747671,IE
-1388747672,1388747675,GB
-1388747676,1388747783,IE
+1388746704,1388746711,GB
+1388746712,1388746851,IE
+1388746852,1388746863,GB
+1388746864,1388746967,IE
+1388746968,1388746975,GB
+1388746976,1388747543,IE
+1388747544,1388747547,GB
+1388747548,1388747575,IE
+1388747576,1388747599,GB
+1388747600,1388747627,IE
+1388747628,1388747647,GB
+1388747648,1388747783,IE
1388747784,1388747791,GB
-1388747792,1388747835,IE
-1388747836,1388747839,GB
-1388747840,1388747859,IE
+1388747792,1388747859,IE
1388747860,1388747875,GB
1388747876,1388747983,IE
1388747984,1388747987,GB
-1388747988,1388747999,IE
-1388748000,1388748031,GB
+1388747988,1388748030,IE
+1388748031,1388748031,GB
1388748032,1388748223,IE
1388748224,1388748255,GB
1388748256,1388748287,IE
-1388748288,1388748295,GB
-1388748296,1388748349,IE
+1388748288,1388748319,GB
+1388748320,1388748349,IE
1388748350,1388748351,GB
1388748352,1388748799,IE
1388748800,1388756991,RU
@@ -39930,8 +40836,8 @@
1388806144,1388807679,DE
1388807680,1388807711,BZ
1388807712,1388808255,DE
-1388808256,1388808283,BZ
-1388808284,1388814335,DE
+1388808256,1388808287,BZ
+1388808288,1388814335,DE
1388814336,1388815103,AX
1388815104,1388815231,FI
1388815232,1388818687,AX
@@ -39957,7 +40863,9 @@
1389199616,1389199647,IR
1389199648,1389200383,A2
1389200384,1389200639,AE
-1389200640,1389203551,A2
+1389200640,1389201919,A2
+1389201920,1389202175,AF
+1389202176,1389203551,A2
1389203552,1389203567,LB
1389203568,1389203743,A2
1389203744,1389203775,IQ
@@ -40218,7 +41126,8 @@
1389293056,1389293311,US
1389293312,1389293567,KE
1389293568,1389294335,A2
-1389294336,1389294719,US
+1389294336,1389294591,US
+1389294592,1389294719,A2
1389294720,1389294847,IQ
1389294848,1389295615,US
1389295616,1389295871,ZA
@@ -40265,9 +41174,7 @@
1389555264,1389555327,AT
1389555328,1389556751,DE
1389556752,1389556759,CH
-1389556760,1389559039,DE
-1389559040,1389559103,CH
-1389559104,1389559743,DE
+1389556760,1389559743,DE
1389559744,1389559807,CH
1389559808,1389561343,DE
1389561344,1389561407,IT
@@ -40283,7 +41190,11 @@
1389564416,1389564671,IT
1389564672,1389565183,DE
1389565184,1389565695,IT
-1389565696,1389576191,DE
+1389565696,1389568767,DE
+1389568768,1389569023,IT
+1389569024,1389569279,DE
+1389569280,1389569535,US
+1389569536,1389576191,DE
1389576192,1389592575,GB
1389592576,1389608959,GE
1389608960,1389625343,DK
@@ -40365,6 +41276,7 @@
1398886400,1398888447,CH
1398888448,1398890495,GB
1398890496,1398892543,DK
+1398892544,1398894591,RU
1398894592,1398896639,DE
1398896640,1398898687,CH
1398898688,1398931455,ES
@@ -40418,17 +41330,17 @@
1400111104,1400373247,NL
1400373248,1400705279,DE
1400705280,1400705791,EU
-1400705792,1400708607,DE
-1400708608,1400709120,EU
+1400705792,1400707071,DE
+1400707072,1400708095,EU
+1400708096,1400708863,DE
+1400708864,1400709120,EU
1400709121,1400710142,DE
1400710143,1400710399,EU
1400710400,1400712191,DE
1400712192,1400712447,EU
1400712448,1400712703,DE
1400712704,1400712959,EU
-1400712960,1400716287,DE
-1400716288,1400717311,EU
-1400717312,1400718335,DE
+1400712960,1400718335,DE
1400718336,1400718847,EU
1400718848,1400721407,DE
1400721408,1400721919,EU
@@ -40539,8 +41451,15 @@
1401544704,1401546751,GB
1401546752,1401548799,IT
1401548800,1401550847,FR
-1401550848,1401551103,JE
-1401551104,1401552895,GB
+1401550848,1401550879,GB
+1401550880,1401550911,JE
+1401550912,1401550935,GB
+1401550936,1401550975,JE
+1401550976,1401550983,GB
+1401550984,1401551015,JE
+1401551016,1401551023,GB
+1401551024,1401551071,JE
+1401551072,1401552895,GB
1401552896,1401554943,NL
1401554944,1401556991,IE
1401556992,1401563135,GB
@@ -40828,6 +41747,7 @@
1401927680,1401929727,NL
1401929728,1401931775,RU
1401931776,1401933823,UA
+1401933824,1401935871,DE
1401935872,1401937919,FI
1401937920,1401939967,GB
1401939968,1401942015,UA
@@ -40916,7 +41836,9 @@
1403445248,1403461631,RU
1403461632,1403464663,FR
1403464664,1403464671,BE
-1403464672,1403469423,FR
+1403464672,1403465727,FR
+1403465728,1403465743,GB
+1403465744,1403469423,FR
1403469424,1403469431,US
1403469432,1403469823,FR
1403469824,1403486207,RU
@@ -41040,12 +41962,8 @@
1403994112,1404010495,AT
1404010496,1404026879,PL
1404026880,1404043263,ES
-1404043264,1404045311,EE
-1404045312,1404047359,SE
-1404047360,1404048383,EE
-1404048384,1404049407,SE
-1404049408,1404051455,EE
-1404051456,1404059647,KZ
+1404043264,1404051455,EE
+1404051456,1404059647,HR
1404059648,1404076031,NO
1404076032,1404084223,DE
1404084224,1404092415,NO
@@ -41068,9 +41986,7 @@
1404197888,1404198911,LT
1404198912,1404200959,SE
1404200960,1404203007,NL
-1404203008,1404204800,HR
-1404204801,1404205055,SE
-1404205056,1404207103,HR
+1404203008,1404207103,HR
1404207104,1404210175,NO
1404210176,1404212223,LV
1404212224,1404215295,SE
@@ -41132,7 +42048,10 @@
1404928000,1404944383,SE
1404944384,1404952575,DE
1404952576,1404960767,NL
-1404960768,1405050879,SE
+1404960768,1405026303,SE
+1405026304,1405042687,NO
+1405042688,1405048831,SE
+1405048832,1405050879,HR
1405050880,1405059071,AT
1405059072,1405063167,SE
1405063168,1405067263,NO
@@ -41214,7 +42133,31 @@
1406763008,1406771199,BE
1406771200,1406779391,GB
1406779392,1406787583,RU
-1406787584,1406795775,ES
+1406787584,1406787679,GB
+1406787680,1406787695,ES
+1406787696,1406787927,GB
+1406787928,1406787967,ES
+1406787968,1406788055,GB
+1406788056,1406788351,ES
+1406788352,1406788479,BG
+1406788480,1406788607,ES
+1406788608,1406788711,GB
+1406788712,1406789119,ES
+1406789120,1406789135,GB
+1406789136,1406789183,ES
+1406789184,1406789247,GB
+1406789248,1406789375,ES
+1406789376,1406789503,RO
+1406789504,1406789631,ES
+1406789632,1406789887,FR
+1406789888,1406790015,HU
+1406790016,1406790143,ES
+1406790144,1406790399,GB
+1406790400,1406790655,ES
+1406790656,1406790927,GB
+1406790928,1406790943,ES
+1406790944,1406790959,GB
+1406790960,1406795775,ES
1406795776,1406803967,GB
1406803968,1406812159,DE
1406812160,1406820351,SE
@@ -41328,7 +42271,9 @@
1407517032,1407517039,NG
1407517040,1407517047,A2
1407517048,1407517055,GQ
-1407517056,1407517151,A2
+1407517056,1407517135,A2
+1407517136,1407517143,NG
+1407517144,1407517151,A2
1407517152,1407517159,CD
1407517160,1407517167,ML
1407517168,1407517175,A2
@@ -41336,7 +42281,8 @@
1407517184,1407517311,GB
1407517312,1407517383,A2
1407517384,1407517391,CD
-1407517392,1407517431,A2
+1407517392,1407517423,A2
+1407517424,1407517431,US
1407517432,1407517439,NG
1407517440,1407517695,A2
1407517696,1407517887,NG
@@ -41359,7 +42305,7 @@
1407518176,1407518183,A2
1407518184,1407518199,NG
1407518200,1407518207,AE
-1407518208,1407518215,ZW
+1407518208,1407518215,LR
1407518216,1407518231,A2
1407518232,1407518255,NG
1407518256,1407518263,CD
@@ -41410,7 +42356,7 @@
1407519760,1407519767,CD
1407519768,1407519775,GN
1407519776,1407519783,CG
-1407519784,1407519791,IQ
+1407519784,1407519791,A2
1407519792,1407519799,NG
1407519800,1407519815,A2
1407519816,1407519823,NG
@@ -41423,15 +42369,16 @@
1407519872,1407519879,IL
1407519880,1407519887,NG
1407519888,1407519895,CD
-1407519896,1407519903,GN
+1407519896,1407519903,A2
1407519904,1407519911,NG
-1407519912,1407519919,GN
-1407519920,1407519943,A2
+1407519912,1407519943,A2
1407519944,1407519959,CD
1407519960,1407519967,GB
1407519968,1407519983,NG
1407519984,1407519991,SD
-1407519992,1407520023,NG
+1407519992,1407520007,NG
+1407520008,1407520015,A2
+1407520016,1407520023,NG
1407520024,1407520031,A2
1407520032,1407520039,GN
1407520040,1407520047,A2
@@ -41454,7 +42401,9 @@
1407520208,1407520215,NG
1407520216,1407520223,CD
1407520224,1407520231,SD
-1407520232,1407520271,A2
+1407520232,1407520239,A2
+1407520240,1407520247,NE
+1407520248,1407520271,A2
1407520272,1407520279,NG
1407520280,1407520311,A2
1407520312,1407520327,NG
@@ -41481,10 +42430,10 @@
1407520600,1407520607,A2
1407520608,1407520615,AO
1407520616,1407520623,A2
-1407520624,1407520655,NG
+1407520624,1407520647,NG
+1407520648,1407520655,ML
1407520656,1407520663,GA
-1407520664,1407520671,CD
-1407520672,1407520687,A2
+1407520664,1407520687,A2
1407520688,1407520695,NG
1407520696,1407520711,A2
1407520712,1407520719,NG
@@ -41494,7 +42443,7 @@
1407520752,1407520759,BF
1407520760,1407520767,CD
1407520768,1407520775,TZ
-1407520776,1407520783,CD
+1407520776,1407520783,A2
1407520784,1407520791,SD
1407520792,1407520799,ZA
1407520800,1407520807,A2
@@ -41534,7 +42483,7 @@
1407521112,1407521119,SL
1407521120,1407521127,A2
1407521128,1407521135,NG
-1407521136,1407521143,CD
+1407521136,1407521143,A2
1407521144,1407521151,ZM
1407521152,1407521159,NG
1407521160,1407521167,ZW
@@ -41556,7 +42505,9 @@
1407521712,1407521727,NG
1407521728,1407521735,A2
1407521736,1407521751,NG
-1407521752,1407521783,A2
+1407521752,1407521759,A2
+1407521760,1407521767,NG
+1407521768,1407521783,A2
1407521784,1407521791,NG
1407521792,1407522319,A2
1407522320,1407522327,TG
@@ -41579,8 +42530,7 @@
1407522488,1407522495,ZW
1407522496,1407522503,LR
1407522504,1407522511,ZW
-1407522512,1407522519,UG
-1407522520,1407522527,A2
+1407522512,1407522527,A2
1407522528,1407522535,ZM
1407522536,1407522543,NG
1407522544,1407522559,UG
@@ -41628,22 +42578,22 @@
1407522912,1407522919,CG
1407522920,1407522927,A2
1407522928,1407522935,GR
-1407522936,1407522943,A2
-1407522944,1407522951,CD
+1407522936,1407522951,A2
1407522952,1407522967,ZW
1407522968,1407522975,MU
1407522976,1407522983,CD
1407522984,1407522991,A2
1407522992,1407522999,CD
-1407523000,1407523007,A2
-1407523008,1407523015,NG
+1407523000,1407523015,A2
1407523016,1407523023,KE
1407523024,1407523031,MU
-1407523032,1407523055,A2
+1407523032,1407523047,A2
+1407523048,1407523055,NG
1407523056,1407523063,MU
1407523064,1407523071,A2
1407523072,1407523079,CD
-1407523080,1407523088,NG
+1407523080,1407523087,A2
+1407523088,1407523088,NG
1407523089,1407523103,A2
1407523104,1407523111,UG
1407523112,1407523119,ZW
@@ -41655,8 +42605,7 @@
1407523168,1407523175,A2
1407523176,1407523183,UG
1407523184,1407523191,NG
-1407523192,1407523199,A2
-1407523200,1407523207,NG
+1407523192,1407523207,A2
1407523208,1407523215,SD
1407523216,1407523223,BI
1407523224,1407523247,AO
@@ -41673,9 +42622,12 @@
1407523336,1407523351,A2
1407523352,1407523359,LU
1407523360,1407523455,A2
-1407523456,1407523519,MW
+1407523456,1407523487,MW
+1407523488,1407523495,LR
+1407523496,1407523519,MW
1407523520,1407523535,A2
-1407523536,1407523551,NG
+1407523536,1407523543,SO
+1407523544,1407523551,NG
1407523552,1407523559,CM
1407523560,1407523567,KE
1407523568,1407523583,A2
@@ -41685,9 +42637,15 @@
1407523616,1407523623,A2
1407523624,1407523655,IQ
1407523656,1407523663,A2
-1407523664,1407523711,IQ
-1407523712,1407523839,A2
-1407523840,1407524351,MW
+1407523664,1407523719,IQ
+1407523720,1407523743,A2
+1407523744,1407523751,IQ
+1407523752,1407523791,A2
+1407523792,1407523799,IQ
+1407523800,1407523807,SY
+1407523808,1407523831,A2
+1407523832,1407523839,IQ
+1407523840,1407524351,A2
1407524352,1407524607,GB
1407524608,1407524615,ZW
1407524616,1407524623,CD
@@ -41722,7 +42680,8 @@
1407524896,1407524903,LR
1407524904,1407524911,A2
1407524912,1407524919,ZW
-1407524920,1407524935,A2
+1407524920,1407524927,ZA
+1407524928,1407524935,A2
1407524936,1407524943,GR
1407524944,1407524951,ZW
1407524952,1407524959,UG
@@ -41740,7 +42699,7 @@
1407525048,1407525055,NG
1407525056,1407525063,ZA
1407525064,1407525071,SO
-1407525072,1407525079,NG
+1407525072,1407525079,CD
1407525080,1407525087,A2
1407525088,1407525095,MW
1407525096,1407525103,ZW
@@ -41779,7 +42738,8 @@
1407525512,1407525543,A2
1407525544,1407525551,KE
1407525552,1407525559,VG
-1407525560,1407525575,A2
+1407525560,1407525567,A2
+1407525568,1407525575,CD
1407525576,1407525583,LR
1407525584,1407525607,A2
1407525608,1407525615,CD
@@ -41789,9 +42749,13 @@
1407525640,1407525679,IQ
1407525680,1407525695,A2
1407525696,1407525703,IQ
-1407525704,1407525751,A2
+1407525704,1407525719,A2
+1407525720,1407525727,IQ
+1407525728,1407525751,A2
1407525752,1407525759,IQ
-1407525760,1407526711,A2
+1407525760,1407525775,A2
+1407525776,1407525783,IQ
+1407525784,1407526711,A2
1407526712,1407526719,GN
1407526720,1407528959,A2
1407528960,1407528991,SO
@@ -41799,10 +42763,8 @@
1407529024,1407529087,NG
1407529088,1407529095,SO
1407529096,1407529103,A2
-1407529104,1407529111,NG
-1407529112,1407529119,A2
-1407529120,1407529127,SD
-1407529128,1407529175,A2
+1407529104,1407529111,SO
+1407529112,1407529175,A2
1407529176,1407529183,SO
1407529184,1407529191,NG
1407529192,1407529207,A2
@@ -41813,27 +42775,28 @@
1407531552,1407531559,SD
1407531560,1407531567,A2
1407531568,1407531575,CD
-1407531576,1407531583,A2
+1407531576,1407531583,GQ
1407531584,1407531591,CD
-1407531592,1407531607,A2
+1407531592,1407531599,A2
+1407531600,1407531607,LY
1407531608,1407531615,CD
1407531616,1407531623,A2
1407531624,1407531631,CD
1407531632,1407531639,ZM
1407531640,1407531647,CD
-1407531648,1407531655,A2
-1407531656,1407531663,CD
+1407531648,1407531663,A2
1407531664,1407531671,MZ
1407531672,1407531687,CD
1407531688,1407531703,A2
-1407531704,1407531711,IQ
+1407531704,1407531711,SD
1407531712,1407531735,CD
1407531736,1407531743,ZW
1407531744,1407531751,A2
1407531752,1407531759,GQ
1407531760,1407531767,ZW
1407531768,1407531775,SD
-1407531776,1407532551,A2
+1407531776,1407532543,A2
+1407532544,1407532551,SO
1407532552,1407532559,AO
1407532560,1407532583,A2
1407532584,1407532591,ZW
@@ -41854,7 +42817,8 @@
1407533408,1407533423,A2
1407533424,1407533567,GH
1407533568,1407533583,NG
-1407533584,1407533607,A2
+1407533584,1407533591,NE
+1407533592,1407533607,A2
1407533608,1407533631,NG
1407533632,1407533679,A2
1407533680,1407533695,NG
@@ -41864,18 +42828,18 @@
1407533728,1407533735,A2
1407533736,1407533743,GN
1407533744,1407533751,NG
-1407533752,1407533759,A2
+1407533752,1407533759,SL
1407533760,1407533767,NG
1407533768,1407533775,A2
1407533776,1407533783,NG
1407533784,1407533815,A2
1407533816,1407533823,NG
-1407533824,1407533919,A2
+1407533824,1407533831,LR
+1407533832,1407533919,A2
1407533920,1407533927,BF
1407533928,1407534079,A2
1407534080,1407534335,AE
-1407534336,1407534343,CM
-1407534344,1407534359,A2
+1407534336,1407534359,A2
1407534360,1407534383,NG
1407534384,1407534391,GR
1407534392,1407534399,AO
@@ -41919,7 +42883,7 @@
1407535816,1407535823,NG
1407535824,1407535847,A2
1407535848,1407535855,CD
-1407535856,1407535863,SD
+1407535856,1407535863,GB
1407535864,1407536127,A2
1407536128,1407536639,GA
1407536640,1407536895,CD
@@ -41951,14 +42915,16 @@
1407537208,1407537215,BE
1407537216,1407537239,A2
1407537240,1407537255,NG
-1407537256,1407537287,A2
+1407537256,1407537263,A2
+1407537264,1407537279,CM
+1407537280,1407537287,A2
1407537288,1407537303,UG
1407537304,1407537311,LR
1407537312,1407537319,A2
1407537320,1407537327,NG
1407537328,1407537343,A2
-1407537344,1407537351,NG
-1407537352,1407537367,A2
+1407537344,1407537359,NG
+1407537360,1407537367,A2
1407537368,1407537383,NG
1407537384,1407537431,A2
1407537432,1407537439,NG
@@ -41976,8 +42942,8 @@
1407537576,1407537591,NG
1407537592,1407537607,A2
1407537608,1407537615,CM
-1407537616,1407537623,A2
-1407537624,1407537639,NG
+1407537616,1407537631,A2
+1407537632,1407537639,NG
1407537640,1407537679,A2
1407537680,1407537687,IQ
1407537688,1407537703,A2
@@ -41999,13 +42965,14 @@
1407537968,1407537975,NG
1407537976,1407537983,A2
1407537984,1407537991,NG
-1407537992,1407537999,IQ
+1407537992,1407537999,A2
1407538000,1407538023,NG
1407538024,1407538031,A2
1407538032,1407538039,NG
1407538040,1407538047,CD
1407538048,1407538055,NG
-1407538056,1407538071,LU
+1407538056,1407538063,A2
+1407538064,1407538071,LU
1407538072,1407538079,A2
1407538080,1407538087,LR
1407538088,1407538095,AO
@@ -42072,24 +43039,25 @@
1407539720,1407539727,A2
1407539728,1407539735,GR
1407539736,1407539743,NG
-1407539744,1407539759,A2
-1407539760,1407539767,GH
+1407539744,1407539751,A2
+1407539752,1407539759,NG
+1407539760,1407539767,A2
1407539768,1407539775,GR
1407539776,1407539783,A2
1407539784,1407539791,GR
1407539792,1407539799,NG
1407539800,1407539823,A2
-1407539824,1407539839,NG
-1407539840,1407539847,A2
-1407539848,1407539855,NG
+1407539824,1407539831,NG
+1407539832,1407539855,A2
1407539856,1407539863,CD
1407539864,1407539879,NG
-1407539880,1407539895,A2
+1407539880,1407539887,A2
+1407539888,1407539895,NG
1407539896,1407539903,CD
1407539904,1407539911,A2
1407539912,1407539927,NG
-1407539928,1407539935,GN
-1407539936,1407539943,A2
+1407539928,1407539935,A2
+1407539936,1407539943,GN
1407539944,1407539951,CD
1407539952,1407539959,LR
1407539960,1407539967,A2
@@ -42132,28 +43100,36 @@
1407540432,1407540439,CI
1407540440,1407540447,A2
1407540448,1407540455,LR
-1407540456,1407540479,A2
+1407540456,1407540463,A2
+1407540464,1407540471,MU
+1407540472,1407540479,A2
1407540480,1407540487,CM
1407540488,1407540495,A2
1407540496,1407540503,NG
1407540504,1407540551,A2
1407540552,1407540559,NG
-1407540560,1407540591,A2
+1407540560,1407540567,CD
+1407540568,1407540591,A2
1407540592,1407540599,GN
1407540600,1407540607,A2
1407540608,1407540615,CD
1407540616,1407540623,SD
1407540624,1407540655,A2
1407540656,1407540663,CD
-1407540664,1407540767,A2
+1407540664,1407540695,A2
+1407540696,1407540703,NG
+1407540704,1407540767,A2
1407540768,1407540775,NG
1407540776,1407540991,A2
1407540992,1407540999,CD
-1407541000,1407541031,A2
+1407541000,1407541023,A2
+1407541024,1407541031,LR
1407541032,1407541039,NG
1407541040,1407541047,A2
1407541048,1407541055,NG
-1407541056,1407541095,A2
+1407541056,1407541063,A2
+1407541064,1407541071,NG
+1407541072,1407541095,A2
1407541096,1407541103,GQ
1407541104,1407541175,A2
1407541176,1407541183,NG
@@ -42196,8 +43172,8 @@
1407542768,1407542775,GA
1407542776,1407542791,A2
1407542792,1407542799,NG
-1407542800,1407542831,A2
-1407542832,1407542863,NG
+1407542800,1407542847,A2
+1407542848,1407542863,NG
1407542864,1407542903,A2
1407542904,1407542911,CD
1407542912,1407543039,AT
@@ -42213,32 +43189,30 @@
1407545856,1407545863,CI
1407545864,1407545871,A2
1407545872,1407545879,CD
-1407545880,1407545895,A2
+1407545880,1407545887,A2
+1407545888,1407545895,NG
1407545896,1407545903,CD
1407545904,1407545911,A2
1407545912,1407545927,NG
1407545928,1407545935,A2
1407545936,1407545943,ZA
1407545944,1407545951,A2
-1407545952,1407545959,NG
+1407545952,1407545959,BJ
1407545960,1407545967,A2
1407545968,1407545975,GQ
-1407545976,1407545983,A2
-1407545984,1407545991,MU
+1407545976,1407545991,A2
1407545992,1407545999,GN
-1407546000,1407546023,A2
+1407546000,1407546007,CF
+1407546008,1407546023,A2
1407546024,1407546047,NG
1407546048,1407546055,A2
1407546056,1407546063,NG
1407546064,1407546071,ML
1407546072,1407546367,A2
1407546368,1407546495,AE
-1407546496,1407546799,A2
-1407546800,1407546815,GH
-1407546816,1407546863,A2
+1407546496,1407546863,A2
1407546864,1407546879,LR
-1407546880,1407547135,ZW
-1407547136,1407547143,A2
+1407546880,1407547143,A2
1407547144,1407547151,GH
1407547152,1407547167,A2
1407547168,1407547175,NG
@@ -42274,18 +43248,18 @@
1407548128,1407548143,CM
1407548144,1407548151,A2
1407548152,1407548415,NG
-1407548416,1407548543,GE
+1407548416,1407548443,GE
+1407548444,1407548447,NE
+1407548448,1407548543,GE
1407548544,1407548711,A2
1407548712,1407548719,CD
1407548720,1407548767,A2
1407548768,1407548775,CD
1407548776,1407548927,A2
-1407548928,1407548943,NG
-1407548944,1407548951,A2
-1407548952,1407548959,NG
+1407548928,1407548959,NG
1407548960,1407548967,A2
1407548968,1407548975,CM
-1407548976,1407548983,NG
+1407548976,1407548983,A2
1407548984,1407548991,CD
1407548992,1407549039,A2
1407549040,1407549047,NG
@@ -42305,13 +43279,11 @@
1407549440,1407582207,RU
1407582208,1407614975,PL
1407614976,1407680511,ES
-1407680512,1407680687,FR
-1407680688,1407680703,GB
-1407680704,1407680735,FR
-1407680736,1407681023,GB
-1407681024,1407681103,ES
-1407681104,1407681119,GB
-1407681120,1407681291,ES
+1407680512,1407680695,FR
+1407680696,1407680703,GB
+1407680704,1407680831,FR
+1407680832,1407681023,GB
+1407681024,1407681291,ES
1407681292,1407681295,GB
1407681296,1407681535,ES
1407681536,1407681639,FR
@@ -42323,9 +43295,13 @@
1407682880,1407682911,FI
1407682912,1407687423,GB
1407687424,1407687679,ES
-1407687680,1407695215,GB
+1407687680,1407693159,GB
+1407693160,1407693167,ES
+1407693168,1407695215,GB
1407695216,1407695223,ES
-1407695224,1407700271,GB
+1407695224,1407696487,GB
+1407696488,1407696495,AU
+1407696496,1407700271,GB
1407700272,1407700287,DE
1407700288,1407702015,GB
1407702016,1407702271,FR
@@ -42345,17 +43321,15 @@
1407704384,1407704447,FR
1407704448,1407705207,GB
1407705208,1407705215,ES
-1407705216,1407705247,GB
-1407705248,1407705279,ES
-1407705280,1407705599,GB
+1407705216,1407705599,GB
1407705600,1407705727,FR
1407705728,1407705759,GB
1407705760,1407705791,FR
1407705792,1407706367,GB
1407706368,1407706423,FR
1407706424,1407706431,GB
-1407706432,1407706479,FR
-1407706480,1407707703,GB
+1407706432,1407706559,FR
+1407706560,1407707703,GB
1407707704,1407707839,CH
1407707840,1407707903,GB
1407707904,1407707935,CH
@@ -42374,8 +43348,8 @@
1407712832,1407712895,GB
1407712896,1407712911,DE
1407712912,1407712919,GB
-1407712920,1407712927,DE
-1407712928,1407712975,GB
+1407712920,1407712959,DE
+1407712960,1407712975,GB
1407712976,1407713239,DE
1407713240,1407713247,GB
1407713248,1407713279,DE
@@ -42473,8 +43447,7 @@
1410009344,1410009479,US
1410009480,1410009487,A2
1410009488,1410009535,GI
-1410009536,1410010367,A2
-1410010368,1410010399,IR
+1410009536,1410010399,A2
1410010400,1410010431,LY
1410010432,1410010543,A2
1410010544,1410010575,LY
@@ -42491,10 +43464,7 @@
1410010832,1410010879,A2
1410010880,1410011135,IR
1410011136,1410011647,DE
-1410011648,1410012159,A2
-1410012160,1410012415,IQ
-1410012416,1410012447,AF
-1410012448,1410012671,A2
+1410011648,1410012671,A2
1410012672,1410013183,DE
1410013184,1410013439,ES
1410013440,1410013471,IR
@@ -42571,15 +43541,9 @@
1410018560,1410018591,A2
1410018592,1410018607,IR
1410018608,1410018623,LY
-1410018624,1410018815,A2
-1410018816,1410018831,DE
-1410018832,1410018847,A2
-1410018848,1410018863,DE
-1410018864,1410020103,A2
+1410018624,1410020103,A2
1410020104,1410020111,US
-1410020112,1410020351,A2
-1410020352,1410020863,US
-1410020864,1410021375,A2
+1410020112,1410021375,A2
1410021376,1410021407,IR
1410021408,1410021631,A2
1410021632,1410021663,IR
@@ -42653,8 +43617,7 @@
1410037760,1410038015,US
1410038016,1410042815,A2
1410042816,1410042831,US
-1410042832,1410044927,A2
-1410044928,1410045183,VG
+1410042832,1410045183,A2
1410045184,1410045439,IQ
1410045440,1410045695,LB
1410045696,1410071815,A2
@@ -42747,7 +43710,7 @@
1410573440,1410573695,DE
1410573696,1410573711,RU
1410573712,1410573759,DE
-1410573760,1410573775,BA
+1410573760,1410573775,RU
1410573776,1410573799,DE
1410573800,1410573815,IT
1410573816,1410573823,RU
@@ -42761,7 +43724,9 @@
1410574584,1410574591,RU
1410574592,1410574719,DE
1410574720,1410574727,RU
-1410574728,1410575103,DE
+1410574728,1410574847,DE
+1410574848,1410574975,BR
+1410574976,1410575103,DE
1410575104,1410575111,US
1410575112,1410575119,IT
1410575120,1410575135,DE
@@ -42783,7 +43748,9 @@
1410575856,1410575871,DE
1410575872,1410575999,DK
1410576000,1410576255,DE
-1410576256,1410576383,IT
+1410576256,1410576319,IT
+1410576320,1410576351,DE
+1410576352,1410576383,IT
1410576384,1410588671,DE
1410588672,1410596863,GB
1410596864,1410605055,ES
@@ -42805,7 +43772,166 @@
1410711552,1410719743,BG
1410719744,1410727935,RU
1410727936,1410736127,BG
-1410736128,1410744319,RS
+1410736128,1410736128,RS
+1410736129,1410736382,AL
+1410736383,1410736384,RS
+1410736385,1410736638,AL
+1410736639,1410736640,RS
+1410736641,1410736894,AL
+1410736895,1410736896,RS
+1410736897,1410736911,AL
+1410736912,1410736928,RS
+1410736929,1410736991,AL
+1410736992,1410737415,RS
+1410737416,1410737423,AL
+1410737424,1410737431,RS
+1410737432,1410737439,AL
+1410737440,1410737664,RS
+1410737665,1410737918,AL
+1410737919,1410737920,RS
+1410737921,1410738174,AL
+1410738175,1410738175,RS
+1410738176,1410738215,AL
+1410738216,1410738223,RS
+1410738224,1410738247,AL
+1410738248,1410738263,RS
+1410738264,1410738271,AL
+1410738272,1410738279,RS
+1410738280,1410738295,AL
+1410738296,1410738304,RS
+1410738305,1410738310,AL
+1410738311,1410738320,RS
+1410738321,1410738326,AL
+1410738327,1410738328,RS
+1410738329,1410738334,AL
+1410738335,1410738351,RS
+1410738352,1410738359,AL
+1410738360,1410738384,RS
+1410738385,1410738390,AL
+1410738391,1410738439,RS
+1410738440,1410738447,AL
+1410738448,1410738703,RS
+1410738704,1410738718,AL
+1410738719,1410738720,RS
+1410738721,1410738734,AL
+1410738735,1410738752,RS
+1410738753,1410738766,AL
+1410738767,1410738768,RS
+1410738769,1410738782,AL
+1410738783,1410738800,RS
+1410738801,1410738814,AL
+1410738815,1410738816,RS
+1410738817,1410738830,AL
+1410738831,1410738832,RS
+1410738833,1410738846,AL
+1410738847,1410738864,RS
+1410738865,1410738878,AL
+1410738879,1410738896,RS
+1410738897,1410738902,AL
+1410738903,1410738912,RS
+1410738913,1410738927,AL
+1410738928,1410739200,RS
+1410739201,1410739326,AL
+1410739327,1410739328,RS
+1410739329,1410739390,AL
+1410739391,1410739472,RS
+1410739473,1410739486,AL
+1410739487,1410739520,RS
+1410739521,1410739534,AL
+1410739535,1410739543,RS
+1410739544,1410739550,AL
+1410739551,1410739568,RS
+1410739569,1410739582,AL
+1410739583,1410739616,RS
+1410739617,1410739630,AL
+1410739631,1410739696,RS
+1410739697,1410739710,AL
+1410739711,1410739712,RS
+1410739713,1410739719,AL
+1410739720,1410739720,RS
+1410739721,1410739727,AL
+1410739728,1410739728,RS
+1410739729,1410739734,AL
+1410739735,1410739736,RS
+1410739737,1410739742,AL
+1410739743,1410739744,RS
+1410739745,1410739750,AL
+1410739751,1410739752,RS
+1410739753,1410739759,AL
+1410739760,1410739776,RS
+1410739777,1410739783,AL
+1410739784,1410739791,RS
+1410739792,1410739799,AL
+1410739800,1410739807,RS
+1410739808,1410739879,AL
+1410739880,1410739887,RS
+1410739888,1410739919,AL
+1410739920,1410739927,RS
+1410739928,1410739951,AL
+1410739952,1410739967,RS
+1410739968,1410740003,AL
+1410740004,1410740007,RS
+1410740008,1410740043,AL
+1410740044,1410740047,RS
+1410740048,1410740122,AL
+1410740123,1410740123,RS
+1410740124,1410740135,AL
+1410740136,1410740139,RS
+1410740140,1410740335,AL
+1410740336,1410740343,RS
+1410740344,1410740383,AL
+1410740384,1410740391,RS
+1410740392,1410740415,AL
+1410740416,1410740423,RS
+1410740424,1410740471,AL
+1410740472,1410740479,RS
+1410740480,1410740507,AL
+1410740508,1410740511,RS
+1410740512,1410740515,AL
+1410740516,1410740519,RS
+1410740520,1410740643,AL
+1410740644,1410740647,RS
+1410740648,1410740675,AL
+1410740676,1410740679,RS
+1410740680,1410740734,AL
+1410740735,1410740735,RS
+1410740736,1410740751,AL
+1410740752,1410740767,RS
+1410740768,1410740823,AL
+1410740824,1410740831,RS
+1410740832,1410740871,AL
+1410740872,1410740879,RS
+1410740880,1410740911,AL
+1410740912,1410740919,RS
+1410740920,1410740931,AL
+1410740932,1410740935,RS
+1410740936,1410740943,AL
+1410740944,1410740991,RS
+1410740992,1410741303,AL
+1410741304,1410741327,RS
+1410741328,1410741335,AL
+1410741336,1410741351,RS
+1410741352,1410741427,AL
+1410741428,1410741431,RS
+1410741432,1410741443,AL
+1410741444,1410741447,RS
+1410741448,1410741479,AL
+1410741480,1410741483,RS
+1410741484,1410741567,AL
+1410741568,1410741583,RS
+1410741584,1410742279,AL
+1410742280,1410742319,RS
+1410742320,1410742351,AL
+1410742352,1410742359,RS
+1410742360,1410742415,AL
+1410742416,1410742527,RS
+1410742528,1410742907,AL
+1410742908,1410742911,RS
+1410742912,1410742923,AL
+1410742924,1410743039,RS
+1410743040,1410743935,AL
+1410743936,1410743999,RS
+1410744000,1410744319,AL
1410744320,1410744575,FR
1410744576,1410744831,A2
1410744832,1410745223,FR
@@ -42840,11 +43966,9 @@
1410753352,1410753367,AQ
1410753368,1410753391,DE
1410753392,1410753399,NL
-1410753400,1410753791,AQ
-1410753792,1410754303,US
-1410754304,1410754559,AQ
-1410754560,1410754567,US
-1410754568,1410754831,AQ
+1410753400,1410754623,AQ
+1410754624,1410754631,CN
+1410754632,1410754831,AQ
1410754832,1410754855,DE
1410754856,1410754859,AQ
1410754860,1410754867,DE
@@ -42854,16 +43978,11 @@
1410755068,1410755071,DE
1410755072,1410755327,AQ
1410755328,1410755583,DE
-1410755584,1410756863,US
-1410756864,1410757119,AQ
-1410757120,1410758143,US
-1410758144,1410758399,AQ
-1410758400,1410758655,US
-1410758656,1410759679,AQ
-1410759680,1410760191,US
+1410755584,1410760191,AQ
1410760192,1410760447,DE
1410760448,1410760455,CN
-1410760456,1410760471,AQ
+1410760456,1410760463,BS
+1410760464,1410760471,AQ
1410760472,1410760487,DE
1410760488,1410760503,AQ
1410760504,1410760703,DE
@@ -42988,19 +44107,23 @@
1411999904,1411999911,BA
1411999912,1411999919,SI
1411999920,1411999927,BA
-1411999928,1411999951,SI
+1411999928,1411999935,SI
+1411999936,1411999943,BA
+1411999944,1411999951,SI
1411999952,1411999959,BA
-1411999960,1411999983,SI
-1411999984,1412000767,BA
+1411999960,1411999967,SI
+1411999968,1412000767,BA
1412000768,1412000783,SI
1412000784,1412000791,BA
1412000792,1412000863,SI
1412000864,1412000879,BA
-1412000880,1412000903,SI
-1412000904,1412000911,BA
+1412000880,1412000895,SI
+1412000896,1412000911,BA
1412000912,1412000943,SI
-1412000944,1412000991,BA
-1412000992,1412001007,SI
+1412000944,1412000959,BA
+1412000960,1412000967,SI
+1412000968,1412000999,BA
+1412001000,1412001007,SI
1412001008,1412001015,BA
1412001016,1412001311,SI
1412001312,1412001319,DE
@@ -43013,7 +44136,9 @@
1412002784,1412002815,SI
1412002816,1412002847,BA
1412002848,1412002863,SI
-1412002864,1412002911,BA
+1412002864,1412002895,BA
+1412002896,1412002903,SI
+1412002904,1412002911,BA
1412002912,1412002919,SI
1412002920,1412003015,BA
1412003016,1412003023,SI
@@ -43031,7 +44156,9 @@
1412003264,1412003271,SI
1412003272,1412003303,BA
1412003304,1412003327,SI
-1412003328,1412003351,BA
+1412003328,1412003335,BA
+1412003336,1412003343,SI
+1412003344,1412003351,BA
1412003352,1412003375,SI
1412003376,1412003383,BA
1412003384,1412003391,SI
@@ -43044,11 +44171,7 @@
1412003624,1412003631,BA
1412003632,1412003639,SI
1412003640,1412003647,BA
-1412003648,1412003727,SI
-1412003728,1412003783,BA
-1412003784,1412003791,SI
-1412003792,1412003823,BA
-1412003824,1412003855,SI
+1412003648,1412003855,SI
1412003856,1412003903,BG
1412003904,1412003935,SI
1412003936,1412004351,BG
@@ -43088,9 +44211,7 @@
1412677632,1412685823,RU
1412685824,1412686239,IE
1412686240,1412686335,BB
-1412686336,1412686591,IE
-1412686592,1412686847,GB
-1412686848,1412689315,IE
+1412686336,1412689315,IE
1412689316,1412689343,GB
1412689344,1412690191,IE
1412690192,1412690199,GB
@@ -43147,7 +44268,9 @@
1422403840,1422403903,IT
1422403904,1422406399,DE
1422406400,1422406463,GB
-1422406464,1422468207,DE
+1422406464,1422410367,DE
+1422410368,1422410495,IT
+1422410496,1422468207,DE
1422468208,1422468223,IT
1422468224,1422468671,DE
1422468672,1422468735,IT
@@ -43203,7 +44326,7 @@
1424588800,1424588839,DE
1424588840,1424588847,GB
1424588848,1424588863,DE
-1424588864,1424588927,GB
+1424588864,1424588927,US
1424588928,1424588951,DE
1424588952,1424588959,GB
1424588960,1424588963,IT
@@ -43233,12 +44356,16 @@
1424593968,1424593983,GB
1424593984,1424594055,FR
1424594056,1424594063,IT
-1424594064,1424594103,FR
+1424594064,1424594087,FR
+1424594088,1424594095,GB
+1424594096,1424594103,FR
1424594104,1424594111,GB
1424594112,1424594175,FR
1424594176,1424594431,GB
1424594432,1424594519,IE
-1424594520,1424595455,GB
+1424594520,1424594527,GB
+1424594528,1424594535,IE
+1424594536,1424595455,GB
1424595456,1424595527,IT
1424595528,1424595535,GB
1424595536,1424595575,IT
@@ -43255,8 +44382,8 @@
1424597352,1424597375,GB
1424597376,1424597391,CZ
1424597392,1424597407,GB
-1424597408,1424597423,CZ
-1424597424,1424597503,GB
+1424597408,1424597431,CZ
+1424597432,1424597503,GB
1424597504,1424597759,FR
1424597760,1424598015,IT
1424598016,1424599039,GB
@@ -43280,7 +44407,8 @@
1424600576,1424600831,FR
1424600832,1424601087,BE
1424601088,1424601343,GB
-1424601344,1424601599,ES
+1424601344,1424601351,ES
+1424601352,1424601599,GB
1424601600,1424601855,CH
1424601856,1424602111,GB
1424602112,1424602623,DE
@@ -43289,7 +44417,8 @@
1424602744,1424602879,GB
1424602880,1424602911,US
1424602912,1424602927,FR
-1424602928,1424603007,US
+1424602928,1424602935,GB
+1424602936,1424603007,US
1424603008,1424603023,GB
1424603024,1424603087,US
1424603088,1424603095,GB
@@ -43297,8 +44426,8 @@
1424603136,1424603391,SK
1424603392,1424603647,DE
1424603648,1424603903,GB
-1424603904,1424604031,ES
-1424604032,1424604047,GB
+1424603904,1424604039,ES
+1424604040,1424604047,GB
1424604048,1424604159,ES
1424604160,1424604543,NL
1424604544,1424604671,GB
@@ -43341,8 +44470,8 @@
1424608328,1424608383,FR
1424608384,1424608399,ES
1424608400,1424608511,FR
-1424608512,1424608543,ES
-1424608544,1424608567,GB
+1424608512,1424608559,ES
+1424608560,1424608567,GB
1424608568,1424608687,ES
1424608688,1424608691,GB
1424608692,1424609023,ES
@@ -43353,7 +44482,9 @@
1424609396,1424609399,GB
1424609400,1424609535,CH
1424609536,1424609543,GB
-1424609544,1424609791,CH
+1424609544,1424609743,CH
+1424609744,1424609759,GB
+1424609760,1424609791,CH
1424609792,1424610303,GB
1424610304,1424610559,TZ
1424610560,1424610815,PL
@@ -43361,8 +44492,8 @@
1424611072,1424611135,BE
1424611136,1424611151,GB
1424611152,1424611271,BE
-1424611272,1424611295,GB
-1424611296,1424611327,BE
+1424611272,1424611279,LU
+1424611280,1424611327,BE
1424611328,1424611583,PL
1424611584,1424612095,GB
1424612096,1424612231,CZ
@@ -43381,9 +44512,9 @@
1424614136,1424614143,IT
1424614144,1424614399,GB
1424614400,1424614415,FR
-1424614416,1424614431,IT
-1424614432,1424614439,GB
-1424614440,1424614655,IT
+1424614416,1424614503,IT
+1424614504,1424614511,GB
+1424614512,1424614655,IT
1424614656,1424614911,FR
1424614912,1424615167,RO
1424615168,1424615679,GB
@@ -43392,7 +44523,8 @@
1424615808,1424615935,IT
1424615936,1424616191,FR
1424616192,1424616447,IT
-1424616448,1424616483,ES
+1424616448,1424616479,GB
+1424616480,1424616483,ES
1424616484,1424616487,GB
1424616488,1424616503,ES
1424616504,1424616511,GB
@@ -43405,23 +44537,24 @@
1424616704,1424616959,US
1424616960,1424617215,FR
1424617216,1424617231,IT
-1424617232,1424617239,GB
-1424617240,1424617351,IT
+1424617232,1424617247,GB
+1424617248,1424617351,IT
1424617352,1424617391,GB
1424617392,1424617395,IT
1424617396,1424617399,GB
1424617400,1424617407,IT
1424617408,1424617423,ES
-1424617424,1424617431,GB
-1424617432,1424617439,ES
+1424617424,1424617439,GB
1424617440,1424617447,IT
1424617448,1424617455,GB
1424617456,1424617463,IT
1424617464,1424617471,GB
1424617472,1424617727,US
-1424617728,1424618039,IT
-1424618040,1424618047,GB
-1424618048,1424618239,IT
+1424617728,1424618031,IT
+1424618032,1424618047,GB
+1424618048,1424618191,IT
+1424618192,1424618207,GB
+1424618208,1424618239,IT
1424618240,1424618495,NL
1424618496,1424618751,GB
1424618752,1424618927,FR
@@ -43505,6 +44638,7 @@
1424850944,1424883711,LV
1424883712,1424916479,DK
1424916480,1424949247,BG
+1424949248,1424982015,RO
1424982016,1425014783,FI
1425014784,1425031167,LT
1425031168,1425047551,FI
@@ -43608,7 +44742,8 @@
1425478144,1425478655,GB
1425478656,1425484799,RO
1425484800,1425485311,GB
-1425485312,1425506303,RO
+1425485312,1425485823,AE
+1425485824,1425506303,RO
1425506304,1425522687,NO
1425522688,1425539071,IT
1425539072,1425801215,FI
@@ -43621,7 +44756,9 @@
1425899520,1425915903,IT
1425915904,1425932287,FI
1425932288,1425948671,GR
-1425948672,1425965055,DE
+1425948672,1425949183,DE
+1425949184,1425949191,NL
+1425949192,1425965055,DE
1425965056,1425965100,ES
1425965101,1425965112,FR
1425965113,1425965116,ZA
@@ -43882,33 +45019,18 @@
1426800640,1426817023,PL
1426817024,1426833407,BG
1426833408,1426849791,SE
-1426849792,1426850303,NL
-1426850304,1426850335,SE
-1426850336,1426850367,GB
-1426850368,1426850463,NL
-1426850464,1426850495,GB
-1426850496,1426851519,NL
+1426849792,1426851519,NL
1426851520,1426851583,PA
-1426851584,1426851839,NL
-1426851840,1426852095,SE
-1426852096,1426852352,NL
+1426851584,1426852352,NL
1426852353,1426852359,RU
1426852360,1426852367,SE
1426852368,1426852375,NL
1426852376,1426852383,US
-1426852384,1426852543,GB
-1426852544,1426856447,NL
-1426856448,1426856703,ES
-1426856704,1426857472,NL
+1426852384,1426857472,NL
1426857473,1426857500,ES
-1426857501,1426859263,NL
-1426859264,1426859519,RU
-1426859520,1426864511,NL
+1426857501,1426864511,NL
1426864512,1426864639,PA
-1426864640,1426864895,FR
-1426864896,1426865663,NL
-1426865664,1426865919,BE
-1426865920,1426866175,ES
+1426864640,1426866175,NL
1426866176,1426882559,GB
1426882560,1426898943,FR
1426898944,1426915327,RU
@@ -43931,7 +45053,9 @@
1426968792,1426968800,ES
1426968801,1426969135,GB
1426969136,1426969151,ES
-1426969152,1426972319,GB
+1426969152,1426971855,GB
+1426971856,1426971863,ES
+1426971864,1426972319,GB
1426972320,1426972326,FR
1426972327,1426973335,GB
1426973336,1426973343,ES
@@ -43993,8 +45117,7 @@
1427728480,1427728511,CY
1427728512,1427728543,BR
1427728544,1427728575,DE
-1427728576,1427728607,BR
-1427728608,1427728639,TW
+1427728576,1427728639,BR
1427728640,1427728671,DE
1427728672,1427728703,TR
1427728704,1427728735,RU
@@ -44004,69 +45127,83 @@
1427728896,1427728927,RU
1427728928,1427728959,IL
1427728960,1427728991,RU
-1427728992,1427729055,DE
+1427728992,1427729023,DE
+1427729024,1427729055,GB
1427729056,1427729087,CA
-1427729088,1427729311,DE
+1427729088,1427729119,DE
+1427729120,1427729151,BR
+1427729152,1427729215,DE
+1427729216,1427729279,IN
+1427729280,1427729311,DE
1427729312,1427729343,GR
1427729344,1427742719,DE
1427742720,1427742751,IO
-1427742752,1427742975,DE
+1427742752,1427742911,DE
+1427742912,1427742943,US
+1427742944,1427742975,DE
1427742976,1427743007,RU
1427743008,1427743039,US
-1427743040,1427743071,DE
+1427743040,1427743071,BR
1427743072,1427743103,CY
1427743104,1427743135,BR
-1427743136,1427743199,DE
+1427743136,1427743167,IN
+1427743168,1427743199,DE
1427743200,1427743231,TR
1427743232,1427743263,GR
1427743264,1427743327,DE
1427743328,1427743359,NL
-1427743360,1427743391,DE
-1427743392,1427743423,BR
-1427743424,1427743455,DE
+1427743360,1427743423,BR
+1427743424,1427743455,TR
1427743456,1427743487,CY
1427743488,1427743583,DE
1427743584,1427743615,LV
1427743616,1427743647,DK
-1427743648,1427743775,DE
+1427743648,1427743679,DE
+1427743680,1427743711,RU
+1427743712,1427743775,DE
1427743776,1427743807,ZA
1427743808,1427743839,DE
1427743840,1427743871,RU
-1427743872,1427743935,DE
+1427743872,1427743903,DE
+1427743904,1427743935,US
1427743936,1427743967,RU
-1427743968,1427743999,DE
-1427744000,1427744031,TW
-1427744032,1427744127,DE
+1427743968,1427743999,US
+1427744000,1427744031,DE
+1427744032,1427744063,RU
+1427744064,1427744127,DE
1427744128,1427744159,PL
1427744160,1427744191,RU
1427744192,1427744255,DE
1427744256,1427744287,US
1427744288,1427744319,TR
-1427744320,1427744351,DE
+1427744320,1427744351,IN
1427744352,1427744383,UA
1427744384,1427744415,PL
1427744416,1427744447,UA
1427744448,1427744479,US
-1427744480,1427744639,DE
+1427744480,1427744575,DE
+1427744576,1427744607,PL
+1427744608,1427744639,DE
1427744640,1427744671,TR
-1427744672,1427744735,DE
-1427744736,1427744767,DK
-1427744768,1427744831,DE
-1427744832,1427744863,US
+1427744672,1427744767,DE
+1427744768,1427744799,BR
+1427744800,1427744863,DE
1427744864,1427744927,TR
1427744928,1427744959,HU
1427744960,1427744991,RU
1427744992,1427745023,DK
1427745024,1427745055,BM
-1427745056,1427745151,DE
+1427745056,1427745087,US
+1427745088,1427745151,DE
1427745152,1427745183,RO
1427745184,1427745215,CH
-1427745216,1427745311,DE
+1427745216,1427745247,TR
+1427745248,1427745279,DE
+1427745280,1427745311,MA
1427745312,1427745343,TH
1427745344,1427745375,DE
-1427745376,1427745407,TW
-1427745408,1427745439,DE
-1427745440,1427745471,US
+1427745376,1427745407,BR
+1427745408,1427745471,US
1427745472,1427745503,RO
1427745504,1427745535,RU
1427745536,1427745567,CN
@@ -44080,7 +45217,11 @@
1427745792,1427745823,GB
1427745824,1427745855,US
1427745856,1427745887,BR
-1427745888,1427746047,DE
+1427745888,1427745919,IN
+1427745920,1427745951,ES
+1427745952,1427745983,IN
+1427745984,1427746015,DE
+1427746016,1427746047,TR
1427746048,1427746079,SE
1427746080,1427746111,GB
1427746112,1427746143,DE
@@ -44089,27 +45230,40 @@
1427746240,1427746271,US
1427746272,1427747839,DE
1427747840,1427747871,FI
-1427747872,1427747935,DE
+1427747872,1427747903,BR
+1427747904,1427747935,CY
1427747936,1427747967,US
-1427747968,1427748063,DE
+1427747968,1427747999,DE
+1427748000,1427748031,BR
+1427748032,1427748063,DE
1427748064,1427748095,US
-1427748096,1427748255,DE
+1427748096,1427748127,BR
+1427748128,1427748159,DE
+1427748160,1427748191,GB
+1427748192,1427748255,DE
1427748256,1427748287,US
-1427748288,1427748447,DE
+1427748288,1427748351,DE
+1427748352,1427748383,BR
+1427748384,1427748447,DE
1427748448,1427748479,RU
-1427748480,1427748511,DE
-1427748512,1427748543,US
-1427748544,1427748575,MX
-1427748576,1427748607,DE
+1427748480,1427748511,MA
+1427748512,1427748575,DE
+1427748576,1427748607,BR
1427748608,1427748639,HU
-1427748640,1427749567,DE
+1427748640,1427748735,DE
+1427748736,1427748799,BR
+1427748800,1427748831,MA
+1427748832,1427749535,DE
+1427749536,1427749567,MA
1427749568,1427749599,CY
1427749600,1427749695,DE
1427749696,1427749727,BR
-1427749728,1427749855,DE
+1427749728,1427749759,DE
+1427749760,1427749791,BR
+1427749792,1427749855,DE
1427749856,1427749887,RU
1427749888,1427749919,BR
-1427749920,1427749951,DE
+1427749920,1427749951,US
1427749952,1427749983,RU
1427749984,1427750079,DE
1427750080,1427750111,BG
@@ -44122,21 +45276,25 @@
1427750336,1427750367,US
1427750368,1427751167,DE
1427751168,1427751423,NL
-1427751424,1427759935,DE
+1427751424,1427759903,DE
+1427759904,1427759935,MA
1427759936,1427759967,HR
-1427759968,1427760031,DE
-1427760032,1427760063,US
-1427760064,1427760095,DE
-1427760096,1427760127,US
-1427760128,1427760191,DE
+1427759968,1427759999,DE
+1427760000,1427760031,BR
+1427760032,1427760095,US
+1427760096,1427760159,DE
+1427760160,1427760191,PL
1427760192,1427760255,US
1427760256,1427760319,BR
1427760320,1427760351,TR
1427760352,1427760383,RU
-1427760384,1427760415,TR
-1427760416,1427760575,DE
+1427760384,1427760415,IN
+1427760416,1427760447,TR
+1427760448,1427760575,DE
1427760576,1427760607,CH
-1427760608,1427760799,DE
+1427760608,1427760671,DE
+1427760672,1427760703,BR
+1427760704,1427760799,DE
1427760800,1427760831,US
1427760832,1427760863,DE
1427760864,1427760895,US
@@ -44147,15 +45305,16 @@
1427761056,1427761087,CL
1427761088,1427761119,CH
1427761120,1427761151,TR
-1427761152,1427761183,DE
-1427761184,1427761215,US
+1427761152,1427761215,DE
1427761216,1427761247,TR
1427761248,1427761279,DE
1427761280,1427761311,RU
1427761312,1427761343,UA
1427761344,1427761375,CY
1427761376,1427761407,TW
-1427761408,1427761503,DE
+1427761408,1427761439,RU
+1427761440,1427761471,US
+1427761472,1427761503,IN
1427761504,1427761535,PL
1427761536,1427761567,US
1427761568,1427761599,RU
@@ -44196,9 +45355,7 @@
1428142080,1428143263,DE
1428143264,1428143279,CH
1428143280,1428144127,DE
-1428144128,1428146983,FR
-1428146984,1428146991,GB
-1428146992,1428147343,FR
+1428144128,1428147343,FR
1428147344,1428147351,GB
1428147352,1428147599,FR
1428147600,1428147615,GB
@@ -44210,9 +45367,7 @@
1428150488,1428150495,GB
1428150496,1428150663,FR
1428150664,1428150671,GB
-1428150672,1428150879,FR
-1428150880,1428150911,GB
-1428150912,1428151231,FR
+1428150672,1428151231,FR
1428151232,1428151295,CH
1428151296,1428152319,FR
1428152320,1428160511,PL
@@ -44418,7 +45573,8 @@
1433602320,1433608191,DE
1433608192,1433608959,GB
1433608960,1433609215,DE
-1433609216,1433609727,GB
+1433609216,1433609471,ZA
+1433609472,1433609727,GB
1433609728,1433610239,CH
1433610240,1433612287,US
1433612288,1433614335,GB
@@ -44453,7 +45609,8 @@
1433806656,1433806687,IT
1433806688,1433806719,NL
1433806720,1433806751,DE
-1433806752,1433812991,FR
+1433806752,1433806783,ES
+1433806784,1433812991,FR
1433812992,1433821183,BG
1433821184,1433829375,GE
1433829376,1433833471,RU
@@ -44478,7 +45635,9 @@
1433860096,1433862143,DE
1433862144,1433862467,CH
1433862468,1433862471,US
-1433862472,1433862559,CH
+1433862472,1433862519,CH
+1433862520,1433862527,NL
+1433862528,1433862559,CH
1433862560,1433862575,GB
1433862576,1433862751,CH
1433862752,1433862783,MC
@@ -44549,44 +45708,56 @@
1434681984,1434682015,CY
1434682016,1434682111,NL
1434682112,1434682303,DE
-1434682304,1434682319,CY
-1434682320,1434682367,NL
+1434682304,1434682367,NL
1434682368,1434683119,DE
1434683120,1434683135,NL
1434683136,1434683327,DE
1434683328,1434683391,MY
1434683392,1434685759,DE
1434685760,1434685951,NL
-1434685952,1434686719,DE
-1434686720,1434687231,NL
+1434685952,1434686975,DE
+1434686976,1434687231,NL
1434687232,1434687359,DE
1434687360,1434687487,NL
1434687488,1434687647,DE
1434687648,1434687679,NL
1434687680,1434688031,DE
1434688032,1434688063,NL
-1434688064,1434688207,DE
+1434688064,1434688095,DE
+1434688096,1434688127,NL
+1434688128,1434688143,DE
+1434688144,1434688151,NL
+1434688152,1434688207,DE
1434688208,1434688223,NL
1434688224,1434689887,DE
1434689888,1434689919,NL
-1434689920,1434692607,DE
+1434689920,1434689951,DE
+1434689952,1434690015,NL
+1434690016,1434692607,DE
1434692608,1434692671,NL
-1434692672,1434693119,DE
-1434693120,1434693375,NL
-1434693376,1434694655,DE
+1434692672,1434694655,DE
1434694656,1434694719,NL
-1434694720,1434702463,DE
+1434694720,1434696447,DE
+1434696448,1434696703,NL
+1434696704,1434698879,DE
+1434698880,1434699007,NL
+1434699008,1434702463,DE
1434702464,1434702591,NL
1434702592,1434702655,DE
1434702656,1434702671,NL
-1434702672,1434705727,DE
+1434702672,1434702783,DE
+1434702784,1434702911,NL
+1434702912,1434702975,DE
+1434702976,1434703039,NL
+1434703040,1434705727,DE
1434705728,1434705919,NL
-1434705920,1434712063,DE
+1434705920,1434710015,DE
+1434710016,1434710527,NL
+1434710528,1434712063,DE
1434712064,1434712319,NL
1434712320,1434712959,DE
1434712960,1434712975,NL
-1434712976,1434713855,DE
-1434713856,1434714111,NL
+1434712976,1434714111,DE
1434714112,1434746879,AZ
1434746880,1434779647,CZ
1434779648,1434812415,GB
@@ -44726,15 +45897,25 @@
1438810112,1438826495,SE
1438826496,1438842879,FI
1438842880,1438859263,SE
-1438859264,1438861823,DE
+1438859264,1438860287,DE
+1438860288,1438860415,US
+1438860416,1438861823,DE
1438861824,1438862079,CH
-1438862080,1438869591,DE
+1438862080,1438864827,DE
+1438864828,1438864831,PA
+1438864832,1438864927,DE
+1438864928,1438864959,PA
+1438864960,1438868295,DE
+1438868296,1438868303,LT
+1438868304,1438869591,DE
1438869592,1438869595,RU
1438869596,1438869647,DE
1438869648,1438869651,LV
1438869652,1438869655,US
1438869656,1438869663,UA
-1438869664,1438873119,DE
+1438869664,1438870783,DE
+1438870784,1438871039,GB
+1438871040,1438873119,DE
1438873120,1438873127,PA
1438873128,1438873671,DE
1438873672,1438873679,PA
@@ -44750,9 +45931,7 @@
1438874800,1438874855,PA
1438874856,1438874863,DE
1438874864,1438874879,PA
-1438874880,1438875223,DE
-1438875224,1438875255,GB
-1438875256,1438875647,DE
+1438874880,1438875647,DE
1438875648,1438876159,RU
1438876160,1438876415,LT
1438876416,1438876927,RU
@@ -44873,23 +46052,27 @@
1439467008,1439482367,RO
1439482368,1439482879,GB
1439482880,1439498239,RO
-1439498240,1439503103,DE
-1439503104,1439503359,PT
-1439503360,1439514111,DE
-1439514112,1439514367,GB
-1439514368,1439514623,DE
+1439498240,1439507199,DE
+1439507200,1439507455,GB
+1439507456,1439513599,DE
+1439513600,1439514623,GB
1439514624,1439516671,IT
1439516672,1439518207,DE
1439518208,1439518719,IT
-1439518720,1439529599,DE
-1439529600,1439529727,GB
-1439529728,1439529983,DE
+1439518720,1439527935,DE
+1439527936,1439528959,GB
+1439528960,1439529983,DE
1439529984,1439530239,EG
-1439530240,1439535103,DE
-1439535104,1439538175,IT
-1439538176,1439538687,DE
+1439530240,1439530495,GB
+1439530496,1439534079,DE
+1439534080,1439535103,GB
+1439535104,1439536127,IT
+1439536128,1439537151,GB
+1439537152,1439538175,IT
+1439538176,1439538687,GB
1439538688,1439539199,IT
-1439539200,1439549439,DE
+1439539200,1439543295,DE
+1439543296,1439549439,GB
1439549440,1439551487,IT
1439551488,1439556095,DE
1439556096,1439556607,IT
@@ -44902,8 +46085,8 @@
1439561216,1439561727,DE
1439561728,1439562239,GB
1439562240,1439562751,IE
-1439562752,1439562879,DE
-1439562880,1439563263,GB
+1439562752,1439563007,DE
+1439563008,1439563263,GB
1439563264,1439563775,DE
1439563776,1439629311,LT
1439629312,1439694847,CZ
@@ -44960,7 +46143,9 @@
1441389568,1441389599,LU
1441389600,1441389967,FR
1441389968,1441389983,CA
-1441389984,1441390591,FR
+1441389984,1441390383,FR
+1441390384,1441390399,CA
+1441390400,1441390591,FR
1441390592,1441398783,DK
1441398784,1441415167,RU
1441415168,1441423359,GB
@@ -44996,7 +46181,11 @@
1441546240,1441554431,DK
1441554432,1441554687,GB
1441554688,1441554943,NL
-1441554944,1441557759,GB
+1441554944,1441555199,GB
+1441555200,1441555327,DE
+1441555328,1441556735,GB
+1441556736,1441556991,DE
+1441556992,1441557759,GB
1441557760,1441558015,NL
1441558016,1441562623,GB
1441562624,1441564671,IQ
@@ -45074,6 +46263,8 @@
1442807808,1442811903,BG
1442811904,1442815999,AT
1442816000,1442820095,BG
+1442820096,1442822143,UA
+1442822144,1442824191,RU
1442824192,1442828287,BE
1442828288,1442832383,NL
1442832384,1442836479,GB
@@ -45146,7 +46337,9 @@
1446576128,1446608895,IR
1446608896,1446641663,BY
1446641664,1446674431,SI
-1446674432,1446694543,DK
+1446674432,1446678407,DK
+1446678408,1446678411,US
+1446678412,1446694543,DK
1446694544,1446694559,SE
1446694560,1446694591,DK
1446694592,1446694607,NO
@@ -45157,9 +46350,17 @@
1446707176,1446707179,NO
1446707180,1446707183,FI
1446707184,1446707199,DK
-1446707200,1446712783,AT
+1446707200,1446710799,AT
+1446710800,1446710815,MT
+1446710816,1446710887,AT
+1446710888,1446710895,MT
+1446710896,1446710903,AT
+1446710904,1446710911,MT
+1446710912,1446712783,AT
1446712784,1446712791,DE
-1446712792,1446736503,AT
+1446712792,1446716399,AT
+1446716400,1446716407,MT
+1446716408,1446736503,AT
1446736504,1446736511,US
1446736512,1446739967,AT
1446739968,1446772735,RU
@@ -45173,12 +46374,13 @@
1446904064,1446904071,CY
1446904072,1446904079,LY
1446904080,1446904087,AF
-1446904088,1446904095,A2
+1446904088,1446904095,BF
1446904096,1446904103,SD
1446904104,1446904111,IQ
1446904112,1446904119,GN
1446904120,1446904127,IQ
-1446904128,1446904143,A2
+1446904128,1446904135,A2
+1446904136,1446904143,LY
1446904144,1446904151,ER
1446904152,1446904231,A2
1446904232,1446904239,IQ
@@ -45194,7 +46396,8 @@
1446904400,1446904415,IQ
1446904416,1446904575,A2
1446904576,1446904591,SD
-1446904592,1446904607,A2
+1446904592,1446904599,AF
+1446904600,1446904607,A2
1446904608,1446904623,SD
1446904624,1446904639,A2
1446904640,1446904679,IQ
@@ -45208,52 +46411,53 @@
1446904844,1446904847,CG
1446904848,1446904851,AF
1446904852,1446904855,LY
-1446904856,1446904859,A2
+1446904856,1446904859,IQ
1446904860,1446904867,LY
1446904868,1446904871,IQ
1446904872,1446904879,A2
1446904880,1446904883,IQ
1446904884,1446904887,AF
-1446904888,1446904891,A2
-1446904892,1446904895,IQ
+1446904888,1446904895,IQ
1446904896,1446904899,LY
1446904900,1446904903,A2
1446904904,1446904907,AF
-1446904908,1446904911,IQ
-1446904912,1446904919,A2
+1446904908,1446904919,A2
1446904920,1446904923,LY
1446904924,1446904927,AF
-1446904928,1446904935,A2
+1446904928,1446904931,TD
+1446904932,1446904935,A2
1446904936,1446904939,AO
-1446904940,1446904947,IQ
+1446904940,1446904943,LY
+1446904944,1446904947,IQ
1446904948,1446904951,LY
1446904952,1446904955,AF
1446904956,1446904959,A2
1446904960,1446904963,IQ
1446904964,1446904967,TD
-1446904968,1446904971,IQ
+1446904968,1446904971,A2
1446904972,1446904975,LY
1446904976,1446904979,CG
1446904980,1446904983,TG
1446904984,1446904991,LY
1446904992,1446904995,IQ
-1446904996,1446905007,A2
-1446905008,1446905011,CG
-1446905012,1446905015,A2
+1446904996,1446905003,A2
+1446905004,1446905007,NG
+1446905008,1446905011,A2
+1446905012,1446905015,AF
1446905016,1446905019,NG
-1446905020,1446905027,A2
+1446905020,1446905023,LY
+1446905024,1446905027,A2
1446905028,1446905031,IQ
1446905032,1446905035,LY
-1446905036,1446905039,A2
+1446905036,1446905039,IQ
1446905040,1446905043,AF
1446905044,1446905047,IQ
1446905048,1446905051,LY
1446905052,1446905059,IQ
-1446905060,1446905063,A2
-1446905064,1446905067,NG
+1446905060,1446905067,NG
1446905068,1446905083,A2
1446905084,1446905095,AF
-1446905096,1446905099,A2
+1446905096,1446905099,LY
1446905100,1446905103,IQ
1446905104,1446905111,LY
1446905112,1446905115,NG
@@ -45262,19 +46466,18 @@
1446905124,1446905127,AF
1446905128,1446905131,IQ
1446905132,1446905139,LY
-1446905140,1446905143,A2
-1446905144,1446905147,IQ
-1446905148,1446905155,A2
-1446905156,1446905159,IQ
-1446905160,1446905167,A2
-1446905168,1446905171,LY
+1446905140,1446905147,IQ
+1446905148,1446905151,A2
+1446905152,1446905159,IQ
+1446905160,1446905163,A2
+1446905164,1446905171,LY
1446905172,1446905175,A2
1446905176,1446905179,AF
1446905180,1446905183,LY
1446905184,1446905191,A2
1446905192,1446905195,LY
1446905196,1446905199,AF
-1446905200,1446905203,NG
+1446905200,1446905203,A2
1446905204,1446905207,AF
1446905208,1446905211,ER
1446905212,1446905215,AF
@@ -45282,29 +46485,36 @@
1446905220,1446905223,IQ
1446905224,1446905227,LY
1446905228,1446905235,NG
-1446905236,1446905243,A2
+1446905236,1446905239,A2
+1446905240,1446905243,IQ
1446905244,1446905247,AF
1446905248,1446905251,A2
1446905252,1446905255,LY
-1446905256,1446905271,A2
-1446905272,1446905283,IQ
-1446905284,1446905287,A2
-1446905288,1446905291,LY
-1446905292,1446905303,A2
+1446905256,1446905259,A2
+1446905260,1446905263,IQ
+1446905264,1446905271,A2
+1446905272,1446905287,IQ
+1446905288,1446905295,LY
+1446905296,1446905303,IQ
1446905304,1446905307,CF
1446905308,1446905311,IQ
-1446905312,1446905315,A2
+1446905312,1446905315,EG
1446905316,1446905319,NG
1446905320,1446905331,IQ
-1446905332,1446905335,A2
+1446905332,1446905335,NG
1446905336,1446905343,IQ
-1446905344,1446905383,A2
+1446905344,1446905351,NG
+1446905352,1446905383,A2
1446905384,1446905391,SD
1446905392,1446905583,A2
1446905584,1446905591,AF
-1446905592,1446905619,A2
+1446905592,1446905611,A2
+1446905612,1446905615,IQ
+1446905616,1446905619,A2
1446905620,1446905623,TD
-1446905624,1446905635,A2
+1446905624,1446905627,A2
+1446905628,1446905631,IQ
+1446905632,1446905635,A2
1446905636,1446905639,IQ
1446905640,1446905643,A2
1446905644,1446905647,IQ
@@ -45314,7 +46524,8 @@
1446905660,1446905663,ER
1446905664,1446905667,A2
1446905668,1446905675,AF
-1446905676,1446905703,A2
+1446905676,1446905683,LY
+1446905684,1446905703,A2
1446905704,1446905707,IQ
1446905708,1446905715,A2
1446905716,1446905719,IQ
@@ -45324,8 +46535,7 @@
1446905732,1446905735,AF
1446905736,1446905739,IQ
1446905740,1446905743,A2
-1446905744,1446905747,LY
-1446905748,1446905759,A2
+1446905744,1446905759,LY
1446905760,1446905763,ML
1446905764,1446905767,A2
1446905768,1446905775,IQ
@@ -45355,9 +46565,10 @@
1446906072,1446906079,CY
1446906080,1446906111,A2
1446906112,1446906119,IQ
-1446906120,1446906123,BG
+1446906120,1446906123,A2
1446906124,1446906131,IQ
-1446906132,1446906151,A2
+1446906132,1446906135,SD
+1446906136,1446906151,A2
1446906152,1446906159,AF
1446906160,1446906167,A2
1446906168,1446906171,IQ
@@ -45366,8 +46577,7 @@
1446906212,1446906215,AF
1446906216,1446906219,IQ
1446906220,1446906223,BG
-1446906224,1446906227,IQ
-1446906228,1446906231,A2
+1446906224,1446906231,A2
1446906232,1446906239,AF
1446906240,1446906243,IQ
1446906244,1446906251,A2
@@ -45388,7 +46598,8 @@
1446906392,1446906399,CY
1446906400,1446906883,A2
1446906884,1446906887,AF
-1446906888,1446906895,A2
+1446906888,1446906891,LY
+1446906892,1446906895,A2
1446906896,1446906899,GN
1446906900,1446906915,A2
1446906916,1446906919,AF
@@ -45433,7 +46644,9 @@
1446907136,1446907143,A2
1446907144,1446907147,AF
1446907148,1446907151,IQ
-1446907152,1446907171,A2
+1446907152,1446907159,A2
+1446907160,1446907163,IQ
+1446907164,1446907171,A2
1446907172,1446907175,IQ
1446907176,1446907187,A2
1446907188,1446907191,CG
@@ -45480,8 +46693,7 @@
1446907448,1446907487,A2
1446907488,1446907491,IQ
1446907492,1446907495,TD
-1446907496,1446907499,IQ
-1446907500,1446907519,A2
+1446907496,1446907519,A2
1446907520,1446907523,LY
1446907524,1446907531,A2
1446907532,1446907535,CI
@@ -45520,8 +46732,8 @@
1446907744,1446907747,IQ
1446907748,1446907751,A2
1446907752,1446907755,AF
-1446907756,1446907771,A2
-1446907772,1446907775,IQ
+1446907756,1446907767,A2
+1446907768,1446907775,IQ
1446907776,1446907787,A2
1446907788,1446907791,IQ
1446907792,1446907811,A2
@@ -45557,7 +46769,9 @@
1446908260,1446908263,IQ
1446908264,1446908267,A2
1446908268,1446908271,AF
-1446908272,1446908283,A2
+1446908272,1446908275,A2
+1446908276,1446908279,LY
+1446908280,1446908283,A2
1446908284,1446908287,AF
1446908288,1446908299,A2
1446908300,1446908303,IQ
@@ -45581,14 +46795,14 @@
1446908456,1446908459,LB
1446908460,1446908479,A2
1446908480,1446908483,IQ
-1446908484,1446908539,A2
-1446908540,1446908543,ZM
-1446908544,1446908603,A2
+1446908484,1446908603,A2
1446908604,1446908607,CG
1446908608,1446908631,A2
1446908632,1446908635,IQ
1446908636,1446908655,A2
-1446908656,1446908667,IQ
+1446908656,1446908659,IQ
+1446908660,1446908663,A2
+1446908664,1446908667,IQ
1446908668,1446908683,A2
1446908684,1446908687,SD
1446908688,1446908691,IQ
@@ -45604,8 +46818,7 @@
1446908920,1446908923,IQ
1446908924,1446908927,A2
1446908928,1446908931,IQ
-1446908932,1446908935,ZM
-1446908936,1446908971,A2
+1446908932,1446908971,A2
1446908972,1446908975,AF
1446908976,1446908979,GA
1446908980,1446908983,AF
@@ -45646,7 +46859,8 @@
1446909520,1446909523,CG
1446909524,1446909527,A2
1446909528,1446909531,EG
-1446909532,1446909539,A2
+1446909532,1446909535,A2
+1446909536,1446909539,AF
1446909540,1446909547,IQ
1446909548,1446909575,A2
1446909576,1446909579,AF
@@ -45663,9 +46877,9 @@
1446909808,1446909815,A2
1446909816,1446909819,AF
1446909820,1446909827,IQ
-1446909828,1446909903,A2
-1446909904,1446909907,IQ
-1446909908,1446909999,A2
+1446909828,1446909967,A2
+1446909968,1446909971,LY
+1446909972,1446909999,A2
1446910000,1446910003,AF
1446910004,1446910019,A2
1446910020,1446910023,IQ
@@ -45721,7 +46935,9 @@
1446910728,1446910731,AF
1446910732,1446910739,A2
1446910740,1446910747,AF
-1446910748,1446910791,A2
+1446910748,1446910767,A2
+1446910768,1446910775,AF
+1446910776,1446910791,A2
1446910792,1446910795,LY
1446910796,1446910799,A2
1446910800,1446910807,IQ
@@ -45769,11 +46985,7 @@
1446911144,1446911147,TD
1446911148,1446911163,A2
1446911164,1446911171,IQ
-1446911172,1446911183,A2
-1446911184,1446911187,AF
-1446911188,1446911195,A2
-1446911196,1446911199,IQ
-1446911200,1446911207,A2
+1446911172,1446911207,A2
1446911208,1446911215,IQ
1446911216,1446911223,A2
1446911224,1446911227,AF
@@ -45784,9 +46996,7 @@
1446911260,1446911263,AF
1446911264,1446911267,IQ
1446911268,1446911271,AF
-1446911272,1446911295,A2
-1446911296,1446911299,GH
-1446911300,1446911303,A2
+1446911272,1446911303,A2
1446911304,1446911307,IQ
1446911308,1446911319,A2
1446911320,1446911323,AF
@@ -45837,9 +47047,7 @@
1446911624,1446911627,IQ
1446911628,1446911631,AF
1446911632,1446911635,IQ
-1446911636,1446911643,A2
-1446911644,1446911647,AF
-1446911648,1446911679,A2
+1446911636,1446911679,A2
1446911680,1446911683,SD
1446911684,1446911691,A2
1446911692,1446911695,LY
@@ -45848,7 +47056,9 @@
1446911702,1446911739,A2
1446911740,1446911743,LY
1446911744,1446911751,IQ
-1446911752,1446911771,A2
+1446911752,1446911763,A2
+1446911764,1446911767,LY
+1446911768,1446911771,A2
1446911772,1446911775,AF
1446911776,1446911779,A2
1446911780,1446911783,AF
@@ -45857,13 +47067,14 @@
1446911792,1446911795,A2
1446911796,1446911799,IQ
1446911800,1446911803,NG
-1446911804,1446911827,A2
+1446911804,1446911819,A2
+1446911820,1446911823,IQ
+1446911824,1446911827,A2
1446911828,1446911831,IQ
1446911832,1446911835,A2
1446911836,1446911843,IQ
1446911844,1446911847,A2
-1446911848,1446911851,IQ
-1446911852,1446911855,A2
+1446911848,1446911855,IQ
1446911856,1446911859,AF
1446911860,1446911867,A2
1446911868,1446911871,LY
@@ -45886,7 +47097,7 @@
1446912028,1446912031,AF
1446912032,1446912035,A2
1446912036,1446912039,AF
-1446912040,1446912043,A2
+1446912040,1446912043,IQ
1446912044,1446912047,CG
1446912048,1446912051,AF
1446912052,1446912055,ER
@@ -45894,17 +47105,19 @@
1446912060,1446912063,NG
1446912064,1446912067,AF
1446912068,1446912071,A2
-1446912072,1446912075,AE
-1446912076,1446912083,A2
+1446912072,1446912075,IQ
+1446912076,1446912079,A2
+1446912080,1446912083,IQ
1446912084,1446912087,AF
1446912088,1446912095,A2
1446912096,1446912103,AF
-1446912104,1446912107,IQ
-1446912108,1446912115,A2
+1446912104,1446912115,A2
1446912116,1446912119,LY
1446912120,1446912151,A2
1446912152,1446912155,CF
-1446912156,1446912183,A2
+1446912156,1446912163,A2
+1446912164,1446912167,IQ
+1446912168,1446912183,A2
1446912184,1446912187,AF
1446912188,1446912191,IQ
1446912192,1446912195,A2
@@ -45914,18 +47127,19 @@
1446912220,1446912239,A2
1446912240,1446912247,IQ
1446912248,1446912251,AF
-1446912252,1446912255,A2
+1446912252,1446912255,IQ
1446912256,1446912263,AF
1446912264,1446912295,IQ
-1446912296,1446912303,AF
-1446912304,1446912319,A2
+1446912296,1446912311,AF
+1446912312,1446912319,A2
1446912320,1446912335,IQ
1446912336,1446912343,KW
1446912344,1446912367,IQ
1446912368,1446912375,A2
1446912376,1446912391,AF
1446912392,1446912399,GA
-1446912400,1446912423,A2
+1446912400,1446912415,AF
+1446912416,1446912423,A2
1446912424,1446912431,AF
1446912432,1446920191,A2
1446920192,1446936575,RU
@@ -46029,9 +47243,15 @@
1450090496,1450106879,RU
1450106880,1450115071,SK
1450115072,1450123263,RU
-1450123264,1450131455,AT
+1450123264,1450125231,AT
+1450125232,1450125239,DE
+1450125240,1450125247,US
+1450125248,1450131455,AT
1450131456,1450139647,UA
1450139648,1450147839,PL
+1450147840,1450151935,CH
+1450151936,1450153983,IQ
+1450153984,1450156031,DE
1450156032,1450164223,GB
1450164224,1450166271,SA
1450166272,1450168319,PL
@@ -46092,7 +47312,9 @@
1466265600,1466269695,HU
1466269696,1466302463,SA
1466302464,1466335231,GB
-1466335232,1466367631,CH
+1466335232,1466367119,CH
+1466367120,1466367127,GR
+1466367128,1466367631,CH
1466367632,1466367639,AT
1466367640,1466367999,CH
1466368000,1466400767,PT
@@ -46105,8 +47327,7 @@
1466592256,1466592511,FR
1466592512,1466592767,GB
1466592768,1466592895,FR
-1466592896,1466593023,DE
-1466593024,1466593279,GB
+1466592896,1466593279,GB
1466593280,1466604799,DE
1466604800,1466605055,ES
1466605056,1466606847,DE
@@ -46137,7 +47358,7 @@
1467301888,1467318271,GB
1467318272,1467334655,RU
1467334656,1467340959,GB
-1467340960,1467340991,TR
+1467340960,1467340991,US
1467340992,1467344639,GB
1467344640,1467344895,ZA
1467344896,1467351039,GB
@@ -46146,8 +47367,7 @@
1467367616,1467367647,SE
1467367648,1467367679,DE
1467367680,1467367695,IT
-1467367696,1467367807,DE
-1467367808,1467367871,CZ
+1467367696,1467367871,DE
1467367872,1467367903,SE
1467367904,1467367935,DE
1467367936,1467368191,SI
@@ -46156,9 +47376,7 @@
1467368448,1467368703,DK
1467368704,1467369519,DE
1467369520,1467369535,RU
-1467369536,1467369599,DE
-1467369600,1467369663,IT
-1467369664,1467369759,DE
+1467369536,1467369759,DE
1467369760,1467369791,HR
1467369792,1467369855,SE
1467369856,1467369871,RU
@@ -46281,6 +47499,7 @@
1475131392,1475133439,RU
1475133440,1475135487,CZ
1475135488,1475137535,CH
+1475137536,1475139583,GB
1475139584,1475141631,ES
1475141632,1475143679,FI
1475143680,1475145727,JO
@@ -46313,6 +47532,7 @@
1475182080,1475182335,RO
1475182336,1475184639,DE
1475184640,1475186687,RU
+1475186688,1475188735,GB
1475188736,1475190783,SE
1475190784,1475192831,GB
1475192832,1475194879,CH
@@ -46354,20 +47574,12 @@
1475208192,1475209215,AE
1475209216,1475211263,UZ
1475211264,1475213311,DE
-1475213312,1475214335,FR
-1475214336,1475214399,GB
-1475214400,1475214847,FR
-1475214848,1475214975,GB
-1475214976,1475215103,FR
-1475215104,1475215167,GB
-1475215168,1475215359,FR
+1475213312,1475215359,FR
1475215360,1475223551,IT
1475223552,1475229695,NO
1475229696,1475229759,SE
1475229760,1475229951,NO
-1475229952,1475230175,SE
-1475230176,1475230191,NO
-1475230192,1475230207,SE
+1475229952,1475230207,SE
1475230208,1475233791,NO
1475233792,1475234303,GB
1475234304,1475234559,IE
@@ -46378,8 +47590,9 @@
1475241984,1475242239,MC
1475242240,1475243775,FR
1475243776,1475244031,MC
-1475244032,1475245055,DE
-1475245056,1475245183,IE
+1475244032,1475244287,DE
+1475244288,1475244543,SD
+1475244544,1475245183,DE
1475245184,1475245311,SD
1475245312,1475246079,DE
1475246080,1475248127,CH
@@ -46426,6 +47639,7 @@
1475287040,1475291135,RU
1475291136,1475293183,PL
1475293184,1475295231,GB
+1475295232,1475297279,SK
1475297280,1475299327,DK
1475299328,1475301375,PL
1475301376,1475303423,LT
@@ -46474,8 +47688,8 @@
1475592192,1475608575,GB
1475608576,1475624959,RU
1475624960,1475627519,JE
-1475627520,1475627662,GB
-1475627663,1475627663,JE
+1475627520,1475627655,GB
+1475627656,1475627663,JE
1475627664,1475627688,GB
1475627689,1475627695,JE
1475627696,1475627775,GB
@@ -46496,15 +47710,11 @@
1475636432,1475636447,JE
1475636448,1475636479,GB
1475636480,1475636735,JE
-1475636736,1475637479,GB
-1475637480,1475637487,JE
-1475637488,1475637503,GB
+1475636736,1475637503,GB
1475637504,1475638783,JE
1475638784,1475639182,GB
1475639183,1475639183,JE
-1475639184,1475639199,GB
-1475639200,1475639207,JE
-1475639208,1475639216,GB
+1475639184,1475639216,GB
1475639217,1475639223,JE
1475639224,1475639263,GB
1475639264,1475639271,BB
@@ -46526,11 +47736,13 @@
1475706880,1475723263,RU
1475723264,1475725311,CY
1475725312,1475725951,RU
-1475725952,1475726463,GB
+1475725952,1475726207,GB
+1475726208,1475726335,RU
+1475726336,1475726463,GB
1475726464,1475726527,RU
1475726528,1475726591,GB
-1475726592,1475726719,RU
-1475726720,1475727103,GB
+1475726592,1475726847,RU
+1475726848,1475727103,GB
1475727104,1475727167,RU
1475727168,1475727343,GB
1475727344,1475727359,RU
@@ -46539,11 +47751,41 @@
1475727616,1475727623,FI
1475727624,1475727631,GB
1475727632,1475727639,FI
-1475727640,1475729087,GB
+1475727640,1475727807,GB
+1475727808,1475727871,FI
+1475727872,1475729087,GB
1475729088,1475729103,DE
-1475729104,1475729407,GB
+1475729104,1475729151,GB
+1475729152,1475729215,AT
+1475729216,1475729407,GB
1475729408,1475731455,UA
-1475731456,1475739647,GB
+1475731456,1475732479,GB
+1475732480,1475732991,RU
+1475732992,1475734783,GB
+1475734784,1475734911,UA
+1475734912,1475735295,GB
+1475735296,1475735551,UA
+1475735552,1475735807,US
+1475735808,1475735999,RU
+1475736000,1475736063,GB
+1475736064,1475736127,LV
+1475736128,1475736191,EE
+1475736192,1475736255,GB
+1475736256,1475736319,HU
+1475736320,1475736447,RU
+1475736448,1475736575,UA
+1475736576,1475736831,RU
+1475736832,1475736959,GB
+1475736960,1475737023,FR
+1475737024,1475737087,PL
+1475737088,1475737151,NL
+1475737152,1475737215,CZ
+1475737216,1475737279,DE
+1475737280,1475737343,AT
+1475737344,1475737599,UA
+1475737600,1475737855,FI
+1475737856,1475738111,SE
+1475738112,1475739647,RU
1475739648,1475756031,BG
1475756032,1475772415,GB
1475772416,1475788799,LV
@@ -46553,6 +47795,7 @@
1475837952,1475846143,GB
1475846144,1475854335,IR
1475854336,1475862527,AT
+1475862528,1475864575,FR
1475864576,1475866623,IT
1475866624,1475868671,GB
1475868672,1475870719,BG
@@ -46716,7 +47959,7 @@
1481984128,1481984255,PA
1481984256,1481984383,NL
1481984384,1481984511,GI
-1481984512,1481984639,SC
+1481984512,1481984639,CY
1481984640,1481985023,NL
1481985024,1481985279,MT
1481985280,1481987327,NL
@@ -46828,20 +48071,9 @@
1486317568,1486320383,RU
1486320384,1486320639,US
1486320640,1486321663,RU
-1486321664,1486321823,EU
-1486321824,1486321855,US
-1486321856,1486321887,NL
-1486321888,1486321919,US
-1486321920,1486323199,EU
-1486323200,1486323215,US
-1486323216,1486323231,NL
-1486323232,1486323239,GB
-1486323240,1486323447,EU
-1486323448,1486323455,GB
-1486323456,1486323711,EU
1486323712,1486325759,GB
+1486325760,1486327807,PL
1486327808,1486329855,CH
-1486329856,1486331903,FR
1486331904,1486333951,NO
1486333952,1486335999,SE
1486336000,1486338047,KZ
@@ -46891,7 +48123,9 @@
1489638656,1489638911,FR
1489638912,1489640703,IT
1489640704,1489640959,FR
-1489640960,1489642495,IT
+1489640960,1489641727,IT
+1489641728,1489641983,HK
+1489641984,1489642495,IT
1489642496,1489642751,FR
1489642752,1489644543,IT
1489644544,1489645055,A2
@@ -47033,24 +48267,26 @@
1489731584,1489764351,BG
1489764352,1489797119,RU
1489797120,1489829887,KZ
-1489829888,1489855503,DE
+1489829888,1489855495,DE
+1489855496,1489855503,CH
1489855504,1489855519,RU
-1489855520,1489855535,PL
-1489855536,1489855543,DE
+1489855520,1489855543,DE
1489855544,1489855551,PL
-1489855552,1489855999,DE
+1489855552,1489855583,DE
+1489855584,1489855615,RU
+1489855616,1489855999,DE
1489856000,1489856031,PL
1489856032,1489856063,RU
1489856064,1489862655,DE
-1489862656,1489895423,RU
+1489862656,1489928191,RU
1489928192,1489960959,SE
1489960960,1489993727,HR
1489993728,1490026495,LU
1490026496,1490028543,US
1490028544,1490029055,UA
-1490029056,1490040847,NL
-1490040848,1490041599,UA
-1490041600,1490042879,NL
+1490029056,1490040855,NL
+1490040856,1490040863,UA
+1490040864,1490042879,NL
1490042880,1490049879,CZ
1490049880,1490049887,AT
1490049888,1490049919,CZ
@@ -47079,8 +48315,8 @@
1490196864,1490196895,ES
1490196896,1490196927,HU
1490196928,1490196959,IT
-1490196960,1490197247,IE
-1490197248,1490206719,GB
+1490196960,1490197503,IE
+1490197504,1490206719,GB
1490206720,1490223103,GE
1490223104,1490255871,GB
1490255872,1490272255,NL
@@ -47158,6 +48394,7 @@
1494294528,1494302719,RU
1494302720,1494310911,FI
1494310912,1494319103,LB
+1494319104,1494327295,IS
1494327296,1494335487,IT
1494335488,1494343679,ES
1494343680,1494351871,PL
@@ -47267,8 +48504,8 @@
1495153920,1495154175,TR
1495154176,1495154687,FR
1495154688,1495160063,EU
-1495160064,1495160095,NL
-1495160096,1495161599,EU
+1495160064,1495160319,NL
+1495160320,1495161599,EU
1495161600,1495161855,FR
1495161856,1495162367,EU
1495162368,1495162879,US
@@ -47307,7 +48544,7 @@
1495209984,1495212031,KZ
1495212032,1495214079,RU
1495214080,1495216127,CZ
-1495218176,1495220223,IT
+1495216128,1495220223,IT
1495220224,1495222271,PL
1495222272,1495224319,IT
1495224320,1495228415,RU
@@ -47317,12 +48554,16 @@
1495236608,1495237247,AT
1495237248,1495237255,EU
1495237256,1495237271,AT
-1495237272,1495237375,EU
+1495237272,1495237311,EU
+1495237312,1495237319,AT
+1495237320,1495237375,EU
1495237376,1495237711,AT
1495237712,1495237727,NL
1495237728,1495237731,AT
-1495237732,1495237759,EU
-1495237760,1495237775,AT
+1495237732,1495237739,EU
+1495237740,1495237743,AT
+1495237744,1495237751,EU
+1495237752,1495237775,AT
1495237776,1495237887,EU
1495237888,1495238207,AT
1495238208,1495238223,EU
@@ -47343,7 +48584,25 @@
1495242144,1495242151,ES
1495242152,1495242159,IT
1495242160,1495242167,PL
-1495242168,1495242751,FR
+1495242168,1495242175,FR
+1495242176,1495242183,GB
+1495242184,1495242191,IE
+1495242192,1495242199,DK
+1495242200,1495242207,CZ
+1495242208,1495242215,GR
+1495242216,1495242223,PT
+1495242224,1495242231,RO
+1495242232,1495242367,FR
+1495242368,1495242375,HU
+1495242376,1495242383,BG
+1495242384,1495242391,SK
+1495242392,1495242399,LT
+1495242400,1495242407,LV
+1495242408,1495242415,SI
+1495242416,1495242423,EE
+1495242424,1495242431,FI
+1495242432,1495242439,SE
+1495242440,1495242751,FR
1495242752,1495244799,MK
1495244800,1495246847,CZ
1495246848,1495248895,IE
@@ -47384,7 +48643,7 @@
1495891968,1495927295,RO
1495927296,1495927551,AE
1495927552,1495937023,RO
-1495937024,1495937535,ES
+1495937024,1495937535,SE
1495937536,1495990271,RO
1495990272,1495994367,GB
1495994368,1496078335,RO
@@ -47417,9 +48676,7 @@
1500078080,1500086271,GB
1500086272,1500094463,RU
1500094464,1500102655,AT
-1500102656,1500104063,NL
-1500104064,1500104071,DE
-1500104072,1500106527,NL
+1500102656,1500106527,NL
1500106528,1500106559,DE
1500106560,1500107415,NL
1500107416,1500107423,DE
@@ -47431,8 +48688,8 @@
1500107944,1500107951,DE
1500107952,1500107999,NL
1500108000,1500108007,BE
-1500108008,1500108095,NL
-1500108096,1500108287,DE
+1500108008,1500108159,NL
+1500108160,1500108287,DE
1500108288,1500108319,NL
1500108320,1500108351,DE
1500108352,1500108367,NL
@@ -47563,9 +48820,7 @@
1502606336,1502609407,SI
1502609408,1502624030,DE
1502624031,1502624047,IR
-1502624048,1502624063,DE
-1502624064,1502624127,IR
-1502624128,1502625791,DE
+1502624048,1502625791,DE
1502625792,1502642175,SA
1502642176,1502658559,IR
1502658560,1502674943,AT
@@ -47574,9 +48829,15 @@
1502691680,1502691711,SE
1502691712,1502702835,GB
1502702836,1502702839,IE
-1502702840,1502706623,GB
+1502702840,1502703103,GB
+1502703104,1502703615,SE
+1502703616,1502706623,GB
1502706624,1502706687,CY
1502706688,1502707711,GB
+1502707712,1502715903,RU
+1502715904,1502717951,IT
+1502717952,1502719999,GB
+1502720000,1502722047,CH
1502724096,1502740479,GB
1502740480,1502756863,NL
1502756864,1502773247,UZ
@@ -47606,16 +48867,15 @@
1502975264,1502975295,GB
1502975296,1502975311,FR
1502975312,1502975319,IE
-1502975320,1502975327,FR
-1502975328,1502975367,IE
+1502975320,1502975359,FR
+1502975360,1502975367,IE
1502975368,1502975383,FR
1502975384,1502975391,ES
1502975392,1502975423,FR
1502975424,1502975455,GB
1502975456,1502975487,IE
1502975488,1502975743,ES
-1502975744,1502975775,IE
-1502975776,1502975999,FR
+1502975744,1502975999,FR
1502976000,1502977055,US
1502977056,1502977151,FR
1502977152,1502979071,US
@@ -47640,7 +48900,9 @@
1502986256,1502986495,TR
1502986496,1502986511,DE
1502986512,1502986751,PL
-1502986752,1502987775,DE
+1502986752,1502987535,DE
+1502987536,1502987551,AE
+1502987552,1502987775,DE
1502987776,1502988031,TR
1502988032,1502989055,DE
1502989056,1502989567,TR
@@ -47742,8 +49004,7 @@
1503898352,1503898359,CH
1503898360,1503898415,DE
1503898416,1503898423,BE
-1503898424,1503898431,CH
-1503898432,1503898503,DE
+1503898424,1503898503,DE
1503898504,1503898511,GR
1503898512,1503898567,DE
1503898568,1503898575,NL
@@ -47752,9 +49013,7 @@
1503898608,1503898615,GR
1503898616,1503898631,DE
1503898632,1503898647,GR
-1503898648,1503898679,DE
-1503898680,1503898687,IT
-1503898688,1503898791,DE
+1503898648,1503898791,DE
1503898792,1503898799,US
1503898800,1503898815,DE
1503898816,1503898831,GB
@@ -47792,7 +49051,16 @@
1503899336,1503899343,TH
1503899344,1503899351,DE
1503899352,1503899367,GR
-1503899368,1503908351,DE
+1503899368,1503899399,DE
+1503899400,1503899407,CH
+1503899408,1503899423,DE
+1503899424,1503899431,IT
+1503899432,1503899439,GR
+1503899440,1503899463,DE
+1503899464,1503899479,BR
+1503899480,1503899495,DE
+1503899496,1503899503,IT
+1503899504,1503908351,DE
1503908352,1503909375,IT
1503909376,1503920127,DE
1503920128,1503985663,HR
@@ -47875,12 +49143,12 @@
1505321664,1505321823,DE
1505321824,1505321831,AT
1505321832,1505321983,DE
-1505321984,1505322287,AT
-1505322288,1505322415,DE
-1505322416,1505322879,AT
-1505322880,1505324335,DE
-1505324336,1505324351,AT
-1505324352,1505324791,DE
+1505321984,1505322303,AT
+1505322304,1505322415,DE
+1505322416,1505322895,AT
+1505322896,1505324335,DE
+1505324336,1505324367,AT
+1505324368,1505324791,DE
1505324792,1505324799,AT
1505324800,1505325055,DE
1505325056,1505329151,AT
@@ -47897,11 +49165,15 @@
1505333624,1505333631,GB
1505333632,1505333887,IE
1505333888,1505333951,GB
-1505333952,1505336063,IE
+1505333952,1505335871,IE
+1505335872,1505335911,GB
+1505335912,1505336063,IE
1505336064,1505336071,GB
1505336072,1505336576,IE
1505336577,1505336639,GB
-1505336640,1505336823,IE
+1505336640,1505336655,IE
+1505336656,1505336663,GB
+1505336664,1505336823,IE
1505336824,1505336863,GB
1505336864,1505336864,IE
1505336865,1505336879,GB
@@ -47972,7 +49244,11 @@
1505456000,1505456079,US
1505456080,1505456127,GB
1505456128,1505456255,US
-1505456256,1505456639,GB
+1505456256,1505456343,GB
+1505456344,1505456347,US
+1505456348,1505456351,GB
+1505456352,1505456367,US
+1505456368,1505456639,GB
1505456640,1505456895,US
1505456896,1505456927,GB
1505456928,1505456935,US
@@ -47990,7 +49266,9 @@
1505458528,1505458543,GB
1505458544,1505458559,US
1505458560,1505460223,GB
-1505460224,1505476607,CZ
+1505460224,1505478655,CZ
+1505478656,1505482751,DE
+1505482752,1505484799,LB
1505484800,1505492991,PL
1505492992,1505501183,NL
1505501184,1505509375,ME
@@ -48056,21 +49334,33 @@
1506418704,1506418719,CA
1506418720,1506418975,DE
1506418976,1506418983,CA
-1506418984,1506422655,DE
+1506418984,1506422079,DE
+1506422080,1506422111,CY
+1506422112,1506422142,CA
+1506422143,1506422655,DE
1506422656,1506422687,CY
1506422688,1506422703,CA
-1506422704,1506422711,GB
-1506422712,1506422719,DE
+1506422704,1506422719,GB
1506422720,1506422751,US
-1506422752,1506427663,DE
+1506422752,1506427183,DE
+1506427184,1506427199,CA
+1506427200,1506427663,DE
1506427664,1506427679,GB
-1506427680,1506428223,DE
+1506427680,1506427743,DE
+1506427744,1506427759,CA
+1506427760,1506428223,DE
1506428224,1506428239,US
-1506428240,1506437119,DE
+1506428240,1506436863,DE
+1506436864,1506436879,FR
+1506436880,1506436883,GB
+1506436884,1506437119,DE
1506437120,1506437503,US
1506437504,1506437551,DE
1506437552,1506437567,BG
-1506437568,1506437631,DE
+1506437568,1506437583,DE
+1506437584,1506437615,NL
+1506437616,1506437623,US
+1506437624,1506437631,DE
1506437632,1506437887,MU
1506437888,1506437903,CA
1506437904,1506437919,US
@@ -48100,7 +49390,9 @@
1506439464,1506439471,GB
1506439472,1506439571,DE
1506439572,1506439575,US
-1506439576,1506439935,DE
+1506439576,1506439579,DE
+1506439580,1506439583,NL
+1506439584,1506439935,DE
1506439936,1506440191,US
1506440192,1506440447,DE
1506440448,1506440575,US
@@ -48174,19 +49466,21 @@
1506445528,1506445703,FR
1506445704,1506445711,NL
1506445712,1506445719,GB
-1506445720,1506445759,FR
+1506445720,1506445727,FR
+1506445728,1506445735,GB
+1506445736,1506445759,FR
1506445760,1506445767,GB
1506445768,1506445815,FR
1506445816,1506445823,GB
1506445824,1506446143,FR
1506446144,1506446151,GB
1506446152,1506446335,FR
-1506446336,1506446591,NL
-1506446592,1506446735,GB
+1506446336,1506446719,NL
+1506446720,1506446735,GB
1506446736,1506447359,NL
1506447360,1506447423,IT
-1506447424,1506447455,GB
-1506447456,1506448255,IT
+1506447424,1506447463,GB
+1506447464,1506448255,IT
1506448256,1506448319,GB
1506448320,1506448383,IT
1506448384,1506448639,AT
@@ -48236,8 +49530,7 @@
1506452992,1506453247,AT
1506453248,1506453391,SE
1506453392,1506453399,ES
-1506453400,1506453407,GB
-1506453408,1506453415,SE
+1506453400,1506453415,SE
1506453416,1506453423,GB
1506453424,1506453439,SE
1506453440,1506453447,GB
@@ -48245,7 +49538,9 @@
1506453472,1506453487,GB
1506453488,1506453503,SE
1506453504,1506453759,DE
-1506453760,1506454015,FR
+1506453760,1506453823,FR
+1506453824,1506453839,GB
+1506453840,1506454015,FR
1506454016,1506454271,AT
1506454272,1506454527,ES
1506454528,1506454783,IT
@@ -48295,8 +49590,7 @@
1506462528,1506462583,GB
1506462584,1506462599,FR
1506462600,1506462607,GB
-1506462608,1506462623,A2
-1506462624,1506462719,FR
+1506462608,1506462719,FR
1506462720,1506463231,IT
1506463232,1506463487,SE
1506463488,1506463671,DE
@@ -48313,7 +49607,11 @@
1506466632,1506467071,GB
1506467072,1506467327,DE
1506467328,1506467583,GB
-1506467584,1506468351,IT
+1506467584,1506467591,IT
+1506467592,1506467615,GB
+1506467616,1506467647,IT
+1506467648,1506467839,GB
+1506467840,1506468351,IT
1506468352,1506468607,GB
1506468608,1506468863,TZ
1506468864,1506470143,IT
@@ -48337,8 +49635,8 @@
1506474256,1506474495,IT
1506474496,1506474751,FR
1506474752,1506475519,IT
-1506475520,1506475559,AT
-1506475560,1506475775,GB
+1506475520,1506475567,AT
+1506475568,1506475775,GB
1506475776,1506476031,DE
1506476032,1506508799,KW
1506508800,1506541567,CZ
@@ -48355,8 +49653,7 @@
1506743168,1506743183,DE
1506743184,1506743199,FR
1506743200,1506743215,IE
-1506743216,1506743232,GB
-1506743233,1506744319,SE
+1506743216,1506744319,SE
1506744320,1506744383,NL
1506744384,1506744391,GB
1506744392,1506746367,NL
@@ -48372,7 +49669,13 @@
1506767616,1506767679,NO
1506767680,1506768895,GE
1506768896,1506770943,AT
-1506770944,1506772017,NL
+1506770944,1506771468,NL
+1506771469,1506771469,US
+1506771470,1506771489,NL
+1506771490,1506771498,US
+1506771499,1506771645,NL
+1506771646,1506771655,US
+1506771656,1506772017,NL
1506772018,1506772018,US
1506772019,1506772143,NL
1506772144,1506772145,TR
@@ -48380,8 +49683,7 @@
1506772148,1506772176,TR
1506772177,1506772323,NL
1506772324,1506772325,IR
-1506772326,1506772327,RO
-1506772328,1506772361,NL
+1506772326,1506772361,NL
1506772362,1506772364,IR
1506772365,1506772938,NL
1506772939,1506772939,IR
@@ -48400,9 +49702,7 @@
1506795520,1506797567,IE
1506797568,1506799615,ES
1506799616,1506801663,LV
-1506801664,1506802767,DE
-1506802768,1506802775,DK
-1506802776,1506802831,DE
+1506801664,1506802831,DE
1506802832,1506802839,CH
1506802840,1506803135,DE
1506803136,1506803151,CH
@@ -48455,7 +49755,9 @@
1507713024,1507717119,RU
1507717120,1507717631,SE
1507717632,1507718911,NO
-1507718912,1507721215,SE
+1507718912,1507720191,SE
+1507720192,1507720447,NO
+1507720448,1507721215,SE
1507721216,1507753983,GB
1507753984,1507819519,RU
1507819520,1507852287,HU
@@ -48520,9 +49822,7 @@
1508787200,1508787455,ES
1508787456,1508788031,DE
1508788032,1508788063,BE
-1508788064,1508792063,DE
-1508792064,1508792318,GB
-1508792319,1508802559,DE
+1508788064,1508802559,DE
1508802560,1508804783,GB
1508804784,1508804791,DE
1508804792,1508805119,GB
@@ -48563,9 +49863,7 @@
1509467840,1509467871,PL
1509467872,1509469055,NL
1509469056,1509469183,PL
-1509469184,1509469439,NL
-1509469440,1509469567,SE
-1509469568,1509469887,NL
+1509469184,1509469887,NL
1509469888,1509469919,MY
1509469920,1509470207,NL
1509470208,1509478399,RU
@@ -48599,9 +49897,7 @@
1509580800,1509584895,CZ
1509584896,1509588479,NO
1509588480,1509588607,GB
-1509588608,1509588751,NO
-1509588752,1509588767,GB
-1509588768,1509588991,NO
+1509588608,1509588991,NO
1509588992,1509593087,DE
1509593088,1509601279,RU
1509601280,1509605375,NL
@@ -48643,7 +49939,9 @@
1509900288,1509916671,RU
1509916672,1509933055,GB
1509933056,1509949439,US
-1509949440,1515467007,FR
+1509949440,1515241759,FR
+1515241760,1515241791,GB
+1515241792,1515467007,FR
1515467008,1515467263,ES
1515467264,1515467519,FR
1515467520,1515468031,US
@@ -48663,7 +49961,9 @@
1518370816,1518403583,NL
1518403584,1518452735,SE
1518452736,1518460927,AT
-1518460928,1518501887,SE
+1518460928,1518479359,SE
+1518479360,1518481407,EE
+1518481408,1518501887,SE
1518501888,1518503935,EE
1518503936,1518508799,LT
1518508800,1518510079,SE
@@ -48916,10 +50216,10 @@
1533421568,1533423615,NL
1533423616,1533425663,IT
1533425664,1533429759,GB
+1533429760,1533431807,RU
1533431808,1533433855,IE
1533433856,1533435903,DK
1533435904,1533437951,CZ
-1533437952,1533439999,RU
1533440000,1533441519,PL
1533441520,1533441535,CH
1533441536,1533442047,PL
@@ -49071,8 +50371,10 @@
1534714880,1534714895,PL
1534714896,1534714911,FR
1534714912,1534714927,DE
-1534714928,1534714943,FR
-1534714944,1534714975,DE
+1534714928,1534714931,BE
+1534714932,1534714935,DE
+1534714936,1534714939,GB
+1534714940,1534714975,DE
1534714976,1534715039,FR
1534715040,1534715055,GB
1534715056,1534715071,PL
@@ -49093,7 +50395,7 @@
1534715300,1534715303,FR
1534715304,1534715307,ES
1534715308,1534715311,DE
-1534715312,1534715315,FR
+1534715312,1534715315,PL
1534715316,1534715319,ES
1534715320,1534715327,PL
1534715328,1534715359,FR
@@ -49101,7 +50403,8 @@
1534715368,1534715371,FR
1534715372,1534715375,CH
1534715376,1534715391,ES
-1534715392,1534715407,PL
+1534715392,1534715399,PL
+1534715400,1534715407,FR
1534715408,1534715411,GB
1534715412,1534715415,FI
1534715416,1534715419,DE
@@ -49136,31 +50439,36 @@
1534715784,1534715791,BE
1534715792,1534715807,ES
1534715808,1534715875,FR
-1534715876,1534715879,NL
+1534715876,1534715879,GB
1534715880,1534715883,PT
1534715884,1534715887,PL
1534715888,1534715919,FR
1534715920,1534715935,ES
1534715936,1534715951,PL
1534715952,1534715999,FR
-1534716000,1534716007,PL
+1534716000,1534716007,NL
1534716008,1534716047,FR
1534716048,1534716063,GB
1534716064,1534716127,FR
1534716128,1534716143,ES
1534716144,1534716159,PL
1534716160,1534716163,IT
-1534716164,1534716167,FR
+1534716164,1534716167,FI
1534716168,1534716175,IE
1534716176,1534716191,FR
1534716192,1534716223,ES
1534716224,1534716239,FR
1534716240,1534716255,GB
1534716256,1534716319,FR
-1534716320,1534716359,PL
-1534716360,1534716363,CZ
+1534716320,1534716351,PL
+1534716352,1534716355,FR
+1534716356,1534716359,PL
+1534716360,1534716363,FR
1534716364,1534716367,GB
-1534716368,1534716391,FR
+1534716368,1534716375,BE
+1534716376,1534716379,CH
+1534716380,1534716383,PL
+1534716384,1534716391,FR
1534716392,1534716395,ES
1534716396,1534716399,GB
1534716400,1534716431,FR
@@ -49168,8 +50476,8 @@
1534716448,1534716479,FR
1534716480,1534716495,ES
1534716496,1534716575,FR
-1534716576,1534716607,PL
-1534716608,1534716639,FR
+1534716576,1534716591,PL
+1534716592,1534716639,FR
1534716640,1534716647,BE
1534716648,1534716655,FR
1534716656,1534716663,IE
@@ -49181,7 +50489,12 @@
1534716752,1534716759,PL
1534716760,1534716763,DE
1534716764,1534716767,ES
-1534716768,1534716823,FR
+1534716768,1534716799,FR
+1534716800,1534716803,DE
+1534716804,1534716807,PL
+1534716808,1534716811,NL
+1534716812,1534716815,DE
+1534716816,1534716823,FR
1534716824,1534716831,GB
1534716832,1534716879,FR
1534716880,1534716895,BE
@@ -49191,8 +50504,12 @@
1534716928,1534716943,DE
1534716944,1534716991,FR
1534716992,1534717007,DE
-1534717008,1534717023,FR
-1534717024,1534717055,PL
+1534717008,1534717011,PL
+1534717012,1534717019,FR
+1534717020,1534717023,DE
+1534717024,1534717039,GB
+1534717040,1534717047,PL
+1534717048,1534717055,FR
1534717056,1534717071,GB
1534717072,1534717103,FR
1534717104,1534717119,PL
@@ -49201,7 +50518,9 @@
1534717140,1534717143,BE
1534717144,1534717147,FR
1534717148,1534717151,IT
-1534717152,1534717247,FR
+1534717152,1534717215,FR
+1534717216,1534717219,ES
+1534717220,1534717247,FR
1534717248,1534717251,CZ
1534717252,1534717255,NL
1534717256,1534717263,FR
@@ -49240,7 +50559,9 @@
1534717740,1534717743,PL
1534717744,1534717751,FR
1534717752,1534717759,BE
-1534717760,1534717783,FR
+1534717760,1534717767,FR
+1534717768,1534717771,IT
+1534717772,1534717783,FR
1534717784,1534717787,GB
1534717788,1534717791,DE
1534717792,1534717823,FR
@@ -49254,15 +50575,19 @@
1534717920,1534717923,PL
1534717924,1534717927,ES
1534717928,1534717931,DE
-1534717932,1534717935,FR
-1534717936,1534717951,IT
-1534717952,1534717967,BE
+1534717932,1534717951,FR
+1534717952,1534717955,DE
+1534717956,1534717959,FR
+1534717960,1534717963,PT
+1534717964,1534717967,CH
1534717968,1534717983,IT
1534717984,1534717987,PL
1534717988,1534717991,DE
1534717992,1534717995,NL
1534717996,1534717999,GB
-1534718000,1534718015,FR
+1534718000,1534718007,ES
+1534718008,1534718011,PL
+1534718012,1534718015,FR
1534718016,1534718031,BE
1534718032,1534718063,FR
1534718064,1534718079,IT
@@ -49281,12 +50606,13 @@
1534718416,1534718419,CZ
1534718420,1534718423,GB
1534718424,1534718431,ES
-1534718432,1534718447,PL
+1534718432,1534718435,GB
+1534718436,1534718439,DE
+1534718440,1534718447,ES
1534718448,1534718463,FR
1534718464,1534718467,DE
1534718468,1534718471,PT
-1534718472,1534718479,FR
-1534718480,1534718487,PL
+1534718472,1534718487,PL
1534718488,1534718495,DE
1534718496,1534718531,FR
1534718532,1534718535,PL
@@ -49295,15 +50621,19 @@
1534718544,1534718559,FR
1534718560,1534718575,BE
1534718576,1534718591,GB
-1534718592,1534718687,FR
+1534718592,1534718623,FR
+1534718624,1534718631,PL
+1534718632,1534718687,FR
1534718688,1534718703,PL
1534718704,1534718711,FR
1534718712,1534718719,ES
1534718720,1534718735,GB
-1534718736,1534718751,FR
-1534718752,1534718767,PL
-1534718768,1534718799,FR
-1534718800,1534718815,ES
+1534718736,1534718739,NL
+1534718740,1534718759,FR
+1534718760,1534718763,PL
+1534718764,1534718767,IE
+1534718768,1534718783,FR
+1534718784,1534718815,ES
1534718816,1534718831,GB
1534718832,1534718847,FR
1534718848,1534718911,BE
@@ -49324,8 +50654,7 @@
1534719392,1534719395,CH
1534719396,1534719399,PT
1534719400,1534719403,IT
-1534719404,1534719423,FR
-1534719424,1534719439,DE
+1534719404,1534719439,FR
1534719440,1534719459,PL
1534719460,1534719463,FR
1534719464,1534719471,PL
@@ -49340,9 +50669,14 @@
1534719696,1534719699,IT
1534719700,1534719703,DE
1534719704,1534719711,GB
-1534719712,1534719759,FR
+1534719712,1534719747,FR
+1534719748,1534719751,PL
+1534719752,1534719759,FR
1534719760,1534719775,IT
-1534719776,1534719799,FR
+1534719776,1534719783,PL
+1534719784,1534719787,FR
+1534719788,1534719791,DE
+1534719792,1534719799,FR
1534719800,1534719803,ES
1534719804,1534719807,GB
1534719808,1534719811,PL
@@ -49352,9 +50686,7 @@
1534719824,1534719827,PT
1534719828,1534719831,FR
1534719832,1534719839,PL
-1534719840,1534719871,FR
-1534719872,1534719887,PL
-1534719888,1534719951,FR
+1534719840,1534719951,FR
1534719952,1534719967,DE
1534719968,1534719983,PL
1534719984,1534720003,FR
@@ -49362,9 +50694,7 @@
1534720008,1534720015,PL
1534720016,1534720023,ES
1534720024,1534720027,PL
-1534720028,1534720031,ES
-1534720032,1534720047,FR
-1534720048,1534720063,ES
+1534720028,1534720063,ES
1534720064,1534720079,IT
1534720080,1534720095,GB
1534720096,1534720111,FR
@@ -49383,7 +50713,13 @@
1534720300,1534720351,FR
1534720352,1534720367,ES
1534720368,1534720383,PL
-1534720384,1534720431,FR
+1534720384,1534720399,FR
+1534720400,1534720403,LT
+1534720404,1534720411,GB
+1534720412,1534720415,IE
+1534720416,1534720419,ES
+1534720420,1534720423,DE
+1534720424,1534720431,ES
1534720432,1534720435,DE
1534720436,1534720439,FR
1534720440,1534720443,GB
@@ -49414,7 +50750,8 @@
1534720744,1534720747,IE
1534720748,1534720767,FR
1534720768,1534720783,ES
-1534720784,1534720791,PL
+1534720784,1534720787,FR
+1534720788,1534720791,DE
1534720792,1534720795,IT
1534720796,1534720799,ES
1534720800,1534720815,PL
@@ -49438,15 +50775,16 @@
1534721000,1534721003,FI
1534721004,1534721007,GB
1534721008,1534721023,ES
-1534721024,1534721055,FR
+1534721024,1534721031,DE
+1534721032,1534721055,FR
1534721056,1534721063,ES
1534721064,1534721071,FR
1534721072,1534721087,GB
1534721088,1534721103,ES
1534721104,1534721107,PL
1534721108,1534721111,ES
-1534721112,1534721115,FR
-1534721116,1534721119,BE
+1534721112,1534721115,DE
+1534721116,1534721119,FR
1534721120,1534721135,IT
1534721136,1534721159,FR
1534721160,1534721163,ES
@@ -49479,13 +50817,18 @@
1534721528,1534721531,ES
1534721532,1534721567,FR
1534721568,1534721583,GB
-1534721584,1534721599,FR
-1534721600,1534721619,ES
+1534721584,1534721587,IE
+1534721588,1534721595,FR
+1534721596,1534721619,ES
1534721620,1534721627,PL
1534721628,1534721631,NL
-1534721632,1534721663,FR
+1534721632,1534721647,ES
+1534721648,1534721663,FR
1534721664,1534721679,ES
-1534721680,1534721743,FR
+1534721680,1534721695,FR
+1534721696,1534721703,PL
+1534721704,1534721711,DE
+1534721712,1534721743,FR
1534721744,1534721747,PL
1534721748,1534721751,GB
1534721752,1534721755,DE
@@ -49499,7 +50842,7 @@
1534721888,1534721903,FR
1534721904,1534721919,DE
1534721920,1534721935,FR
-1534721936,1534721943,IT
+1534721936,1534721943,CH
1534721944,1534721951,IE
1534721952,1534721955,FR
1534721956,1534721959,PL
@@ -49508,7 +50851,9 @@
1534721968,1534721971,DE
1534721972,1534721975,PL
1534721976,1534721979,ES
-1534721980,1534722007,PL
+1534721980,1534721983,PL
+1534721984,1534721999,FR
+1534722000,1534722007,PL
1534722008,1534722011,PT
1534722012,1534722015,ES
1534722016,1534722039,FR
@@ -49569,7 +50914,9 @@
1535635456,1535639551,AZ
1535639552,1535672319,GB
1535672320,1535705087,DE
-1535705088,1535720447,CH
+1535705088,1535708671,CH
+1535708672,1535709694,DE
+1535709695,1535720447,CH
1535720448,1535720575,DE
1535720576,1535720703,CH
1535720704,1535720831,DE
@@ -49645,7 +50992,7 @@
1536118784,1536122879,DE
1536122880,1536126975,AT
1536126976,1536131071,DK
-1536131072,1536143359,RU
+1536131072,1536139263,RU
1536143360,1536147455,GB
1536147456,1536151551,IT
1536151552,1536155647,RS
@@ -49660,6 +51007,10 @@
1536262144,1536278527,PL
1536278528,1536294911,UA
1536294912,1536311295,RU
+1536311296,1536319487,EE
+1536319488,1536321535,ES
+1536321536,1536325631,GB
+1536325632,1536327679,CZ
1536327680,1536344063,HU
1536344064,1536360447,PL
1536360448,1536376831,RU
@@ -49719,7 +51070,7 @@
1536663360,1536663423,DE
1536663424,1536663551,KW
1536663552,1536667647,SA
-1536671744,1536675839,RU
+1536667648,1536675839,RU
1536675840,1536679935,GB
1536679936,1536684031,LB
1536684032,1536688127,GB
@@ -49749,8 +51100,8 @@
1538897720,1538897727,GB
1538897728,1538897735,NL
1538897736,1538897919,FR
-1538897920,1538898175,DE
-1538898176,1538899967,FR
+1538897920,1538898431,DE
+1538898432,1538899967,FR
1538899968,1538904031,SI
1538904032,1538904039,BH
1538904040,1538908159,SI
@@ -49875,6 +51226,9 @@
1539227648,1539229695,FI
1539229696,1539231743,DE
1539231744,1539233791,BE
+1539233792,1539234303,LU
+1539234304,1539234559,IE
+1539234560,1539235839,LU
1539235840,1539237887,DE
1539237888,1539239935,RU
1539239936,1539244031,DE
@@ -49896,6 +51250,7 @@
1539314688,1539315711,RU
1539315712,1539316735,UA
1539316736,1539317759,SE
+1539317760,1539318783,CZ
1539318784,1539319807,NL
1539319808,1539320831,DE
1539320832,1539321855,UA
@@ -49950,6 +51305,7 @@
1539379200,1539380223,EU
1539380224,1539381247,CH
1539381248,1539382271,RS
+1539382272,1539383295,RO
1539383296,1539384319,UA
1539384320,1539385343,RU
1539385344,1539385855,PL
@@ -50077,6 +51433,7 @@
1539482112,1539482623,UA
1539482624,1539483135,RU
1539483136,1539483647,ES
+1539483648,1539484159,UA
1539484160,1539484671,GB
1539484672,1539485695,RU
1539485696,1539486207,RO
@@ -50117,7 +51474,7 @@
1539506688,1539507199,UA
1539507200,1539508223,RO
1539508224,1539508735,NO
-1539508736,1539509759,UA
+1539508736,1539509247,UA
1539509760,1539510271,RO
1539510272,1539510783,RU
1539510784,1539511295,LU
@@ -50172,8 +51529,7 @@
1539536384,1539536895,NL
1539536896,1539537407,UA
1539537408,1539537919,GB
-1539537920,1539539455,RU
-1539539968,1539540479,RU
+1539537920,1539540479,RU
1539540480,1539540991,PL
1539540992,1539541503,RU
1539541504,1539542015,TR
@@ -50249,8 +51605,11 @@
1539589120,1539590143,GB
1539590144,1539591167,RU
1539591168,1539592191,UZ
-1539592192,1539598335,UA
+1539592192,1539593215,UA
+1539593216,1539594239,RU
+1539594240,1539598335,UA
1539598336,1539599359,NL
+1539599360,1539600383,PL
1539600384,1539601407,HU
1539601408,1539602431,GB
1539602432,1539603455,UA
@@ -50351,7 +51710,6 @@
1539706624,1539707135,PL
1539707136,1539707391,LT
1539707392,1539707647,GB
-1539707648,1539707903,RO
1539707904,1539708159,UA
1539708160,1539708415,DE
1539708416,1539708671,GB
@@ -50511,6 +51869,7 @@
1539750400,1539750655,PL
1539750656,1539750911,DE
1539750912,1539751167,UA
+1539751168,1539751423,AT
1539751424,1539751679,SI
1539751680,1539751935,FR
1539751936,1539752191,DE
@@ -50536,7 +51895,6 @@
1539757568,1539757823,SI
1539757824,1539758079,UA
1539758080,1539758335,HR
-1539758336,1539758591,EU
1539758592,1539758847,NL
1539758848,1539759103,BA
1539759104,1539759359,DK
@@ -50565,6 +51923,7 @@
1539764992,1539765247,BE
1539765248,1539765503,GB
1539765504,1539766015,PL
+1539766016,1539766271,UA
1539766272,1539766527,PL
1539766528,1539766783,UA
1539766784,1539767039,DE
@@ -50623,6 +51982,7 @@
1539780608,1539780863,PL
1539780864,1539781119,RO
1539781120,1539781375,NL
+1539781376,1539781631,PL
1539781632,1539781887,HU
1539781888,1539782143,IL
1539782144,1539782399,UA
@@ -50645,6 +52005,7 @@
1539786752,1539787007,HU
1539787008,1539787263,TR
1539787264,1539787519,IE
+1539787520,1539787775,DE
1539787776,1539788031,CH
1539788032,1539788287,HR
1539788288,1539788543,GB
@@ -50735,6 +52096,7 @@
1539812096,1539812351,RU
1539812352,1539812607,CH
1539812608,1539812863,IT
+1539812864,1539813119,RU
1539813120,1539813375,AT
1539813376,1539813631,PL
1539813632,1539813887,NL
@@ -50829,7 +52191,6 @@
1539857408,1539858431,PL
1539858432,1539859455,RO
1539859456,1539860479,DE
-1539860480,1539861503,UA
1539861504,1539862527,DE
1539862528,1539863551,UA
1539863552,1539864575,ES
@@ -50906,7 +52267,6 @@
1539947520,1539948543,UA
1539948544,1539949567,RO
1539949568,1539950591,MD
-1539950592,1539951103,KZ
1539951104,1539951615,UA
1539951616,1539953663,RU
1539953664,1539954687,UA
@@ -50924,6 +52284,7 @@
1539975168,1539976191,DE
1539976192,1539977215,RU
1539977216,1539978239,DE
+1539978240,1539979263,CZ
1539979264,1539980287,UA
1539980288,1539981311,VG
1539981312,1539982335,SI
@@ -50964,7 +52325,7 @@
1540025344,1540026367,GB
1540026368,1540028415,UA
1540028416,1540029439,ES
-1540029440,1540030463,RU
+1540029440,1540031487,RU
1540031488,1540032511,UA
1540032512,1540033535,RU
1540033536,1540034559,UA
@@ -51015,7 +52376,7 @@
1540081664,1540082687,DE
1540082688,1540083711,NO
1540083712,1540084735,RU
-1540084736,1540085759,LU
+1540084736,1540085759,NL
1540085760,1540087807,PL
1540087808,1540092927,RU
1540092928,1540094975,PL
@@ -51035,6 +52396,7 @@
1540118528,1540119551,PL
1540119552,1540120575,UA
1540120576,1540124671,RU
+1540124672,1540125695,UA
1540125696,1540126719,FR
1540126720,1540127743,UA
1540127744,1540128767,GB
@@ -51109,6 +52471,7 @@
1540206592,1540208639,RU
1540208640,1540209663,NO
1540209664,1540211711,RU
+1540211712,1540212735,RO
1540212736,1540213759,RU
1540213760,1540214783,UA
1540214784,1540215807,RU
@@ -51158,6 +52521,8 @@
1540248576,1540249087,GB
1540249088,1540249599,PL
1540249600,1540250111,KZ
+1540250112,1540250367,PL
+1540250368,1540250623,CZ
1540250624,1540251135,RU
1540251136,1540251647,GB
1540251648,1540252159,PL
@@ -51355,6 +52720,7 @@
1540361472,1540361727,DE
1540361728,1540361983,IT
1540361984,1540362239,EE
+1540362240,1540362495,RU
1540362496,1540363007,DE
1540363008,1540363263,FR
1540363264,1540363519,RU
@@ -51636,7 +53002,7 @@
1540440064,1540440319,UA
1540440320,1540440575,RU
1540440576,1540440831,MD
-1540440832,1540441087,FR
+1540440832,1540441087,GB
1540441088,1540441343,PL
1540441344,1540441855,RU
1540441856,1540442111,GB
@@ -51714,13 +53080,14 @@
1540462592,1540463103,PL
1540463104,1540463359,FR
1540463360,1540463615,PL
+1540463616,1540463871,DK
1540463872,1540464127,UA
1540464128,1540464383,CH
1540464384,1540464895,DE
1540464896,1540465407,GB
1540465408,1540465663,ES
1540465664,1540465919,NL
-1540465920,1540466175,UA
+1540465920,1540466175,RU
1540466176,1540466431,DK
1540466432,1540466687,RU
1540466688,1540466943,NL
@@ -51797,12 +53164,13 @@
1540487168,1540487423,PS
1540487424,1540487679,UA
1540487680,1540487935,DE
-1540487936,1540488447,GB
+1540488192,1540488447,GB
1540488448,1540488703,SA
1540488704,1540488959,DE
1540488960,1540489215,RO
1540489216,1540491263,RU
1540491264,1540492287,UA
+1540492288,1540493311,PL
1540493312,1540494335,CZ
1540494336,1540495359,UA
1540495360,1540496383,RU
@@ -51813,12 +53181,14 @@
1540502528,1540503551,RU
1540503552,1540504575,NL
1540504576,1540505599,SE
+1540505600,1540506623,RO
1540506624,1540507647,GB
1540507648,1540508671,RU
1540508672,1540509695,UA
1540509696,1540510719,RO
1540510720,1540511743,RU
1540511744,1540512767,BG
+1540512768,1540513791,RU
1540513792,1540514815,UA
1540514816,1540515839,GB
1540515840,1540516863,RU
@@ -51907,6 +53277,7 @@
1540621824,1540622335,RU
1540622336,1540622591,KW
1540622592,1540622847,PL
+1540622848,1540623103,RU
1540623104,1540623359,SE
1540623360,1540623615,GB
1540623616,1540623871,BG
@@ -51949,7 +53320,7 @@
1540633088,1540633343,RU
1540633344,1540633599,CH
1540633600,1540633855,RO
-1540633856,1540634367,GB
+1540634112,1540634367,GB
1540634368,1540634623,FR
1540634624,1540634879,UA
1540634880,1540635135,RU
@@ -52015,12 +53386,11 @@
1540651520,1540651775,MK
1540651776,1540652031,RU
1540652032,1540652543,UA
-1540652800,1540653055,EU
+1540652544,1540652799,TR
1540653056,1540653311,FR
1540653312,1540653567,DK
1540653568,1540653823,DE
1540653824,1540654079,GB
-1540654080,1540654335,RS
1540654336,1540654591,RU
1540654592,1540654847,SI
1540654848,1540655103,RU
@@ -52039,9 +53409,7 @@
1540659200,1540659455,FR
1540659456,1540659967,UA
1540659968,1540660223,PL
-1540660224,1540660479,UA
1540660480,1540660735,FR
-1540660736,1540660991,UA
1540660992,1540661247,RO
1540661248,1540661503,GB
1540661504,1540662015,RO
@@ -52086,7 +53454,7 @@
1540673280,1540673535,SE
1540673536,1540673791,SI
1540673792,1540674047,SE
-1540674048,1540674303,GB
+1540674048,1540674303,NL
1540674304,1540674559,FR
1540674560,1540674815,GB
1540674816,1540675071,GE
@@ -52208,7 +53576,7 @@
1540706304,1540706559,SI
1540706560,1540706815,GB
1540706816,1540707071,FR
-1540707072,1540707583,GB
+1540707328,1540707583,GB
1540707584,1540707839,NL
1540707840,1540708095,MD
1540708096,1540708351,RU
@@ -52245,6 +53613,7 @@
1540717312,1540717823,PL
1540717824,1540718079,UA
1540718080,1540718335,RU
+1540718336,1540718591,NO
1540718592,1540718847,CH
1540718848,1540719103,IT
1540719104,1540719359,RU
@@ -52414,7 +53783,7 @@
1540817920,1540818943,NL
1540818944,1540819967,UA
1540819968,1540820991,CZ
-1540820992,1540822015,RU
+1540820992,1540823039,RU
1540823040,1540824063,UA
1540824064,1540825087,RU
1540825088,1540826111,PL
@@ -52506,7 +53875,7 @@
1540893952,1540894207,DE
1540894208,1540894463,RU
1540894464,1540894719,RO
-1540894976,1540895487,RU
+1540894720,1540895487,RU
1540895488,1540895743,PL
1540895744,1540895999,RO
1540896000,1540896255,RU
@@ -52567,6 +53936,7 @@
1540911104,1540911359,GB
1540911360,1540911615,NL
1540911616,1540911871,RU
+1540911872,1540912127,PL
1540912128,1540912383,GB
1540912384,1540912639,PT
1540912640,1540912895,DK
@@ -52634,7 +54004,7 @@
1540930560,1540930815,KW
1540930816,1540931071,KZ
1540931072,1540931327,EU
-1540931328,1540931583,PL
+1540931328,1540931839,PL
1540931840,1540932095,GB
1540932096,1540932351,PL
1540932352,1540932607,FR
@@ -52670,7 +54040,7 @@
1540940800,1540941055,FR
1540941056,1540941311,CH
1540941312,1540941567,AT
-1540941568,1540941823,UA
+1540941568,1540942079,UA
1540942080,1540942335,RO
1540942336,1540942591,FR
1540942592,1540942847,DE
@@ -52729,7 +54099,7 @@
1540966912,1540967935,RU
1540967936,1540968447,UA
1540968448,1540969471,RO
-1540969472,1540969983,GB
+1540969472,1540969983,NL
1540969984,1540970495,DE
1540970496,1540971007,IE
1540971008,1540971519,UA
@@ -52880,6 +54250,7 @@
1541027840,1541028863,RU
1541028864,1541029887,PL
1541029888,1541030911,UA
+1541030912,1541031935,PL
1541031936,1541032959,UA
1541032960,1541033983,PL
1541033984,1541035007,BG
@@ -53076,7 +54447,6 @@
1541171968,1541172223,SI
1541172224,1541172479,GR
1541172480,1541172735,RU
-1541172736,1541172991,RO
1541172992,1541173247,BE
1541173248,1541173503,RU
1541173504,1541173759,UA
@@ -53264,7 +54634,7 @@
1541236736,1541237247,DE
1541237248,1541237759,RU
1541237760,1541238271,CZ
-1541238784,1541239295,SK
+1541238272,1541239295,SK
1541239296,1541239807,PL
1541239808,1541240319,RU
1541240320,1541240831,CH
@@ -53334,6 +54704,7 @@
1541275136,1541275647,FR
1541275648,1541276671,UA
1541276672,1541277695,RS
+1541277696,1541278719,GB
1541278720,1541280767,UA
1541280768,1541281791,BG
1541281792,1541282815,PL
@@ -53548,6 +54919,7 @@
1541384704,1541384959,RU
1541384960,1541385215,PL
1541385216,1541385471,NL
+1541385472,1541385727,SK
1541385728,1541385983,SI
1541385984,1541386239,PL
1541386240,1541386495,RU
@@ -53575,7 +54947,7 @@
1541391872,1541392127,DE
1541392128,1541392383,RU
1541392384,1541392639,RO
-1541392640,1541392895,TR
+1541392640,1541392895,MD
1541392896,1541393151,DE
1541393152,1541393407,GB
1541393408,1541393663,DE
@@ -53593,7 +54965,6 @@
1541396480,1541396735,UA
1541396736,1541396991,RU
1541396992,1541397247,GB
-1541397248,1541397503,FR
1541397504,1541397759,NL
1541397760,1541398015,PL
1541398016,1541398271,HU
@@ -53731,6 +55102,7 @@
1541467136,1541467647,PL
1541467648,1541468159,SI
1541468160,1541468671,ES
+1541468672,1541469183,NL
1541469184,1541469695,SE
1541469696,1541470207,LV
1541470208,1541470719,NL
@@ -53802,6 +55174,7 @@
1541547520,1541548543,PL
1541548544,1541549567,UA
1541549568,1541550079,DE
+1541550080,1541550591,RU
1541550592,1541551103,PL
1541551104,1541552127,RO
1541552128,1541553151,UA
@@ -53832,7 +55205,9 @@
1541569536,1541570559,NL
1541570560,1541571583,RU
1541571584,1541572607,UA
-1541572608,1541574655,RU
+1541572608,1541573119,RU
+1541573120,1541573631,UA
+1541573632,1541574655,RU
1541574656,1541575167,DK
1541575168,1541575423,PL
1541575424,1541575679,IT
@@ -53849,6 +55224,7 @@
1541583360,1541583615,RU
1541583616,1541583871,GE
1541583872,1541584127,SE
+1541584128,1541584383,GB
1541584384,1541584895,BE
1541584896,1541585151,DE
1541585152,1541585663,RU
@@ -53861,6 +55237,7 @@
1541589248,1541589503,UA
1541589504,1541590015,CH
1541590016,1541590527,RU
+1541590528,1541590783,GB
1541590784,1541591039,UA
1541591040,1541592063,RU
1541592064,1541592575,UA
@@ -53872,6 +55249,7 @@
1541595648,1541596159,BG
1541596160,1541597695,PL
1541597696,1541597951,RU
+1541597952,1541598207,AM
1541598208,1541599231,PL
1541599232,1541600255,RS
1541600256,1541600511,HR
@@ -53916,7 +55294,7 @@
1541622528,1541622783,NL
1541622784,1541623295,PL
1541623296,1541623551,GB
-1541623552,1541623679,RU
+1541623552,1541623807,RU
1541623808,1541624831,PL
1541624832,1541625855,RU
1541625856,1541626367,PL
@@ -53936,6 +55314,7 @@
1541633024,1541634303,PL
1541634304,1541634559,MD
1541634560,1541635071,PL
+1541635072,1541636095,GB
1541636096,1541636863,AT
1541636864,1541637119,RO
1541637120,1541637631,PL
@@ -53951,6 +55330,7 @@
1541643264,1541644287,PL
1541644288,1541645311,RU
1541645312,1541645823,IL
+1541645824,1541646079,RO
1541646080,1541646335,PL
1541646336,1541646847,RU
1541646848,1541647359,NO
@@ -54001,6 +55381,7 @@
1541674496,1541675007,KG
1541675008,1541675519,IE
1541675520,1541676031,RU
+1541676032,1541676287,PL
1541676288,1541676543,RO
1541676544,1541677055,RU
1541677056,1541678079,PL
@@ -54049,6 +55430,7 @@
1541704704,1541706239,RO
1541706240,1541706751,UA
1541706752,1541707263,RU
+1541707264,1541707519,CH
1541707520,1541707775,NL
1541707776,1541708799,RU
1541708800,1541709823,PL
@@ -54085,9 +55467,11 @@
1541728000,1541728255,UA
1541728256,1541729023,GB
1541729024,1541729279,DE
+1541729280,1541729535,UA
1541729536,1541729791,PL
1541729792,1541730303,RU
1541730304,1541730815,ES
+1541730816,1541731071,GB
1541731072,1541731327,DE
1541731328,1541731839,SK
1541731840,1541732351,RU
@@ -54180,7 +55564,7 @@
1541779968,1541780479,DE
1541780480,1541780735,ES
1541780736,1541780991,GB
-1541780992,1541781247,RO
+1541780992,1541781503,RO
1541781504,1541781759,TR
1541781760,1541782015,RU
1541782016,1541782271,RO
@@ -54196,6 +55580,7 @@
1541787648,1541788159,RU
1541788160,1541788415,UA
1541788416,1541788671,RU
+1541788672,1541789183,PL
1541789184,1541789695,IR
1541789696,1541790719,UA
1541790720,1541790975,SA
@@ -54215,8 +55600,9 @@
1541795584,1541795839,ES
1541795840,1541796863,UA
1541796864,1541797375,RU
-1541797376,1541797887,GB
+1541797376,1541797887,NL
1541797888,1541798143,UA
+1541798144,1541798399,PL
1541798400,1541798911,RO
1541798912,1541799935,CZ
1541799936,1541800447,FR
@@ -54224,6 +55610,7 @@
1541800960,1541801471,FI
1541801472,1541801983,BG
1541801984,1541802495,PL
+1541802496,1541803007,RU
1541803008,1541804031,LT
1541804032,1541804287,GB
1541804288,1541804543,PL
@@ -54354,10 +55741,130 @@
1541864192,1541864447,GB
1541864448,1541864959,RU
1541864960,1541865471,AL
-1541865472,1541866495,SE
1541866496,1541867263,NL
1541867264,1541867519,RO
1541867520,1541867775,RU
+1541867776,1541868031,PL
+1541868032,1541868287,MT
+1541868288,1541868543,AE
+1541868544,1541869567,PL
+1541869568,1541870079,RU
+1541870080,1541871103,PL
+1541871104,1541871359,AT
+1541871616,1541872639,PL
+1541872640,1541873663,CZ
+1541873664,1541874175,PL
+1541874176,1541874687,RU
+1541874688,1541875711,PL
+1541875712,1541876735,UA
+1541876736,1541877247,PL
+1541877248,1541877503,GB
+1541877504,1541877759,RU
+1541877760,1541878783,RO
+1541878784,1541879295,PL
+1541879296,1541879807,UA
+1541879808,1541880831,UZ
+1541880832,1541881343,PL
+1541881344,1541881599,IT
+1541881600,1541881855,SE
+1541881856,1541882879,RU
+1541882880,1541883135,LV
+1541883136,1541883391,UA
+1541883392,1541884927,PL
+1541884928,1541885951,LT
+1541885952,1541886975,PL
+1541886976,1541887999,UA
+1541888000,1541888255,RS
+1541888256,1541888511,RU
+1541888512,1541889023,GB
+1541889024,1541889535,PL
+1541889536,1541890303,RU
+1541890304,1541890559,DE
+1541890560,1541891071,UA
+1541891072,1541893119,PL
+1541893120,1541893631,BE
+1541893632,1541894143,PL
+1541894144,1541895167,RU
+1541895168,1541897727,PL
+1541897728,1541897983,RU
+1541897984,1541898239,UA
+1541898240,1541900799,RU
+1541900800,1541901055,RO
+1541901056,1541901311,FR
+1541901312,1541901567,PL
+1541901568,1541901823,RU
+1541901824,1541902335,UA
+1541902336,1541902847,GB
+1541902848,1541903103,RU
+1541903104,1541903359,DK
+1541903360,1541904383,UA
+1541904384,1541904639,PL
+1541904640,1541904895,SE
+1541904896,1541905407,GB
+1541905408,1541905663,RU
+1541905664,1541906431,RO
+1541906432,1541906687,UA
+1541906688,1541907455,RU
+1541907456,1541908479,IT
+1541908480,1541908991,PL
+1541908992,1541909247,UA
+1541909248,1541909503,CZ
+1541909504,1541910527,NL
+1541910528,1541911039,RU
+1541911040,1541911295,PL
+1541911296,1541911551,IT
+1541911552,1541912575,RU
+1541912576,1541912831,NL
+1541912832,1541913087,UA
+1541913088,1541914623,RU
+1541914624,1541915647,IL
+1541915648,1541916671,RU
+1541916672,1541917695,RO
+1541917696,1541917951,CH
+1541917952,1541918207,PL
+1541918208,1541918463,UA
+1541918464,1541919743,RO
+1541919744,1541919999,DK
+1541920000,1541920767,RU
+1541920768,1541921279,PT
+1541921280,1541921791,RU
+1541921792,1541922047,DE
+1541922048,1541922303,PL
+1541922304,1541922559,RU
+1541922560,1541923839,RO
+1541923840,1541924095,FR
+1541924096,1541924351,UA
+1541924352,1541924863,PL
+1541924864,1541925119,RO
+1541925120,1541926911,RU
+1541926912,1541927167,UA
+1541927168,1541927679,PL
+1541927680,1541927935,DE
+1541927936,1541929983,PL
+1541929984,1541931007,RU
+1541931008,1541932031,UA
+1541932032,1541932543,PL
+1541932544,1541935103,RU
+1541935104,1541936383,RO
+1541936384,1541936639,UA
+1541936640,1541936895,DE
+1541936896,1541937151,FR
+1541937152,1541937663,NL
+1541937664,1541937919,GE
+1541937920,1541938175,PL
+1541938176,1541939199,UA
+1541939200,1541939967,RU
+1541939968,1541940223,ES
+1541940224,1541940479,GB
+1541940480,1541940735,CH
+1541940736,1541940991,PL
+1541940992,1541941247,RU
+1541941248,1541942271,FR
+1541942272,1541944831,PL
+1541944832,1541945087,DE
+1541945088,1541945855,RO
+1541945856,1541946111,PL
+1541946112,1541946879,SE
1543503872,1545601023,GB
1545601024,1545673167,SE
1545673168,1545673175,FI
@@ -54514,7 +56021,9 @@
1546878976,1546895359,DE
1546895360,1546911743,IE
1546911744,1546928127,SK
-1546928128,1546944511,GB
+1546928128,1546929407,GB
+1546929408,1546929415,A2
+1546929416,1546944511,GB
1546944512,1546960895,UA
1546960896,1546977279,HU
1546977280,1546993663,MK
@@ -54558,7 +56067,7 @@
1547522048,1547526143,CZ
1547526144,1547534335,HU
1547534336,1547538431,FR
-1547538432,1547542527,DE
+1547538432,1547542527,EU
1547542528,1547546623,FR
1547546624,1547550719,IR
1547550720,1547554815,IE
@@ -54714,7 +56223,8 @@
1547623736,1547624447,A2
1547624448,1547628543,CZ
1547628544,1547632639,BG
-1547632640,1547636735,TR
+1547632640,1547634687,GB
+1547634688,1547636735,TR
1547636736,1547640831,SI
1547640832,1547644927,PL
1547644928,1547649023,CZ
@@ -54737,7 +56247,13 @@
1547777120,1547777127,IT
1547777128,1548157119,NL
1548157120,1548157183,DE
-1548157184,1548222463,NL
+1548157184,1548157951,NL
+1548157952,1548158207,SE
+1548158208,1548158623,NL
+1548158624,1548158639,DE
+1548158640,1548158975,NL
+1548158976,1548159103,DE
+1548159104,1548222463,NL
1548222464,1548746751,DE
1548746752,1549271039,RO
1549271040,1549795327,FR
@@ -54747,7 +56263,8 @@
1550319616,1550581759,CH
1550581760,1550843903,NL
1550843904,1550974975,UA
-1550974976,1550996223,RO
+1550974976,1550975231,MD
+1550975232,1550996223,RO
1550996224,1550996479,CH
1550996480,1551007743,RO
1551007744,1551106047,MD
@@ -54916,9 +56433,7 @@
1566097408,1566101503,HU
1566101504,1566105599,RU
1566105600,1566109695,DE
-1566109696,1566111231,CH
-1566111232,1566111487,FR
-1566111488,1566113791,CH
+1566109696,1566113791,CH
1566113792,1566117887,DE
1566117888,1566121983,TR
1566121984,1566126079,NO
@@ -55021,28 +56536,68 @@
1566396416,1566398463,GB
1566398464,1566400511,RU
1566400512,1566400575,NO
-1566400576,1566400607,NL
-1566400608,1566400639,GB
+1566400576,1566400639,GB
1566400640,1566400671,NO
1566400672,1566400703,DE
1566400704,1566400735,NL
-1566400736,1566400832,NO
-1566400833,1566400895,GB
-1566400896,1566401023,NO
+1566400736,1566400863,NO
+1566400864,1566400871,GB
+1566400872,1566400903,NO
+1566400904,1566400907,DE
+1566400908,1566400911,GB
+1566400912,1566400915,GE
+1566400916,1566400919,NO
+1566400920,1566400923,NE
+1566400924,1566400943,NO
+1566400944,1566400955,NE
+1566400956,1566400967,NO
+1566400968,1566400979,GB
+1566400980,1566400983,GE
+1566400984,1566400987,NE
+1566400988,1566401023,NO
1566401024,1566401055,US
1566401056,1566401087,NO
-1566401088,1566401215,US
-1566401216,1566401279,NO
-1566401280,1566401535,US
+1566401088,1566401247,US
+1566401248,1566401279,NO
+1566401280,1566401311,US
+1566401312,1566401399,NO
+1566401400,1566401463,US
+1566401464,1566401467,NO
+1566401468,1566401483,US
+1566401484,1566401491,NO
+1566401492,1566401499,US
+1566401500,1566401503,NO
+1566401504,1566401535,US
1566401536,1566401599,IN
-1566401600,1566401663,CN
-1566401664,1566401727,SG
-1566401728,1566401791,AU
+1566401600,1566401631,HK
+1566401632,1566401663,NO
+1566401664,1566401695,SG
+1566401696,1566401727,NO
+1566401728,1566401759,AU
+1566401760,1566401791,NO
1566401792,1566401856,SI
-1566401857,1566401919,HK
-1566401920,1566401983,NO
-1566401984,1566402047,AU
-1566402048,1566402559,NO
+1566401857,1566401887,NO
+1566401888,1566401919,US
+1566401920,1566401967,NO
+1566401968,1566401975,HK
+1566401976,1566401987,AU
+1566401988,1566401991,HK
+1566401992,1566401999,SG
+1566402000,1566402003,AU
+1566402004,1566402011,NO
+1566402012,1566402031,HK
+1566402032,1566402111,NO
+1566402112,1566402143,HK
+1566402144,1566402175,NO
+1566402176,1566402199,US
+1566402200,1566402207,NO
+1566402208,1566402215,US
+1566402216,1566402223,NO
+1566402224,1566402239,US
+1566402240,1566402255,NO
+1566402256,1566402303,US
+1566402304,1566402559,NO
+1566402560,1566404607,IQ
1566404608,1566406655,ES
1566406656,1566408703,NL
1566408704,1566410751,GB
@@ -55078,8 +56633,10 @@
1566470144,1566470159,IE
1566470160,1566470171,GB
1566470172,1566470239,IE
-1566470240,1566470343,GB
-1566470344,1566470351,IE
+1566470240,1566470279,GB
+1566470280,1566470283,IE
+1566470284,1566470303,GB
+1566470304,1566470351,IE
1566470352,1566470367,GB
1566470368,1566470511,IE
1566470512,1566470527,GB
@@ -55087,18 +56644,20 @@
1566470560,1566470563,GB
1566470564,1566470623,IE
1566470624,1566470655,GB
-1566470656,1566470719,IE
-1566470720,1566470727,GB
-1566470728,1566470739,IE
+1566470656,1566470739,IE
1566470740,1566470743,GB
-1566470744,1566470847,IE
-1566470848,1566470879,GB
-1566470880,1566470895,IE
-1566470896,1566470911,GB
-1566470912,1566471051,IE
-1566471052,1566471191,GB
+1566470744,1566470855,IE
+1566470856,1566470859,GB
+1566470860,1566471031,IE
+1566471032,1566471039,GB
+1566471040,1566471051,IE
+1566471052,1566471151,GB
+1566471152,1566471157,IE
+1566471158,1566471191,GB
1566471192,1566471229,IE
-1566471230,1566474239,GB
+1566471230,1566471247,GB
+1566471248,1566471263,IE
+1566471264,1566474239,GB
1566474240,1566476287,DE
1566476288,1566478335,BG
1566478336,1566482431,RU
@@ -55176,7 +56735,9 @@
1567712768,1567713279,DE
1567713280,1567715327,RO
1567715328,1567717375,MD
-1567717376,1567752191,RO
+1567717376,1567750655,RO
+1567750656,1567751167,SE
+1567751168,1567752191,RO
1567752192,1567756287,MD
1567756288,1567775743,RO
1567775744,1567776767,MD
@@ -55184,7 +56745,9 @@
1567830016,1567831039,MD
1567831040,1567840255,RO
1567840256,1567842303,DE
-1567842304,1567883263,RO
+1567842304,1567880191,RO
+1567880192,1567881215,SE
+1567881216,1567883263,RO
1567883264,1567948799,MD
1567948800,1568026623,RO
1568026624,1568030719,MD
@@ -55281,6 +56844,7 @@
1570275328,1570308095,BG
1570308096,1570340863,CZ
1570340864,1570373631,RU
+1570373632,1570406399,NL
1570406400,1570439167,PL
1570439168,1570471935,TR
1570471936,1570480895,BG
@@ -55376,7 +56940,9 @@
1570666192,1570666223,FR
1570666224,1570666227,SE
1570666228,1570666231,NO
-1570666232,1570666367,SE
+1570666232,1570666263,SE
+1570666264,1570666267,US
+1570666268,1570666367,SE
1570666368,1570666383,FR
1570666384,1570666387,SE
1570666388,1570666391,NL
@@ -55416,8 +56982,9 @@
1570667232,1570667247,FR
1570667248,1570667263,SE
1570667264,1570667267,ES
-1570667268,1570667279,SE
-1570667280,1570667295,ES
+1570667268,1570667283,SE
+1570667284,1570667287,MT
+1570667288,1570667295,ES
1570667296,1570667327,GB
1570667328,1570667335,SE
1570667336,1570667339,GB
@@ -55437,7 +57004,9 @@
1570667588,1570667591,US
1570667592,1570667599,SE
1570667600,1570667603,DE
-1570667604,1570667711,SE
+1570667604,1570667647,SE
+1570667648,1570667651,US
+1570667652,1570667711,SE
1570667712,1570667727,FR
1570667728,1570667743,NL
1570667744,1570667775,SE
@@ -55463,7 +57032,9 @@
1570668292,1570668351,SE
1570668352,1570668415,NO
1570668416,1570668543,SE
-1570668544,1570701311,RU
+1570668544,1570671983,RU
+1570671984,1570671987,TR
+1570671988,1570701311,RU
1570701312,1570717695,PL
1570717696,1570725887,HR
1570725888,1570734079,DE
@@ -55484,7 +57055,8 @@
1571432448,1571434495,CZ
1571434496,1571435519,UA
1571435520,1571436031,NL
-1571436032,1571438591,RU
+1571436032,1571436287,UA
+1571436288,1571438591,RU
1571438592,1571441663,UA
1571441664,1571442175,KZ
1571442176,1571442687,NL
@@ -55575,6 +57147,7 @@
1572028416,1572044799,RU
1572044800,1572061183,IT
1572061184,1572077567,PL
+1572077568,1572093951,RU
1572110336,1572126719,RU
1572126720,1572143103,UA
1572143104,1572159487,DE
@@ -55679,7 +57252,9 @@
1572542088,1572542111,GB
1572542112,1572542119,PL
1572542120,1572542127,ES
-1572542128,1572542207,GB
+1572542128,1572542151,GB
+1572542152,1572542159,DE
+1572542160,1572542207,GB
1572542208,1572542463,FR
1572542464,1572544511,IT
1572544512,1572546559,IQ
@@ -55687,6 +57262,7 @@
1572548608,1572550655,NL
1572550656,1572552703,DE
1572552704,1572554751,TR
+1572554752,1572556799,RU
1572556800,1572558847,NO
1572558848,1572560895,IT
1572560896,1572562943,RU
@@ -55708,7 +57284,9 @@
1572587520,1572589567,TR
1572589568,1572591615,CH
1572591616,1572593663,NL
-1572593664,1572595711,GB
+1572593664,1572594687,GB
+1572594688,1572594943,FR
+1572594944,1572595711,GB
1572595712,1572597759,DE
1572597760,1572599807,RS
1572599808,1572601855,DE
@@ -55720,6 +57298,7 @@
1572612096,1572614143,RU
1572614144,1572616191,ES
1572616192,1572618239,CH
+1572618240,1572620287,NL
1572620288,1572620415,CH
1572620416,1572620431,CZ
1572620432,1572620559,CH
@@ -55746,21 +57325,13 @@
1572661248,1572663295,NO
1572663296,1572665343,DE
1572665344,1572667391,NL
-1572667392,1572667903,GB
-1572667904,1572667927,SA
-1572667928,1572668303,GB
-1572668304,1572668311,SA
-1572668312,1572668415,GB
-1572668416,1572668431,SA
-1572668432,1572668463,GB
-1572668464,1572668471,SA
-1572668472,1572668639,GB
-1572668640,1572668647,SA
-1572668648,1572668655,GB
+1572667392,1572668655,GB
1572668656,1572668671,CY
1572668672,1572668703,GB
1572668704,1572668711,CY
-1572668712,1572669439,GB
+1572668712,1572668719,GB
+1572668720,1572668727,CY
+1572668728,1572669439,GB
1572669440,1572673535,RU
1572673536,1572675583,AT
1572675584,1572677631,ES
@@ -55950,12 +57521,18 @@
1578590692,1578590695,DE
1578590696,1578590699,FR
1578590700,1578590735,PL
-1578590736,1578590799,FR
+1578590736,1578590787,FR
+1578590788,1578590791,LT
+1578590792,1578590795,NL
+1578590796,1578590799,IT
1578590800,1578590815,ES
1578590816,1578590831,GB
1578590832,1578590839,FR
1578590840,1578590847,PL
-1578590848,1578590879,FR
+1578590848,1578590851,DE
+1578590852,1578590855,FR
+1578590856,1578590859,GB
+1578590860,1578590879,FR
1578590880,1578590911,PL
1578590912,1578590927,GB
1578590928,1578590935,DE
@@ -55977,9 +57554,7 @@
1578591152,1578591183,FR
1578591184,1578591187,CH
1578591188,1578591195,GB
-1578591196,1578591247,FR
-1578591248,1578591263,PL
-1578591264,1578591279,FR
+1578591196,1578591279,FR
1578591280,1578591287,ES
1578591288,1578591291,DE
1578591292,1578591295,ES
@@ -56016,7 +57591,9 @@
1578591712,1578591743,PL
1578591744,1578591759,ES
1578591760,1578591791,FR
-1578591792,1578591807,PL
+1578591792,1578591795,ES
+1578591796,1578591799,NL
+1578591800,1578591807,PL
1578591808,1578591887,FR
1578591888,1578591891,DE
1578591892,1578591899,FR
@@ -56025,8 +57602,8 @@
1578591920,1578591939,ES
1578591940,1578591951,FR
1578591952,1578591967,PT
-1578591968,1578591983,FR
-1578591984,1578592031,PL
+1578591968,1578591999,FR
+1578592000,1578592031,PL
1578592032,1578592039,PT
1578592040,1578592043,ES
1578592044,1578592047,PL
@@ -56038,7 +57615,7 @@
1578592144,1578592159,NL
1578592160,1578592163,FR
1578592164,1578592171,IT
-1578592172,1578592175,FR
+1578592172,1578592175,ES
1578592176,1578592183,CZ
1578592184,1578592191,PT
1578592192,1578592199,BE
@@ -56056,12 +57633,13 @@
1578592336,1578592351,FR
1578592352,1578592367,PL
1578592368,1578592395,FR
-1578592396,1578592399,ES
+1578592396,1578592399,DE
1578592400,1578592415,GB
1578592416,1578592423,IT
1578592424,1578592431,IE
-1578592432,1578592447,FR
-1578592448,1578592495,PL
+1578592432,1578592483,FR
+1578592484,1578592487,PL
+1578592488,1578592495,BE
1578592496,1578592511,FR
1578592512,1578592515,GB
1578592516,1578592519,PL
@@ -56072,7 +57650,9 @@
1578592544,1578592559,FR
1578592560,1578592575,NL
1578592576,1578592591,GB
-1578592592,1578592687,FR
+1578592592,1578592607,FR
+1578592608,1578592623,IE
+1578592624,1578592687,FR
1578592688,1578592695,DE
1578592696,1578592719,ES
1578592720,1578592735,CH
@@ -56082,14 +57662,14 @@
1578592752,1578592767,IE
1578592768,1578592783,DE
1578592784,1578592799,FR
-1578592800,1578592807,GB
-1578592808,1578592811,FR
+1578592800,1578592803,IE
+1578592804,1578592811,FR
1578592812,1578592815,PL
1578592816,1578592831,FR
1578592832,1578592847,PL
1578592848,1578592851,BE
1578592852,1578592855,DE
-1578592856,1578592859,CH
+1578592856,1578592859,FR
1578592860,1578592879,PL
1578592880,1578592883,FR
1578592884,1578592891,GB
@@ -56112,7 +57692,9 @@
1578593412,1578593415,FR
1578593416,1578593423,PL
1578593424,1578593439,FR
-1578593440,1578593455,PL
+1578593440,1578593443,IT
+1578593444,1578593447,PL
+1578593448,1578593455,DE
1578593456,1578593471,FR
1578593472,1578593479,GB
1578593480,1578593483,PL
@@ -56154,7 +57736,9 @@
1578593936,1578593943,FR
1578593944,1578593947,IT
1578593948,1578593955,FR
-1578593956,1578593967,PL
+1578593956,1578593959,LT
+1578593960,1578593963,FR
+1578593964,1578593967,ES
1578593968,1578593983,FR
1578593984,1578593999,PL
1578594000,1578594015,FR
@@ -56167,21 +57751,18 @@
1578594064,1578594079,PL
1578594080,1578594087,CH
1578594088,1578594095,CZ
-1578594096,1578594111,FR
-1578594112,1578594127,PL
-1578594128,1578594143,FR
+1578594096,1578594143,FR
1578594144,1578594147,PL
1578594148,1578594151,ES
1578594152,1578594159,IT
1578594160,1578594163,PT
1578594164,1578594167,ES
1578594168,1578594171,DE
-1578594172,1578594191,FR
-1578594192,1578594207,IT
+1578594172,1578594207,FR
1578594208,1578594211,DE
-1578594212,1578594223,PL
-1578594224,1578594255,FR
-1578594256,1578594271,GB
+1578594212,1578594239,PL
+1578594240,1578594255,FR
+1578594256,1578594271,IE
1578594272,1578594303,PL
1578594304,1578594307,GB
1578594308,1578594311,FI
@@ -56191,7 +57772,7 @@
1578594336,1578594355,GB
1578594356,1578594359,FR
1578594360,1578594363,PT
-1578594364,1578594367,IT
+1578594364,1578594367,ES
1578594368,1578594375,FR
1578594376,1578594383,PT
1578594384,1578594399,FR
@@ -56221,15 +57802,13 @@
1578594712,1578594715,IT
1578594716,1578594751,FR
1578594752,1578594767,ES
-1578594768,1578594771,GB
-1578594772,1578594775,FR
+1578594768,1578594775,GB
1578594776,1578594783,ES
1578594784,1578594799,FR
1578594800,1578594815,DE
1578594816,1578594847,FR
1578594848,1578594863,IT
-1578594864,1578594867,PL
-1578594868,1578594871,BE
+1578594864,1578594871,PL
1578594872,1578595039,FR
1578595040,1578595055,GB
1578595056,1578595103,FR
@@ -56260,13 +57839,13 @@
1578595388,1578595407,PL
1578595408,1578595411,IE
1578595412,1578595419,PL
-1578595420,1578595423,FR
+1578595420,1578595423,IT
1578595424,1578595439,PL
1578595440,1578595447,FR
1578595448,1578595455,ES
1578595456,1578595459,DE
-1578595460,1578595463,PL
-1578595464,1578595487,FR
+1578595460,1578595467,PL
+1578595468,1578595487,FR
1578595488,1578595503,DE
1578595504,1578595519,PL
1578595520,1578595535,FR
@@ -56276,7 +57855,12 @@
1578595548,1578595607,FR
1578595608,1578595611,GB
1578595612,1578595615,ES
-1578595616,1578595647,PL
+1578595616,1578595619,PL
+1578595620,1578595623,BE
+1578595624,1578595635,FR
+1578595636,1578595639,ES
+1578595640,1578595643,DE
+1578595644,1578595647,GB
1578595648,1578595679,FR
1578595680,1578595695,PL
1578595696,1578595711,FR
@@ -56297,10 +57881,13 @@
1578595968,1578595983,IE
1578595984,1578595991,NL
1578595992,1578595995,IT
-1578595996,1578596095,FR
+1578595996,1578596031,FR
+1578596032,1578596063,IT
+1578596064,1578596095,IE
1578596096,1578596099,DE
1578596100,1578596103,GB
-1578596104,1578596111,FR
+1578596104,1578596107,PL
+1578596108,1578596111,ES
1578596112,1578596115,DE
1578596116,1578596119,FR
1578596120,1578596123,PT
@@ -56341,7 +57928,7 @@
1578610820,1578610823,NL
1578610824,1578610831,DE
1578610832,1578610847,CH
-1578610848,1578610851,GB
+1578610848,1578610851,PL
1578610852,1578610855,IE
1578610856,1578610859,IT
1578610860,1578610863,PL
@@ -56350,7 +57937,8 @@
1578610872,1578610879,PL
1578610880,1578610943,FR
1578610944,1578610975,ES
-1578610976,1578611039,PL
+1578610976,1578611007,PL
+1578611008,1578611039,FR
1578611040,1578611043,ES
1578611044,1578611047,CZ
1578611048,1578611051,ES
@@ -56374,7 +57962,8 @@
1578611220,1578611223,DE
1578611224,1578611227,ES
1578611228,1578611231,PL
-1578611232,1578611247,FR
+1578611232,1578611235,IT
+1578611236,1578611247,FR
1578611248,1578611251,ES
1578611252,1578611255,IT
1578611256,1578611263,PL
@@ -56431,7 +58020,13 @@
1578612304,1578612319,DE
1578612320,1578612383,FR
1578612384,1578612415,PL
-1578612416,1578612623,FR
+1578612416,1578612479,FR
+1578612480,1578612575,GB
+1578612576,1578612579,PL
+1578612580,1578612583,FR
+1578612584,1578612587,IE
+1578612588,1578612607,IT
+1578612608,1578612623,PT
1578612624,1578612639,CH
1578612640,1578612671,PL
1578612672,1578612687,ES
@@ -56457,7 +58052,9 @@
1578613712,1578613719,BE
1578613720,1578613723,ES
1578613724,1578613727,IT
-1578613728,1578613743,NL
+1578613728,1578613735,FR
+1578613736,1578613739,PL
+1578613740,1578613743,FR
1578613744,1578613751,ES
1578613752,1578613759,NL
1578613760,1578613775,DE
@@ -56568,13 +58165,18 @@
1581989888,1582006271,PL
1582006272,1582022655,RU
1582022656,1582039039,NL
+1582039040,1582055423,BH
1582055424,1582071807,UA
1582071808,1582088191,ES
1582088192,1582104575,GB
1582104576,1582153727,RU
1582153728,1582170111,SA
1582170112,1582186495,CH
-1582186496,1582202879,TR
+1582186496,1582193919,GB
+1582193920,1582194207,TR
+1582194208,1582196991,GB
+1582196992,1582198015,TR
+1582198016,1582202879,GB
1582202880,1582219263,PL
1582219264,1582252031,RU
1582252032,1582268415,TR
@@ -56595,7 +58197,9 @@
1583632384,1583636479,RU
1583636480,1583640575,MK
1583640576,1583644671,NL
-1583644672,1583648767,DE
+1583644672,1583646463,DE
+1583646464,1583646719,GB
+1583646720,1583648767,DE
1583648768,1583652863,CH
1583652864,1583656959,FR
1583656960,1583665151,RU
@@ -56648,13 +58252,13 @@
1583783936,1583788031,EU
1583788032,1583792127,TM
1583792128,1583796223,IE
-1583796224,1583800319,DE
+1583796224,1583800063,DE
+1583800064,1583800095,AT
+1583800096,1583800319,DE
1583800320,1583804415,ME
1583804416,1583808511,GB
1583808512,1583812607,MD
-1583812608,1583813139,NL
-1583813140,1583813143,DE
-1583813144,1583813171,NL
+1583812608,1583813171,NL
1583813172,1583813183,US
1583813184,1583813199,NL
1583813200,1583813215,RU
@@ -56663,17 +58267,11 @@
1583813240,1583813243,US
1583813244,1583813663,NL
1583813664,1583813671,US
-1583813672,1583813679,NL
-1583813680,1583813683,GB
-1583813684,1583813711,NL
+1583813672,1583813711,NL
1583813712,1583813727,US
1583813728,1583813735,NL
1583813736,1583813743,DE
-1583813744,1583813808,NL
-1583813809,1583813815,US
-1583813816,1583814655,NL
-1583814656,1583814783,US
-1583814784,1583815167,NL
+1583813744,1583815167,NL
1583815168,1583815215,US
1583815216,1583815343,NL
1583815344,1583815351,US
@@ -56682,7 +58280,9 @@
1583815712,1583815727,US
1583815728,1583815807,NL
1583815808,1583815935,US
-1583815936,1583816703,NL
+1583815936,1583816191,GB
+1583816192,1583816255,DE
+1583816256,1583816703,NL
1583816704,1583819007,TR
1583819008,1583819136,GB
1583819137,1583820799,TR
@@ -56727,8 +58327,8 @@
1585205248,1585207295,FR
1585207296,1585209855,NL
1585209856,1585210111,IQ
-1585210112,1585210879,IR
-1585210880,1585211391,NL
+1585210112,1585210367,IR
+1585210368,1585211391,NL
1585211392,1585213439,CZ
1585213440,1585214463,GB
1585214464,1585217535,NL
@@ -56741,7 +58341,7 @@
1585231360,1585231615,NL
1585231616,1585231871,RU
1585231872,1585233919,CZ
-1585235968,1585238015,RU
+1585233920,1585238015,RU
1585238016,1585240063,DE
1585240064,1585241087,FR
1585241088,1585242111,MQ
@@ -56810,6 +58410,7 @@
1585354752,1585356799,RU
1585356800,1585358847,FI
1585358848,1585360895,PT
+1585360896,1585362943,DK
1585362944,1585363455,IT
1585363456,1585363551,ES
1585363552,1585364991,IT
@@ -56920,7 +58521,9 @@
1586216960,1586225151,BG
1586225152,1586233343,RU
1586233344,1586241535,FR
-1586241536,1586243779,SE
+1586241536,1586242983,SE
+1586242984,1586242991,DK
+1586242992,1586243779,SE
1586243780,1586243787,NO
1586243788,1586249727,SE
1586249728,1586257919,SI
@@ -56949,7 +58552,9 @@
1586411520,1586411775,GB
1586411776,1586412287,US
1586412288,1586412543,HK
-1586412544,1586413567,GB
+1586412544,1586412799,GB
+1586412800,1586413055,US
+1586413056,1586413567,GB
1586413568,1586415615,IT
1586415616,1586416255,ES
1586416256,1586417663,AD
@@ -57029,6 +58634,15 @@
1588723712,1588854783,UA
1588854784,1588985855,RU
1588985856,1589182463,IR
+1589182464,1589198847,OM
+1589198848,1589200895,FR
+1589200896,1589202943,IT
+1589202944,1589203711,SE
+1589203712,1589203967,NL
+1589203968,1589204223,SE
+1589204224,1589204991,NL
+1589204992,1589207039,DE
+1589207040,1589215231,IT
1589215232,1589247999,GB
1589248000,1589280767,NO
1589280768,1589313535,DE
@@ -57099,6 +58713,7 @@
1590132992,1590134783,GB
1590134784,1590136831,ES
1590136832,1590138879,GB
+1590138880,1590140927,FR
1590140928,1590142975,UA
1590142976,1590145023,AT
1590145024,1590147071,HU
@@ -57203,6 +58818,7 @@
1592281088,1592283135,UA
1592283136,1592285183,GR
1592285184,1592287231,RU
+1592287232,1592289279,RO
1592289280,1592291327,RU
1592291328,1592293375,NL
1592293376,1592295423,LT
@@ -57222,12 +58838,11 @@
1592326144,1592328191,UA
1592328192,1592393727,RU
1592393728,1592459263,SE
+1592459264,1592524799,TR
1592524800,1592540415,GB
1592540416,1592540423,A2
1592540424,1592557567,GB
-1592557568,1592584447,BG
-1592584448,1592584703,GB
-1592584704,1592590335,BG
+1592557568,1592590335,BG
1592590336,1592623103,FI
1592623104,1592655871,RU
1592655872,1592786943,FR
@@ -57255,9 +58870,7 @@
1593147392,1593163775,RU
1593163776,1593180159,AT
1593180160,1593196543,NO
-1593196544,1593196783,SE
-1593196784,1593196799,GB
-1593196800,1593202687,SE
+1593196544,1593202687,SE
1593202688,1593202815,NO
1593202816,1593203455,SE
1593203456,1593203487,NO
@@ -57400,6 +59013,10 @@
1599504384,1599520767,AZ
1599520768,1599537151,RU
1599537152,1599553535,BG
+1599553536,1599561727,KG
+1599561728,1599565823,GB
+1599565824,1599567871,SY
+1599567872,1599569919,IT
1599569920,1599586303,SI
1599586304,1599602687,BG
1599602688,1599864831,DE
@@ -57426,7 +59043,9 @@
1600963176,1600963183,RU
1600963184,1600963191,BY
1600963192,1600963199,KZ
-1600963200,1600978943,RU
+1600963200,1600971087,RU
+1600971088,1600971091,TR
+1600971092,1600978943,RU
1600978944,1601011711,SE
1601011712,1601044479,UA
1601044480,1601077247,RU
@@ -57463,7 +59082,8 @@
1602248704,1602250751,BE
1602250752,1602252799,NO
1602252800,1602254847,SE
-1602254848,1602255359,HU
+1602254848,1602255103,PT
+1602255104,1602255359,HU
1602255360,1602255615,US
1602255616,1602255871,PT
1602255872,1602256895,HU
@@ -57484,9 +59104,7 @@
1602273792,1602274559,IN
1602274560,1602274815,IE
1602274816,1602275327,IN
-1602275328,1602275615,DE
-1602275616,1602275647,CY
-1602275648,1602275679,DE
+1602275328,1602275679,DE
1602275680,1602275695,CA
1602275696,1602279423,DE
1602279424,1602281471,GB
@@ -57496,7 +59114,6 @@
1602287616,1602289663,DE
1602289664,1602291711,LB
1602291712,1602293759,SA
-1602293760,1602295807,RU
1602295808,1602297855,NL
1602297856,1602298367,IL
1602298368,1602298431,MT
@@ -57527,6 +59144,7 @@
1602347008,1602349055,PL
1602349056,1602351103,RU
1602351104,1602353151,CZ
+1602353152,1602355199,ES
1602355200,1602357247,GB
1602357248,1602359295,FR
1602359296,1602361343,DE
@@ -57644,11 +59262,19 @@
1603083264,1603084287,DE
1603084288,1603085871,IT
1603085872,1603085879,CH
-1603085880,1603087515,IT
+1603085880,1603087047,IT
+1603087048,1603087103,DE
+1603087104,1603087199,IT
+1603087200,1603087231,SM
+1603087232,1603087472,IT
+1603087473,1603087474,CH
+1603087475,1603087515,IT
1603087516,1603087517,CH
1603087518,1603087544,IT
1603087545,1603087546,CH
-1603087547,1603088383,IT
+1603087547,1603087644,IT
+1603087645,1603087646,CH
+1603087647,1603088383,IT
1603088384,1603092479,LB
1603092480,1603100671,NO
1603100672,1603108863,FR
@@ -57659,32 +59285,42 @@
1603133440,1603137535,RU
1603137536,1603141631,KW
1603141632,1603145727,ES
-1603145728,1603146015,NL
-1603146016,1603146079,CY
-1603146080,1603146239,NL
+1603145728,1603146031,NL
+1603146032,1603146063,CY
+1603146064,1603146239,NL
1603146240,1603146751,US
1603146752,1603147007,NL
1603147008,1603147263,US
-1603147264,1603147775,IL
+1603147264,1603147327,CY
+1603147328,1603147519,NL
+1603147520,1603147775,IL
1603147776,1603148031,US
-1603148032,1603149567,IL
+1603148032,1603148287,IL
+1603148288,1603148799,NL
+1603148800,1603149311,IL
+1603149312,1603149567,NL
1603149568,1603149823,US
1603149824,1603153919,RU
1603153920,1603158015,NL
1603158016,1603159167,DE
1603159168,1603159183,NL
-1603159184,1603159487,DE
+1603159184,1603159199,FR
+1603159200,1603159487,DE
1603159488,1603159519,AT
1603159520,1603159535,DE
1603159536,1603159551,GB
1603159552,1603159823,DE
1603159824,1603159839,CH
-1603159840,1603161007,DE
+1603159840,1603160079,DE
+1603160080,1603160095,NL
+1603160096,1603160111,GB
+1603160112,1603161007,DE
1603161008,1603161023,GB
1603161024,1603161103,DE
1603161104,1603161119,GB
1603161120,1603161135,AT
-1603161136,1603161567,DE
+1603161136,1603161151,GB
+1603161152,1603161567,DE
1603161568,1603161599,FR
1603161600,1603162111,DE
1603162112,1603166207,TJ
@@ -57738,16 +59374,14 @@
1603224432,1603224447,US
1603224448,1603224463,MX
1603224464,1603224575,GB
-1603224576,1603224775,FR
-1603224776,1603224783,GB
-1603224784,1603224831,FR
+1603224576,1603224831,FR
1603224832,1603224847,ES
1603224848,1603224895,FR
1603224896,1603224911,GB
1603224912,1603225007,FR
1603225008,1603225023,MX
-1603225024,1603225127,FR
-1603225128,1603225343,GB
+1603225024,1603225159,FR
+1603225160,1603225343,GB
1603225344,1603225599,FR
1603225600,1603225607,ES
1603225608,1603225615,GB
@@ -57780,14 +59414,12 @@
1603928064,1603944447,DK
1603944448,1603977215,RU
1603977216,1603979295,GB
-1603979296,1603979327,ID
+1603979296,1603979327,US
1603979328,1603980463,GB
1603980464,1603980479,CH
1603980480,1603980863,GB
1603980864,1603980927,ID
-1603980928,1603981823,GB
-1603981824,1603982079,IE
-1603982080,1603982655,GB
+1603980928,1603982655,GB
1603982656,1603982687,DK
1603982688,1603982719,AN
1603982720,1603982783,GB
@@ -57831,8 +59463,7 @@
1604853760,1604861951,HU
1604861952,1604870143,RS
1604870144,1604878335,HR
-1604878336,1604886591,DE
-1604886592,1604886655,US
+1604878336,1604886655,DE
1604886656,1604886783,RU
1604886784,1604887039,DE
1604887040,1604887295,GB
@@ -57845,9 +59476,7 @@
1604891968,1604892159,RU
1604892160,1604892927,DE
1604892928,1604893183,HK
-1604893184,1604893311,DE
-1604893312,1604893375,CY
-1604893376,1604893951,DE
+1604893184,1604893951,DE
1604893952,1604894463,TR
1604894464,1604894719,DE
1604894720,1604895487,CZ
@@ -57860,7 +59489,9 @@
1604901312,1604901375,SC
1604901376,1604901631,CZ
1604901632,1604901887,SK
-1604901888,1604901983,CZ
+1604901888,1604901919,CZ
+1604901920,1604901935,SK
+1604901936,1604901983,CZ
1604901984,1604902142,SK
1604902143,1604902399,CZ
1604902400,1604902911,SK
@@ -57937,7 +59568,10 @@
1605230592,1605238783,TR
1605238784,1605246975,IT
1605246976,1605255167,PL
-1605263360,1605271551,RU
+1605255168,1605257215,RU
+1605257216,1605259263,FR
+1605259264,1605261311,DE
+1605261312,1605271551,RU
1605271552,1605279743,DE
1605279744,1605287935,FR
1605287936,1605296127,RU
@@ -57970,7 +59604,11 @@
1607467008,1607532543,DE
1607532544,1607569407,SE
1607569408,1607571455,DK
-1607571456,1607585791,SE
+1607571456,1607575551,SE
+1607575552,1607577599,DK
+1607577600,1607581695,SE
+1607581696,1607583743,DK
+1607583744,1607585791,SE
1607585792,1607598079,DK
1607598080,1607610367,IT
1607610368,1607612415,IE
@@ -58024,8 +59662,9 @@
1607965696,1607966719,UA
1607967744,1607968767,UA
1607968768,1607969791,SE
+1607970816,1607972863,RU
1607972864,1607974911,NL
-1607979008,1607980031,RU
+1607976960,1607980031,RU
1607980032,1607981055,DE
1607981056,1607982079,UA
1607983104,1607984127,GB
@@ -58041,7 +59680,28 @@
1608515584,1610612735,IT
1610612736,1610678271,US
1610678272,1610743807,CA
-1610743808,1611227135,US
+1610743808,1611165943,US
+1611165944,1611165951,BD
+1611165952,1611166111,US
+1611166112,1611166119,NZ
+1611166120,1611166167,US
+1611166168,1611166175,AF
+1611166176,1611166527,US
+1611166528,1611166559,IN
+1611166560,1611166911,US
+1611166912,1611166943,IN
+1611166944,1611166975,US
+1611166976,1611167039,IN
+1611167040,1611167103,US
+1611167104,1611167167,IN
+1611167168,1611167199,US
+1611167200,1611167231,IN
+1611167232,1611167679,US
+1611167680,1611167727,SE
+1611167728,1611169279,US
+1611169280,1611169663,IE
+1611169664,1611169791,GB
+1611169792,1611227135,US
1611227136,1611235327,CA
1611235328,1611923455,US
1611923456,1612185599,CA
@@ -58134,7 +59794,9 @@
1613635584,1613639679,CA
1613639680,1613676543,US
1613676544,1613680639,CA
-1613680640,1613737983,US
+1613680640,1613703670,US
+1613703671,1613703678,LK
+1613703679,1613737983,US
1613737984,1613742079,CA
1613742080,1613750591,US
1613750592,1613750607,BR
@@ -58189,7 +59851,9 @@
1652293632,1652310015,CA
1652310016,1652481279,US
1652481280,1652481791,CN
-1652481792,1652621327,US
+1652481792,1652487286,US
+1652487287,1652487287,TR
+1652487288,1652621327,US
1652621328,1652621335,CA
1652621336,1652621343,AU
1652621344,1652621359,CA
@@ -58795,8 +60459,8 @@
1654558720,1654583103,US
1654583104,1654583135,CA
1654583136,1654597823,US
-1654597824,1654597887,GB
-1654597888,1654599455,US
+1654597824,1654597855,GB
+1654597856,1654599455,US
1654599456,1654599471,CA
1654599472,1654599487,US
1654599488,1654599519,BA
@@ -58977,12 +60641,16 @@
1701117952,1701134335,NC
1701134336,1701142527,CN
1701142528,1701143551,HK
-1701143552,1701150719,CN
+1701143552,1701143807,CN
+1701143808,1701144063,AU
+1701144064,1701150719,CN
1701150720,1701183487,KR
1701183488,1701199871,JP
1701199872,1701208063,CN
1701208064,1701209087,JP
-1701209088,1701216255,CN
+1701209088,1701209855,CN
+1701209856,1701210111,AU
+1701210112,1701216255,CN
1701216256,1701249023,JP
1701249024,1701314559,AU
1701314560,1701576703,CN
@@ -59209,6 +60877,79 @@
1728376832,1728377855,ID
1728377856,1728378879,HK
1728378880,1728380927,IN
+1728380928,1728382975,PH
+1728382976,1728383999,SG
+1728384000,1728385023,HK
+1728385024,1728386047,IN
+1728386048,1728387071,JP
+1728387072,1728388095,TH
+1728388096,1728388351,NZ
+1728388352,1728388607,AU
+1728388608,1728389119,VN
+1728389120,1728390143,TW
+1728390144,1728391167,CN
+1728391168,1728392191,JP
+1728392192,1728393215,SG
+1728393216,1728394239,ID
+1728394240,1728396287,CN
+1728396288,1728397311,PH
+1728397312,1728398335,JP
+1728398336,1728398847,AU
+1728398848,1728399103,IN
+1728399104,1728400383,NZ
+1728400384,1728400895,AU
+1728400896,1728401151,IN
+1728401152,1728401407,SG
+1728401408,1728402431,NZ
+1728402432,1728403455,IN
+1728403456,1728406527,AU
+1728406528,1728407551,TW
+1728407552,1728407807,JP
+1728407808,1728408063,MY
+1728408064,1728408319,NZ
+1728408320,1728408575,ID
+1728408576,1728409599,NZ
+1728409600,1728410623,IN
+1728410624,1728411647,JP
+1728411648,1728412671,TH
+1728412672,1728413695,KH
+1728413696,1728414719,KR
+1728414720,1728415743,IN
+1728415744,1728416767,PK
+1728416768,1728417791,JP
+1728417792,1728418815,KR
+1728418816,1728419071,ID
+1728419072,1728419327,HK
+1728419328,1728419583,NP
+1728419584,1728419839,SG
+1728419840,1728420863,JP
+1728420864,1728421887,NZ
+1728421888,1728422911,JP
+1728422912,1728423935,AU
+1728423936,1728424959,TW
+1728424960,1728425983,AF
+1728425984,1728427007,JP
+1728427008,1728428031,MY
+1728428032,1728430079,IN
+1728430080,1728431103,JP
+1728431104,1728431615,AF
+1728431616,1728431871,HK
+1728431872,1728432127,SG
+1728432128,1728433151,IN
+1728433152,1728435199,VN
+1728435200,1728435967,AU
+1728435968,1728436223,ID
+1728436224,1728437247,IN
+1728437248,1728438271,HK
+1728438272,1728439295,NZ
+1728439296,1728439807,NP
+1728439808,1728440319,AU
+1728440320,1728441343,BD
+1728441344,1728442367,MY
+1728442368,1728443391,SG
+1728443392,1728444415,IN
+1728444416,1728445439,JP
+1728445440,1728446463,CN
1728708608,1728709631,CN
1728709632,1728710655,TW
1728710656,1728710911,AU
@@ -59274,6 +61015,75 @@
1728762880,1728763903,VN
1728763904,1728764927,KR
1728764928,1728765439,SG
+1728765440,1728765695,IN
+1728765696,1728765951,ID
+1728765952,1728766975,IN
+1728766976,1728767999,TH
+1728768000,1728768255,AU
+1728768256,1728768511,NZ
+1728768512,1728769023,IN
+1728769024,1728770047,HK
+1728770048,1728772095,JP
+1728772096,1728773375,IN
+1728773376,1728773631,ID
+1728773632,1728774143,PH
+1728774144,1728775167,AU
+1728775168,1728776191,JP
+1728776192,1728777215,AU
+1728777216,1728778239,TH
+1728778240,1728779263,JP
+1728779264,1728779519,IN
+1728779520,1728779775,NZ
+1728779776,1728780287,ID
+1728780288,1728781311,KR
+1728781312,1728782335,ID
+1728782336,1728783359,LK
+1728783360,1728784383,HK
+1728784384,1728785407,PH
+1728785408,1728786431,KR
+1728786432,1728787455,SG
+1728787456,1728788479,AU
+1728788480,1728789503,KR
+1728789504,1728790527,PK
+1728790528,1728791551,PH
+1728791552,1728792575,PK
+1728792576,1728793087,NZ
+1728793088,1728793599,ID
+1728793600,1728794623,AU
+1728794624,1728796671,IN
+1728796672,1728798719,HK
+1728798720,1728799743,ID
+1728799744,1728801279,HK
+1728801280,1728801791,ID
+1728801792,1728802815,HK
+1728802816,1728803839,PH
+1728803840,1728804863,IN
+1728804864,1728805887,JP
+1728805888,1728806911,NZ
+1728806912,1728807935,KR
+1728807936,1728808959,ID
+1728808960,1728809983,BD
+1728809984,1728810495,SG
+1728810496,1728810751,AU
+1728810752,1728811007,SG
+1728811008,1728812031,AU
+1728812032,1728812543,ID
+1728812544,1728813055,SG
+1728813056,1728814079,IN
+1728814080,1728815103,JP
+1728815104,1728818175,AU
+1728818176,1728819199,VN
+1728819200,1728819711,ID
+1728819712,1728819967,NZ
+1728819968,1728820223,ID
+1728820224,1728821247,CN
+1728821248,1728821759,AU
+1728822272,1728823295,SG
+1728823296,1728824319,MN
+1728824320,1728825343,JP
+1729495040,1729519615,CN
+1729519616,1729520639,HK
+1729520640,1729527807,CN
1729527808,1729528831,SG
1729528832,1729530879,ID
1729530880,1729531903,MY
@@ -59342,6 +61152,38 @@
1729983488,1729984511,IN
1729984512,1729985535,ID
1729985536,1729986559,BD
+1729986560,1729989631,CN
+1729989632,1729990655,HK
+1729990656,1729991679,MN
+1729991680,1729992703,ID
+1729992704,1729993727,NC
+1729993728,1729994751,IN
+1729994752,1729995519,AU
+1729995520,1729995775,PK
+1729995776,1729996799,ID
+1729996800,1729997311,AU
+1729997312,1729997823,ID
+1729997824,1729998847,AU
+1729998848,1730000895,JP
+1730000896,1730001919,ID
+1730001920,1730002943,TH
+1730002944,1730003967,AU
+1730003968,1730004223,ID
+1730004224,1730004479,IN
+1730004480,1730004735,MY
+1730004736,1730004991,MN
+1730004992,1730007039,AU
+1730007040,1730008063,IN
+1730008064,1730009087,ID
+1730009088,1730010111,AU
+1730010112,1730011135,IN
+1730011136,1730012159,BT
+1730012160,1730013183,ID
+1730013184,1730015231,IN
+1730015232,1730016255,MY
+1730016256,1730017279,PH
+1730017280,1730017791,IN
+1730017792,1730019327,PH
1744175104,1744176127,ID
1744176128,1744177151,AU
1744177152,1744179199,CN
@@ -59360,7 +61202,8 @@
1744192512,1744194559,JP
1744194560,1744194815,ID
1744194816,1744195071,HK
-1744195072,1744195583,SG
+1744195072,1744195327,SG
+1744195328,1744195583,HK
1744195584,1744196607,JP
1744196608,1744197631,IN
1744197632,1744198655,MY
@@ -59373,6 +61216,46 @@
1744203776,1744204799,MY
1744204800,1744205823,ID
1744205824,1744207871,CN
+1744207872,1744208127,AU
+1744208128,1744208383,ID
+1744208384,1744208895,AU
+1744208896,1744209919,CN
+1744209920,1744210943,AU
+1744210944,1744211967,SG
+1744211968,1744212991,KH
+1744212992,1744214015,JP
+1744214016,1744216063,CN
+1744216064,1744217087,HK
+1744217088,1744218111,JP
+1744218112,1744218367,AU
+1744218368,1744218623,ID
+1744218624,1744219135,IN
+1744219136,1744220159,PH
+1744220160,1744221183,HK
+1744221184,1744222207,NZ
+1744222208,1744222719,ID
+1744222720,1744223231,AU
+1744223232,1744224255,TH
+1744224256,1744225279,JP
+1744225280,1744226303,IN
+1744226304,1744227327,SG
+1744227328,1744228351,MY
+1744228352,1744229375,TW
+1744229376,1744230399,IN
+1744230400,1744230655,HK
+1744230656,1744230911,MY
+1744230912,1744231423,IN
+1744231424,1744232447,VN
+1744232448,1744233471,IN
+1744233472,1744234495,KH
+1744234496,1744234751,JP
+1744234752,1744235519,AU
+1744235520,1744236543,KR
+1744236544,1744237567,IN
+1744237568,1744238591,HK
+1744238592,1744238847,US
+1744238848,1744239615,NZ
+1744239616,1744240639,JP
1769996288,1772093439,MA
1778384896,1778385151,CN
1778385152,1778385407,AU
@@ -59400,7 +61283,58 @@
1790967808,1793064959,IN
1793064960,1794113535,CN
1794113536,1795162111,KR
-1795162112,1815822335,US
+1795162112,1795555359,US
+1795555360,1795555455,CA
+1795555456,1795555519,US
+1795555520,1795555583,CA
+1795555584,1795555839,US
+1795555840,1795555855,CA
+1795555856,1795555863,US
+1795555864,1795555903,CA
+1795555904,1795555967,AN
+1795555968,1795556095,CA
+1795556096,1795556103,US
+1795556104,1795556127,CA
+1795556128,1795556175,US
+1795556176,1795556183,CA
+1795556184,1795556191,US
+1795556192,1795556255,CA
+1795556256,1795556287,US
+1795556288,1795556319,QA
+1795556320,1795556351,US
+1795556352,1795556607,GB
+1795556608,1795556639,US
+1795556640,1795556671,CA
+1795556672,1795556735,US
+1795556736,1795556863,CA
+1795556864,1795556927,US
+1795556928,1795556959,CA
+1795556960,1795556991,US
+1795556992,1795557119,CA
+1795557120,1795557135,US
+1795557136,1795557143,CA
+1795557144,1795557151,US
+1795557152,1795557215,CA
+1795557216,1795557247,US
+1795557248,1795557287,CA
+1795557288,1795557311,US
+1795557312,1795557375,CA
+1795557376,1795557887,IN
+1795557888,1795558143,US
+1795558144,1795558655,IN
+1795558656,1795558911,US
+1795558912,1795559423,IN
+1795559424,1795559679,AR
+1795559680,1795559743,US
+1795559744,1795559807,AE
+1795559808,1795560447,US
+1795560448,1795560959,CA
+1795560960,1795561471,US
+1795561472,1795561983,CA
+1795561984,1795565055,US
+1795565056,1795565567,IN
+1795565568,1803550719,US
+1809842176,1815822335,US
1815822336,1815826431,CA
1815826432,1815871487,US
1815871488,1815879679,CA
@@ -59408,18 +61342,40 @@
1815912448,1815920639,CA
1815920640,1815928831,US
1815928832,1815937023,BS
-1815937024,1816024319,US
+1815937024,1816001791,US
+1816001792,1816002559,NL
+1816002560,1816024319,US
1816024320,1816024575,CA
1816024576,1816068095,US
1816068096,1816133631,CA
-1816133632,1828716543,US
+1816133632,1822429183,US
+1822429184,1822433279,CA
+1822433280,1822445567,US
+1822445568,1822453759,CA
+1822453760,1822486527,US
+1822486528,1822490623,CA
+1822490624,1822498815,US
+1822498816,1822502911,CA
+1822502912,1822511103,US
+1822515200,1822519295,US
+1822519296,1822523391,CA
+1822523392,1822527487,US
+1822556160,1822572543,US
+1822572544,1822605311,CA
+1822605312,1822621695,US
+1822687232,1822752767,US
+1824522240,1828716543,US
1828716544,1830813695,FR
1830813696,1831337983,NL
1831337984,1831862271,DE
1831862272,1832124415,PT
1832124416,1832386559,IT
1832386560,1832517631,DK
-1832517632,1832583167,SE
+1832517632,1832552448,SE
+1832552449,1832553471,DK
+1832553472,1832553472,SE
+1832553473,1832554495,DK
+1832554496,1832583167,SE
1832583168,1832648703,DK
1832648704,1832681471,HR
1832681472,1832714239,RU
@@ -59466,6 +61422,7 @@
1833248768,1833250815,MK
1833250816,1833254911,GB
1833254912,1833256959,DE
+1833256960,1833259007,RU
1833259008,1833261055,GB
1833261056,1833263103,PL
1833263104,1833265151,DE
@@ -59474,6 +61431,7 @@
1833269248,1833271295,FI
1833271296,1833273343,IT
1833273344,1833275391,EU
+1833275392,1833277439,IT
1833277440,1833279487,CH
1833279488,1833281535,AL
1833281536,1833283583,AT
@@ -59481,8 +61439,9 @@
1833285632,1833289727,FR
1833289728,1833291775,IT
1833291776,1833293823,CZ
-1833293824,1833294557,BE
-1833294558,1833294591,FR
+1833293824,1833294540,BE
+1833294541,1833294550,NL
+1833294551,1833294591,FR
1833294592,1833295871,BE
1833295872,1833297919,NL
1833297920,1833299967,GB
@@ -59591,11 +61550,14 @@
1833468160,1833468287,RU
1833468288,1833468575,CH
1833468576,1833468591,RU
-1833468592,1833471999,CH
+1833468592,1833469439,CH
+1833469440,1833469951,IN
+1833469952,1833471999,CH
1833472000,1833474047,EU
1833474048,1833474559,UA
1833474560,1833474815,RU
-1833474816,1833476095,EU
+1833474816,1833475071,EU
+1833475072,1833476095,DE
1833476096,1833477375,NL
1833477376,1833477503,GB
1833477504,1833477631,DE
@@ -59659,9 +61621,13 @@
1833672704,1833676799,GB
1833676800,1833677567,DE
1833677568,1833677599,CH
-1833677600,1833678903,DE
-1833678904,1833678911,HK
-1833678912,1833680895,DE
+1833677600,1833677775,DE
+1833677776,1833677783,FR
+1833677784,1833678903,DE
+1833678904,1833678935,HK
+1833678936,1833678959,DE
+1833678960,1833678975,BA
+1833678976,1833680895,DE
1833680896,1833684991,UA
1833684992,1833689087,DE
1833689088,1833693183,FI
@@ -59734,7 +61700,10 @@
1835627648,1835629567,SE
1835629568,1835630335,DK
1835630336,1835630591,SE
-1835630592,1835646975,RU
+1835630592,1835636735,RU
+1835636736,1835638527,LU
+1835638528,1835638783,AM
+1835638784,1835646975,RU
1835646976,1835655167,BA
1835655168,1835663359,CY
1835663360,1835671551,UA
@@ -59772,10 +61741,10 @@
1835917312,1835920127,GB
1835920128,1835920199,PT
1835920200,1835920207,GB
-1835920208,1835920215,PT
-1835920216,1835920255,GB
-1835920256,1835920319,PT
-1835920320,1835925503,GB
+1835920208,1835920271,PT
+1835920272,1835920279,GB
+1835920280,1835920335,PT
+1835920336,1835925503,GB
1835925504,1835933695,LV
1835933696,1835941887,RU
1835941888,1835950079,UA
@@ -59834,6 +61803,16 @@
1839333376,1839366143,UA
1839366144,1839398911,IR
1839398912,1839431679,NO
+1839431680,1839448063,BA
+1839448064,1839450111,KZ
+1839450112,1839452159,NO
+1839452160,1839454207,FI
+1839454208,1839456255,RU
+1839456256,1839459327,RO
+1839459328,1839459839,DE
+1839459840,1839460351,RO
+1839460352,1839462399,RU
+1839462400,1839464447,FI
1839464448,1839497215,CZ
1839497216,1839529983,CH
1839529984,1839562751,RU
@@ -59845,17 +61824,13 @@
1839756328,1839756335,FR
1839756336,1839759359,IT
1839759360,1839792127,RU
-1839792128,1839794687,GB
-1839794688,1839794943,US
-1839794944,1839795151,GB
+1839792128,1839795151,GB
1839795152,1839795167,US
1839795168,1839796607,GB
1839796608,1839796671,US
1839796672,1839797759,GB
1839797760,1839798015,GR
-1839798016,1839798271,GB
-1839798272,1839798399,DE
-1839798400,1839798527,GB
+1839798016,1839798527,GB
1839798528,1839798559,US
1839798560,1839800447,GB
1839800448,1839800479,SG
@@ -59864,15 +61839,15 @@
1839800960,1839801023,GR
1839801024,1839801279,GB
1839801280,1839801311,VG
-1839801312,1839801343,GB
-1839801344,1839801471,CN
-1839801472,1839801551,GB
+1839801312,1839801551,GB
1839801552,1839801567,US
1839801568,1839802111,GB
1839802112,1839802239,RO
1839802240,1839806463,GB
1839806464,1839811071,US
-1839811072,1839816703,GB
+1839811072,1839812607,GB
+1839812608,1839814143,US
+1839814144,1839816703,GB
1839816704,1839824895,NO
1839824896,1839890431,RU
1839890432,1839923199,GB
@@ -59897,6 +61872,7 @@
1840906240,1840971775,IL
1840971776,1841102847,RU
1841102848,1841168383,NO
+1841168384,1841233919,FR
1841233920,1841299455,RU
1841299456,1841430527,DE
1841430528,1841561599,RU
@@ -59989,7 +61965,34 @@
1842085888,1842118655,GB
1842118656,1842151423,FI
1842151424,1842153471,FR
-1842153472,1842155519,NO
+1842153472,1842153567,NO
+1842153568,1842153575,GB
+1842153576,1842153823,NO
+1842153824,1842153855,GB
+1842153856,1842153887,NO
+1842153888,1842153919,DE
+1842153920,1842153951,NE
+1842153952,1842153983,NO
+1842153984,1842154015,US
+1842154016,1842154031,NO
+1842154032,1842154047,US
+1842154048,1842154111,NO
+1842154112,1842154115,US
+1842154116,1842154119,NO
+1842154120,1842154143,US
+1842154144,1842154239,NO
+1842154240,1842154247,HK
+1842154248,1842154367,NO
+1842154368,1842154431,US
+1842154432,1842154495,NO
+1842154496,1842154511,CN
+1842154512,1842154527,SG
+1842154528,1842154559,AU
+1842154560,1842154751,NO
+1842154752,1842154815,AU
+1842154816,1842155007,NO
+1842155008,1842155263,AU
+1842155264,1842155519,SG
1842155520,1842157567,IT
1842157568,1842159615,AE
1842159616,1842161663,BA
@@ -60071,7 +62074,10 @@
1843789824,1843806207,SK
1843806208,1843822591,IR
1843822592,1843838975,RU
-1843838976,1843849215,DE
+1843838976,1843841535,DE
+1843841536,1843841791,CH
+1843841792,1843842047,AU
+1843842048,1843849215,DE
1843849216,1843850239,GB
1843850240,1843855359,DE
1843855360,1843871743,PL
@@ -60132,8 +62138,8 @@
1844031776,1844031999,EU
1844032000,1844032031,GB
1844032032,1844032255,EU
-1844032256,1844032831,CH
-1844032832,1844033271,EU
+1844032256,1844033023,CH
+1844033024,1844033271,EU
1844033272,1844033535,CH
1844033536,1844035583,RS
1844035584,1844037631,MD
@@ -60148,13 +62154,17 @@
1844058112,1844062207,RU
1844062208,1844064255,CZ
1844064256,1844068351,IT
+1844068352,1844068607,FR
+1844068608,1844070399,ES
1844070400,1844072447,GB
1844072448,1844076543,ES
1844076544,1844078591,IE
1844078592,1844080127,DE
1844080128,1844080639,PL
1844080640,1844082687,GE
-1844082688,1844084735,DE
+1844082688,1844084055,DE
+1844084056,1844084063,CH
+1844084064,1844084735,DE
1844084736,1844086783,RU
1844086784,1844088831,IT
1844088832,1844090879,AT
@@ -60164,7 +62174,9 @@
1844099072,1844101119,DE
1844101120,1844105215,GB
1844105216,1844107263,ES
-1844107264,1844109311,DE
+1844107264,1844107807,DE
+1844107808,1844107823,CH
+1844107824,1844109311,DE
1844109312,1844109567,US
1844109568,1844111359,GB
1844111360,1844113407,AL
@@ -60220,10 +62232,19 @@
1844170016,1844170019,NG
1844170020,1844170027,AF
1844170028,1844170031,IQ
-1844170032,1844170239,DE
+1844170032,1844170043,AF
+1844170044,1844170051,DE
+1844170052,1844170055,GH
+1844170056,1844170063,AF
+1844170064,1844170067,DE
+1844170068,1844170071,NG
+1844170072,1844170083,DE
+1844170084,1844170091,NG
+1844170092,1844170239,DE
1844170240,1844170255,AF
-1844170256,1844170259,IQ
-1844170260,1844170751,DE
+1844170256,1844170263,IQ
+1844170264,1844170279,AF
+1844170280,1844170751,DE
1844170752,1844174847,RU
1844174848,1844178943,DE
1844178944,1844180991,EE
@@ -60296,7 +62317,8 @@
1844318208,1844322303,IT
1844322304,1844326399,CZ
1844326400,1844329983,DK
-1844329984,1844330495,LU
+1844329984,1844330303,LU
+1844330304,1844330495,DK
1844330496,1844334591,GB
1844334592,1844342783,RU
1844342784,1844346879,IT
@@ -60425,7 +62447,7 @@
1850400768,1850408959,JP
1850408960,1850490879,CN
1850490880,1850507263,KR
-1850507264,1850509311,AU
+1850507264,1850510335,AU
1850510336,1850511359,KR
1850511360,1850513407,ID
1850513408,1850514431,TH
@@ -60652,12 +62674,7 @@
1877721088,1877737471,TW
1877737472,1877999615,JP
1877999616,1879048191,TW
-1879048192,1883218547,CN
-1883218548,1883218551,ES
-1883218552,1883218555,FR
-1883218556,1883218579,CN
-1883218580,1883218583,BE
-1883218584,1883504639,CN
+1879048192,1883504639,CN
1883504640,1883766783,JP
1883766784,1883770879,MN
1883770880,1883783167,KR
@@ -61978,7 +63995,7 @@
2033362944,2033364991,TH
2033364992,2033369087,TW
2033369088,2033377279,AU
-2033377280,2033385471,PH
+2033377280,2033385471,KR
2033385472,2033451007,CN
2033451008,2033487871,ID
2033487872,2033491967,PK
@@ -62006,12 +64023,7 @@
2033889280,2033891327,JP
2033891328,2033893375,ID
2033893376,2033909759,PH
-2033909760,2034213775,CN
-2034213776,2034213779,FR
-2034213780,2034213783,DE
-2034213784,2034213787,CN
-2034213788,2034213791,SL
-2034213792,2034237439,CN
+2033909760,2034237439,CN
2034237440,2034499583,KR
2034499584,2034761727,CN
2034761728,2035023871,NZ
@@ -62596,7 +64608,7 @@
2090745856,2090762239,MN
2090762240,2090778623,ID
2090778624,2090786815,HK
-2090786816,2090795007,SG
+2090786816,2090795007,MY
2090795008,2090860543,JP
2090860544,2091384831,CN
2091384832,2091646975,AU
@@ -62800,7 +64812,8 @@
2113830912,2113863679,CN
2113863680,2113929215,AU
2113929216,2130706431,JP
-2147483648,2147942399,US
+2147483648,2147549183,EU
+2147549184,2147942399,US
2147942400,2148007935,DE
2148007936,2148220515,US
2148220516,2148220535,AU
@@ -62813,7 +64826,27 @@
2150105088,2150236159,GB
2150236160,2150301695,US
2150301696,2150367231,CA
-2150367232,2151743487,US
+2150367232,2150432767,US
+2150432768,2150498303,IT
+2150498304,2151743487,US
+2151743488,2151759871,BY
+2151759872,2151768063,US
+2151768064,2151770111,GB
+2151770112,2151772159,BA
+2151772160,2151776255,IT
+2151776256,2151778303,AT
+2151778304,2151780351,RU
+2151780352,2151782399,DE
+2151782400,2151784447,ES
+2151784448,2151792639,IR
+2151792640,2151794687,CH
+2151794688,2151796735,IT
+2151796736,2151797759,NL
+2151797760,2151797775,DE
+2151797776,2151800319,NL
+2151800320,2151800831,DE
+2151800832,2151809023,PT
+2151809024,2151940095,IT
2152726528,2153119743,US
2153119744,2153250815,GB
2153250816,2153578495,US
@@ -62822,12 +64855,52 @@
2153906176,2153971711,GB
2153971712,2154037247,US
2154037248,2154102783,CA
-2154102784,2156003327,US
+2154102784,2155610111,US
+2155610112,2155675647,UA
+2155675648,2155806719,US
+2155806720,2155808767,IT
+2155808768,2155810815,RU
+2155810816,2155812863,FR
+2155812864,2155814911,GB
+2155814912,2155819007,NL
+2155819008,2155821055,DE
+2155821056,2155823103,IT
+2155823104,2155825151,DE
+2155825152,2155827199,AE
+2155827200,2155831295,PL
+2155831296,2155833343,RU
+2155833344,2155833855,SE
+2155833856,2155834367,NL
+2155834368,2155834879,SE
+2155834880,2155835391,NL
+2155835392,2155839487,RO
+2155839488,2155843583,FR
+2155843584,2155845631,RU
+2155845632,2155847679,DE
+2155847680,2155849727,ES
+2155849728,2155851775,TR
+2155851776,2155853823,KZ
+2155853824,2155855871,SE
+2155855872,2155872255,RO
+2155872256,2156003327,US
2156003328,2156134399,AT
2156134400,2156265471,US
2156265472,2156331007,KR
2156331008,2156593151,US
2156593152,2156658687,IL
+2156658688,2156691455,IR
+2156691456,2156695551,A2
+2156695552,2156697599,FR
+2156697600,2156699647,CY
+2156699648,2156703743,RU
+2156703744,2156707839,BG
+2156707840,2156709887,RU
+2156709888,2156711935,ES
+2156711936,2156713983,DE
+2156713984,2156716031,NL
+2156716032,2156718079,RO
+2156718080,2156720127,IS
+2156720128,2156724223,BY
2156724224,2156855295,CH
2156855296,2156920831,US
2156920832,2156986367,CA
@@ -62841,11 +64914,21 @@
2159869952,2159935487,CA
2159935488,2160525311,US
2160525312,2160590847,GB
-2160590848,2161508351,US
+2160590848,2160852991,US
+2160852992,2160885759,RU
+2160885760,2160893951,AT
+2160893952,2160902143,RU
+2160902144,2160906239,NL
+2160906240,2160908287,FR
+2160908288,2160910335,PL
+2160910336,2160914431,NL
+2160914432,2160918527,SA
+2160918528,2161508351,US
2161508352,2161573887,FI
2161573888,2162687999,US
2162688000,2162753535,GB
2162753536,2162819071,CA
+2162819072,2162884607,RO
2162884608,2163212287,US
2163212288,2163277823,GB
2163277824,2163288063,US
@@ -62936,7 +65019,9 @@
2178351104,2178416639,GB
2178416640,2178482175,US
2178482176,2178547711,DE
-2178547712,2179465215,US
+2178547712,2179379199,US
+2179379200,2179399679,GB
+2179399680,2179465215,US
2179530752,2179596287,DE
2179596288,2179661823,GB
2179661824,2179989503,US
@@ -62947,12 +65032,32 @@
2180579328,2180644863,JP
2180644864,2180907007,US
2180907008,2180972543,KR
-2180972544,2181824511,US
+2180972544,2181038079,US
+2181038080,2181040127,GB
+2181040128,2181042175,AZ
+2181042176,2181044223,DE
+2181044224,2181046271,AL
+2181046272,2181054463,UA
+2181054464,2181056511,AT
+2181056512,2181058559,DE
+2181058560,2181060607,GB
+2181060608,2181062655,BA
+2181062656,2181070847,FR
+2181070848,2181087231,IT
+2181087232,2181089279,FR
+2181089280,2181091327,SE
+2181091328,2181093375,IT
+2181093376,2181095423,RU
+2181095424,2181097471,GB
+2181097472,2181099519,UA
+2181099520,2181103615,SY
+2181103616,2181824511,US
2181824512,2181890047,CA
2181890048,2182021119,US
2182021120,2182086655,CA
2182086656,2182610943,US
2182610944,2182676479,GB
+2182676480,2182742015,IT
2182742016,2182873087,US
2182873088,2182938623,SE
2182938624,2183135231,US
@@ -62961,7 +65066,11 @@
2183266304,2183331839,JP
2183331840,2183462911,US
2183462912,2183528447,NL
-2183528448,2184577023,US
+2183528448,2183856127,US
+2183856128,2183888895,GR
+2183888896,2183905279,GB
+2183905280,2183921663,HU
+2183921664,2184577023,US
2184577024,2184642559,JP
2184642560,2184708095,US
2184708096,2184773631,AU
@@ -63054,9 +65163,32 @@
2191589376,2191654911,NL
2191654912,2192769023,US
2192769024,2192834559,CA
+2192834560,2192867327,DE
+2192867328,2192883711,SY
+2192883712,2192885759,PL
+2192885760,2192887807,GB
+2192887808,2192891903,UA
+2192891904,2192900095,RS
2192900096,2193031167,US
2193031168,2193096703,DE
2193096704,2193162239,US
+2193162240,2193178623,UA
+2193178624,2193180671,GB
+2193180672,2193182719,IR
+2193182720,2193184767,PT
+2193184768,2193186815,ES
+2193186816,2193188863,PL
+2193188864,2193190911,DE
+2193190912,2193195007,RU
+2193195008,2193199103,DK
+2193199104,2193201151,GB
+2193201152,2193202175,SE
+2193202176,2193203199,US
+2193203200,2193205247,GB
+2193205248,2193207295,FR
+2193207296,2193209343,CZ
+2193209344,2193211391,FR
+2193211392,2193227775,BG
2193227776,2193293311,IT
2193293312,2193358847,US
2193358848,2193424383,FI
@@ -63064,11 +65196,25 @@
2193489920,2193555455,FR
2193555456,2193620991,US
2193620992,2193686527,IT
+2193686528,2193688575,FR
+2193688576,2193692671,CZ
+2193692672,2193694719,FR
+2193694720,2193704959,RU
+2193704960,2193707007,IT
+2193707008,2193711103,GB
+2193711104,2193713151,DE
+2193713152,2193715199,ES
+2193715200,2193717247,DE
+2193717248,2193719295,AM
+2193719296,2193752063,IQ
2193752064,2193817599,AU
2193817600,2193883135,NZ
2193883136,2194014207,US
2194014208,2194079743,CH
-2194079744,2194407423,US
+2194079744,2194210815,US
+2194210816,2194276351,GB
+2194276352,2194407423,US
+2194407424,2194472959,BG
2194472960,2194538495,US
2194538496,2194604031,ES
2194604032,2194669567,US
@@ -63091,7 +65237,18 @@
2197225472,2197422079,US
2197422080,2197487615,CA
2197487616,2197553151,IT
-2197553152,2197815295,US
+2197553152,2197749759,US
+2197749760,2197751807,IQ
+2197751808,2197753855,RU
+2197753856,2197757951,GB
+2197757952,2197766143,RU
+2197766144,2197768191,PS
+2197768192,2197770239,IL
+2197770240,2197772287,RU
+2197772288,2197774335,IQ
+2197774336,2197776383,IT
+2197776384,2197778431,DE
+2197778432,2197780479,IT
2197880832,2197946367,IT
2197946368,2204172287,US
2204172288,2204237823,SE
@@ -63693,9 +65850,7 @@
2305622016,2305687551,AU
2305687552,2305753087,US
2305753088,2305818623,AU
-2305818624,2306146303,US
-2306146304,2306211839,CA
-2306211840,2306342911,US
+2305818624,2306342911,US
2306342912,2306408447,NL
2306408448,2306473983,FR
2306473984,2306539519,CA
@@ -63866,7 +66021,8 @@
2330066944,2330132479,US
2330132480,2330198015,SE
2330198016,2330263551,CH
-2330263552,2330394623,US
+2330263552,2330267647,US
+2330329088,2330394623,US
2330394624,2330460159,FR
2330460160,2330525695,AT
2330525696,2330591231,SE
@@ -64038,7 +66194,7 @@
2354249728,2354315263,AU
2354315264,2354380799,DE
2354380800,2354446335,NL
-2354446336,2354511871,FR
+2354446336,2354511871,SE
2354511872,2354577407,CA
2354577408,2354839551,US
2354839552,2354905087,TW
@@ -64127,11 +66283,25 @@
2365644800,2365652991,NO
2365652992,2366111743,DE
2366111744,2366144511,MT
-2366144512,2366162943,RU
+2366144512,2366149375,RU
+2366149376,2366149407,DE
+2366149408,2366149423,PL
+2366149424,2366149439,SK
+2366149440,2366149455,PT
+2366149456,2366149471,ES
+2366149472,2366149487,FR
+2366149488,2366149495,MD
+2366149496,2366149503,LT
+2366149504,2366149511,LV
+2366149512,2366149519,EE
+2366149520,2366149527,BG
+2366149528,2366149535,RS
+2366149536,2366162943,RU
2366162944,2366164991,AL
2366164992,2366167039,GE
2366167040,2366169087,GB
-2366169088,2366308351,DE
+2366169088,2366171135,CH
+2366171136,2366308351,DE
2366308352,2366373887,GB
2366373888,2367487999,DE
2367488000,2367553535,SI
@@ -64153,7 +66323,9 @@
2372218880,2372220927,FR
2372220928,2372222975,KW
2372222976,2372239359,EU
-2372239360,2372272127,RU
+2372239360,2372264447,RU
+2372264448,2372266495,UA
+2372266496,2372272127,RU
2372272128,2372337663,US
2372337664,2372403199,ID
2372403200,2372468735,US
@@ -64163,7 +66335,11 @@
2372474624,2372474879,GB
2372474880,2372483071,RU
2372483072,2372485119,JO
-2372485120,2372487167,RU
+2372485120,2372485247,RU
+2372485248,2372485375,IN
+2372485376,2372485823,RU
+2372485824,2372485887,NL
+2372485888,2372487167,RU
2372487168,2372489215,FR
2372489216,2372493311,LB
2372493312,2372497407,ES
@@ -64218,7 +66394,8 @@
2374512640,2374514687,SK
2374514688,2374516735,ES
2374516736,2374524927,AM
-2374524928,2374529023,FR
+2374524928,2374525183,DE
+2374525184,2374529023,FR
2374529024,2374531071,RU
2374531072,2374533119,NL
2374533120,2374565887,HR
@@ -64233,17 +66410,29 @@
2374670336,2374672383,FR
2374672384,2374674431,PL
2374674432,2374676479,NL
+2374676480,2374680575,LB
2374680576,2374684671,NL
-2374684672,2374686719,GB
+2374684672,2374684991,GB
+2374684992,2374685119,FI
+2374685120,2374685247,GB
+2374685248,2374685375,NO
+2374685376,2374685503,GB
+2374685504,2374685631,DK
+2374685632,2374685759,GB
+2374685760,2374685887,NL
+2374685888,2374686015,GB
+2374686016,2374686143,PL
+2374686144,2374686271,GB
+2374686272,2374686303,NL
+2374686304,2374686719,GB
2374686720,2374688767,NL
2374688768,2374696959,GB
2374696960,2374959103,US
-2374959104,2375024639,BE
+2374959104,2375024639,SE
2375024640,2375090175,DK
2375090176,2375155711,NO
2375155712,2375221247,US
-2375221248,2375286783,SE
-2375286784,2375352319,CH
+2375221248,2375352319,SE
2375352320,2376269823,US
2376269824,2376335359,GB
2376335360,2376597503,US
@@ -64253,6 +66442,7 @@
2376761344,2376777727,CZ
2376777728,2376781823,BA
2376781824,2376783871,ES
+2376783872,2376785919,FR
2376785920,2376794111,UA
2376794112,2376859647,CH
2376859648,2376925183,FI
@@ -64555,50 +66745,7 @@
2447679820,2447679839,IT
2447679840,2447704063,DE
2447704064,2447769599,GB
-2447769600,2447769855,DE
-2447769856,2447770111,GB
-2447770112,2447775743,DE
-2447775744,2447777791,GB
-2447777792,2447781887,DE
-2447781888,2447782911,GB
-2447782912,2447783935,LU
-2447783936,2447784959,GB
-2447784960,2447785983,LU
-2447785984,2447788031,DE
-2447788032,2447790079,QA
-2447790080,2447792127,DE
-2447792128,2447792383,GB
-2447792384,2447793919,DE
-2447793920,2447794175,QA
-2447794176,2447796223,DE
-2447796224,2447798271,GB
-2447798272,2447801343,DE
-2447801344,2447802367,IT
-2447802368,2447806463,DE
-2447806464,2447808511,HU
-2447808512,2447810559,DE
-2447810560,2447812607,GB
-2447812608,2447813631,HU
-2447813632,2447813887,IE
-2447813888,2447814143,DE
-2447814144,2447814655,GB
-2447814656,2447815679,DE
-2447815680,2447816191,IT
-2447816192,2447816447,GB
-2447816448,2447816703,DE
-2447816704,2447817727,GB
-2447817728,2447821055,DE
-2447821056,2447821311,QA
-2447821312,2447821823,GB
-2447821824,2447824895,IT
-2447824896,2447826943,DE
-2447826944,2447827967,GB
-2447827968,2447830015,DE
-2447830016,2447830527,IT
-2447830528,2447833087,DE
-2447833088,2447833599,GB
-2447833600,2447834111,DE
-2447834112,2447835135,IT
+2447769600,2447835135,DE
2447835136,2447900671,FR
2447900672,2447966207,CH
2447966208,2448031743,GB
@@ -64630,6 +66777,7 @@
2449481728,2449489919,RO
2449489920,2449491967,FR
2449491968,2449494015,NL
+2449494016,2449496063,UA
2449496064,2449498111,FR
2449498112,2449506303,DE
2449506304,2449539071,RO
@@ -64661,13 +66809,14 @@
2453733376,2453798911,US
2453798912,2453800959,GB
2453800960,2453803007,RU
+2453803008,2453805055,KZ
2453805056,2453807103,FI
2453807104,2453815295,GB
2453815296,2453831679,RO
2453831680,2453831807,IR
2453831808,2453831871,IQ
-2453831872,2453832703,IR
-2453832704,2453833727,IQ
+2453831872,2453832959,IR
+2453832960,2453833727,IQ
2453833728,2453835775,ES
2453835776,2453837823,DE
2453837824,2453838335,LU
@@ -64675,6 +66824,7 @@
2453839872,2453852159,RU
2453852160,2453856255,RO
2453856256,2453858303,DE
+2453858304,2453860351,SE
2453860352,2453864447,ES
2453864448,2453929983,CH
2453929984,2454061055,US
@@ -64721,11 +66871,13 @@
2457141248,2457206783,JP
2457206784,2457272319,AU
2457272320,2457337855,FI
-2457337856,2457360895,RU
-2457360896,2457361151,UA
-2457361152,2457362431,CZ
-2457362432,2457364479,RU
-2457364480,2457376767,CZ
+2457337856,2457360383,RU
+2457360384,2457361151,UA
+2457361152,2457361407,CZ
+2457361408,2457364479,RU
+2457364480,2457366527,CZ
+2457366528,2457367551,GB
+2457367552,2457376767,CZ
2457376768,2457378815,DE
2457378816,2457380863,RU
2457380864,2457382911,EE
@@ -64786,8 +66938,14 @@
2461612032,2461614079,IL
2461614080,2461630463,TR
2461630464,2461651967,RU
-2461651968,2461652991,GB
-2461652992,2461663231,RU
+2461651968,2461652991,CY
+2461652992,2461659135,RU
+2461659136,2461659391,UA
+2461659392,2461659903,RU
+2461659904,2461660159,UA
+2461660160,2461660415,RU
+2461660416,2461660671,RO
+2461660672,2461663231,RU
2461663232,2461794303,US
2461794304,2461859839,GB
2461859840,2461990911,US
@@ -64833,29 +66991,31 @@
2465683456,2465685503,FR
2465685504,2465690367,DE
2465690368,2465690431,US
-2465690432,2465690623,CH
+2465690432,2465690623,IT
2465690624,2465690639,GB
-2465690640,2465691135,CH
+2465690640,2465690879,IT
+2465690880,2465690895,CH
+2465690896,2465691135,IT
2465691136,2465691151,DE
-2465691152,2465691391,CH
+2465691152,2465691391,IT
2465691392,2465691407,NL
-2465691408,2465691647,CH
+2465691408,2465691647,IT
2465691648,2465691663,BR
-2465691664,2465691903,CH
+2465691664,2465691903,IT
2465691904,2465691919,JP
-2465691920,2465692159,CH
+2465691920,2465692159,IT
2465692160,2465692175,CN
-2465692176,2465692415,CH
+2465692176,2465692415,IT
2465692416,2465692431,LT
-2465692432,2465692671,CH
+2465692432,2465692671,IT
2465692672,2465692687,FR
-2465692688,2465692927,CH
+2465692688,2465692927,IT
2465692928,2465692943,ID
-2465692944,2465693183,CH
+2465692944,2465693183,IT
2465693184,2465693199,RU
-2465693200,2465693439,CH
+2465693200,2465693439,IT
2465693440,2465693455,FR
-2465693456,2465693695,CH
+2465693456,2465693695,IT
2465693696,2465726463,NO
2465726464,2465791999,CH
2465792000,2465857535,FR
@@ -64921,9 +67081,9 @@
2471165952,2471231487,CH
2471231488,2471297023,AU
2471297024,2471362559,GB
-2471362560,2471428095,EU
2471428096,2471690239,US
2471690240,2471821311,ES
+2471821312,2471886847,US
2471886848,2472083455,CH
2472083456,2472148991,GB
2472148992,2472214527,US
@@ -65090,7 +67250,9 @@
2500038656,2500040703,IT
2500040704,2500042751,LB
2500042752,2500046847,SA
-2500046848,2500048895,IT
+2500046848,2500047359,IT
+2500047360,2500047615,DE
+2500047616,2500048895,IT
2500048896,2500050943,MD
2500050944,2500067327,KZ
2500067328,2501574655,US
@@ -65100,6 +67262,10 @@
2503081984,2503671807,US
2503671808,2503737343,NL
2503737344,2503868415,US
+2503868416,2503876607,RU
+2503876608,2503880703,ES
+2503880704,2503882751,RU
+2503882752,2503884799,DE
2503884800,2503901183,SI
2503901184,2503905279,IT
2503905280,2503907327,CZ
@@ -65119,7 +67285,8 @@
2508075008,2508077055,CH
2508077056,2508079103,BE
2508079104,2508081151,DE
-2508081152,2508083199,IL
+2508081152,2508081279,GB
+2508081280,2508083199,IL
2508083200,2508085247,IS
2508085248,2508087295,PS
2508087296,2508089343,RU
@@ -65152,6 +67319,49 @@
2509916160,2509918207,DE
2509918208,2509920255,FR
2509920256,2509922303,IT
+2509922304,2509924351,AT
+2509924352,2509928447,RU
+2509928448,2509930495,FI
+2509930496,2509934591,RU
+2509934592,2509936639,DE
+2509936640,2509937681,AT
+2509937682,2509937682,ME
+2509937683,2509937683,IR
+2509937684,2509937684,IQ
+2509937685,2509937685,AQ
+2509937686,2509937686,MP
+2509937687,2509937687,BT
+2509937688,2509937688,KP
+2509937689,2509937689,KY
+2509937690,2509937690,BS
+2509937691,2509937691,CU
+2509937692,2509937692,SO
+2509937693,2509937693,SZ
+2509937694,2509937694,NA
+2509937695,2509937695,AM
+2509937696,2509937697,CN
+2509937698,2509937713,AT
+2509937714,2509937714,CV
+2509937715,2509937715,ER
+2509937716,2509937716,ET
+2509937717,2509937717,KE
+2509937718,2509937718,NG
+2509937719,2509937719,DO
+2509937720,2509937720,JM
+2509937721,2509937721,AG
+2509937722,2509937722,VI
+2509937723,2509937723,MQ
+2509937724,2509937724,KI
+2509937725,2509937725,VU
+2509937726,2509937726,TK
+2509937727,2509937727,MK
+2509937728,2509937728,TM
+2509937729,2509937729,IM
+2509937730,2509938175,AT
+2509938176,2509938431,US
+2509938432,2509938687,DE
+2509938688,2509946879,UA
+2509946880,2509963263,BE
2509963264,2510028799,GB
2510028800,2510094335,PL
2510094336,2510159871,IE
@@ -65160,23 +67370,50 @@
2510815232,2510946303,US
2510946304,2511011839,GB
2511011840,2511077375,AU
-2511077376,2511339519,US
+2511077376,2511142911,DE
+2511142912,2511339519,US
2511339520,2511405055,AU
2511405056,2512715775,GB
2512715776,2512781311,FI
2512781312,2512912383,US
-2512912384,2513502207,DE
+2512912384,2512945151,HU
+2512945152,2512977919,JO
+2512977920,2513502207,DE
2513502208,2513567743,NO
+2513567744,2513600511,GR
+2513600512,2513633279,RO
2513633280,2513698815,DE
2513698816,2513764351,DK
2513764352,2514419711,DE
2514419712,2514485247,GB
2514485248,2514514431,DE
2514514432,2514514687,NL
-2514514688,2516254719,DE
+2514514688,2515599359,DE
+2515599360,2515664895,GB
+2515664896,2516254719,DE
2516254720,2516320255,FR
2516320256,2516451327,US
2516451328,2516516863,GB
+2516516864,2516520959,RU
+2516520960,2516523007,SA
+2516523008,2516525055,RU
+2516525056,2516525823,US
+2516525824,2516527103,NL
+2516527104,2516529151,GB
+2516529152,2516531199,CH
+2516531200,2516533247,GB
+2516533248,2516541439,CZ
+2516541440,2516545535,GB
+2516545536,2516547583,RU
+2516547584,2516549631,GB
+2516549632,2516551679,RU
+2516551680,2516553727,FR
+2516553728,2516557823,AZ
+2516557824,2516559871,RU
+2516559872,2516561919,GB
+2516561920,2516563967,LI
+2516563968,2516566015,GB
+2516566016,2516582399,IQ
2516582400,2516647935,CN
2516647936,2523201535,JP
2523201536,2523267071,AU
@@ -65189,7 +67426,6 @@
2524512256,2524643327,CN
2524643328,2524971007,US
2524971008,2525036543,ES
-2525036544,2525102079,EU
2525102080,2525233151,US
2525233152,2525298687,SE
2525298688,2525626367,US
@@ -65235,7 +67471,7 @@
2531459072,2531524607,SE
2531524608,2531590143,US
2531590144,2531655679,AU
-2531655680,2532048895,US
+2531721216,2532048895,US
2532048896,2532114431,SE
2532114432,2532179967,GB
2532179968,2532376575,US
@@ -65317,7 +67553,9 @@
2556559360,2556624895,AU
2556624896,2556690431,KR
2556690432,2556755967,US
-2556755968,2557018111,HK
+2556755968,2556821503,HK
+2556821504,2556887039,SG
+2556887040,2557018111,HK
2557018112,2557083647,GB
2557083648,2557542399,ZA
2557542400,2557607935,US
@@ -65360,12 +67598,9 @@
2568224768,2568290303,SG
2568290304,2569142271,US
2569142272,2569404415,CN
-2569404416,2569601023,US
-2569601024,2569666559,CA
-2569666560,2569797631,US
+2569404416,2569797631,US
2569797632,2569863167,NO
-2569863168,2569928703,US
-2569928704,2569994239,CH
+2569863168,2569994239,CH
2569994240,2570125311,US
2570125312,2570190847,BE
2570190848,2572681215,US
@@ -65391,7 +67626,9 @@
2574319616,2574647295,US
2574647296,2574778367,CN
2574778368,2583691263,JP
-2583691264,2584215551,US
+2583691264,2584018943,US
+2584018944,2584084479,CA
+2584084480,2584215551,US
2584215552,2584281087,GB
2584281088,2584346623,US
2584346624,2584412159,KR
@@ -65536,9 +67773,7 @@
2621636608,2621702143,DE
2621702144,2621767679,US
2621767680,2621833215,NZ
-2621833216,2622423039,US
-2622423040,2622488575,CA
-2622488576,2622685183,US
+2621833216,2622685183,US
2622685184,2622750719,NL
2622750720,2623602687,US
2623602688,2623668223,CL
@@ -65680,15 +67915,18 @@
2653880320,2653945855,IT
2653945856,2654011391,US
2654011392,2654076927,ES
-2654076928,2654142463,FR
+2654076928,2654085119,FR
+2654085120,2654089215,HK
+2654089216,2654093311,FR
+2654093312,2654097407,US
+2654097408,2654142463,FR
2654208000,2654339071,US
2654339072,2654404607,AU
2654404608,2654994431,US
2654994432,2655059967,LU
2655059968,2655125503,US
-2655125504,2655185151,EU
-2655185152,2655186944,PL
-2655186945,2655256575,EU
+2655125504,2655191039,PL
+2655191040,2655256575,EU
2655256576,2655715327,US
2655715328,2655780863,PL
2655780864,2656632831,US
@@ -65778,7 +68016,9 @@
2667118592,2667184127,HU
2667184128,2667249663,RU
2667249664,2667315199,CL
-2667315200,2667970559,US
+2667315200,2667577343,US
+2667577344,2667642879,SA
+2667642880,2667970559,US
2667970560,2668036095,CA
2668036096,2668101631,SE
2668101632,2668167167,CH
@@ -65791,6 +68031,15 @@
2668691456,2668756991,US
2668756992,2668822527,CA
2668822528,2668888063,US
+2668888064,2668890111,DK
+2668890112,2668892159,FR
+2668892160,2668894207,BA
+2668894208,2668896255,MT
+2668896256,2668904447,GB
+2668904448,2668912639,TR
+2668912640,2668916735,IR
+2668918784,2668920831,ES
+2668920832,2668953599,IT
2668953600,2669019135,US
2669019136,2669084671,CH
2669084672,2669150207,ES
@@ -65827,6 +68076,7 @@
2672951296,2673082367,US
2673082368,2673147903,FR
2673147904,2673213439,US
+2673213440,2673278975,GB
2673278976,2673410047,US
2673410048,2673475583,CA
2673475584,2673541119,VE
@@ -65861,6 +68111,8 @@
2676424704,2677014527,US
2677014528,2677080063,CH
2677080064,2677145599,US
+2677145600,2677178367,TR
+2677178368,2677211135,UA
2677211136,2677276671,GB
2677276672,2677342207,LV
2677342208,2677407743,IT
@@ -65873,6 +68125,7 @@
2677800960,2677866495,CH
2677866496,2677997567,US
2677997568,2678063103,CA
+2678063104,2678128639,UA
2678128640,2678194175,US
2678194176,2678259711,NO
2678259712,2678521855,US
@@ -65905,6 +68158,7 @@
2680553472,2680684543,US
2680684544,2680750079,SE
2680750080,2681012223,US
+2681012224,2681077759,PL
2681077760,2681143295,CA
2681143296,2681208831,AU
2681208832,2681274367,CA
@@ -65919,6 +68173,7 @@
2681864192,2681929727,US
2681929728,2681995263,GB
2681995264,2682257407,US
+2682257408,2682322943,UA
2682322944,2682388479,US
2682388480,2682454015,CN
2682454016,2682519551,US
@@ -65943,7 +68198,54 @@
2683699200,2683830271,US
2683830272,2683895807,AU
2683895808,2684157951,US
+2684157952,2684159999,NL
+2684160000,2684162047,NO
+2684162048,2684164095,EE
+2684164096,2684166143,SE
+2684166144,2684170239,TR
+2684170240,2684178431,GB
+2684178432,2684180479,TR
+2684180480,2684182527,DK
+2684182528,2684184575,IT
+2684184576,2684186623,SK
+2684186624,2684188671,DE
+2684188672,2684190719,RU
+2684190720,2684197119,NL
+2684197120,2684197631,GB
+2684197632,2684198399,NL
+2684198400,2684200959,GB
+2684200960,2684203007,RU
+2684203008,2684204031,CZ
+2684204032,2684204543,HK
+2684204544,2684205055,GB
+2684205056,2684207103,IT
+2684207104,2684213247,GB
+2684213248,2684215295,MK
+2684215296,2684217343,BE
+2684217344,2684219391,CZ
+2684219392,2684221439,PL
+2684221440,2684223487,IL
2684223488,2684289023,GB
+2684289024,2684297215,RU
+2684297216,2684299263,IR
+2684299264,2684301311,CY
+2684301312,2684305407,PT
+2684305408,2684321791,RU
+2684321792,2684329983,IT
+2684329984,2684332031,IQ
+2684332032,2684334079,DE
+2684334080,2684338175,PL
+2684338176,2684338303,NL
+2684338304,2684338399,ES
+2684338400,2684338687,NL
+2684338688,2684339103,ES
+2684339104,2684339119,NL
+2684339120,2684339135,ES
+2684339136,2684339199,NL
+2684339200,2684340223,ES
+2684340224,2684344319,GB
+2684344320,2684346367,NL
+2684346368,2684354559,FI
2684354560,2684616703,US
2684616704,2684682239,NZ
2684682240,2684747775,GB
@@ -66112,7 +68414,8 @@
2706960384,2706964479,US
2706964480,2707226623,NL
2707226624,2707488767,JP
-2707488768,2707947519,US
+2707488768,2707619839,US
+2707619840,2707947519,GB
2707947520,2708144127,FR
2708144128,2708340735,US
2708340736,2708406271,AT
@@ -66124,7 +68427,6 @@
2708865024,2708930559,JP
2708930560,2709127167,US
2709127168,2709192703,KR
-2709192704,2709258239,EU
2709258240,2709389311,US
2709389312,2709454847,SG
2709454848,2709716991,US
@@ -66315,7 +68617,9 @@
2755330048,2755395583,DE
2755395584,2755461119,FR
2755461120,2755526655,DE
-2755526656,2755985407,US
+2755526656,2755592191,US
+2755592192,2755657727,GB
+2755657728,2755985407,US
2755985408,2756182015,JP
2756182016,2756247551,US
2756247552,2756313087,UY
@@ -66710,7 +69014,9 @@
2816004352,2816004367,US
2816004368,2816004415,IL
2816004416,2816004479,US
-2816004480,2816008191,IL
+2816004480,2816004703,IL
+2816004704,2816004711,GB
+2816004712,2816008191,IL
2816008192,2816008207,IE
2816008208,2816010495,IL
2816010496,2816010751,US
@@ -66852,7 +69158,7 @@
2849179136,2849898495,KR
2849898496,2849898751,AU
2849898752,2849964031,KR
-2849964032,2850029567,PH
+2849964032,2850029567,CN
2850029568,2851995647,US
2852126720,2853306367,US
2853306368,2853371903,CL
@@ -66902,8 +69208,10 @@
2870018048,2870083583,DE
2870083584,2870087935,FR
2870087936,2870088191,ES
-2870088192,2870089727,FR
-2870089728,2870091775,GE
+2870088192,2870088959,FR
+2870088960,2870088991,ES
+2870088992,2870089727,FR
+2870089728,2870091775,DE
2870091776,2870095871,FR
2870095872,2870096383,SG
2870096384,2870149119,FR
@@ -67005,7 +69313,9 @@
2902507520,2902515711,CA
2902515712,2904555519,US
2904555520,2904817663,CA
-2904817664,2905376767,US
+2904817664,2905350751,US
+2905350752,2905350783,RU
+2905350784,2905376767,US
2905376768,2905377535,CA
2905377536,2905378303,US
2905378304,2905378815,CA
@@ -67017,9 +69327,15 @@
2905381888,2905382016,CA
2905382017,2905384959,US
2905384960,2905385471,CA
-2905385472,2905388031,US
+2905385472,2905385951,US
+2905385952,2905385983,CR
+2905385984,2905388031,US
2905388032,2905388287,CA
-2905388288,2905392895,US
+2905388288,2905391327,US
+2905391328,2905391335,CR
+2905391336,2905391359,US
+2905391360,2905391391,CR
+2905391392,2905392895,US
2905392896,2905393151,CA
2905393152,2905394175,US
2905394176,2905394943,CA
@@ -67039,7 +69355,9 @@
2905446656,2905446911,DE
2905446912,2905449983,US
2905449984,2905451007,CA
-2905451008,2905451519,US
+2905451008,2905451327,US
+2905451328,2905451391,CY
+2905451392,2905451519,US
2905451520,2905451647,PA
2905451648,2905473023,US
2905473024,2905481215,CA
@@ -67056,11 +69374,19 @@
2915275328,2915516415,US
2915516416,2915516671,NL
2915516672,2915516927,CA
-2915516928,2915765279,US
+2915516928,2915517439,US
+2915517440,2915518463,DK
+2915518464,2915520511,GB
+2915520512,2915521023,AU
+2915521024,2915521279,JP
+2915521280,2915521535,PL
+2915521536,2915526911,US
+2915526912,2915527167,DE
+2915527168,2915527679,US
+2915527680,2915528711,NL
+2915528712,2915765279,US
2915765280,2915765287,IN
-2915765288,2915765343,US
-2915765344,2915765351,NZ
-2915765352,2915765367,US
+2915765288,2915765367,US
2915765368,2915765375,ZA
2915765376,2915765431,US
2915765432,2915765439,MX
@@ -67100,9 +69426,7 @@
2915768376,2915768383,GB
2915768384,2915768431,US
2915768432,2915768439,IE
-2915768440,2915768487,US
-2915768488,2915768495,CA
-2915768496,2915768703,US
+2915768440,2915768703,US
2915768704,2915768767,GB
2915768768,2915768903,US
2915768904,2915768911,GR
@@ -67129,7 +69453,8 @@
2915772712,2915772719,GB
2915772720,2915772751,US
2915772752,2915772759,DE
-2915772760,2915773023,US
+2915772760,2915773015,US
+2915773016,2915773023,SG
2915773024,2915773039,IN
2915773040,2915773175,US
2915773176,2915773183,KW
@@ -67354,9 +69679,15 @@
2915810648,2915810663,CA
2915810664,2915811135,US
2915811136,2915811199,IN
-2915811200,2915958783,US
+2915811200,2915821791,US
+2915821792,2915821823,IL
+2915821824,2915958783,US
2915958784,2916024319,CA
-2916024320,2916118223,US
+2916024320,2916101535,US
+2916101536,2916101543,CA
+2916101544,2916101615,US
+2916101616,2916101623,CA
+2916101624,2916118223,US
2916118224,2916118231,LK
2916118232,2916120823,US
2916120824,2916120831,CA
@@ -67407,20 +69738,19 @@
2916442624,2916442879,CA
2916442880,2916443614,US
2916443615,2916443647,CA
-2916443648,2916444927,US
-2916444928,2916445951,CA
-2916445952,2916449279,US
+2916443648,2916449279,US
2916449280,2916450303,CA
-2916450304,2916515839,US
+2916450304,2916478975,US
+2916478976,2916483071,A1
+2916483072,2916515839,US
2916515840,2916519935,CA
-2916524032,2916530482,US
+2916519936,2916530482,US
2916530483,2916530552,AU
2916530553,2916581375,US
2916581376,2916614143,PR
2916614144,2917167679,US
2917167680,2917167743,BR
-2917167744,2917167807,US
-2917167808,2917167839,RS
+2917167744,2917167839,US
2917167840,2917167871,TR
2917167872,2917167903,US
2917167904,2917167935,TR
@@ -67439,9 +69769,7 @@
2917168448,2917168479,BR
2917168480,2917168607,US
2917168608,2917168639,BR
-2917168640,2917169663,US
-2917169664,2917169695,DE
-2917169696,2917170015,US
+2917168640,2917170015,US
2917170016,2917170047,UA
2917170048,2917170079,BR
2917170080,2917170111,US
@@ -67468,7 +69796,9 @@
2917210464,2917257215,US
2917257216,2917261311,KY
2917261312,2917265407,US
-2917265408,2917269503,JM
+2917265408,2917268223,JM
+2917268224,2917268479,BB
+2917268480,2917269503,JM
2917269504,2917449727,US
2917449728,2917466111,PR
2917466112,2917572607,US
@@ -67477,7 +69807,75 @@
2917597440,2917597695,GB
2917597696,2917621759,US
2917621760,2917629951,CA
-2917629952,2917663231,US
+2917629952,2917646591,US
+2917646592,2917647231,CN
+2917647232,2917647359,US
+2917647360,2917648511,CN
+2917648512,2917648639,US
+2917648640,2917649279,CN
+2917649280,2917649407,US
+2917649408,2917649535,RU
+2917649536,2917649663,CN
+2917649664,2917649791,GB
+2917649792,2917649919,AZ
+2917649920,2917650047,CN
+2917650048,2917650175,US
+2917650176,2917650303,CN
+2917650304,2917650431,PA
+2917650432,2917650559,CN
+2917650560,2917651071,US
+2917651072,2917651455,CN
+2917651456,2917651711,US
+2917651712,2917651839,CR
+2917651840,2917652095,CN
+2917652096,2917652223,IN
+2917652224,2917652479,AU
+2917652480,2917652735,CN
+2917652736,2917652863,NZ
+2917652864,2917653247,US
+2917653248,2917653375,CN
+2917653376,2917653503,PA
+2917653504,2917654015,GB
+2917654016,2917654143,FI
+2917654144,2917654271,MY
+2917654272,2917654527,CN
+2917654528,2917654655,TH
+2917654656,2917654783,MX
+2917654784,2917655039,DE
+2917655040,2917655167,US
+2917655168,2917655295,SG
+2917655296,2917655423,GB
+2917655424,2917655807,CN
+2917655808,2917655935,US
+2917655936,2917656063,HU
+2917656064,2917656447,CN
+2917656448,2917656575,FR
+2917656576,2917656703,US
+2917656704,2917657087,CN
+2917657088,2917657215,NO
+2917657216,2917657471,US
+2917657472,2917657599,CN
+2917657600,2917657855,US
+2917657856,2917657983,CN
+2917657984,2917658367,US
+2917658368,2917658495,CN
+2917658496,2917658879,US
+2917658880,2917659007,PH
+2917659008,2917659519,US
+2917659520,2917659647,HK
+2917659648,2917659775,US
+2917659776,2917659903,CN
+2917659904,2917660287,US
+2917660288,2917660415,MY
+2917660416,2917660543,CA
+2917660544,2917660671,GI
+2917660672,2917661183,GB
+2917661184,2917661311,CA
+2917661312,2917661695,CN
+2917661696,2917661823,ZA
+2917661824,2917661951,PK
+2917661952,2917662079,CN
+2917662080,2917663231,US
2917663232,2917663487,CA
2917663488,2917665791,US
2917665792,2917666303,CA
@@ -67513,23 +69911,64 @@
2917710592,2917710847,CA
2917710848,2917714175,US
2917714176,2917714431,CA
-2917714432,2917718527,US
+2917714432,2917715967,US
+2917715968,2917716223,DE
+2917716224,2917718527,US
2917718528,2917719039,CA
2917719040,2917722367,US
2917722368,2917722623,CA
-2917722624,2917723135,US
-2917723136,2917723391,CA
-2917723392,2917724159,US
+2917722624,2917724159,US
2917724160,2917724415,CA
-2917724416,2917802367,US
+2917724416,2917726207,US
+2917726208,2917726463,CA
+2917726464,2917726495,CR
+2917726496,2917795951,US
+2917795952,2917795959,CA
+2917795960,2917796263,US
+2917796264,2917796271,CA
+2917796272,2917801983,US
+2917801984,2917801991,CA
+2917801992,2917802231,US
+2917802232,2917802239,CA
+2917802240,2917802295,US
+2917802296,2917802303,CA
+2917802304,2917802367,US
2917802368,2917802375,CA
-2917802376,2917804935,US
+2917802376,2917802479,US
+2917802480,2917802487,CA
+2917802488,2917804911,US
+2917804912,2917804919,CA
+2917804920,2917804935,US
2917804936,2917804943,CA
-2917804944,2917815575,US
+2917804944,2917805039,US
+2917805040,2917805047,CA
+2917805048,2917809231,US
+2917809232,2917809239,CA
+2917809240,2917809927,US
+2917809928,2917809935,CA
+2917809936,2917811511,US
+2917811512,2917811519,LK
+2917811520,2917811583,US
+2917811584,2917811647,LK
+2917811648,2917813679,US
+2917813680,2917813687,LK
+2917813688,2917815575,US
2917815576,2917815583,RO
-2917815584,2917834751,US
+2917815584,2917823871,US
+2917823872,2917823887,CA
+2917823888,2917823895,US
+2917823896,2917823903,CA
+2917823904,2917823975,US
+2917823976,2917823991,CA
+2917823992,2917829727,US
+2917829728,2917829743,CA
+2917829744,2917834143,US
+2917834144,2917834151,CA
+2917834152,2917834751,US
2917834752,2917835007,GB
-2917835008,2917842175,US
+2917835008,2917835679,US
+2917835680,2917835687,CA
+2917835688,2917842175,US
2917842176,2917842431,CA
2917842432,2917853471,US
2917853472,2917853495,CA
@@ -67586,7 +70025,9 @@
2918477824,2918481919,CA
2918481920,2918514943,US
2918514944,2918515079,CA
-2918515080,2918532111,US
+2918515080,2918515199,US
+2918515200,2918515231,CA
+2918515232,2918532111,US
2918532112,2918532119,CN
2918532120,2918532143,US
2918532144,2918532151,PK
@@ -67615,11 +70056,15 @@
2918534992,2918535807,US
2918535808,2918535967,CN
2918535968,2918535999,US
-2918536000,2918536159,CN
-2918536160,2918536167,US
+2918536000,2918536023,CN
+2918536024,2918536031,US
+2918536032,2918536127,CN
+2918536128,2918536167,US
2918536168,2918536191,CN
2918536192,2918536703,A1
-2918536704,2918580223,US
+2918536704,2918536719,US
+2918536720,2918536727,CA
+2918536728,2918580223,US
2918580224,2918588415,CA
2918588416,2918596607,US
2918596608,2918604799,CA
@@ -67628,9 +70073,7 @@
2918703104,2918760447,US
2918760448,2918776831,CA
2918776832,2918816000,US
-2918816001,2918816511,GB
-2918816512,2918816767,US
-2918816768,2918817023,GB
+2918816001,2918817023,GB
2918817024,2918828031,US
2918828032,2918828543,UA
2918828544,2918829055,ES
@@ -67655,12 +70098,10 @@
2919020656,2919020711,US
2919020712,2919020719,CA
2919020720,2919020727,US
-2919020728,2919020759,CA
-2919020760,2919020767,US
-2919020768,2919020799,CA
+2919020728,2919020799,CA
2919020800,2919021343,US
-2919021344,2919021359,CA
-2919021360,2919063551,US
+2919021344,2919021567,CA
+2919021568,2919063551,US
2919063552,2919064063,MX
2919064064,2919067655,CN
2919067656,2919067695,US
@@ -67878,13 +70319,17 @@
2919070944,2919070951,BR
2919070952,2919071143,US
2919071144,2919071151,CN
-2919071152,2919170327,US
+2919071152,2919153695,US
+2919153696,2919153703,DE
+2919153704,2919153807,US
+2919153808,2919153815,AU
+2919153816,2919170327,US
2919170328,2919170335,PE
2919170336,2919170351,US
2919170352,2919170359,PE
2919170360,2919170367,AU
2919170368,2919170383,BR
-2919170384,2919170391,AU
+2919170384,2919170391,US
2919170392,2919170399,IN
2919170400,2919170407,TR
2919170408,2919170415,ES
@@ -67898,9 +70343,7 @@
2919170528,2919170535,BR
2919170536,2919170551,US
2919170552,2919170559,FR
-2919170560,2919170575,US
-2919170576,2919170583,FR
-2919170584,2919170599,US
+2919170560,2919170599,US
2919170600,2919170607,JP
2919170608,2919170615,US
2919170616,2919170623,CN
@@ -67930,9 +70373,9 @@
2919170936,2919170943,PH
2919170944,2919170967,US
2919170968,2919170975,NZ
-2919170976,2919171047,US
-2919171048,2919171055,BR
-2919171056,2919171071,US
+2919170976,2919171055,US
+2919171056,2919171063,TR
+2919171064,2919171071,US
2919171072,2919171079,IN
2919171080,2919171087,CL
2919171088,2919171095,TR
@@ -67962,13 +70405,17 @@
2919171456,2919171463,BR
2919171464,2919171479,US
2919171480,2919171487,BR
-2919171488,2919174143,US
+2919171488,2919171535,US
+2919171536,2919171543,BR
+2919171544,2919171655,US
+2919171656,2919171663,BR
+2919171664,2919174143,US
2919174144,2919178239,CA
2919178240,2919186431,US
2919186432,2919190527,CA
2919190528,2919202079,US
2919202080,2919202111,BE
-2919202112,2919202815,US
+2919202112,2919206911,US
2919206912,2919211007,CA
2919219200,2919235583,US
2919235584,2919759871,CA
@@ -68068,7 +70515,9 @@
2928175304,2928175311,CN
2928175312,2928175399,US
2928175400,2928175407,TR
-2928175408,2928175551,US
+2928175408,2928175471,US
+2928175472,2928175479,JP
+2928175480,2928175551,US
2928175552,2928175567,CA
2928175568,2928175655,US
2928175656,2928175663,AU
@@ -68398,7 +70847,9 @@
2928321072,2928321311,US
2928321312,2928321327,GB
2928321328,2928321343,CN
-2928321344,2928323135,US
+2928321344,2928322639,US
+2928322640,2928322655,RU
+2928322656,2928323135,US
2928323136,2928323143,RU
2928323144,2928323175,US
2928323176,2928323183,AU
@@ -69039,7 +71490,17 @@
2948595712,2952790015,KR
2952790016,2953314303,DE
2953314304,2953379839,UA
-2953379840,2953445375,DE
+2953379840,2953438191,DE
+2953438192,2953438199,ES
+2953438200,2953438231,DE
+2953438232,2953438239,CH
+2953438240,2953441263,DE
+2953441264,2953441279,IT
+2953441280,2953443031,DE
+2953443032,2953443039,IT
+2953443040,2953444183,DE
+2953444184,2953444191,IT
+2953444192,2953445375,DE
2953445376,2953453567,IT
2953453568,2953455615,IS
2953455616,2953457663,SK
@@ -69047,10 +71508,14 @@
2953459712,2953461759,IT
2953461760,2953465855,ES
2953465856,2953465991,GB
-2953465992,2953467903,EU
+2953465992,2953466111,EU
+2953466112,2953466127,GB
+2953466128,2953467903,EU
2953467904,2953469951,BE
2953469952,2953478143,CH
-2953478144,2953510911,SE
+2953478144,2953503551,SE
+2953503552,2953503559,NO
+2953503560,2953510911,SE
2953510912,2953576447,NO
2953576448,2953592831,BG
2953592832,2953596927,IR
@@ -69058,6 +71523,7 @@
2953598976,2953601023,IT
2953601024,2953603071,RU
2953603072,2953605119,GB
+2953605120,2953609215,CZ
2953609216,2953707519,IL
2953707520,2953838591,RU
2953838592,2954100735,SA
@@ -69070,7 +71536,824 @@
2954647552,2954657791,ES
2954657792,2954756095,JO
2954756096,2954821631,TR
-2954821632,2954887167,FR
+2954821632,2954838015,FR
+2954838016,2954838019,PL
+2954838020,2954838047,FR
+2954838048,2954838055,DE
+2954838056,2954838087,FR
+2954838088,2954838091,IT
+2954838092,2954838095,FR
+2954838096,2954838099,ES
+2954838100,2954838111,FR
+2954838112,2954838115,CZ
+2954838116,2954838119,GB
+2954838120,2954838123,CZ
+2954838124,2954838127,IT
+2954838128,2954838135,FR
+2954838136,2954838139,ES
+2954838140,2954838143,CH
+2954838144,2954838151,FR
+2954838152,2954838159,BE
+2954838160,2954838167,FR
+2954838168,2954838171,NL
+2954838172,2954838175,IT
+2954838176,2954838179,GB
+2954838180,2954838183,DE
+2954838184,2954838191,IT
+2954838192,2954838199,NL
+2954838200,2954838203,ES
+2954838204,2954838207,DE
+2954838208,2954838211,ES
+2954838212,2954838215,IE
+2954838216,2954838219,GB
+2954838220,2954838223,ES
+2954838224,2954838239,FR
+2954838240,2954838263,PL
+2954838264,2954838271,IT
+2954838272,2954838279,DE
+2954838280,2954838287,IT
+2954838288,2954838303,BE
+2954838304,2954838371,FR
+2954838372,2954838375,GB
+2954838376,2954838379,NL
+2954838380,2954838383,PL
+2954838384,2954854403,FR
+2954854404,2954854407,IT
+2954854408,2954854411,FR
+2954854412,2954854415,PL
+2954854416,2954854431,GB
+2954854432,2954854495,FR
+2954854496,2954854527,ES
+2954854528,2954854619,FR
+2954854620,2954854623,IT
+2954854624,2954854691,FR
+2954854692,2954854695,IT
+2954854696,2954854699,PL
+2954854700,2954854703,GB
+2954854704,2954854711,FR
+2954854712,2954854719,DE
+2954854720,2954854783,ES
+2954854784,2954854799,FR
+2954854800,2954854815,FI
+2954854816,2954854847,FR
+2954854848,2954854851,PL
+2954854852,2954854855,GB
+2954854856,2954854863,FR
+2954854864,2954854867,NL
+2954854868,2954854871,GB
+2954854872,2954854875,ES
+2954854876,2954854895,FR
+2954854896,2954854903,PL
+2954854904,2954855039,FR
+2954855040,2954855043,ES
+2954855044,2954855047,FR
+2954855048,2954855051,PL
+2954855052,2954855055,ES
+2954855056,2954855059,PL
+2954855060,2954855063,ES
+2954855064,2954855067,BE
+2954855068,2954855071,ES
+2954855072,2954855075,FR
+2954855076,2954855079,DE
+2954855080,2954855087,GB
+2954855088,2954855103,FR
+2954855104,2954855167,IE
+2954855168,2954855199,GB
+2954855200,2954855207,FR
+2954855208,2954855211,NL
+2954855212,2954855215,CH
+2954855216,2954855295,FR
+2954855296,2954855359,BE
+2954855360,2954855439,FR
+2954855440,2954855455,LT
+2954855456,2954855479,FR
+2954855480,2954855487,IT
+2954855488,2954855527,GB
+2954855528,2954855535,PT
+2954855536,2954855551,FR
+2954855552,2954855567,GB
+2954855568,2954855571,FR
+2954855572,2954855575,PT
+2954855576,2954855583,DE
+2954855584,2954855615,FR
+2954855616,2954855619,IE
+2954855620,2954855623,FR
+2954855624,2954855627,IT
+2954855628,2954855631,GB
+2954855632,2954855639,FI
+2954855640,2954855643,PL
+2954855644,2954855655,GB
+2954855656,2954855659,CH
+2954855660,2954855663,FR
+2954855664,2954855679,ES
+2954855680,2954855711,FR
+2954855712,2954855743,PL
+2954855744,2954855807,FR
+2954855808,2954855871,IE
+2954855872,2954855879,FR
+2954855880,2954855887,ES
+2954855888,2954855903,FR
+2954855904,2954855919,PL
+2954855920,2954855999,FR
+2954856000,2954856063,PL
+2954856064,2954856067,FR
+2954856068,2954856071,PL
+2954856072,2954856079,FR
+2954856080,2954856083,ES
+2954856084,2954856087,FR
+2954856088,2954856095,ES
+2954856096,2954856167,FR
+2954856168,2954856175,ES
+2954856176,2954856187,PL
+2954856188,2954856447,FR
+2954856448,2954856511,ES
+2954856512,2954856559,FR
+2954856560,2954856567,BE
+2954856568,2954856571,FR
+2954856572,2954856575,PL
+2954856576,2954856583,ES
+2954856584,2954856587,FR
+2954856588,2954856591,GB
+2954856592,2954856607,PL
+2954856608,2954856611,BE
+2954856612,2954856619,ES
+2954856620,2954856623,GB
+2954856624,2954856627,IT
+2954856628,2954856631,GB
+2954856632,2954856635,FR
+2954856636,2954856639,DE
+2954856640,2954856671,IT
+2954856672,2954856687,NL
+2954856688,2954856691,BE
+2954856692,2954856699,FR
+2954856700,2954856959,PL
+2954856960,2954856975,ES
+2954856976,2954856979,PL
+2954856980,2954856983,FR
+2954856984,2954856987,GB
+2954856988,2954856991,FR
+2954856992,2954856999,FI
+2954857000,2954857007,PL
+2954857008,2954857087,FR
+2954857088,2954857091,PL
+2954857092,2954857095,CZ
+2954857096,2954857099,PL
+2954857100,2954857111,GB
+2954857112,2954857115,PL
+2954857116,2954857119,IE
+2954857120,2954857135,PT
+2954857136,2954857143,LT
+2954857144,2954857151,ES
+2954857152,2954857215,IE
+2954857216,2954857343,GB
+2954857344,2954857351,ES
+2954857352,2954857355,PT
+2954857356,2954857359,IT
+2954857360,2954857367,FR
+2954857368,2954857375,PT
+2954857376,2954857383,PL
+2954857384,2954857407,GB
+2954857408,2954857423,CH
+2954857424,2954857431,GB
+2954857432,2954857435,IT
+2954857436,2954857439,PL
+2954857440,2954857471,PT
+2954857472,2954857503,FR
+2954857504,2954857519,IT
+2954857520,2954857523,FR
+2954857524,2954857527,IE
+2954857528,2954857531,GB
+2954857532,2954857535,NL
+2954857536,2954857551,CH
+2954857552,2954857567,IT
+2954857568,2954857571,PL
+2954857572,2954857575,PT
+2954857576,2954857583,FR
+2954857584,2954857599,ES
+2954857600,2954857663,IE
+2954857664,2954857695,FR
+2954857696,2954857699,IE
+2954857700,2954857703,ES
+2954857704,2954857707,PL
+2954857708,2954857711,ES
+2954857712,2954857727,IE
+2954857728,2954857751,FR
+2954857752,2954857755,IE
+2954857756,2954857759,PL
+2954857760,2954857823,FR
+2954857824,2954857855,ES
+2954857856,2954857983,IE
+2954857984,2954857999,IT
+2954858000,2954858015,FR
+2954858016,2954858023,PL
+2954858024,2954858027,ES
+2954858028,2954858031,IT
+2954858032,2954858035,DE
+2954858036,2954858039,PL
+2954858040,2954858043,FR
+2954858044,2954858047,IE
+2954858048,2954858055,PT
+2954858056,2954858059,IE
+2954858060,2954858063,PL
+2954858064,2954858079,IE
+2954858080,2954858095,PT
+2954858096,2954858111,ES
+2954858112,2954858143,DE
+2954858144,2954858175,ES
+2954858176,2954858191,PL
+2954858192,2954858207,IE
+2954858208,2954858239,IT
+2954858240,2954858271,NL
+2954858272,2954858303,GB
+2954858304,2954858335,DE
+2954858336,2954858351,FR
+2954858352,2954858383,PL
+2954858384,2954858415,FR
+2954858416,2954858423,GB
+2954858424,2954858427,DE
+2954858428,2954858431,IE
+2954858432,2954858439,GB
+2954858440,2954858443,FR
+2954858444,2954858447,GB
+2954858448,2954858463,IT
+2954858464,2954858479,FR
+2954858480,2954858483,NL
+2954858484,2954858487,DE
+2954858488,2954858491,IT
+2954858492,2954858495,NL
+2954858496,2954858751,ES
+2954858752,2954858815,IE
+2954858816,2954858819,ES
+2954858820,2954858823,PT
+2954858824,2954858827,GB
+2954858828,2954858831,CZ
+2954858832,2954858847,IE
+2954858848,2954858879,GB
+2954858880,2954858895,FR
+2954858896,2954858911,ES
+2954858912,2954858943,DE
+2954858944,2954858975,ES
+2954858976,2954858991,FR
+2954858992,2954859007,GB
+2954859008,2954859023,FR
+2954859024,2954859027,IT
+2954859028,2954859031,PT
+2954859032,2954859043,FR
+2954859044,2954859055,DE
+2954859056,2954859071,FR
+2954859072,2954859079,PL
+2954859080,2954859087,GB
+2954859088,2954859103,BE
+2954859104,2954859119,PT
+2954859120,2954859123,FR
+2954859124,2954859127,NL
+2954859128,2954859135,PT
+2954859136,2954859239,FR
+2954859240,2954859243,ES
+2954859244,2954859247,PL
+2954859248,2954859263,ES
+2954859264,2954859271,FR
+2954859272,2954859275,PL
+2954859276,2954859279,ES
+2954859280,2954859295,FR
+2954859296,2954859327,PT
+2954859328,2954859343,GB
+2954859344,2954859391,FR
+2954859392,2954859423,IT
+2954859424,2954859455,GB
+2954859456,2954859487,NL
+2954859488,2954859495,FR
+2954859496,2954859503,IT
+2954859504,2954859519,GB
+2954859520,2954859551,DE
+2954859552,2954859559,FR
+2954859560,2954859575,IT
+2954859576,2954859579,FI
+2954859580,2954859583,LT
+2954859584,2954859647,FR
+2954859648,2954859655,ES
+2954859656,2954859663,NL
+2954859664,2954859679,FR
+2954859680,2954859695,CH
+2954859696,2954859703,FR
+2954859704,2954859707,GB
+2954859708,2954859711,DE
+2954859712,2954859775,FR
+2954859776,2954859807,PL
+2954859808,2954859839,GB
+2954859840,2954859903,PL
+2954859904,2954859935,DE
+2954859936,2954859951,FR
+2954859952,2954859955,PL
+2954859956,2954859959,GB
+2954859960,2954859963,ES
+2954859964,2954860031,PL
+2954860032,2954860063,DE
+2954860064,2954860095,FR
+2954860096,2954860103,GB
+2954860104,2954860111,FR
+2954860112,2954860127,DE
+2954860128,2954860131,ES
+2954860132,2954860135,FR
+2954860136,2954860151,PL
+2954860152,2954860167,IE
+2954860168,2954860171,PL
+2954860172,2954860175,IE
+2954860176,2954860183,DE
+2954860184,2954860191,ES
+2954860192,2954860223,PT
+2954860224,2954860231,BE
+2954860232,2954860239,ES
+2954860240,2954860255,FR
+2954860256,2954860259,PT
+2954860260,2954860263,FI
+2954860264,2954860267,CZ
+2954860268,2954860271,PL
+2954860272,2954860275,GB
+2954860276,2954860319,FR
+2954860320,2954860327,DE
+2954860328,2954860335,PL
+2954860336,2954860351,CH
+2954860352,2954860415,FR
+2954860416,2954860423,PL
+2954860424,2954860427,FR
+2954860428,2954860431,IE
+2954860432,2954860439,FR
+2954860440,2954860443,IT
+2954860444,2954860447,FI
+2954860448,2954860479,PT
+2954860480,2954860483,GB
+2954860484,2954860487,FR
+2954860488,2954860491,GB
+2954860492,2954860495,DE
+2954860496,2954860511,FR
+2954860512,2954860543,DE
+2954860544,2954860799,CZ
+2954860800,2954860863,IE
+2954860864,2954861067,FR
+2954861068,2954861071,GB
+2954861072,2954861087,FR
+2954861088,2954861119,CH
+2954861120,2954861135,FR
+2954861136,2954861143,GB
+2954861144,2954861167,ES
+2954861168,2954861183,FR
+2954861184,2954861191,IT
+2954861192,2954861195,FR
+2954861196,2954861199,IE
+2954861200,2954861215,GB
+2954861216,2954861231,FR
+2954861232,2954861239,PL
+2954861240,2954861247,FR
+2954861248,2954861311,PL
+2954861312,2954861323,FR
+2954861324,2954861327,IT
+2954861328,2954861343,NL
+2954861344,2954861359,FR
+2954861360,2954861363,IE
+2954861364,2954861367,FR
+2954861368,2954861371,ES
+2954861372,2954861375,PT
+2954861376,2954861407,DE
+2954861408,2954861423,FR
+2954861424,2954861431,CH
+2954861432,2954861571,FR
+2954861572,2954861575,GB
+2954861576,2954861599,FR
+2954861600,2954861615,PT
+2954861616,2954861623,FR
+2954861624,2954861631,IT
+2954861632,2954861635,NL
+2954861636,2954861639,GB
+2954861640,2954861647,PL
+2954861648,2954861651,FR
+2954861652,2954861655,GB
+2954861656,2954861659,FR
+2954861660,2954861663,PL
+2954861664,2954861671,ES
+2954861672,2954861675,NL
+2954861676,2954861687,PL
+2954861688,2954861691,GB
+2954861692,2954861695,FR
+2954861696,2954861763,GB
+2954861764,2954861767,PL
+2954861768,2954861779,FR
+2954861780,2954861783,DE
+2954861784,2954861787,FR
+2954861788,2954861791,PL
+2954861792,2954861823,GB
+2954861824,2954861827,PL
+2954861828,2954861831,GB
+2954861832,2954861835,DE
+2954861836,2954861839,PL
+2954861840,2954861843,GB
+2954861844,2954861847,PL
+2954861848,2954861863,FR
+2954861864,2954861867,NL
+2954861868,2954861871,FR
+2954861872,2954861887,IE
+2954861888,2954861919,PT
+2954861920,2954861923,PL
+2954861924,2954861927,ES
+2954861928,2954861935,FR
+2954861936,2954861943,DE
+2954861944,2954861955,FR
+2954861956,2954861967,GB
+2954861968,2954861975,IE
+2954861976,2954861983,DE
+2954861984,2954862015,GB
+2954862016,2954862047,NL
+2954862048,2954862143,FR
+2954862144,2954862207,ES
+2954862208,2954862211,PL
+2954862212,2954862215,PT
+2954862216,2954862219,FR
+2954862220,2954862223,DE
+2954862224,2954862239,FR
+2954862240,2954862247,IT
+2954862248,2954862271,FR
+2954862272,2954862303,FI
+2954862304,2954870783,FR
+2954870784,2954870787,DE
+2954870788,2954870799,GB
+2954870800,2954870831,FR
+2954870832,2954870835,PL
+2954870836,2954870839,GB
+2954870840,2954870843,DE
+2954870844,2954870847,FR
+2954870848,2954870863,PL
+2954870864,2954870871,FR
+2954870872,2954870875,ES
+2954870876,2954870879,PL
+2954870880,2954870895,IE
+2954870896,2954870903,FR
+2954870904,2954870907,PL
+2954870908,2954870911,ES
+2954870912,2954871583,FR
+2954871584,2954871599,GB
+2954871600,2954871603,FR
+2954871604,2954871607,PL
+2954871608,2954871611,BE
+2954871612,2954871615,CZ
+2954871616,2954871631,ES
+2954871632,2954871635,BE
+2954871636,2954871639,ES
+2954871640,2954871643,FR
+2954871644,2954871647,IT
+2954871648,2954871667,FR
+2954871668,2954871671,PL
+2954871672,2954871695,FR
+2954871696,2954871703,DE
+2954871704,2954871707,CH
+2954871708,2954871711,GB
+2954871712,2954871743,FR
+2954871744,2954871759,PT
+2954871760,2954871807,FR
+2954871808,2954871823,ES
+2954871824,2954871831,FR
+2954871832,2954871839,PL
+2954871840,2954871887,FR
+2954871888,2954871895,GB
+2954871896,2954871903,FR
+2954871904,2954871919,IE
+2954871920,2954871923,ES
+2954871924,2954871935,IE
+2954871936,2954871939,PL
+2954871940,2954871943,GB
+2954871944,2954871947,ES
+2954871948,2954871951,DE
+2954871952,2954871955,ES
+2954871956,2954871959,PT
+2954871960,2954871963,IE
+2954871964,2954871967,FR
+2954871968,2954871999,PL
+2954872000,2954872323,FR
+2954872324,2954872327,PL
+2954872328,2954872335,DE
+2954872336,2954872351,FR
+2954872352,2954872383,DE
+2954872384,2954872415,GB
+2954872416,2954872419,ES
+2954872420,2954872435,PL
+2954872436,2954872439,FR
+2954872440,2954872447,PL
+2954872448,2954872587,FR
+2954872588,2954872591,DE
+2954872592,2954872607,IT
+2954872608,2954872639,FR
+2954872640,2954872671,BE
+2954872672,2954872675,IE
+2954872676,2954872679,ES
+2954872680,2954872687,FR
+2954872688,2954872703,GB
+2954872704,2954872831,DE
+2954872832,2954873367,FR
+2954873368,2954873375,PL
+2954873376,2954873391,FR
+2954873392,2954873407,PL
+2954873408,2954873447,FR
+2954873448,2954873459,PL
+2954873460,2954873463,NL
+2954873464,2954873467,PL
+2954873468,2954873535,FR
+2954873536,2954873567,DE
+2954873568,2954873583,FR
+2954873584,2954873591,ES
+2954873592,2954873599,FR
+2954873600,2954873631,DE
+2954873632,2954873635,NL
+2954873636,2954873639,PL
+2954873640,2954873647,FR
+2954873648,2954873663,PL
+2954873664,2954873679,IT
+2954873680,2954873695,FR
+2954873696,2954873727,ES
+2954873728,2954873759,FR
+2954873760,2954873791,DE
+2954873792,2954873803,FR
+2954873804,2954873807,NL
+2954873808,2954873815,DE
+2954873816,2954873819,FI
+2954873820,2954873831,FR
+2954873832,2954873835,IT
+2954873836,2954873839,PL
+2954873840,2954873847,IT
+2954873848,2954873851,GB
+2954873852,2954873855,PL
+2954873856,2954874111,GB
+2954874112,2954874367,FR
+2954874368,2954874371,BE
+2954874372,2954874375,GB
+2954874376,2954874387,FR
+2954874388,2954874391,PL
+2954874392,2954874415,IE
+2954874416,2954874419,NL
+2954874420,2954874423,FR
+2954874424,2954874427,GB
+2954874428,2954874431,ES
+2954874432,2954874495,FR
+2954874496,2954874559,NL
+2954874560,2954874567,GB
+2954874568,2954874591,FR
+2954874592,2954874623,PT
+2954874624,2954874627,BE
+2954874628,2954874631,FR
+2954874632,2954874639,GB
+2954874640,2954874647,ES
+2954874648,2954874651,FR
+2954874652,2954874655,PL
+2954874656,2954874671,FR
+2954874672,2954874675,PL
+2954874676,2954874679,GB
+2954874680,2954874687,FR
+2954874688,2954874719,IE
+2954874720,2954874751,FI
+2954874752,2954874799,IE
+2954874800,2954874815,GB
+2954874816,2954874827,FR
+2954874828,2954874831,PL
+2954874832,2954874855,FR
+2954874856,2954874859,GB
+2954874860,2954874863,LT
+2954874864,2954874867,FR
+2954874868,2954874871,PL
+2954874872,2954874919,FR
+2954874920,2954874923,PL
+2954874924,2954874927,FR
+2954874928,2954874943,PL
+2954874944,2954874975,IE
+2954874976,2954874979,PL
+2954874980,2954874983,DE
+2954874984,2954874987,GB
+2954874988,2954874991,PL
+2954874992,2954875007,IE
+2954875008,2954875039,FR
+2954875040,2954875047,PL
+2954875048,2954875051,FR
+2954875052,2954875055,NL
+2954875056,2954875063,IT
+2954875064,2954875067,DE
+2954875068,2954875071,FI
+2954875072,2954875075,NL
+2954875076,2954875079,GB
+2954875080,2954875099,FR
+2954875100,2954875103,PL
+2954875104,2954875199,FR
+2954875200,2954875203,PL
+2954875204,2954875207,DE
+2954875208,2954875215,NL
+2954875216,2954875231,FR
+2954875232,2954875263,ES
+2954875264,2954875295,FR
+2954875296,2954875311,PL
+2954875312,2954875327,FR
+2954875328,2954875359,PL
+2954875360,2954875383,FR
+2954875384,2954875391,DE
+2954875392,2954875463,ES
+2954875464,2954875467,NL
+2954875468,2954875471,GB
+2954875472,2954875487,FR
+2954875488,2954875491,LT
+2954875492,2954875495,GB
+2954875496,2954875503,IT
+2954875504,2954875519,FR
+2954875520,2954875543,PL
+2954875544,2954875551,FR
+2954875552,2954875583,PL
+2954875584,2954875587,ES
+2954875588,2954875591,IT
+2954875592,2954875599,FR
+2954875600,2954875615,PT
+2954875616,2954875623,PL
+2954875624,2954875627,DE
+2954875628,2954875631,ES
+2954875632,2954875639,FR
+2954875640,2954875647,BE
+2954875648,2954875651,ES
+2954875652,2954875655,BE
+2954875656,2954875659,FR
+2954875660,2954875663,PT
+2954875664,2954875671,ES
+2954875672,2954875679,FR
+2954875680,2954875711,PT
+2954875712,2954875775,IE
+2954875776,2954875903,PT
+2954875904,2954875907,IT
+2954875908,2954875911,CH
+2954875912,2954875935,FR
+2954875936,2954875951,PL
+2954875952,2954875999,IE
+2954876000,2954876031,GB
+2954876032,2954876039,IT
+2954876040,2954876043,FR
+2954876044,2954876047,GB
+2954876048,2954876051,ES
+2954876052,2954876055,NL
+2954876056,2954876059,PL
+2954876060,2954876063,ES
+2954876064,2954876079,FR
+2954876080,2954876095,PL
+2954876096,2954876111,FR
+2954876112,2954876119,IE
+2954876120,2954876123,CZ
+2954876124,2954876127,NL
+2954876128,2954876147,FR
+2954876148,2954876151,BE
+2954876152,2954876159,FR
+2954876160,2954876167,FI
+2954876168,2954876175,NL
+2954876176,2954876191,FR
+2954876192,2954876223,PT
+2954876224,2954876231,FR
+2954876232,2954876235,PL
+2954876236,2954876239,IE
+2954876240,2954876247,PL
+2954876248,2954876287,ES
+2954876288,2954876351,FR
+2954876352,2954876383,ES
+2954876384,2954876391,FR
+2954876392,2954876395,DE
+2954876396,2954876399,IE
+2954876400,2954876403,GB
+2954876404,2954876407,NL
+2954876408,2954876411,LT
+2954876412,2954876415,DE
+2954876416,2954876575,PT
+2954876576,2954876579,ES
+2954876580,2954876583,FR
+2954876584,2954876587,ES
+2954876588,2954876591,DE
+2954876592,2954876639,IE
+2954876640,2954876643,DE
+2954876644,2954876647,IT
+2954876648,2954876655,FR
+2954876656,2954876671,BE
+2954876672,2954876703,PT
+2954876704,2954876719,FR
+2954876720,2954876727,GB
+2954876728,2954876731,PL
+2954876732,2954876735,DE
+2954876736,2954876767,IT
+2954876768,2954876783,GB
+2954876784,2954876795,FR
+2954876796,2954876799,DE
+2954876800,2954876863,IE
+2954876864,2954876895,DE
+2954876896,2954876899,GB
+2954876900,2954876903,IT
+2954876904,2954876959,FR
+2954876960,2954876975,DE
+2954876976,2954876983,PL
+2954876984,2954876987,FR
+2954876988,2954876991,ES
+2954876992,2954877007,PL
+2954877008,2954877023,CZ
+2954877024,2954877027,ES
+2954877028,2954877031,PL
+2954877032,2954877035,FR
+2954877036,2954877039,GB
+2954877040,2954877055,FR
+2954877056,2954877059,PL
+2954877060,2954877063,GB
+2954877064,2954877071,DE
+2954877072,2954877087,CH
+2954877088,2954877119,GB
+2954877120,2954877151,ES
+2954877152,2954877159,NL
+2954877160,2954877163,PL
+2954877164,2954877167,FR
+2954877168,2954877183,DE
+2954877184,2954877455,FR
+2954877456,2954877459,PL
+2954877460,2954877463,FR
+2954877464,2954877471,DE
+2954877472,2954877503,FR
+2954877504,2954877519,ES
+2954877520,2954877523,BE
+2954877524,2954877527,ES
+2954877528,2954877535,FI
+2954877536,2954877539,PL
+2954877540,2954877547,FR
+2954877548,2954877551,PL
+2954877552,2954877583,FR
+2954877584,2954877595,DE
+2954877596,2954877599,PT
+2954877600,2954877615,PL
+2954877616,2954877631,NL
+2954877632,2954877663,FR
+2954877664,2954877667,GB
+2954877668,2954877671,PL
+2954877672,2954877675,FR
+2954877676,2954877679,PL
+2954877680,2954877727,FR
+2954877728,2954877743,IE
+2954877744,2954877775,FR
+2954877776,2954877779,IT
+2954877780,2954877783,A1
+2954877784,2954877791,IT
+2954877792,2954877819,FR
+2954877820,2954877823,PL
+2954877824,2954877963,FR
+2954877964,2954877967,DE
+2954877968,2954877983,PT
+2954877984,2954877991,LT
+2954877992,2954877999,PL
+2954878000,2954878007,FR
+2954878008,2954878011,IT
+2954878012,2954878031,GB
+2954878032,2954878035,NL
+2954878036,2954878039,FR
+2954878040,2954878047,PL
+2954878048,2954878063,FR
+2954878064,2954878079,IT
+2954878080,2954878095,FR
+2954878096,2954878103,ES
+2954878104,2954878111,FR
+2954878112,2954878143,PT
+2954878144,2954878207,FR
+2954878208,2954878463,ES
+2954878464,2954878471,CH
+2954878472,2954878475,FR
+2954878476,2954878495,NL
+2954878496,2954878499,GB
+2954878500,2954878511,FR
+2954878512,2954878559,IE
+2954878560,2954878575,FR
+2954878576,2954878579,GB
+2954878580,2954878583,DE
+2954878584,2954878591,GB
+2954878592,2954878607,BE
+2954878608,2954878623,FI
+2954878624,2954878631,PL
+2954878632,2954878635,IT
+2954878636,2954878639,FR
+2954878640,2954878655,IT
+2954878656,2954878687,PL
+2954878688,2954878695,FR
+2954878696,2954878703,IE
+2954878704,2954878707,IT
+2954878708,2954878711,PL
+2954878712,2954878719,ES
+2954878720,2954878763,FR
+2954878764,2954878767,GB
+2954878768,2954878783,FR
+2954878784,2954878847,IE
+2954878848,2954878855,FR
+2954878856,2954878863,IE
+2954878864,2954878879,IT
+2954878880,2954878883,ES
+2954878884,2954878887,PL
+2954878888,2954878891,FR
+2954878892,2954878895,GB
+2954878896,2954878899,DE
+2954878900,2954878903,GB
+2954878904,2954878915,FR
+2954878916,2954878919,PL
+2954878920,2954878931,FR
+2954878932,2954878939,GB
+2954878940,2954878943,PL
+2954878944,2954887167,FR
2954887168,2954891263,UA
2954891264,2954895359,IT
2954895360,2954897407,RU
@@ -69081,7 +72364,9 @@
2954905600,2954907647,IE
2954907648,2954909695,GB
2954909696,2954911743,DE
-2954911744,2954919935,IE
+2954911744,2954918911,IE
+2954918912,2954919423,NL
+2954919424,2954919935,IE
2954919936,2954928127,RU
2954928128,2954932223,PL
2954932224,2954936319,RU
@@ -69095,7 +72380,9 @@
2954940490,2954940535,DE
2954940536,2954940539,RO
2954940540,2954940658,DE
-2954940659,2954940670,PL
+2954940659,2954940662,PL
+2954940663,2954940664,DE
+2954940665,2954940670,PL
2954940671,2954940927,DE
2954940928,2954940931,RO
2954940932,2954940935,DE
@@ -69185,17 +72472,23 @@
2954941936,2954941939,RO
2954941940,2954941951,DE
2954941952,2954941955,GR
-2954941956,2954941967,DE
+2954941956,2954941961,DE
+2954941962,2954941965,ES
+2954941966,2954941967,DE
2954941968,2954941971,TR
2954941972,2954942041,DE
2954942042,2954942045,GR
2954942046,2954942057,DE
2954942058,2954942058,TR
-2954942059,2954942151,DE
+2954942059,2954942108,DE
+2954942109,2954942112,ES
+2954942113,2954942151,DE
2954942152,2954942155,RO
2954942156,2954942167,DE
2954942168,2954942171,TR
-2954942172,2954942227,DE
+2954942172,2954942191,DE
+2954942192,2954942195,TR
+2954942196,2954942227,DE
2954942228,2954942231,RO
2954942232,2954942243,DE
2954942244,2954942247,TR
@@ -69203,29 +72496,43 @@
2954942348,2954942351,GR
2954942352,2954942363,DE
2954942364,2954942367,TR
-2954942368,2954942441,DE
+2954942368,2954942427,DE
+2954942428,2954942431,TR
+2954942432,2954942441,DE
2954942442,2954942445,TR
2954942446,2954942457,DE
2954942458,2954942461,RO
2954942462,2954942471,DE
2954942472,2954942475,GR
-2954942476,2954942487,DE
+2954942476,2954942479,DE
+2954942480,2954942483,ES
+2954942484,2954942487,DE
2954942488,2954942491,TR
-2954942492,2954942571,DE
+2954942492,2954942563,DE
+2954942564,2954942567,TR
+2954942568,2954942571,DE
2954942572,2954942575,RO
2954942576,2954942587,DE
2954942588,2954942591,TR
-2954942592,2954942671,DE
+2954942592,2954942654,DE
+2954942655,2954942658,ES
+2954942659,2954942671,DE
2954942672,2954942675,GR
2954942676,2954942687,DE
2954942688,2954942691,TR
-2954942692,2954942727,DE
+2954942692,2954942719,DE
+2954942720,2954942723,TR
+2954942724,2954942727,DE
2954942728,2954942731,RO
2954942732,2954942743,DE
2954942744,2954942747,TR
-2954942748,2954942843,DE
+2954942748,2954942839,DE
+2954942840,2954942843,FR
2954942844,2954942847,TR
-2954942848,2954942943,DE
+2954942848,2954942851,FR
+2954942852,2954942871,GB
+2954942872,2954942875,FR
+2954942876,2954942943,DE
2954942944,2954942947,TR
2954942948,2954942979,DE
2954942980,2954942983,TR
@@ -69277,13 +72584,17 @@
2954943516,2954943519,TR
2954943520,2954943539,DE
2954943540,2954943543,TR
-2954943544,2954943563,DE
+2954943544,2954943547,DE
+2954943548,2954943563,GB
2954943564,2954943567,TR
-2954943568,2954943587,DE
+2954943568,2954943583,GB
+2954943584,2954943587,DE
2954943588,2954943591,TR
-2954943592,2954943611,DE
+2954943592,2954943603,GB
+2954943604,2954943611,FR
2954943612,2954943615,TR
-2954943616,2954943635,DE
+2954943616,2954943623,FR
+2954943624,2954943635,DE
2954943636,2954943639,TR
2954943640,2954943659,DE
2954943660,2954943663,TR
@@ -69293,7 +72604,11 @@
2954943708,2954943711,TR
2954943712,2954943731,DE
2954943732,2954943735,TR
-2954943736,2954943999,DE
+2954943736,2954943743,DE
+2954943744,2954943823,GB
+2954943824,2954943903,DE
+2954943904,2954943943,FR
+2954943944,2954943999,DE
2954944000,2954944007,RO
2954944008,2954944511,DE
2954944512,2954946559,GB
@@ -69301,14 +72616,15 @@
2954948608,2954950655,RU
2954950656,2954952703,ES
2954952704,2955018239,TR
-2955018240,2955051007,IE
-2955051008,2955055103,NL
-2955055104,2955069439,IE
+2955018240,2955026431,FR
+2955026432,2955034623,NL
+2955034624,2955051007,IE
+2955051008,2955067391,NL
+2955067392,2955069439,IE
2955069440,2955071487,NL
2955071488,2955073535,IE
2955073536,2955075583,FR
-2955075584,2955079679,NL
-2955079680,2955083775,IE
+2955075584,2955083775,NL
2955083776,2955149311,GB
2955149312,2955411455,UA
2955411456,2955673599,TR
@@ -69323,7 +72639,7 @@
2956238848,2956242943,ES
2956242944,2956244991,SE
2956244992,2956247039,FR
-2956247040,2956249087,DE
+2956247040,2956251135,DE
2956251136,2956253183,GB
2956253184,2956255231,IE
2956255232,2956259327,FR
@@ -69342,7 +72658,8 @@
2956496896,2956500991,IR
2956500992,2956507135,RU
2956507136,2956508159,NL
-2956508160,2956508671,RU
+2956508160,2956508415,RU
+2956508416,2956508671,FR
2956508672,2956509183,NL
2956509184,2956517375,GB
2956517376,2956521471,NL
@@ -69365,6 +72682,7 @@
2956587008,2956589055,FR
2956589056,2956593151,GB
2956593152,2956595199,ES
+2956595200,2956597247,PL
2956597248,2956599295,NL
2956599296,2956607487,RU
2956607488,2956611583,PS
@@ -69379,10 +72697,19 @@
2956722176,2956787711,BY
2956787712,2956820479,IE
2956820480,2956822527,NL
-2956822528,2956824575,SE
+2956822528,2956823551,SE
+2956823552,2956824575,US
2956824576,2956826623,PT
-2956826624,2956828671,DK
-2956828672,2956836863,AT
+2956826624,2956827647,US
+2956827648,2956828671,DK
+2956828672,2956828767,BA
+2956828768,2956828799,AT
+2956828800,2956828943,BA
+2956828944,2956828959,AT
+2956828960,2956828991,BA
+2956828992,2956829055,AT
+2956829056,2956829695,BA
+2956829696,2956836863,AT
2956836864,2956853247,SK
2956853248,2956865535,HR
2956865536,2956869631,IT
@@ -69391,8 +72718,8 @@
2956888064,2956890111,BE
2956890112,2956892159,IR
2956892160,2956894207,IT
-2956894208,2956894719,BE
-2956894720,2956898303,NL
+2956894208,2956896255,BE
+2956896256,2956898303,NL
2956898304,2956902399,RU
2956902400,2956904447,NL
2956904448,2956906495,DK
@@ -69405,9 +72732,86 @@
2957049856,2957058047,PS
2957058048,2957066239,RU
2957066240,2957068287,GB
+2957068288,2957070335,LU
2957070336,2957074431,IT
2957074432,2957082623,RU
-2957082624,2957115391,DE
+2957082624,2957093887,DE
+2957093888,2957096959,CH
+2957096960,2957105912,DE
+2957105913,2957105918,AT
+2957105919,2957106168,DE
+2957106169,2957106174,AT
+2957106175,2957106424,DE
+2957106425,2957106430,AT
+2957106431,2957106680,DE
+2957106681,2957106686,AT
+2957106687,2957106936,DE
+2957106937,2957106942,AT
+2957106943,2957107192,DE
+2957107193,2957107198,AT
+2957107199,2957107448,DE
+2957107449,2957107454,AT
+2957107455,2957107704,DE
+2957107705,2957107710,AT
+2957107711,2957107960,DE
+2957107961,2957107966,AT
+2957107967,2957108216,DE
+2957108217,2957108222,AT
+2957108223,2957108472,DE
+2957108473,2957108478,AT
+2957108479,2957108728,DE
+2957108729,2957108734,AT
+2957108735,2957108984,DE
+2957108985,2957108990,AT
+2957108991,2957109240,DE
+2957109241,2957109246,AT
+2957109247,2957109496,DE
+2957109497,2957109502,AT
+2957109503,2957109752,DE
+2957109753,2957109758,AT
+2957109759,2957110008,DE
+2957110009,2957110014,AT
+2957110015,2957110264,DE
+2957110265,2957110270,AT
+2957110271,2957110520,DE
+2957110521,2957110526,AT
+2957110527,2957110776,DE
+2957110777,2957110782,AT
+2957110783,2957111032,DE
+2957111033,2957111038,AT
+2957111039,2957111288,DE
+2957111289,2957111294,AT
+2957111295,2957111544,DE
+2957111545,2957111550,AT
+2957111551,2957111800,DE
+2957111801,2957111806,AT
+2957111807,2957112056,DE
+2957112057,2957112062,AT
+2957112063,2957112312,DE
+2957112313,2957112318,AT
+2957112319,2957112568,DE
+2957112569,2957112574,AT
+2957112575,2957112824,DE
+2957112825,2957112830,AT
+2957112831,2957113080,DE
+2957113081,2957113086,AT
+2957113087,2957113336,DE
+2957113337,2957113342,AT
+2957113343,2957113592,DE
+2957113593,2957113598,AT
+2957113599,2957113848,DE
+2957113849,2957113854,AT
+2957113855,2957114104,DE
+2957114105,2957114110,AT
+2957114111,2957114360,DE
+2957114361,2957114366,AT
+2957114367,2957114616,DE
+2957114617,2957114622,AT
+2957114623,2957114872,DE
+2957114873,2957114878,AT
+2957114879,2957115128,DE
+2957115129,2957115134,AT
+2957115135,2957115391,DE
2957115392,2957180927,AT
2957180928,2957189119,UA
2957189120,2957193215,LV
@@ -69418,7 +72822,8 @@
2957201424,2957201427,IE
2957201428,2957201431,DK
2957201432,2957201435,CH
-2957201436,2957201727,US
+2957201436,2957201468,BR
+2957201469,2957201727,US
2957201728,2957201743,CA
2957201744,2957201759,MX
2957201760,2957201775,BR
@@ -69431,7 +72836,11 @@
2957201872,2957201887,RU
2957201888,2957201903,KR
2957201904,2957201919,TW
-2957201920,2957202431,US
+2957201920,2957202175,US
+2957202176,2957202179,GB
+2957202180,2957202183,BR
+2957202184,2957202187,CA
+2957202188,2957202431,US
2957202432,2957202463,GB
2957202464,2957202467,PL
2957202468,2957202471,KR
@@ -69517,7 +72926,20 @@
2957203108,2957203111,NL
2957203112,2957203115,NZ
2957203116,2957203119,NO
-2957203120,2957203455,US
+2957203120,2957203123,US
+2957203124,2957203127,MT
+2957203128,2957203131,RS
+2957203132,2957203199,US
+2957203200,2957203203,AU
+2957203204,2957203207,US
+2957203208,2957203211,SE
+2957203212,2957203215,FR
+2957203216,2957203219,ZA
+2957203220,2957203223,CH
+2957203224,2957203227,DE
+2957203228,2957203231,PL
+2957203232,2957203263,GB
+2957203264,2957203455,US
2957203456,2957205503,FR
2957205504,2957213695,PS
2957213696,2957221887,FR
@@ -69553,7 +72975,8 @@
2957901824,2958032895,PT
2958032896,2958557183,ES
2958557184,2958819327,TR
-2958819328,2958884863,CY
+2958819328,2958884863,GR
+2958884864,2958950399,FI
2958950400,2959081471,DE
2959081472,2959089663,RU
2959089664,2959093759,PL
@@ -69570,11 +72993,51 @@
2959126528,2959128575,RO
2959128576,2959130623,RU
2959130624,2959138815,UA
+2959138816,2959147007,RU
+2959147008,2959149055,UA
+2959149056,2959151103,CZ
+2959151104,2959155199,PL
+2959155200,2959159295,RU
+2959159296,2959161343,PL
+2959161344,2959163391,RO
+2959163392,2959167487,UA
+2959167488,2959171583,PL
+2959171584,2959175679,RU
+2959175680,2959179775,UA
+2959179776,2959181823,RU
+2959181824,2959183871,PL
+2959183872,2959187967,RO
+2959187968,2959204351,RU
+2959204352,2959208447,RO
+2959208448,2959210495,CZ
+2959210496,2959212543,PL
+2959212544,2959220735,UA
+2959220736,2959224831,RO
+2959224832,2959226879,UA
+2959226880,2959228927,RO
+2959228928,2959237119,UA
+2959237120,2959241215,CZ
+2959241216,2959245311,PL
+2959245312,2959253503,RU
+2959253504,2959255551,DE
+2959255552,2959261695,RU
+2959261696,2959278079,KZ
+2959278080,2959343615,DE
+2959343616,2959351807,UA
+2959351808,2959353855,DE
+2959353856,2959355903,RU
+2959355904,2959357951,RO
+2959357952,2959359999,UA
+2959360000,2959384575,RU
+2959384576,2959392767,UA
2961178624,2965372927,FR
2965372928,2965766143,RU
2965766144,2965897215,DE
2965897216,2966028287,IT
2966028288,2966159359,QA
+2966159360,2966290431,AE
+2966290432,2966421503,IT
+2966421504,2966945791,RU
2969567232,2977955839,BR
2986344448,2987393023,DE
2987393024,2987397119,IM
@@ -69719,6 +73182,7 @@
2987755520,2987757567,PL
2987757568,2987759615,DE
2987759616,2987761663,PL
+2987761664,2987763711,IR
2987763712,2987765759,GR
2987765760,2987767807,FR
2987767808,2987769855,CZ
@@ -69748,7 +73212,8 @@
2987810816,2987812863,NO
2987812864,2987814911,CH
2987814912,2987816959,CZ
-2987816960,2987819007,NL
+2987816960,2987817983,NL
+2987817984,2987819007,GB
2987819008,2987821055,FR
2987821056,2987823103,GB
2987823104,2987827199,FR
@@ -69800,11 +73265,8 @@
2988179456,2988441599,SE
2988441600,2988441603,CH
2988441604,2988441607,GB
-2988441608,2988441611,DE
-2988441612,2988441615,CH
-2988441616,2988441647,FR
-2988441648,2988441651,GB
-2988441652,2988441655,FR
+2988441608,2988441615,CH
+2988441616,2988441655,FR
2988441656,2988441663,DE
2988441664,2988441695,IT
2988441696,2988441791,FR
@@ -69820,7 +73282,8 @@
2988441896,2988441903,PL
2988441904,2988441911,IT
2988441912,2988441919,ES
-2988441920,2988441935,PL
+2988441920,2988441931,PL
+2988441932,2988441935,BE
2988441936,2988441939,FR
2988441940,2988441943,ES
2988441944,2988441951,FR
@@ -69832,7 +73295,7 @@
2988441984,2988441991,FR
2988441992,2988441995,ES
2988441996,2988441999,PT
-2988442000,2988442003,FR
+2988442000,2988442003,PL
2988442004,2988442007,ES
2988442008,2988442047,FR
2988442048,2988442063,GB
@@ -69864,7 +73327,9 @@
2988442920,2988442923,LT
2988442924,2988442927,GB
2988442928,2988442975,FR
-2988442976,2988443007,GB
+2988442976,2988442995,GB
+2988442996,2988442999,IE
+2988443000,2988443007,GB
2988443008,2988443023,PT
2988443024,2988443027,CZ
2988443028,2988443031,BE
@@ -69930,7 +73395,8 @@
2988445120,2988445127,ES
2988445128,2988445139,FR
2988445140,2988445143,GB
-2988445144,2988445167,FR
+2988445144,2988445151,IT
+2988445152,2988445167,FR
2988445168,2988445183,ES
2988445184,2988445951,DE
2988445952,2988445967,FR
@@ -69938,9 +73404,12 @@
2988445984,2988446207,DE
2988446208,2988446271,PL
2988446272,2988446275,IT
-2988446276,2988446291,FR
+2988446276,2988446279,FR
+2988446280,2988446287,ES
+2988446288,2988446291,FR
2988446292,2988446295,ES
-2988446296,2988446307,FR
+2988446296,2988446299,GB
+2988446300,2988446307,FR
2988446308,2988446319,PL
2988446320,2988446323,FR
2988446324,2988446327,LT
@@ -69975,9 +73444,7 @@
2988448608,2988448639,ES
2988448640,2988448671,GB
2988448672,2988448691,IT
-2988448692,2988448695,DE
-2988448696,2988448699,IT
-2988448700,2988448703,LT
+2988448692,2988448703,DE
2988448704,2988448767,GB
2988448768,2988448783,FR
2988448784,2988448815,PL
@@ -69986,9 +73453,7 @@
2988448896,2988448899,PT
2988448900,2988448903,PL
2988448904,2988448907,ES
-2988448908,2988448959,FR
-2988448960,2988448991,DE
-2988448992,2988449007,FR
+2988448908,2988449007,FR
2988449008,2988449023,GB
2988449024,2988449055,PL
2988449056,2988449087,ES
@@ -69998,8 +73463,15 @@
2988449124,2988449127,DE
2988449128,2988449135,ES
2988449136,2988449151,FR
-2988449152,2988449279,PL
-2988449280,2988449535,GB
+2988449152,2988449167,PL
+2988449168,2988449175,GB
+2988449176,2988449183,FR
+2988449184,2988449199,PL
+2988449200,2988449203,FR
+2988449204,2988449207,PL
+2988449208,2988449215,ES
+2988449216,2988449247,FR
+2988449248,2988449535,GB
2988449536,2988449579,FR
2988449580,2988449583,PL
2988449584,2988449631,FR
@@ -70034,7 +73506,8 @@
2988458280,2988458283,ES
2988458284,2988458295,FR
2988458296,2988458299,GB
-2988458300,2988458319,ES
+2988458300,2988458303,ES
+2988458304,2988458319,FR
2988458320,2988458323,CZ
2988458324,2988458331,FR
2988458332,2988458335,GB
@@ -70069,20 +73542,23 @@
2988459176,2988459179,PL
2988459180,2988459183,FR
2988459184,2988459199,PL
-2988459200,2988459215,FR
-2988459216,2988459219,DE
-2988459220,2988459223,FR
+2988459200,2988459223,FR
2988459224,2988459231,DE
-2988459232,2988459235,IT
+2988459232,2988459235,FR
2988459236,2988459239,PL
2988459240,2988459243,FR
2988459244,2988459247,ES
2988459248,2988459251,LT
-2988459252,2988459255,BE
+2988459252,2988459255,GB
2988459256,2988459259,FR
-2988459260,2988459263,NL
+2988459260,2988459263,PL
2988459264,2988459519,ES
-2988459520,2988459583,DE
+2988459520,2988459535,FR
+2988459536,2988459539,GB
+2988459540,2988459543,PL
+2988459544,2988459547,ES
+2988459548,2988459551,PL
+2988459552,2988459583,FR
2988459584,2988459599,ES
2988459600,2988459603,GB
2988459604,2988459615,FR
@@ -70100,7 +73576,7 @@
2988459716,2988459719,FR
2988459720,2988459727,DE
2988459728,2988459731,FR
-2988459732,2988459735,BE
+2988459732,2988459735,ES
2988459736,2988459743,PL
2988459744,2988459747,ES
2988459748,2988459751,PL
@@ -70109,8 +73585,8 @@
2988459768,2988459771,NL
2988459772,2988459775,GB
2988459776,2988459839,FR
-2988459840,2988459855,GB
-2988459856,2988459863,FR
+2988459840,2988459859,GB
+2988459860,2988459863,FR
2988459864,2988459871,ES
2988459872,2988459895,PL
2988459896,2988459967,FR
@@ -70148,7 +73624,7 @@
2988460336,2988460339,FR
2988460340,2988460343,GB
2988460344,2988460367,FR
-2988460368,2988460375,ES
+2988460368,2988460375,PL
2988460376,2988460543,FR
2988460544,2988460547,GB
2988460548,2988460551,DE
@@ -70159,9 +73635,7 @@
2988460616,2988460623,PT
2988460624,2988460679,FR
2988460680,2988460687,DE
-2988460688,2988460719,FR
-2988460720,2988460735,ES
-2988460736,2988460755,FR
+2988460688,2988460755,FR
2988460756,2988460759,PT
2988460760,2988460767,FR
2988460768,2988460799,PL
@@ -70193,7 +73667,7 @@
2988461424,2988461431,IT
2988461432,2988461435,PT
2988461436,2988461439,BE
-2988461440,2988461471,ES
+2988461440,2988461471,FI
2988461472,2988461475,PL
2988461476,2988461479,IE
2988461480,2988461483,CZ
@@ -70206,8 +73680,12 @@
2988461520,2988461523,GB
2988461524,2988461559,FR
2988461560,2988461567,GB
-2988461568,2988461599,FR
-2988461600,2988461615,BE
+2988461568,2988461583,FR
+2988461584,2988461587,ES
+2988461588,2988461591,GB
+2988461592,2988461595,ES
+2988461596,2988461599,GB
+2988461600,2988461615,FR
2988461616,2988461623,IT
2988461624,2988461695,FR
2988461696,2988461699,DE
@@ -70216,8 +73694,9 @@
2988461708,2988461711,BE
2988461712,2988461719,FR
2988461720,2988461723,DE
-2988461724,2988461735,FR
-2988461736,2988461743,DE
+2988461724,2988461727,FR
+2988461728,2988461731,PL
+2988461732,2988461743,DE
2988461744,2988461747,ES
2988461748,2988461751,IT
2988461752,2988461755,FR
@@ -70235,8 +73714,8 @@
2988461872,2988461879,FR
2988461880,2988461883,ES
2988461884,2988461887,PL
-2988461888,2988461903,FR
-2988461904,2988461911,ES
+2988461888,2988461907,FR
+2988461908,2988461911,ES
2988461912,2988461915,IT
2988461916,2988461919,NL
2988461920,2988461935,FR
@@ -70307,7 +73786,10 @@
2988463212,2988463223,GB
2988463224,2988463227,ES
2988463228,2988463231,CH
-2988463232,2988463263,NL
+2988463232,2988463251,FR
+2988463252,2988463255,PL
+2988463256,2988463259,IE
+2988463260,2988463263,CH
2988463264,2988463279,PL
2988463280,2988463283,GB
2988463284,2988463315,FR
@@ -70340,8 +73822,7 @@
2988463836,2988463839,FR
2988463840,2988463871,PL
2988463872,2988463907,FR
-2988463908,2988463911,PL
-2988463912,2988463915,FR
+2988463908,2988463915,PL
2988463916,2988463919,GB
2988463920,2988463939,FR
2988463940,2988463943,DE
@@ -70371,9 +73852,7 @@
2988464356,2988464359,FR
2988464360,2988464363,PL
2988464364,2988464367,GB
-2988464368,2988464511,FR
-2988464512,2988464519,PT
-2988464520,2988464527,FR
+2988464368,2988464527,FR
2988464528,2988464543,DE
2988464544,2988464551,FR
2988464552,2988464555,IT
@@ -70394,12 +73873,12 @@
2988464796,2988464799,GB
2988464800,2988464815,DE
2988464816,2988464819,FR
-2988464820,2988464823,NL
-2988464824,2988464827,IT
-2988464828,2988464831,GB
+2988464820,2988464823,GB
+2988464824,2988464827,ES
+2988464828,2988464831,PL
2988464832,2988464895,ES
2988464896,2988464911,PL
-2988464912,2988464915,CH
+2988464912,2988464915,FR
2988464916,2988464919,DE
2988464920,2988464923,FI
2988464924,2988464927,FR
@@ -70413,7 +73892,8 @@
2988464968,2988464971,PT
2988464972,2988464975,PL
2988464976,2988465215,FR
-2988465216,2988465223,ES
+2988465216,2988465219,ES
+2988465220,2988465223,IE
2988465224,2988465235,FR
2988465236,2988465239,ES
2988465240,2988465279,FR
@@ -70459,12 +73939,13 @@
2988465620,2988465623,ES
2988465624,2988465631,FR
2988465632,2988465647,IT
-2988465648,2988465663,CZ
+2988465648,2988465655,CZ
+2988465656,2988465663,GB
2988465664,2988466047,FR
2988466048,2988466111,PL
2988466112,2988466115,FR
2988466116,2988466127,NL
-2988466128,2988466131,PT
+2988466128,2988466131,PL
2988466132,2988466139,FR
2988466140,2988466143,PL
2988466144,2988466159,NL
@@ -70492,7 +73973,8 @@
2988482816,2988482819,NL
2988482820,2988482823,DE
2988482824,2988482831,PL
-2988482832,2988482839,FR
+2988482832,2988482835,IE
+2988482836,2988482839,PL
2988482840,2988482843,ES
2988482844,2988482847,NL
2988482848,2988482863,FR
@@ -70503,15 +73985,17 @@
2988482888,2988482891,ES
2988482892,2988482895,PL
2988482896,2988482927,GB
-2988482928,2988482935,FR
-2988482936,2988482939,PL
+2988482928,2988482931,FR
+2988482932,2988482939,PL
2988482940,2988482943,LT
2988482944,2988482959,PL
2988482960,2988482975,CZ
2988482976,2988482979,DE
2988482980,2988482983,GB
2988482984,2988482987,DE
-2988482988,2988483091,FR
+2988482988,2988483035,FR
+2988483036,2988483039,GB
+2988483040,2988483091,FR
2988483092,2988483095,BE
2988483096,2988483099,FR
2988483100,2988483103,PL
@@ -70580,9 +74064,10 @@
2988484024,2988484031,FR
2988484032,2988484039,IT
2988484040,2988484047,NL
-2988484048,2988484051,FR
+2988484048,2988484051,ES
2988484052,2988484055,GB
-2988484056,2988484095,FR
+2988484056,2988484063,FR
+2988484064,2988484095,GB
2988484096,2988484111,DE
2988484112,2988484127,FR
2988484128,2988484131,PT
@@ -70663,7 +74148,8 @@
2988485520,2988485559,FR
2988485560,2988485567,NL
2988485568,2988485583,GB
-2988485584,2988485591,ES
+2988485584,2988485587,IT
+2988485588,2988485591,BE
2988485592,2988485599,FR
2988485600,2988485607,PL
2988485608,2988485611,FR
@@ -70671,11 +74157,14 @@
2988485616,2988485631,GB
2988485632,2988485663,ES
2988485664,2988485671,PL
-2988485672,2988485675,ES
+2988485672,2988485675,DE
2988485676,2988485683,FR
2988485684,2988485687,PL
2988485688,2988485691,GB
-2988485692,2988485791,FR
+2988485692,2988485695,PL
+2988485696,2988485759,FR
+2988485760,2988485767,GB
+2988485768,2988485791,FR
2988485792,2988485795,PT
2988485796,2988485799,LT
2988485800,2988485803,PT
@@ -70685,7 +74174,10 @@
2988485832,2988485835,NL
2988485836,2988485839,LT
2988485840,2988485855,BE
-2988485856,2988485887,FR
+2988485856,2988485871,FR
+2988485872,2988485875,PL
+2988485876,2988485879,ES
+2988485880,2988485887,FR
2988485888,2988485903,PL
2988485904,2988485911,GB
2988485912,2988485951,FR
@@ -70704,7 +74196,11 @@
2988486076,2988486079,ES
2988486080,2988486083,BE
2988486084,2988486087,IT
-2988486088,2988486111,FR
+2988486088,2988486095,FR
+2988486096,2988486099,CH
+2988486100,2988486103,CZ
+2988486104,2988486107,DE
+2988486108,2988486111,IE
2988486112,2988486135,PL
2988486136,2988486139,FR
2988486140,2988486143,GB
@@ -70715,9 +74211,9 @@
2988486180,2988486183,DE
2988486184,2988486191,IE
2988486192,2988486195,IT
-2988486196,2988486199,DE
+2988486196,2988486199,FR
2988486200,2988486207,PT
-2988486208,2988486211,ES
+2988486208,2988486211,PL
2988486212,2988486215,DE
2988486216,2988486219,ES
2988486220,2988486223,IT
@@ -70726,17 +74222,58 @@
2988486236,2988486239,ES
2988486240,2988486287,PL
2988486288,2988486291,FR
-2988486292,2988486295,DE
-2988486296,2988486299,GB
-2988486300,2988486303,PL
-2988486304,2988486319,DE
+2988486292,2988486299,GB
+2988486300,2988486319,PL
2988486320,2988486323,IT
2988486324,2988486327,PT
2988486328,2988486343,ES
2988486344,2988486347,FR
2988486348,2988486351,ES
2988486352,2988486399,FR
-2988486400,2988486783,GB
+2988486400,2988486415,PL
+2988486416,2988486423,FR
+2988486424,2988486431,PT
+2988486432,2988486447,FR
+2988486448,2988486463,ES
+2988486464,2988486471,BE
+2988486472,2988486475,ES
+2988486476,2988486479,PL
+2988486480,2988486495,IE
+2988486496,2988486503,DE
+2988486504,2988486511,PL
+2988486512,2988486515,DE
+2988486516,2988486527,PL
+2988486528,2988486575,FR
+2988486576,2988486579,PL
+2988486580,2988486583,GB
+2988486584,2988486595,FR
+2988486596,2988486599,GB
+2988486600,2988486603,DE
+2988486604,2988486607,FR
+2988486608,2988486615,FI
+2988486616,2988486623,ES
+2988486624,2988486643,FR
+2988486644,2988486647,GB
+2988486648,2988486651,ES
+2988486652,2988486655,PL
+2988486656,2988486671,FR
+2988486672,2988486675,DE
+2988486676,2988486679,FR
+2988486680,2988486687,ES
+2988486688,2988486691,PL
+2988486692,2988486695,FR
+2988486696,2988486699,ES
+2988486700,2988486711,PL
+2988486712,2988486719,IT
+2988486720,2988486735,FR
+2988486736,2988486743,ES
+2988486744,2988486747,FR
+2988486748,2988486751,GB
+2988486752,2988486759,PL
+2988486760,2988486763,ES
+2988486764,2988486767,FR
+2988486768,2988486775,ES
+2988486776,2988486783,BE
2988486784,2988486787,DE
2988486788,2988486795,FR
2988486796,2988486799,PL
@@ -70777,18 +74314,20 @@
2988488128,2988488159,FR
2988488160,2988488175,ES
2988488176,2988488179,GB
-2988488180,2988488183,DE
+2988488180,2988488183,FR
2988488184,2988488187,IT
2988488188,2988488191,DE
2988488192,2988488479,FR
2988488480,2988488487,PL
2988488488,2988488491,FR
2988488492,2988488495,ES
-2988488496,2988488511,FR
-2988488512,2988488543,ES
-2988488544,2988488575,FR
-2988488576,2988488607,NL
-2988488608,2988488639,IT
+2988488496,2988488543,FR
+2988488544,2988488555,GB
+2988488556,2988488563,ES
+2988488564,2988488567,FR
+2988488568,2988488571,ES
+2988488572,2988488575,GB
+2988488576,2988488639,FR
2988488640,2988488647,ES
2988488648,2988488655,IT
2988488656,2988488663,PL
@@ -70807,8 +74346,8 @@
2988489088,2988489103,GB
2988489104,2988489119,FI
2988489120,2988489123,ES
-2988489124,2988489127,NL
-2988489128,2988489131,DE
+2988489124,2988489127,IE
+2988489128,2988489131,IT
2988489132,2988489167,FR
2988489168,2988489175,PT
2988489176,2988489179,PL
@@ -70866,7 +74405,7 @@
2988489760,2988489791,NL
2988489792,2988489887,PL
2988489888,2988489903,FR
-2988489904,2988489919,GB
+2988489904,2988489919,IE
2988489920,2988489935,PL
2988489936,2988489943,ES
2988489944,2988489947,FR
@@ -70885,19 +74424,19 @@
2988490108,2988490111,FR
2988490112,2988490143,PL
2988490144,2988490175,ES
-2988490176,2988490183,FR
+2988490176,2988490179,IE
+2988490180,2988490183,PL
2988490184,2988490191,ES
2988490192,2988490195,GB
2988490196,2988490199,PT
2988490200,2988490203,DE
-2988490204,2988490207,ES
-2988490208,2988490223,FR
+2988490204,2988490223,FR
2988490224,2988490227,DE
2988490228,2988490231,GB
2988490232,2988490239,ES
2988490240,2988490247,PL
2988490248,2988490251,ES
-2988490252,2988490255,FR
+2988490252,2988490255,GB
2988490256,2988490271,PL
2988490272,2988490287,ES
2988490288,2988490295,FR
@@ -70905,11 +74444,14 @@
2988490304,2988490319,ES
2988490320,2988490335,FR
2988490336,2988490367,PT
-2988490368,2988490379,FR
+2988490368,2988490371,ES
+2988490372,2988490375,NL
+2988490376,2988490379,FR
2988490380,2988490383,ES
2988490384,2988490399,FR
2988490400,2988490407,GB
-2988490408,2988490415,NL
+2988490408,2988490411,NL
+2988490412,2988490415,ES
2988490416,2988490423,GB
2988490424,2988490463,FR
2988490464,2988490623,PL
@@ -70922,10 +74464,8 @@
2988498976,2988498983,ES
2988498984,2988498991,FR
2988498992,2988499007,PL
-2988499008,2988499039,FR
-2988499040,2988499051,DE
-2988499052,2988499055,IT
-2988499056,2988499063,FR
+2988499008,2988499051,DE
+2988499052,2988499063,FR
2988499064,2988499067,DE
2988499068,2988499071,FR
2988499072,2988499103,PL
@@ -70936,8 +74476,7 @@
2988499144,2988499151,DE
2988499152,2988499167,FR
2988499168,2988499199,ES
-2988499200,2988499327,FR
-2988499328,2988499343,NL
+2988499200,2988499343,FR
2988499344,2988499347,PL
2988499348,2988499351,FR
2988499352,2988499359,IT
@@ -70947,13 +74486,13 @@
2988499380,2988499387,PL
2988499388,2988499407,FR
2988499408,2988499415,PL
-2988499416,2988499423,FR
+2988499416,2988499423,DE
2988499424,2988499455,PL
2988499456,2988499463,NL
2988499464,2988499471,DE
2988499472,2988499487,FR
2988499488,2988499519,PL
-2988499520,2988499551,FR
+2988499520,2988499551,ES
2988499552,2988499559,PL
2988499560,2988499567,NL
2988499568,2988499575,IE
@@ -70995,25 +74534,28 @@
2988499848,2988499851,DE
2988499852,2988499855,PL
2988499856,2988499871,ES
-2988499872,2988499903,CH
+2988499872,2988499903,IE
2988499904,2988499907,FR
2988499908,2988499911,BE
-2988499912,2988499919,FR
+2988499912,2988499915,FR
+2988499916,2988499919,LT
2988499920,2988499923,DE
2988499924,2988499927,BE
2988499928,2988499935,FR
2988499936,2988499967,IE
2988499968,2988500223,FR
-2988500224,2988500255,NL
+2988500224,2988500255,ES
2988500256,2988500271,IT
2988500272,2988500287,BE
2988500288,2988500303,PL
2988500304,2988500307,FR
-2988500308,2988500311,IT
+2988500308,2988500311,DE
2988500312,2988500315,ES
2988500316,2988500319,DE
-2988500320,2988500335,IT
-2988500336,2988500347,FR
+2988500320,2988500335,FR
+2988500336,2988500339,DE
+2988500340,2988500343,IE
+2988500344,2988500347,FR
2988500348,2988500351,PL
2988500352,2988500383,GB
2988500384,2988500399,BE
@@ -71035,14 +74577,12 @@
2988500680,2988500687,PL
2988500688,2988500703,NL
2988500704,2988500711,PL
-2988500712,2988500735,FR
-2988500736,2988500751,IE
-2988500752,2988500767,FR
+2988500712,2988500767,FR
2988500768,2988500771,PT
2988500772,2988500775,ES
2988500776,2988500779,GB
-2988500780,2988500783,PL
-2988500784,2988500791,FR
+2988500780,2988500787,PL
+2988500788,2988500791,ES
2988500792,2988500799,PL
2988500800,2988500815,ES
2988500816,2988500831,FR
@@ -71113,25 +74653,32 @@
2988502080,2988502095,IE
2988502096,2988502099,FI
2988502100,2988502103,CZ
-2988502104,2988502111,PT
-2988502112,2988502143,PL
+2988502104,2988502143,PL
2988502144,2988502207,FR
2988502208,2988502223,GB
2988502224,2988502255,FR
-2988502256,2988502263,GB
+2988502256,2988502263,DE
2988502264,2988502267,ES
2988502268,2988502271,DE
2988502272,2988502399,FR
2988502400,2988502407,NL
2988502408,2988502411,FR
-2988502412,2988502415,CH
+2988502412,2988502415,NL
2988502416,2988502431,DE
2988502432,2988502447,FR
2988502448,2988502451,IE
2988502452,2988502455,IT
2988502456,2988502459,ES
2988502460,2988502463,PT
-2988502464,2988502527,FR
+2988502464,2988502479,IE
+2988502480,2988502483,CH
+2988502484,2988502487,PL
+2988502488,2988502491,CH
+2988502492,2988502495,PL
+2988502496,2988502511,ES
+2988502512,2988502519,FR
+2988502520,2988502523,ES
+2988502524,2988502527,DE
2988502528,2988502543,PL
2988502544,2988502559,FR
2988502560,2988502591,PL
@@ -71143,7 +74690,8 @@
2988502640,2988502655,FR
2988502656,2988502719,DE
2988502720,2988502723,ES
-2988502724,2988502731,FR
+2988502724,2988502727,BE
+2988502728,2988502731,GB
2988502732,2988502735,PL
2988502736,2988502751,FR
2988502752,2988502783,ES
@@ -71177,8 +74725,9 @@
2988503024,2988503031,GB
2988503032,2988503035,ES
2988503036,2988503039,GB
-2988503040,2988503079,FR
-2988503080,2988503103,GB
+2988503040,2988503071,FR
+2988503072,2988503075,NL
+2988503076,2988503103,GB
2988503104,2988503107,ES
2988503108,2988503111,NL
2988503112,2988503119,PL
@@ -71194,7 +74743,8 @@
2988503200,2988503215,FR
2988503216,2988503231,PL
2988503232,2988503375,FR
-2988503376,2988503391,GB
+2988503376,2988503383,PT
+2988503384,2988503391,PL
2988503392,2988503395,ES
2988503396,2988503399,PL
2988503400,2988503415,FR
@@ -71205,14 +74755,20 @@
2988503504,2988503519,FR
2988503520,2988503535,NL
2988503536,2988503551,FI
-2988503552,2988503939,FR
+2988503552,2988503871,FR
+2988503872,2988503903,DE
+2988503904,2988503919,FR
+2988503920,2988503927,ES
+2988503928,2988503931,IT
+2988503932,2988503935,NL
+2988503936,2988503939,FR
2988503940,2988503943,CH
2988503944,2988503947,PL
2988503948,2988503951,IE
2988503952,2988503987,FR
-2988503988,2988504003,PL
-2988504004,2988504015,FR
-2988504016,2988504019,GB
+2988503988,2988504007,PL
+2988504008,2988504015,BE
+2988504016,2988504019,FR
2988504020,2988504023,BE
2988504024,2988504031,FR
2988504032,2988504063,ES
@@ -71237,7 +74793,11 @@
2988504432,2988504435,FR
2988504436,2988504439,ES
2988504440,2988504443,FR
-2988504444,2988504463,GB
+2988504444,2988504447,GB
+2988504448,2988504451,BE
+2988504452,2988504455,ES
+2988504456,2988504459,PL
+2988504460,2988504463,GB
2988504464,2988504467,DE
2988504468,2988504471,ES
2988504472,2988504479,PL
@@ -71245,23 +74805,30 @@
2988504544,2988504559,PL
2988504560,2988504563,FR
2988504564,2988504567,PL
-2988504568,2988504571,FR
+2988504568,2988504571,CH
2988504572,2988504603,PL
-2988504604,2988504671,FR
+2988504604,2988504639,FR
+2988504640,2988504643,DE
+2988504644,2988504647,PT
+2988504648,2988504655,GB
+2988504656,2988504671,FR
2988504672,2988504703,PT
2988504704,2988504735,FR
2988504736,2988504743,PL
2988504744,2988504751,GB
2988504752,2988504767,FR
2988504768,2988504799,ES
-2988504800,2988504815,PL
-2988504816,2988504863,FR
+2988504800,2988504823,PL
+2988504824,2988504827,DE
+2988504828,2988504863,FR
2988504864,2988504879,PL
2988504880,2988504959,FR
2988504960,2988504963,PT
2988504964,2988504967,FR
2988504968,2988504975,BE
-2988504976,2988504991,FR
+2988504976,2988504983,FR
+2988504984,2988504987,ES
+2988504988,2988504991,FR
2988504992,2988505023,CZ
2988505024,2988505087,FR
2988505088,2988505151,NL
@@ -71273,15 +74840,25 @@
2988505212,2988505215,PT
2988505216,2988505247,FR
2988505248,2988505255,PL
-2988505256,2988505311,FR
+2988505256,2988505279,FR
+2988505280,2988505311,BE
2988505312,2988505315,DE
2988505316,2988505319,ES
2988505320,2988505323,PL
-2988505324,2988505327,FR
+2988505324,2988505327,ES
2988505328,2988505343,PL
-2988505344,2988505439,FR
+2988505344,2988505375,DE
+2988505376,2988505391,FR
+2988505392,2988505399,PL
+2988505400,2988505407,ES
+2988505408,2988505439,FR
2988505440,2988505455,PL
-2988505456,2988505487,FR
+2988505456,2988505459,FI
+2988505460,2988505463,CH
+2988505464,2988505471,IT
+2988505472,2988505475,ES
+2988505476,2988505479,NL
+2988505480,2988505487,IE
2988505488,2988505503,PL
2988505504,2988505599,FR
2988505600,2988505603,DE
@@ -71302,13 +74879,23 @@
2988505752,2988505755,CH
2988505756,2988505759,PL
2988505760,2988505775,FR
-2988505776,2988505791,ES
+2988505776,2988505791,GB
2988505792,2988505807,FR
2988505808,2988505811,PL
2988505812,2988505815,DE
2988505816,2988505819,GB
2988505820,2988505823,PL
-2988505824,2988506111,FR
+2988505824,2988505839,FR
+2988505840,2988505843,CH
+2988505844,2988505851,FR
+2988505852,2988505855,PL
+2988505856,2988505919,IE
+2988505920,2988505935,GB
+2988505936,2988505951,PL
+2988505952,2988505967,GB
+2988505968,2988505971,BE
+2988505972,2988505975,GB
+2988505976,2988506111,FR
2988506112,2988506143,BE
2988506144,2988506175,PT
2988506176,2988506191,IT
@@ -71342,8 +74929,8 @@
2988506544,2988506551,DE
2988506552,2988506559,FR
2988506560,2988506563,DE
-2988506564,2988506567,A2
-2988506568,2988506571,GB
+2988506564,2988506567,GB
+2988506568,2988506571,PL
2988506572,2988506575,CH
2988506576,2988506623,FR
2988506624,2988506687,PL
@@ -71434,8 +75021,7 @@
2988507884,2988507887,GB
2988507888,2988507903,ES
2988507904,2988507919,PL
-2988507920,2988507923,DE
-2988507924,2988507927,IT
+2988507920,2988507927,DE
2988507928,2988507935,BE
2988507936,2988507951,FR
2988507952,2988507955,DE
@@ -71451,13 +75037,12 @@
2988508036,2988508039,CZ
2988508040,2988508047,FR
2988508048,2988508055,GB
-2988508056,2988508063,ES
-2988508064,2988508067,FR
+2988508056,2988508067,ES
2988508068,2988508071,PL
2988508072,2988508079,FR
2988508080,2988508095,ES
2988508096,2988508103,FR
-2988508104,2988508111,GB
+2988508104,2988508111,IT
2988508112,2988508127,BE
2988508128,2988508135,PL
2988508136,2988508143,GB
@@ -71485,8 +75070,8 @@
2988508428,2988508431,CZ
2988508432,2988508435,FR
2988508436,2988508439,DE
-2988508440,2988508447,PL
-2988508448,2988508479,FR
+2988508440,2988508455,PL
+2988508456,2988508479,FR
2988508480,2988508543,PT
2988508544,2988508607,GB
2988508608,2988508671,IT
@@ -71496,7 +75081,7 @@
2988508688,2988508703,PL
2988508704,2988508711,GB
2988508712,2988508719,DE
-2988508720,2988508723,IT
+2988508720,2988508723,FR
2988508724,2988508735,GB
2988508736,2988508767,FR
2988508768,2988508799,PT
@@ -71507,12 +75092,15 @@
2988508876,2988508879,PT
2988508880,2988508895,DE
2988508896,2988508911,PL
-2988508912,2988508927,FR
+2988508912,2988508919,GB
+2988508920,2988508927,FR
2988508928,2988508943,GB
2988508944,2988508947,DE
2988508948,2988508951,FR
2988508952,2988508959,ES
-2988508960,2988508991,FR
+2988508960,2988508983,FR
+2988508984,2988508987,DE
+2988508988,2988508991,PL
2988508992,2988509055,NL
2988509056,2988509119,FR
2988509120,2988509151,IT
@@ -71537,7 +75125,8 @@
2988509412,2988509415,DE
2988509416,2988509419,ES
2988509420,2988509443,FR
-2988509444,2988509451,ES
+2988509444,2988509447,FI
+2988509448,2988509451,GB
2988509452,2988509455,PL
2988509456,2988509467,FR
2988509468,2988509503,NL
@@ -71554,19 +75143,19 @@
2988509620,2988509623,GB
2988509624,2988509627,CZ
2988509628,2988509631,IT
-2988509632,2988509711,FR
+2988509632,2988509695,FR
+2988509696,2988509711,IT
2988509712,2988509715,IE
2988509716,2988509719,GB
2988509720,2988509727,IT
-2988509728,2988509743,FR
-2988509744,2988509751,ES
+2988509728,2988509751,FR
2988509752,2988509759,DE
2988509760,2988509767,PL
2988509768,2988509775,IT
2988509776,2988509779,ES
2988509780,2988509783,GB
2988509784,2988509787,FR
-2988509788,2988509791,ES
+2988509788,2988509791,BE
2988509792,2988509823,NL
2988509824,2988509839,FR
2988509840,2988509855,ES
@@ -71583,8 +75172,7 @@
2988509940,2988509943,IT
2988509944,2988509951,FR
2988509952,2988509955,IT
-2988509956,2988509959,PL
-2988509960,2988509963,IT
+2988509956,2988509963,PL
2988509964,2988509967,GB
2988509968,2988509983,ES
2988509984,2988509987,DE
@@ -71605,7 +75193,11 @@
2988510176,2988510207,ES
2988510208,2988510211,FR
2988510212,2988510215,ES
-2988510216,2988510255,FR
+2988510216,2988510239,FR
+2988510240,2988510243,IT
+2988510244,2988510247,FR
+2988510248,2988510251,FI
+2988510252,2988510255,LT
2988510256,2988510259,GB
2988510260,2988510263,FR
2988510264,2988510271,PL
@@ -71634,9 +75226,7 @@
2988510560,2988510591,IT
2988510592,2988510623,BE
2988510624,2988510655,IE
-2988510656,2988510687,PL
-2988510688,2988510703,FR
-2988510704,2988510719,PL
+2988510656,2988510719,PL
2988510720,2988510751,FR
2988510752,2988510759,PL
2988510760,2988510767,FR
@@ -71686,15 +75276,14 @@
2988511740,2988511743,FR
2988511744,2988511747,PL
2988511748,2988511751,GB
-2988511752,2988511759,CZ
+2988511752,2988511759,IT
2988511760,2988511775,FR
2988511776,2988511807,GB
2988511808,2988511823,ES
2988511824,2988511831,DE
2988511832,2988511835,GB
2988511836,2988511855,FR
-2988511856,2988511871,GB
-2988511872,2988511887,PL
+2988511856,2988511887,PL
2988511888,2988511903,FR
2988511904,2988511911,IT
2988511912,2988511915,FR
@@ -71714,7 +75303,7 @@
2988512096,2988512127,IE
2988512128,2988512143,PL
2988512144,2988512151,GB
-2988512152,2988512155,ES
+2988512152,2988512155,CH
2988512156,2988512159,FR
2988512160,2988512191,GB
2988512192,2988512195,FR
@@ -71778,19 +75367,25 @@
2988512840,2988512847,DE
2988512848,2988512851,ES
2988512852,2988512855,DE
-2988512856,2988512895,FR
+2988512856,2988512879,FR
+2988512880,2988512895,DE
2988512896,2988512899,PL
-2988512900,2988512903,GB
+2988512900,2988512903,ES
2988512904,2988512907,PL
-2988512908,2988512943,FR
-2988512944,2988512951,GB
+2988512908,2988512911,ES
+2988512912,2988512943,FR
+2988512944,2988512951,ES
2988512952,2988512955,FR
2988512956,2988512959,LT
2988512960,2988512963,ES
2988512964,2988512967,PL
2988512968,2988512971,GB
2988512972,2988512975,NL
-2988512976,2988512995,FR
+2988512976,2988512979,FI
+2988512980,2988512983,DE
+2988512984,2988512987,CH
+2988512988,2988512991,CZ
+2988512992,2988512995,FR
2988512996,2988512999,GB
2988513000,2988513003,FR
2988513004,2988513007,PL
@@ -71823,10 +75418,14 @@
2988513332,2988513343,FR
2988513344,2988513351,ES
2988513352,2988513359,IT
-2988513360,2988513375,GB
+2988513360,2988513363,DE
+2988513364,2988513367,FR
+2988513368,2988513375,ES
2988513376,2988513379,FR
2988513380,2988513383,PT
-2988513384,2988513407,FR
+2988513384,2988513387,FR
+2988513388,2988513391,CH
+2988513392,2988513407,FR
2988513408,2988513471,PL
2988513472,2988513503,FR
2988513504,2988513507,CH
@@ -71839,8 +75438,10 @@
2988513568,2988513575,GB
2988513576,2988513583,PL
2988513584,2988513599,IE
-2988513600,2988513671,FR
-2988513672,2988513675,ES
+2988513600,2988513631,FR
+2988513632,2988513647,ES
+2988513648,2988513671,FR
+2988513672,2988513675,PT
2988513676,2988513679,FR
2988513680,2988513683,ES
2988513684,2988513691,FR
@@ -71864,8 +75465,7 @@
2988513984,2988513991,GB
2988513992,2988513999,IE
2988514000,2988514015,FR
-2988514016,2988514019,ES
-2988514020,2988514023,NL
+2988514016,2988514023,ES
2988514024,2988514027,CH
2988514028,2988514031,PL
2988514032,2988514047,FR
@@ -71874,7 +75474,7 @@
2988514096,2988514099,DE
2988514100,2988514103,PL
2988514104,2988514111,FR
-2988514112,2988514115,DE
+2988514112,2988514115,IE
2988514116,2988514127,FR
2988514128,2988514131,IE
2988514132,2988514135,IT
@@ -71911,9 +75511,10 @@
2988514560,2988514623,FR
2988514624,2988514655,DE
2988514656,2988514671,FR
-2988514672,2988514675,GB
+2988514672,2988514675,CH
2988514676,2988514679,IT
-2988514680,2988514687,FR
+2988514680,2988514683,GB
+2988514684,2988514687,DE
2988514688,2988514719,GB
2988514720,2988514735,ES
2988514736,2988514739,FR
@@ -71961,7 +75562,19 @@
2988523740,2988523743,FR
2988523744,2988523775,PT
2988523776,2988524031,FR
-2988524032,2988524159,DE
+2988524032,2988524035,DE
+2988524036,2988524039,LT
+2988524040,2988524047,ES
+2988524048,2988524055,FR
+2988524056,2988524063,CZ
+2988524064,2988524067,PL
+2988524068,2988524075,GB
+2988524076,2988524079,ES
+2988524080,2988524083,GB
+2988524084,2988524087,IT
+2988524088,2988524111,FR
+2988524112,2988524127,IT
+2988524128,2988524159,FR
2988524160,2988524163,ES
2988524164,2988524167,FR
2988524168,2988524175,ES
@@ -71984,7 +75597,8 @@
2988524272,2988524287,DE
2988524288,2988524291,ES
2988524292,2988524295,IT
-2988524296,2988524303,FR
+2988524296,2988524299,CZ
+2988524300,2988524303,FR
2988524304,2988524307,IT
2988524308,2988524319,GB
2988524320,2988524351,FR
@@ -72003,8 +75617,10 @@
2988524576,2988524591,FR
2988524592,2988524603,PL
2988524604,2988524607,ES
-2988524608,2988524623,GB
-2988524624,2988524639,FR
+2988524608,2988524627,GB
+2988524628,2988524631,IE
+2988524632,2988524635,DE
+2988524636,2988524639,FR
2988524640,2988524671,DE
2988524672,2988524735,FR
2988524736,2988524751,GB
@@ -72021,7 +75637,8 @@
2988525824,2988525839,FR
2988525840,2988525847,ES
2988525848,2988525851,IT
-2988525852,2988525887,DE
+2988525852,2988525855,DE
+2988525856,2988525887,FR
2988525888,2988525951,FI
2988525952,2988526079,ES
2988526080,2988526143,PT
@@ -72046,27 +75663,36 @@
2988526608,2988526615,DE
2988526616,2988526655,FR
2988526656,2988526663,PL
-2988526664,2988526687,FR
+2988526664,2988526671,FR
+2988526672,2988526679,DE
+2988526680,2988526683,ES
+2988526684,2988526687,FR
2988526688,2988526703,ES
2988526704,2988526711,FR
2988526712,2988526715,ES
2988526716,2988526719,GB
-2988526720,2988526847,FR
+2988526720,2988526727,FR
+2988526728,2988526735,DE
+2988526736,2988526751,PL
+2988526752,2988526783,GB
+2988526784,2988526847,FR
2988526848,2988526863,PL
2988526864,2988526867,GB
2988526868,2988526871,FR
2988526872,2988526875,DE
-2988526876,2988526911,FR
+2988526876,2988526879,PL
+2988526880,2988526911,FR
2988526912,2988526927,GB
2988526928,2988526935,DE
2988526936,2988526943,PL
2988526944,2988526951,DE
-2988526952,2988526955,IE
-2988526956,2988526975,FR
+2988526952,2988526955,FR
+2988526956,2988526959,IT
+2988526960,2988526975,FR
2988526976,2988526991,PL
2988526992,2988526995,DE
-2988526996,2988526999,ES
-2988527000,2988527055,FR
+2988526996,2988527003,ES
+2988527004,2988527055,FR
2988527056,2988527071,BE
2988527072,2988527087,FR
2988527088,2988527095,GB
@@ -72084,7 +75710,8 @@
2988527196,2988527199,FR
2988527200,2988527207,NL
2988527208,2988527211,DE
-2988527212,2988527391,FR
+2988527212,2988527359,FR
+2988527360,2988527391,DE
2988527392,2988527399,PL
2988527400,2988527407,DE
2988527408,2988527411,FR
@@ -72094,8 +75721,9 @@
2988527432,2988527439,IT
2988527440,2988527451,PL
2988527452,2988527455,PT
-2988527456,2988527459,IT
-2988527460,2988527475,FR
+2988527456,2988527459,LT
+2988527460,2988527463,IE
+2988527464,2988527475,FR
2988527476,2988527479,ES
2988527480,2988527487,FR
2988527488,2988527503,GB
@@ -72105,35 +75733,77 @@
2988527536,2988527551,GB
2988527552,2988527583,PL
2988527584,2988527591,GB
-2988527592,2988527595,IT
+2988527592,2988527595,IE
2988527596,2988527599,DE
2988527600,2988527603,NL
2988527604,2988527607,FR
2988527608,2988527611,DE
2988527612,2988527615,PT
-2988527616,2988528127,DE
+2988527616,2988527619,ES
+2988527620,2988527623,PL
+2988527624,2988527631,ES
+2988527632,2988527667,FR
+2988527668,2988527671,IE
+2988527672,2988527675,ES
+2988527676,2988527679,DE
+2988527680,2988527683,ES
+2988527684,2988527695,FR
+2988527696,2988527711,GB
+2988527712,2988527747,FR
+2988527748,2988527751,ES
+2988527752,2988527755,DE
+2988527756,2988527759,PL
+2988527760,2988527823,FR
+2988527824,2988527827,ES
+2988527828,2988527831,DE
+2988527832,2988527839,ES
+2988527840,2988527843,PL
+2988527844,2988527847,NL
+2988527848,2988527851,LT
+2988527852,2988527855,GB
+2988527856,2988527871,FR
+2988527872,2988527903,PT
+2988527904,2988527935,ES
+2988527936,2988527967,DE
+2988527968,2988527983,PL
+2988527984,2988527999,FR
+2988528000,2988528007,IT
+2988528008,2988528011,ES
+2988528012,2988528015,PL
+2988528016,2988528063,IE
+2988528064,2988528071,GB
+2988528072,2988528075,NL
+2988528076,2988528079,BE
+2988528080,2988528095,ES
+2988528096,2988528127,FR
2988528128,2988528159,GB
2988528160,2988528175,ES
2988528176,2988528179,CH
2988528180,2988528183,IT
2988528184,2988528187,PL
-2988528188,2988528191,GB
+2988528188,2988528191,FR
2988528192,2988528207,IE
2988528208,2988528215,FR
2988528216,2988528219,IE
2988528220,2988528223,DE
-2988528224,2988528231,CH
+2988528224,2988528227,FR
+2988528228,2988528231,IE
2988528232,2988528235,GB
2988528236,2988528239,FR
-2988528240,2988528255,GB
-2988528256,2988528383,FR
+2988528240,2988528263,GB
+2988528264,2988528267,PL
+2988528268,2988528271,FR
+2988528272,2988528287,IE
+2988528288,2988528303,GB
+2988528304,2988528351,FR
+2988528352,2988528383,DE
2988528384,2988528399,GB
2988528400,2988528415,FR
2988528416,2988528423,GB
2988528424,2988528431,NL
2988528432,2988528435,PL
2988528436,2988528439,FR
-2988528440,2988528447,ES
+2988528440,2988528447,GB
2988528448,2988528451,DE
2988528452,2988528455,IT
2988528456,2988528459,GB
@@ -72151,7 +75821,11 @@
2988528644,2988528647,PL
2988528648,2988528671,FR
2988528672,2988528703,DE
-2988528704,2988528767,FR
+2988528704,2988528735,IE
+2988528736,2988528755,FR
+2988528756,2988528759,PL
+2988528760,2988528763,GB
+2988528764,2988528767,FR
2988528768,2988528771,DE
2988528772,2988528783,FR
2988528784,2988528787,ES
@@ -72160,16 +75834,17 @@
2988528796,2988528799,GB
2988528800,2988528863,FR
2988528864,2988528867,DE
-2988528868,2988528875,FR
-2988528876,2988528879,GB
+2988528868,2988528871,FR
+2988528872,2988528879,GB
2988528880,2988528895,ES
2988528896,2988528911,FR
2988528912,2988528919,PL
2988528920,2988528923,CH
2988528924,2988528927,GB
2988528928,2988528959,FR
-2988528960,2988528991,FI
-2988528992,2988529007,LT
+2988528960,2988528995,FI
+2988528996,2988528999,BE
+2988529000,2988529007,IE
2988529008,2988529023,FI
2988529024,2988529031,PL
2988529032,2988529047,FR
@@ -72178,7 +75853,7 @@
2988529056,2988529119,FR
2988529120,2988529151,NL
2988529152,2988529159,IT
-2988529160,2988529163,IE
+2988529160,2988529163,GB
2988529164,2988529167,DE
2988529168,2988529171,IE
2988529172,2988529175,PT
@@ -72198,19 +75873,24 @@
2988529340,2988529343,DE
2988529344,2988529351,PL
2988529352,2988529359,GB
-2988529360,2988529375,IE
+2988529360,2988529375,IT
2988529376,2988529383,GB
2988529384,2988529387,DE
2988529388,2988529391,FR
2988529392,2988529407,PL
-2988529408,2988529423,FR
+2988529408,2988529411,IT
+2988529412,2988529415,NL
+2988529416,2988529419,PT
+2988529420,2988529423,CH
2988529424,2988529431,DE
2988529432,2988529439,FR
2988529440,2988529455,PL
2988529456,2988529535,FR
2988529536,2988529567,FI
2988529568,2988529583,FR
-2988529584,2988529599,GB
+2988529584,2988529591,ES
+2988529592,2988529595,FR
+2988529596,2988529599,GB
2988529600,2988529607,IT
2988529608,2988529631,FR
2988529632,2988529647,LT
@@ -72255,9 +75935,7 @@
2988530064,2988530079,IE
2988530080,2988530095,FR
2988530096,2988530099,DE
-2988530100,2988530103,FR
-2988530104,2988530111,GB
-2988530112,2988530191,FR
+2988530100,2988530191,FR
2988530192,2988530207,NL
2988530208,2988530239,PL
2988530240,2988530271,FR
@@ -72266,8 +75944,8 @@
2988530308,2988530311,PL
2988530312,2988530323,FR
2988530324,2988530327,GB
-2988530328,2988530351,FR
-2988530352,2988530371,ES
+2988530328,2988530367,FR
+2988530368,2988530371,ES
2988530372,2988530379,FR
2988530380,2988530383,CH
2988530384,2988530391,FR
@@ -72324,8 +76002,11 @@
2988531192,2988531199,FR
2988531200,2988531247,ES
2988531248,2988531259,PL
-2988531260,2988531263,GB
-2988531264,2988531295,FR
+2988531260,2988531271,GB
+2988531272,2988531279,ES
+2988531280,2988531287,PT
+2988531288,2988531291,FR
+2988531292,2988531295,PL
2988531296,2988531311,IE
2988531312,2988531319,FR
2988531320,2988531323,PT
@@ -72338,7 +76019,7 @@
2988531400,2988531403,DE
2988531404,2988531427,PL
2988531428,2988531451,FR
-2988531452,2988531455,CH
+2988531452,2988531455,GB
2988531456,2988535807,FR
2988535808,2988537855,ES
2988537856,2988539935,FR
@@ -72365,9 +76046,7 @@
2988540276,2988540279,PL
2988540280,2988540287,FR
2988540288,2988540303,BE
-2988540304,2988540319,FR
-2988540320,2988540351,PT
-2988540352,2988540363,FR
+2988540304,2988540363,FR
2988540364,2988540367,PL
2988540368,2988540375,FR
2988540376,2988540379,GB
@@ -72401,7 +76080,9 @@
2988540652,2988540667,PL
2988540668,2988540671,IT
2988540672,2988540683,PL
-2988540684,2988540715,FR
+2988540684,2988540707,FR
+2988540708,2988540711,DE
+2988540712,2988540715,FR
2988540716,2988540719,PL
2988540720,2988540735,DE
2988540736,2988540751,ES
@@ -72411,14 +76092,13 @@
2988540768,2988540775,PL
2988540776,2988540783,BE
2988540784,2988540787,ES
-2988540788,2988540791,DE
-2988540792,2988540795,FR
+2988540788,2988540795,FR
2988540796,2988540799,GB
2988540800,2988540831,FR
2988540832,2988540839,PL
2988540840,2988540847,GB
2988540848,2988540855,FR
-2988540856,2988540863,ES
+2988540856,2988540863,IT
2988540864,2988540931,FR
2988540932,2988540935,DE
2988540936,2988540943,FR
@@ -72445,7 +76125,13 @@
2988541316,2988541319,CH
2988541320,2988541327,DE
2988541328,2988541335,PL
-2988541336,2988541375,FR
+2988541336,2988541343,FR
+2988541344,2988541347,GB
+2988541348,2988541351,IT
+2988541352,2988541359,IE
+2988541360,2988541367,ES
+2988541368,2988541371,PL
+2988541372,2988541375,GB
2988541376,2988541391,BE
2988541392,2988541407,CH
2988541408,2988541423,BE
@@ -72528,7 +76214,7 @@
2988542072,2988542255,FR
2988542256,2988542271,IT
2988542272,2988542335,ES
-2988542336,2988542367,FR
+2988542336,2988542367,DE
2988542368,2988542399,CZ
2988542400,2988542403,FI
2988542404,2988542407,FR
@@ -72540,8 +76226,7 @@
2988542444,2988542447,FR
2988542448,2988542455,PL
2988542456,2988542459,FR
-2988542460,2988542463,ES
-2988542464,2988542495,NL
+2988542460,2988542495,ES
2988542496,2988542527,FR
2988542528,2988542535,DE
2988542536,2988542539,NL
@@ -72553,8 +76238,12 @@
2988542596,2988542599,FI
2988542600,2988542603,GB
2988542604,2988542611,FR
-2988542612,2988542623,DE
-2988542624,2988542655,FR
+2988542612,2988542627,DE
+2988542628,2988542631,FR
+2988542632,2988542635,CZ
+2988542636,2988542639,GB
+2988542640,2988542651,FR
+2988542652,2988542655,PL
2988542656,2988542719,BE
2988542720,2988542783,CH
2988542784,2988542847,CZ
@@ -72631,15 +76320,17 @@
2988543744,2988543935,FR
2988543936,2988543947,PL
2988543948,2988543959,BE
-2988543960,2988543967,PL
-2988543968,2988544015,FR
+2988543960,2988543983,PL
+2988543984,2988543999,PT
+2988544000,2988544015,DE
2988544016,2988544023,GB
2988544024,2988544031,IE
2988544032,2988544035,PL
2988544036,2988544039,FR
2988544040,2988544043,DE
2988544044,2988544047,GB
-2988544048,2988544063,FR
+2988544048,2988544055,FR
+2988544056,2988544063,FI
2988544064,2988544127,DE
2988544128,2988544159,GB
2988544160,2988544163,FR
@@ -72647,7 +76338,7 @@
2988544168,2988544175,GB
2988544176,2988544179,CH
2988544180,2988544183,IT
-2988544184,2988544191,DE
+2988544184,2988544191,FR
2988544192,2988544227,ES
2988544228,2988544271,FR
2988544272,2988544275,PL
@@ -72660,10 +76351,12 @@
2988544304,2988544307,PL
2988544308,2988544311,IT
2988544312,2988544315,DE
-2988544316,2988544323,FR
+2988544316,2988544319,FR
+2988544320,2988544323,PL
2988544324,2988544327,ES
2988544328,2988544331,PL
-2988544332,2988544351,FR
+2988544332,2988544335,A1
+2988544336,2988544351,FR
2988544352,2988544355,PL
2988544356,2988544359,DE
2988544360,2988544367,FR
@@ -72680,13 +76373,12 @@
2988544544,2988544639,ES
2988544640,2988544647,PL
2988544648,2988544655,FR
-2988544656,2988544659,ES
-2988544660,2988544663,FR
+2988544656,2988544663,ES
2988544664,2988544667,DE
2988544668,2988544671,ES
2988544672,2988544687,GB
2988544688,2988544703,PL
-2988544704,2988544719,IT
+2988544704,2988544719,GB
2988544720,2988544723,FR
2988544724,2988544727,DE
2988544728,2988544767,FR
@@ -72748,8 +76440,7 @@
2988545448,2988545455,PL
2988545456,2988545471,FR
2988545472,2988545503,ES
-2988545504,2988545507,FR
-2988545508,2988545511,DE
+2988545504,2988545511,DE
2988545512,2988545515,IT
2988545516,2988545523,PL
2988545524,2988545527,FR
@@ -72758,12 +76449,12 @@
2988545552,2988545555,PL
2988545556,2988545559,IT
2988545560,2988545563,FR
-2988545564,2988545567,DE
-2988545568,2988545571,NL
-2988545572,2988545575,DE
+2988545564,2988545575,DE
2988545576,2988545579,FR
2988545580,2988545583,ES
-2988545584,2988545663,FR
+2988545584,2988545599,FR
+2988545600,2988545631,DE
+2988545632,2988545663,FR
2988545664,2988545695,ES
2988545696,2988545727,DE
2988545728,2988545791,FR
@@ -72783,7 +76474,8 @@
2988545928,2988545931,BE
2988545932,2988545935,DE
2988545936,2988545943,FR
-2988545944,2988545967,NL
+2988545944,2988545947,CZ
+2988545948,2988545967,FR
2988545968,2988545971,IT
2988545972,2988545975,DE
2988545976,2988545979,FR
@@ -72816,8 +76508,7 @@
2988546296,2988546299,PL
2988546300,2988546307,ES
2988546308,2988546311,NL
-2988546312,2988546315,IT
-2988546316,2988546319,FR
+2988546312,2988546319,FR
2988546320,2988546327,CH
2988546328,2988546335,ES
2988546336,2988546351,PT
@@ -72825,11 +76516,13 @@
2988546368,2988546439,FR
2988546440,2988546443,DE
2988546444,2988546447,FR
-2988546448,2988546463,ES
+2988546448,2988546451,IE
+2988546452,2988546463,ES
2988546464,2988546527,FR
2988546528,2988546535,BE
-2988546536,2988546539,IE
-2988546540,2988546547,ES
+2988546536,2988546539,FR
+2988546540,2988546543,DE
+2988546544,2988546547,ES
2988546548,2988546559,FR
2988546560,2988546567,NL
2988546568,2988546571,PL
@@ -72911,8 +76604,8 @@
2988547256,2988547263,FR
2988547264,2988547267,GB
2988547268,2988547271,ES
-2988547272,2988547279,NL
-2988547280,2988547295,FR
+2988547272,2988547275,GB
+2988547276,2988547295,FR
2988547296,2988547303,BE
2988547304,2988547311,FR
2988547312,2988547327,PL
@@ -72938,13 +76631,12 @@
2988547548,2988547567,FR
2988547568,2988547583,DE
2988547584,2988547599,ES
-2988547600,2988547615,FR
-2988547616,2988547647,PL
-2988547648,2988547655,FR
+2988547600,2988547655,FR
2988547656,2988547663,PL
2988547664,2988547679,FR
2988547680,2988547711,CH
-2988547712,2988547751,FR
+2988547712,2988547743,FR
+2988547744,2988547751,PT
2988547752,2988547759,ES
2988547760,2988547775,FR
2988547776,2988547807,ES
@@ -72956,7 +76648,13 @@
2988547872,2988547903,GB
2988547904,2988547935,FR
2988547936,2988547967,LT
-2988547968,2988548047,FR
+2988547968,2988547971,GB
+2988547972,2988547975,DE
+2988547976,2988547983,PL
+2988547984,2988548015,FR
+2988548016,2988548019,ES
+2988548020,2988548023,LT
+2988548024,2988548047,FR
2988548048,2988548055,ES
2988548056,2988548059,PL
2988548060,2988548063,FR
@@ -72986,7 +76684,7 @@
2988556492,2988556495,DE
2988556496,2988556527,FR
2988556528,2988556535,PL
-2988556536,2988556539,GB
+2988556536,2988556539,FR
2988556540,2988556543,DE
2988556544,2988556831,FR
2988556832,2988556839,DE
@@ -73002,8 +76700,7 @@
2988556912,2988556919,NL
2988556920,2988556927,PL
2988556928,2988556943,FR
-2988556944,2988556959,PL
-2988556960,2988556963,ES
+2988556944,2988556963,PL
2988556964,2988556967,FR
2988556968,2988556975,BE
2988556976,2988556979,FI
@@ -73047,7 +76744,7 @@
2988557388,2988557391,CZ
2988557392,2988557399,PL
2988557400,2988557403,ES
-2988557404,2988557407,FR
+2988557404,2988557407,IT
2988557408,2988557427,ES
2988557428,2988557431,DE
2988557432,2988557439,PL
@@ -73071,8 +76768,7 @@
2988557768,2988557771,PL
2988557772,2988557775,FR
2988557776,2988557791,BE
-2988557792,2988557823,FR
-2988557824,2988557951,DE
+2988557792,2988557951,FR
2988557952,2988557983,LT
2988557984,2988557999,FR
2988558000,2988558015,IE
@@ -73086,7 +76782,8 @@
2988558084,2988558087,PL
2988558088,2988558095,FR
2988558096,2988558103,PL
-2988558104,2988558111,FR
+2988558104,2988558107,NL
+2988558108,2988558111,IT
2988558112,2988558115,IE
2988558116,2988558123,GB
2988558124,2988558127,FR
@@ -73106,7 +76803,8 @@
2988558720,2988558727,PL
2988558728,2988558731,IT
2988558732,2988558735,PT
-2988558736,2988558751,GB
+2988558736,2988558747,FR
+2988558748,2988558751,GB
2988558752,2988558767,FR
2988558768,2988558783,CH
2988558784,2988558831,FR
@@ -73115,9 +76813,11 @@
2988558884,2988558887,BE
2988558888,2988558891,GB
2988558892,2988558895,NL
-2988558896,2988558903,FR
+2988558896,2988558899,CH
+2988558900,2988558903,FR
2988558904,2988558907,NL
-2988558908,2988558935,GB
+2988558908,2988558911,PL
+2988558912,2988558935,GB
2988558936,2988558939,PL
2988558940,2988558943,GB
2988558944,2988558975,FR
@@ -73125,17 +76825,14 @@
2988559008,2988559011,BE
2988559012,2988559015,PL
2988559016,2988559039,FR
-2988559040,2988559055,GB
-2988559056,2988559071,LT
+2988559040,2988559071,GB
2988559072,2988559103,ES
2988559104,2988559135,PL
2988559136,2988559139,DE
2988559140,2988559151,PL
2988559152,2988559231,FR
2988559232,2988559247,DE
-2988559248,2988559255,FR
-2988559256,2988559259,DE
-2988559260,2988559263,GB
+2988559248,2988559263,FR
2988559264,2988559295,LT
2988559296,2988559359,PL
2988559360,2988559631,FR
@@ -73147,13 +76844,15 @@
2988559700,2988559703,PL
2988559704,2988559707,DE
2988559708,2988559711,PL
-2988559712,2988559727,FR
+2988559712,2988559723,FR
+2988559724,2988559727,IT
2988559728,2988559731,DE
2988559732,2988559735,PL
2988559736,2988559743,GB
2988559744,2988559807,FR
2988559808,2988559871,ES
-2988559872,2988560387,IT
+2988559872,2988560383,IT
+2988560384,2988560387,FR
2988560388,2988560391,ES
2988560392,2988560399,IT
2988560400,2988560415,IE
@@ -73167,7 +76866,9 @@
2988560512,2988560519,IT
2988560520,2988560523,DE
2988560524,2988560527,BE
-2988560528,2988560543,FR
+2988560528,2988560531,ES
+2988560532,2988560535,FR
+2988560536,2988560543,IE
2988560544,2988560575,GB
2988560576,2988560591,ES
2988560592,2988560595,NL
@@ -73200,8 +76901,8 @@
2988560960,2988560975,FR
2988560976,2988560991,ES
2988560992,2988560995,FR
-2988560996,2988561007,DE
-2988561008,2988561023,FR
+2988560996,2988560999,DE
+2988561000,2988561023,FR
2988561024,2988561027,BE
2988561028,2988561039,FR
2988561040,2988561043,GB
@@ -73210,7 +76911,7 @@
2988561052,2988561055,GB
2988561056,2988561059,FR
2988561060,2988561071,PL
-2988561072,2988561075,NL
+2988561072,2988561075,ES
2988561076,2988561079,LT
2988561080,2988561083,PL
2988561084,2988561087,GB
@@ -73260,12 +76961,15 @@
2988561760,2988561763,PL
2988561764,2988561767,PT
2988561768,2988561775,PL
-2988561776,2988561843,FR
+2988561776,2988561791,FR
+2988561792,2988561823,PL
+2988561824,2988561843,FR
2988561844,2988561847,IT
2988561848,2988561855,FR
2988561856,2988561871,IE
2988561872,2988561875,CH
-2988561876,2988561887,FR
+2988561876,2988561879,A1
+2988561880,2988561887,FR
2988561888,2988561903,PL
2988561904,2988561983,FR
2988561984,2988562015,DE
@@ -73290,7 +76994,7 @@
2988562688,2988562703,GB
2988562704,2988562707,PL
2988562708,2988562711,DE
-2988562712,2988562719,GB
+2988562712,2988562719,FR
2988562720,2988562815,BE
2988562816,2988562823,PL
2988562824,2988562831,PT
@@ -73298,8 +77002,7 @@
2988562836,2988562839,NL
2988562840,2988562843,LT
2988562844,2988562847,PL
-2988562848,2988562855,NL
-2988562856,2988562863,DE
+2988562848,2988562863,GB
2988562864,2988562911,FR
2988562912,2988562943,PL
2988562944,2988563011,FR
@@ -73314,14 +77017,14 @@
2988563068,2988563075,PT
2988563076,2988563079,GB
2988563080,2988563083,DE
-2988563084,2988563087,FR
+2988563084,2988563087,LT
2988563088,2988563103,PL
2988563104,2988563135,FR
2988563136,2988563151,PL
2988563152,2988563183,FR
2988563184,2988563187,CZ
2988563188,2988563191,PL
-2988563192,2988563199,CH
+2988563192,2988563199,FR
2988563200,2988563455,IE
2988563456,2988563487,FR
2988563488,2988563499,GB
@@ -73620,6 +77323,7 @@
2991538176,2991554559,SI
2991554560,2991571455,GB
2991571456,2991587327,IT
+2991587328,2991718399,SA
2991718400,2991849471,CH
2991849472,2991980543,NL
2991980544,2991980807,UA
@@ -73656,6 +77360,26 @@
2994733056,2994798591,GR
2994798592,2994929663,RU
2994929664,2994995199,IR
+2994995200,2994997247,RU
+2994997248,2994999295,BE
+2994999296,2995003391,FR
+2995003392,2995007487,BH
+2995007488,2995009535,TR
+2995009536,2995011583,ES
+2995011584,2995013631,DE
+2995013632,2995015679,SE
+2995015680,2995017727,BG
+2995017728,2995019775,IT
+2995019776,2995021823,RU
+2995021824,2995023871,IT
+2995023872,2995044351,MD
+2995044352,2995046399,ES
+2995046400,2995048447,RU
+2995048448,2995050495,NL
+2995050496,2995052543,AL
+2995052544,2995056639,DK
+2995056640,2995058687,DE
+2995058688,2995060735,SE
2995060736,2995126271,UA
2995126272,2995191807,GE
2995191808,2995257343,LB
@@ -73671,7 +77395,9 @@
2996174848,2996305919,UA
2996305920,2996436991,QA
2996436992,2996469759,BY
-2996469760,2996535295,RU
+2996469760,2996502399,RU
+2996502400,2996502431,TR
+2996502432,2996535295,RU
2996535296,2996568063,DK
2996568064,2996600831,ES
2996600832,2996633599,RO
@@ -73731,17 +77457,12 @@
2996999680,2996999935,GB
2996999936,2997000447,DE
2997000448,2997000703,RU
-2997000704,2997000767,DE
-2997000768,2997000831,CY
+2997000704,2997000831,DE
2997000832,2997000959,CA
-2997000960,2997000991,DE
-2997000992,2997001119,RO
-2997001120,2997001471,DE
+2997000960,2997001471,DE
2997001472,2997001727,BZ
2997001728,2997001983,TR
-2997001984,2997003023,DE
-2997003024,2997003039,US
-2997003040,2997003071,DE
+2997001984,2997003071,DE
2997003072,2997003135,RU
2997003136,2997003199,DE
2997003200,2997003263,RU
@@ -73761,8 +77482,7 @@
2997005376,2997005439,GR
2997005440,2997005567,GB
2997005568,2997005823,BZ
-2997005824,2997006079,DE
-2997006080,2997006335,GB
+2997005824,2997006335,DE
2997006336,2997006591,TR
2997006592,2997006655,DE
2997006656,2997006719,TR
@@ -73774,13 +77494,10 @@
2997008512,2997008639,LT
2997008640,2997008959,DE
2997008960,2997009023,RU
-2997009024,2997010495,DE
-2997010496,2997010559,CY
-2997010560,2997018623,DE
+2997009024,2997018623,DE
2997018624,2997019135,GB
2997019136,2997019391,TR
-2997019392,2997019647,GB
-2997019648,2997019711,DE
+2997019392,2997019711,DE
2997019712,2997019903,US
2997019904,2997020415,DE
2997020416,2997020671,CA
@@ -73788,9 +77505,7 @@
2997020720,2997020735,SE
2997020736,2997020799,DE
2997020800,2997020863,CA
-2997020864,2997021183,DE
-2997021184,2997021695,GB
-2997021696,2997022079,DE
+2997020864,2997022079,DE
2997022080,2997022143,GB
2997022144,2997022239,DE
2997022240,2997022303,NL
@@ -73799,8 +77514,7 @@
2997022752,2997022783,TR
2997022784,2997022847,DE
2997022848,2997023231,BZ
-2997023232,2997023287,DE
-2997023288,2997023295,US
+2997023232,2997023295,DE
2997023296,2997023423,IN
2997023424,2997024255,DE
2997024256,2997024511,TR
@@ -73962,6 +77676,7 @@
3000545280,3000547327,RU
3000547328,3000549375,UA
3000549376,3000551423,SE
+3000551424,3000553471,PL
3000553472,3000555519,KG
3000555520,3000557567,RU
3000557568,3000561663,UA
@@ -73998,7 +77713,7 @@
3000664064,3000668159,RO
3000668160,3000672255,RU
3000672256,3000676351,HR
-3000676352,3000680447,RO
+3000676352,3000684543,RO
3000684544,3000688639,RU
3000688640,3000692735,PL
3000692736,3000696831,UA
@@ -74087,7 +77802,71 @@
3001862144,3001863167,EE
3001863168,3001864191,LT
3001864192,3001868287,RU
-3001868288,3001869055,FR
+3001868288,3001868799,FR
+3001868800,3001868803,US
+3001868804,3001868807,CN
+3001868808,3001868811,JP
+3001868812,3001868815,DE
+3001868816,3001868819,FR
+3001868820,3001868823,GB
+3001868824,3001868827,BR
+3001868828,3001868831,IT
+3001868832,3001868835,FR
+3001868836,3001868839,IN
+3001868840,3001868843,RU
+3001868844,3001868847,ES
+3001868848,3001868851,AU
+3001868852,3001868855,MX
+3001868856,3001868859,KR
+3001868860,3001868863,FR
+3001868864,3001868867,TR
+3001868868,3001868871,ID
+3001868872,3001868875,CH
+3001868876,3001868879,PL
+3001868880,3001868883,BE
+3001868884,3001868887,SE
+3001868888,3001868891,SA
+3001868892,3001868895,TW
+3001868896,3001868899,SJ
+3001868900,3001868903,AT
+3001868904,3001868907,AR
+3001868908,3001868911,ZA
+3001868912,3001868915,IR
+3001868916,3001868919,TH
+3001868920,3001868923,DK
+3001868924,3001868927,GR
+3001868928,3001868931,AE
+3001868932,3001868935,VE
+3001868936,3001868939,CD
+3001868940,3001868943,FI
+3001868944,3001868947,MY
+3001868948,3001868951,PT
+3001868952,3001868955,HK
+3001868956,3001868959,SG
+3001868960,3001868963,EG
+3001868964,3001868967,NG
+3001868968,3001868971,IL
+3001868972,3001868975,IE
+3001868976,3001868979,CL
+3001868980,3001868983,CZ
+3001868984,3001868987,PH
+3001868988,3001868991,PK
+3001868992,3001868995,RO
+3001868996,3001868999,DZ
+3001869000,3001869003,PE
+3001869004,3001869007,NZ
+3001869008,3001869011,KZ
+3001869012,3001869015,UA
+3001869016,3001869019,KW
+3001869020,3001869023,QA
+3001869024,3001869027,HU
+3001869028,3001869031,BD
+3001869032,3001869035,VN
+3001869036,3001869039,MA
+3001869040,3001869043,SK
+3001869044,3001869047,AO
+3001869048,3001869051,IQ
+3001869052,3001869055,LY
3001869056,3001869311,RU
3001869312,3001869312,FR
3001869313,3001869599,SA
@@ -74138,97 +77917,7 @@
3001966592,3001968639,NL
3001968640,3001970687,BE
3001970688,3001974783,RU
-3001974784,3001975567,GB
-3001975568,3001975575,LK
-3001975576,3001975591,US
-3001975592,3001975599,MY
-3001975600,3001975615,CN
-3001975616,3001975623,UA
-3001975624,3001975631,RU
-3001975632,3001975655,GB
-3001975656,3001975663,RU
-3001975664,3001975671,FR
-3001975672,3001975679,CN
-3001975680,3001975687,TW
-3001975688,3001975695,US
-3001975696,3001975703,UA
-3001975704,3001975711,DE
-3001975712,3001975719,MY
-3001975720,3001975727,US
-3001975728,3001975735,RU
-3001975736,3001975743,MY
-3001975744,3001975751,CN
-3001975752,3001975759,UA
-3001975760,3001975767,US
-3001975768,3001975783,CN
-3001975784,3001975791,US
-3001975792,3001975799,IT
-3001975800,3001975807,US
-3001975808,3001975815,UA
-3001975816,3001975823,US
-3001975824,3001975831,UA
-3001975832,3001975847,GB
-3001975848,3001975855,US
-3001975856,3001975863,MY
-3001975864,3001975871,AE
-3001975872,3001975887,US
-3001975888,3001975895,CN
-3001975896,3001975919,GB
-3001975920,3001975927,CN
-3001975928,3001975935,AU
-3001975936,3001976623,GB
-3001976624,3001976639,PK
-3001976640,3001976655,RU
-3001976656,3001976671,GB
-3001976672,3001976679,IN
-3001976680,3001976687,US
-3001976688,3001976831,GB
-3001976832,3001976895,CN
-3001976896,3001976927,GB
-3001976928,3001976959,RU
-3001976960,3001977103,GB
-3001977104,3001977119,RU
-3001977120,3001977135,IN
-3001977136,3001977143,CN
-3001977144,3001977151,TW
-3001977152,3001977167,IN
-3001977168,3001977183,LK
-3001977184,3001977215,GB
-3001977216,3001977247,RU
-3001977248,3001977311,GB
-3001977312,3001977343,CN
-3001977344,3001977375,GB
-3001977376,3001977407,US
-3001977408,3001977447,GB
-3001977448,3001977455,IT
-3001977456,3001977471,US
-3001977472,3001977487,IN
-3001977488,3001977503,LK
-3001977504,3001977519,GB
-3001977520,3001977535,CN
-3001977536,3001977567,GB
-3001977568,3001977575,CA
-3001977576,3001977599,GB
-3001977600,3001977855,DK
-3001977856,3001978031,GB
-3001978032,3001978047,US
-3001978048,3001978367,GB
-3001978368,3001978495,US
-3001978496,3001978527,RU
-3001978528,3001978543,PK
-3001978544,3001978559,RU
-3001978560,3001978591,US
-3001978592,3001978607,RU
-3001978608,3001978615,IE
-3001978616,3001978623,CN
-3001978624,3001978687,US
-3001978688,3001978751,EE
-3001978752,3001978783,RU
-3001978784,3001978815,US
-3001978816,3001978823,LK
-3001978824,3001978847,GB
-3001978848,3001978879,UA
-3001978880,3001982975,GB
+3001974784,3001982975,GB
3001982976,3001987071,CH
3001987072,3001991167,JO
3001991168,3001995263,IR
@@ -74272,8 +77961,7 @@
3002619984,3002619991,GB
3002619992,3002620015,IT
3002620016,3002620031,GB
-3002620032,3002620039,DE
-3002620040,3002620047,IT
+3002620032,3002620047,IT
3002620048,3002620087,GB
3002620088,3002620103,IT
3002620104,3002620111,GB
@@ -74310,7 +77998,8 @@
3002673152,3002675199,GB
3002675200,3002677247,DK
3002677248,3002683391,RU
-3002683392,3002685439,DE
+3002683392,3002685183,DE
+3002685184,3002685439,CH
3002685440,3002687487,MT
3002687488,3002688511,GB
3002688512,3002689535,NL
@@ -74335,7 +78024,6 @@
3002730496,3002732543,DE
3002732544,3002734591,NL
3002734592,3002736639,CH
-3002736640,3002738687,FR
3002738688,3002740735,PL
3002740736,3002742783,GB
3002742784,3002744831,LI
@@ -74351,7 +78039,11 @@
3002763264,3002765311,RS
3002765312,3002767359,NL
3002767360,3002769407,RU
-3002769408,3002773503,DE
+3002769408,3002771655,DE
+3002771656,3002771663,NL
+3002771664,3002771711,DE
+3002771712,3002771719,NL
+3002771720,3002773503,DE
3002773504,3002775551,GB
3002775552,3002777599,RO
3002777600,3002779647,NL
@@ -74433,7 +78125,9 @@
3003092992,3003095039,NO
3003095040,3003095567,AT
3003095568,3003095583,CZ
-3003095584,3003096063,AT
+3003095584,3003095871,AT
+3003095872,3003095935,IT
+3003095936,3003096063,AT
3003096064,3003096079,CZ
3003096080,3003097087,AT
3003097088,3003099135,FR
@@ -74559,7 +78253,6 @@
3031582720,3031584767,SG
3031584768,3031587839,JP
3031587840,3031592959,ID
-3031592960,3031595007,HK
3031595008,3031596031,AU
3031596032,3031597055,KH
3031597056,3031613439,PK
@@ -74678,7 +78371,9 @@
3035348992,3035357183,AU
3035357184,3035365375,JP
3035365376,3035627519,KR
-3035627520,3036610559,ID
+3035627520,3035660287,ID
+3035660288,3035693055,SG
+3035693056,3036610559,ID
3036610560,3036676095,SG
3036676096,3037790207,AR
3037790208,3037855743,VE
@@ -74686,7 +78381,11 @@
3038511104,3038773247,AR
3039035392,3039166463,DO
3039297536,3039363071,PY
+3039428608,3039494143,CL
3039821824,3040346111,CO
+3040870400,3041001471,PE
+3041918976,3042967551,AR
+3045064704,3045588991,CO
3053453312,3054501887,ID
3054501888,3054534655,HK
3054534656,3054537727,PH
@@ -74751,7 +78450,9 @@
3057041408,3057049599,MY
3057049600,3057050623,AU
3057050624,3057051647,SG
-3057051648,3057053695,AU
+3057051648,3057052415,AU
+3057052416,3057052671,ES
+3057052672,3057053695,AU
3057053696,3057054719,JP
3057054720,3057055743,HK
3057055744,3057057791,JP
@@ -74959,7 +78660,8 @@
3093249600,3093249623,AU
3093249624,3093249679,US
3093249680,3093249687,AU
-3093249688,3093266431,US
+3093249688,3093282815,US
+3093282816,3093299199,CA
3093299200,3093940991,US
3093940992,3093941055,CN
3093941056,3093941103,US
@@ -75101,67 +78803,117 @@
3097493504,3097755647,CA
3097755648,3098095615,US
3098095616,3098099711,CA
-3098099712,3098116095,US
+3098099712,3098148863,US
3098148864,3098165247,JM
3098165248,3098181631,US
3098181632,3098185727,CA
-3098185728,3098263551,US
+3098185728,3098255903,US
+3098255904,3098255911,MV
+3098255912,3098263551,US
3098263552,3098271743,CA
-3098271744,3098275839,US
-3098279936,3098279943,US
+3098271744,3098279943,US
3098279944,3098279951,KW
3098279952,3098280591,US
3098280592,3098280599,PA
-3098280600,3098281503,US
+3098280600,3098281311,US
+3098281312,3098281343,EG
+3098281344,3098281503,US
3098281504,3098281511,PA
3098281512,3098281711,US
3098281712,3098281719,PA
-3098281720,3098290223,US
+3098281720,3098281943,US
+3098281944,3098281951,AU
+3098281952,3098286287,US
+3098286288,3098286295,IN
+3098286296,3098286399,US
+3098286400,3098286431,BR
+3098286432,3098287711,US
+3098287712,3098287719,AU
+3098287720,3098288343,US
+3098288344,3098288351,BR
+3098288352,3098288775,US
+3098288776,3098288783,BR
+3098288784,3098289495,US
+3098289496,3098289503,AU
+3098289504,3098290223,US
3098290224,3098290231,IN
-3098290232,3098291087,US
-3098291088,3098291095,IN
-3098291096,3098291119,US
+3098290232,3098291119,US
3098291120,3098291135,NL
3098291136,3098291151,US
3098291152,3098291159,NL
3098291160,3098295751,US
3098295752,3098295759,PL
-3098295760,3098322367,US
+3098295760,3098321663,US
+3098321664,3098321695,IN
+3098321696,3098322367,US
3098322368,3098322375,BD
3098322376,3098322383,US
3098322384,3098322391,BD
3098322392,3098322695,US
3098322696,3098322703,BD
-3098322704,3098333951,US
+3098322704,3098323679,US
+3098323680,3098323711,EG
+3098323712,3098331151,US
+3098331152,3098331159,HK
+3098331160,3098331471,US
+3098331472,3098331479,CL
+3098331480,3098333951,US
3098333952,3098333959,BD
-3098333960,3098365535,US
+3098333960,3098336047,US
+3098336048,3098336055,MA
+3098336056,3098336303,US
+3098336304,3098336311,MY
+3098336312,3098336975,US
+3098336976,3098336983,BR
+3098336984,3098365535,US
3098365536,3098365551,IN
-3098365552,3098365951,US
+3098365552,3098365631,US
+3098365632,3098365639,AU
+3098365640,3098365951,US
3098365952,3098365959,MX
-3098365960,3098371303,US
-3098371304,3098371311,PE
-3098371312,3098476543,US
+3098365960,3098371191,US
+3098371192,3098371199,BR
+3098371200,3098371495,US
+3098371496,3098371503,JO
+3098371504,3098373927,US
+3098373928,3098373935,MX
+3098373936,3098375583,US
+3098375584,3098375615,BR
+3098375616,3098376863,US
+3098376864,3098376895,BR
+3098376896,3098377655,US
+3098377656,3098377663,GB
+3098377664,3098377727,US
+3098377728,3098377759,AR
+3098377760,3098381455,US
+3098381456,3098381471,LT
+3098381472,3098388175,US
+3098388176,3098388183,SA
+3098388184,3098476543,US
3098476544,3098492927,CA
3098492928,3098495999,US
3098496000,3098496255,CA
3098496256,3098502143,US
3098502144,3098502207,IN
-3098502208,3103784959,US
+3098502208,3098507263,US
+3098507264,3098507519,CA
+3098507520,3103784959,US
3103784960,3107979263,EU
3120562176,3120594943,CO
3120594944,3120599039,AR
3120599040,3120601087,EC
3120601088,3120602111,AR
3120602112,3120603135,BO
-3120603136,3120608255,AR
-3120609280,3120610303,AR
+3120603136,3120610303,AR
3120610304,3120611327,PY
3120611328,3120627711,AR
3120627712,3120644095,NI
3120644096,3120660479,DO
3120660480,3120668671,PA
+3120668672,3120676863,CO
3120676864,3120680959,HT
-3120685056,3120689151,AR
+3120680960,3120691199,AR
+3120691200,3120693247,CO
3120693248,3120726015,BO
3120726016,3120734207,HN
3120742400,3120750591,PY
@@ -75185,34 +78937,37 @@
3122298880,3122331647,VE
3122331648,3122348031,BO
3122397184,3122659327,CO
-3122659328,3122675711,CR
-3122675712,3122700287,GT
-3122700288,3122716671,CR
-3122716672,3122724863,GT
+3122659328,3122675711,GT
+3122675712,3122683903,SV
+3122683904,3122724863,GT
3122790400,3123052543,CL
3123052544,3123183615,AR
3123183616,3123314687,CL
3123314688,3123380223,EC
3123380224,3123412991,CO
+3123412992,3123429375,EC
3123445760,3123576831,TT
-3123576832,3123642367,EC
-3123707904,3123970047,UY
-3124232192,3124772863,AR
+3123576832,3123707903,EC
+3123707904,3124232191,UY
+3124232192,3124789247,AR
3124789248,3124822015,CR
3124822016,3124838399,EC
3124854784,3124887551,CL
3124887552,3124953087,EC
3124953088,3125018623,CL
3125018624,3125280767,EC
-3125280768,3125542911,PA
+3125280768,3125346303,CO
+3125346304,3125542911,PA
+3125542912,3125673983,NI
3125673984,3125805055,CL
3125805056,3126329343,CO
3126329344,3126853631,VE
3126853632,3126919167,AR
3126919168,3127115775,CO
3127115776,3127181311,AR
-3127246848,3127377919,CO
-3127377920,3127640063,CL
+3127181312,3127246847,EC
+3127246848,3127345151,CO
+3127345152,3127640063,CL
3127640064,3127902207,AR
3127902208,3128426495,CO
3128426496,3128492031,DO
@@ -75223,18 +78978,23 @@
3129999360,3130261503,CO
3130261504,3130277887,CL
3130294272,3130302463,AR
-3130310656,3130312703,PA
-3130318848,3130322943,AR
+3130302464,3130312703,PA
+3130312704,3130314751,AR
+3130314752,3130315775,CL
+3130315776,3130316799,CR
+3130316800,3130318847,AN
+3130318848,3130327039,AR
3130327040,3130392575,DO
+3130458112,3130523647,GT
3130523648,3130654719,AR
3130654720,3130720255,CO
3130785792,3130818559,CL
3130851328,3130916863,AR
3131047936,3131310079,PE
3131310080,3131572223,VE
-3131572224,3131703295,CO
+3131572224,3131834367,CO
3131834368,3132096511,CL
-3132096512,3132162047,CR
+3132096512,3132227583,CR
3132227584,3132293119,EC
3132358656,3132489727,CO
3132489728,3132555263,AR
@@ -75250,7 +79010,11 @@
3133079552,3133145087,AR
3133145088,3145727999,BR
3145728000,3154116607,MX
-3154149376,3154157567,UA
+3154116608,3154124799,RU
+3154124800,3154126847,PL
+3154126848,3154128895,RU
+3154128896,3154132991,EE
+3154132992,3154157567,UA
3154157568,3154173951,RU
3154173952,3154182143,MD
3154182144,3154247679,DE
@@ -75258,6 +79022,7 @@
3154313216,3154378751,TR
3154378752,3154444287,GR
3154444288,3154509823,BE
+3154509824,3154575359,HU
3154575360,3154640895,FR
3154640896,3155165183,IT
3155165184,3155427327,RU
@@ -75266,6 +79031,7 @@
3155506336,3155689471,AT
3155689472,3155951615,RO
3155951616,3156213759,GB
+3156213760,3156279295,RU
3156279296,3156344831,PL
3156344832,3156410367,IR
3156410368,3156475903,RU
@@ -75285,6 +79051,11 @@
3156803584,3156869119,TR
3156869120,3156934655,LU
3156934656,3157000191,RU
+3157000192,3157008383,MK
+3157008384,3157016575,RU
+3157016576,3157024767,BE
+3157024768,3157032959,RU
+3157032960,3157065727,HU
3157065728,3157131263,AT
3157131264,3157196799,DE
3157196800,3157262335,PL
@@ -75292,6 +79063,7 @@
3157786624,3158048767,TR
3158048768,3158310911,CH
3158310912,3158312959,FI
+3158312960,3158315007,AZ
3158315008,3158317055,DE
3158317056,3158319103,SI
3158319104,3158321151,GB
@@ -75335,14 +79107,12 @@
3158392832,3158394879,RU
3158394880,3158395007,AT
3158395008,3158395135,GB
-3158395136,3158395151,AT
-3158395152,3158395159,DE
-3158395160,3158395167,AT
+3158395136,3158395167,AT
3158395168,3158395175,DE
3158395176,3158395191,AT
3158395192,3158395199,DE
-3158395200,3158395263,AT
-3158395264,3158395295,DE
+3158395200,3158395247,AT
+3158395248,3158395295,DE
3158395296,3158395359,AT
3158395360,3158395367,DE
3158395368,3158395431,AT
@@ -75426,8 +79196,7 @@
3158893568,3158893823,GB
3158893824,3158895167,DE
3158895168,3158895231,RU
-3158895232,3158895359,TR
-3158895360,3158895423,DE
+3158895232,3158895423,DE
3158895424,3158895487,RU
3158895488,3158895551,MK
3158895552,3158895615,AE
@@ -75575,7 +79344,9 @@
3160332760,3160332767,AU
3160332768,3160333055,NO
3160333056,3160333087,CO
-3160333088,3160334335,NO
+3160333088,3160334063,NO
+3160334064,3160334071,PA
+3160334072,3160334335,NO
3160334336,3160336383,RU
3160336384,3160338431,CZ
3160338432,3160340479,GB
@@ -75721,8 +79492,8 @@
3162365952,3162374143,PL
3162374144,3162382335,BG
3162382336,3162390527,RU
-3162390528,3162391551,SE
-3162391552,3162398719,A1
+3162390528,3162392575,SE
+3162392576,3162398719,A1
3162398720,3162406911,BE
3162406912,3162415103,IR
3162415104,3162423295,DE
@@ -75764,73 +79535,98 @@
3163062272,3163095039,IR
3163095040,3163127807,PL
3163127808,3163160575,BH
-3163160576,3163161631,DE
+3163160576,3163161599,DE
+3163161600,3163161631,IN
3163161632,3163161663,DK
3163161664,3163161695,US
3163161696,3163161727,BG
3163161728,3163161759,DE
3163161760,3163161791,BR
-3163161792,3163161887,DE
+3163161792,3163161823,DE
+3163161824,3163161855,US
+3163161856,3163161887,BR
3163161888,3163161951,US
-3163161952,3163162079,DE
+3163161952,3163162015,DE
+3163162016,3163162047,US
+3163162048,3163162079,NL
3163162080,3163162111,RU
3163162112,3163162143,TR
-3163162144,3163162239,DE
-3163162240,3163162271,US
+3163162144,3163162271,DE
3163162272,3163162303,NL
-3163162304,3163162367,DE
+3163162304,3163162335,TH
+3163162336,3163162367,DE
3163162368,3163162399,TR
3163162400,3163162431,DE
3163162432,3163162463,CY
-3163162464,3163163711,DE
+3163162464,3163162495,DE
+3163162496,3163162527,BR
+3163162528,3163162559,DE
+3163162560,3163162623,US
+3163162624,3163163711,DE
3163163712,3163163743,BR
-3163163744,3163163807,DE
+3163163744,3163163775,DE
+3163163776,3163163807,TR
3163163808,3163163839,CY
-3163163840,3163163871,DE
+3163163840,3163163871,PL
3163163872,3163163903,RU
3163163904,3163163935,GR
-3163163936,3163163967,VG
+3163163936,3163163967,BR
3163163968,3163163999,US
3163164000,3163164031,DE
-3163164032,3163164063,TW
+3163164032,3163164063,US
3163164064,3163164095,AM
3163164096,3163164127,RU
-3163164128,3163164287,DE
+3163164128,3163164159,MA
+3163164160,3163164191,US
+3163164192,3163164223,MA
+3163164224,3163164287,DE
3163164288,3163164319,CL
3163164320,3163164351,RU
-3163164352,3163164447,DE
+3163164352,3163164383,DE
+3163164384,3163164415,TR
+3163164416,3163164447,PL
3163164448,3163164479,RU
3163164480,3163164511,DE
3163164512,3163164543,HU
3163164544,3163164575,RU
3163164576,3163164607,DE
3163164608,3163164639,ES
-3163164640,3163165759,DE
+3163164640,3163164671,US
+3163164672,3163165695,DE
+3163165696,3163165727,US
+3163165728,3163165759,RU
3163165760,3163165791,PL
3163165792,3163165823,RU
-3163165824,3163166015,DE
+3163165824,3163165855,BR
+3163165856,3163165887,DE
+3163165888,3163165919,AR
+3163165920,3163166015,DE
3163166016,3163166047,US
-3163166048,3163166175,DE
+3163166048,3163166079,BR
+3163166080,3163166175,DE
3163166176,3163166207,RU
3163166208,3163166239,TR
3163166240,3163166271,IT
-3163166272,3163166367,DE
-3163166368,3163166399,US
+3163166272,3163166335,DE
+3163166336,3163166399,US
3163166400,3163166431,DE
3163166432,3163166463,BR
3163166464,3163166495,DE
3163166496,3163166527,RO
3163166528,3163166559,DE
3163166560,3163166591,HU
-3163166592,3163166687,DE
+3163166592,3163166623,IN
+3163166624,3163166655,US
+3163166656,3163166687,DE
3163166688,3163166719,RU
-3163166720,3163167775,DE
+3163166720,3163167743,DE
+3163167744,3163167775,RU
3163167776,3163167807,GR
3163167808,3163167839,US
3163167840,3163167871,BR
3163167872,3163167903,DE
3163167904,3163167935,UA
-3163167936,3163167967,DE
+3163167936,3163167967,US
3163167968,3163167999,TR
3163168000,3163168031,DE
3163168032,3163168095,RU
@@ -75844,70 +79640,79 @@
3163168320,3163168351,DK
3163168352,3163168383,RU
3163168384,3163168415,TR
-3163168416,3163168511,DE
+3163168416,3163168479,DE
+3163168480,3163168511,US
3163168512,3163168543,TR
3163168544,3163168575,DE
3163168576,3163168607,US
-3163168608,3163168671,DE
+3163168608,3163168639,MA
+3163168640,3163168671,DE
3163168672,3163168703,US
3163168704,3163168735,GR
3163168736,3163169823,DE
3163169824,3163169855,RU
-3163169856,3163169951,DE
-3163169952,3163169983,GB
-3163169984,3163170015,DE
+3163169856,3163169887,US
+3163169888,3163170015,DE
3163170016,3163170047,ES
3163170048,3163170079,RU
3163170080,3163170111,TR
-3163170112,3163170143,TW
+3163170112,3163170143,CZ
3163170144,3163170175,ZA
3163170176,3163170207,DE
3163170208,3163170239,RU
-3163170240,3163170271,DE
-3163170272,3163170303,TW
+3163170240,3163170303,DE
3163170304,3163170335,IT
3163170336,3163170367,RO
-3163170368,3163170495,DE
+3163170368,3163170463,DE
+3163170464,3163170495,TR
3163170496,3163170527,BG
3163170528,3163170591,DE
3163170592,3163170623,BR
3163170624,3163170655,GR
-3163170656,3163170751,DE
+3163170656,3163170719,DE
+3163170720,3163170751,MA
3163170752,3163170783,CH
-3163170784,3163171871,DE
+3163170784,3163170815,US
+3163170816,3163171871,DE
3163171872,3163171903,RO
-3163171904,3163171935,BZ
-3163171936,3163171967,DE
+3163171904,3163171967,DE
3163171968,3163171999,US
-3163172000,3163172095,DE
-3163172096,3163172127,BR
+3163172000,3163172127,BR
3163172128,3163172159,US
3163172160,3163172191,TR
-3163172192,3163172319,DE
+3163172192,3163172223,US
+3163172224,3163172255,FR
+3163172256,3163172287,US
+3163172288,3163172319,DE
3163172320,3163172351,NL
3163172352,3163172383,GB
-3163172384,3163172479,DE
-3163172480,3163172511,US
+3163172384,3163172415,US
+3163172416,3163172447,DE
+3163172448,3163172511,US
3163172512,3163172543,RU
-3163172544,3163172607,DE
+3163172544,3163172575,DE
+3163172576,3163172607,MA
3163172608,3163172639,DK
-3163172640,3163172735,DE
+3163172640,3163172671,LV
+3163172672,3163172703,BR
+3163172704,3163172735,DE
3163172736,3163172767,GR
-3163172768,3163173919,DE
-3163173920,3163173951,TW
-3163173952,3163174015,DE
+3163172768,3163173951,DE
+3163173952,3163173983,IN
+3163173984,3163174015,GB
3163174016,3163174047,RU
3163174048,3163174079,DK
-3163174080,3163174111,US
+3163174080,3163174111,DE
3163174112,3163174143,BE
-3163174144,3163174175,DE
-3163174176,3163174207,US
-3163174208,3163174239,DE
+3163174144,3163174175,BD
+3163174176,3163174207,DE
+3163174208,3163174239,RU
3163174240,3163174271,TW
3163174272,3163174303,DE
3163174304,3163174335,IL
3163174336,3163174367,RU
-3163174368,3163174431,DE
+3163174368,3163174399,US
+3163174400,3163174431,DE
3163174432,3163174463,BR
3163174464,3163174495,DE
3163174496,3163174527,US
@@ -75918,29 +79723,37 @@
3163174656,3163174687,RU
3163174688,3163174719,DE
3163174720,3163174751,NL
-3163174752,3163174815,DE
+3163174752,3163174783,DE
+3163174784,3163174815,TW
3163174816,3163174847,CA
3163174848,3163174879,TR
3163174880,3163174911,RU
-3163174912,3163176095,DE
+3163174912,3163175967,DE
+3163175968,3163176031,US
+3163176032,3163176063,BG
+3163176064,3163176095,RU
3163176096,3163176127,CY
3163176128,3163176159,US
3163176160,3163176255,DE
3163176256,3163176287,UG
-3163176288,3163176319,PT
-3163176320,3163176479,DE
+3163176288,3163176319,RU
+3163176320,3163176351,DE
+3163176352,3163176383,RO
+3163176384,3163176415,IN
+3163176416,3163176479,DE
3163176480,3163176511,GB
-3163176512,3163176543,TR
-3163176544,3163176575,DE
+3163176512,3163176543,RU
+3163176544,3163176575,US
3163176576,3163176607,GR
-3163176608,3163176639,TW
-3163176640,3163176767,DE
+3163176608,3163176703,DE
+3163176704,3163176735,BR
+3163176736,3163176767,DE
3163176768,3163176799,PL
3163176800,3163176831,EG
-3163176832,3163176863,BR
-3163176864,3163176895,DE
+3163176832,3163176895,BR
3163176896,3163176927,SE
-3163176928,3163193343,DE
+3163176928,3163176959,TH
+3163176960,3163193343,DE
3163193344,3163226111,MD
3163226112,3163258879,SA
3163258880,3163291647,SY
@@ -76024,7 +79837,11 @@
3164949152,3164949155,NL
3164949156,3164949159,DE
3164949160,3164949163,PL
-3164949164,3164949183,FR
+3164949164,3164949167,FR
+3164949168,3164949171,IE
+3164949172,3164949175,FR
+3164949176,3164949179,ES
+3164949180,3164949183,FR
3164949184,3164949199,GB
3164949200,3164949215,FR
3164949216,3164949219,PL
@@ -76070,7 +79887,8 @@
3164950520,3164950523,FR
3164950524,3164950527,ES
3164950528,3164950543,BE
-3164950544,3164950591,NL
+3164950544,3164950559,IE
+3164950560,3164950591,NL
3164950592,3164950623,FR
3164950624,3164950655,GB
3164950656,3164950687,FR
@@ -76131,7 +79949,7 @@
3164951936,3164951999,DE
3164952000,3164952015,ES
3164952016,3164952031,FR
-3164952032,3164952063,PL
+3164952032,3164952063,PT
3164952064,3164952191,FR
3164952192,3164952207,ES
3164952208,3164952215,FR
@@ -76146,8 +79964,7 @@
3164952576,3164952831,FR
3164952832,3164952959,IT
3164952960,3164952975,GB
-3164952976,3164952991,FR
-3164952992,3164953007,PL
+3164952976,3164953007,FR
3164953008,3164953023,ES
3164953024,3164953087,FR
3164953088,3164953151,LT
@@ -76155,11 +79972,11 @@
3164953216,3164953247,FR
3164953248,3164953255,CH
3164953256,3164953263,CZ
-3164953264,3164953311,FR
-3164953312,3164953319,CZ
-3164953320,3164953327,BE
+3164953264,3164953327,FR
3164953328,3164953375,PL
-3164953376,3164953391,FR
+3164953376,3164953379,NL
+3164953380,3164953383,GB
+3164953384,3164953391,PL
3164953392,3164953395,IT
3164953396,3164953399,NL
3164953400,3164953403,BE
@@ -76239,8 +80056,7 @@
3164959896,3164959903,PL
3164959904,3164959919,DE
3164959920,3164959927,FR
-3164959928,3164959931,GB
-3164959932,3164959935,ES
+3164959928,3164959935,GB
3164959936,3164959999,FR
3164960000,3164960259,DE
3164960260,3164960263,FR
@@ -76276,7 +80092,8 @@
3164960576,3164960591,DE
3164960592,3164960599,ES
3164960600,3164960623,DE
-3164960624,3164960639,FR
+3164960624,3164960627,FR
+3164960628,3164960639,PL
3164960640,3164960643,LT
3164960644,3164960647,FR
3164960648,3164960651,CH
@@ -76289,7 +80106,7 @@
3164960704,3164960719,FR
3164960720,3164960723,CH
3164960724,3164960727,FR
-3164960728,3164960735,GB
+3164960728,3164960735,PL
3164960736,3164960767,ES
3164960768,3164960799,GB
3164960800,3164960831,ES
@@ -76300,7 +80117,7 @@
3164960936,3164960939,GB
3164960940,3164960943,DE
3164960944,3164960959,PL
-3164960960,3164960963,DE
+3164960960,3164960963,ES
3164960964,3164960967,PT
3164960968,3164960975,PL
3164960976,3164960991,GB
@@ -76351,7 +80168,7 @@
3164961792,3164961855,FR
3164961856,3164961859,PL
3164961860,3164961863,ES
-3164961864,3164961871,FI
+3164961864,3164961871,FR
3164961872,3164961887,IE
3164961888,3164961903,ES
3164961904,3164961919,GB
@@ -76372,11 +80189,12 @@
3164962112,3164962143,GB
3164962144,3164962151,ES
3164962152,3164962159,DE
-3164962160,3164962203,FR
+3164962160,3164962191,FR
+3164962192,3164962199,DE
+3164962200,3164962203,GB
3164962204,3164962207,PT
-3164962208,3164962211,GB
-3164962212,3164962215,PL
-3164962216,3164962239,FR
+3164962208,3164962211,FI
+3164962212,3164962239,FR
3164962240,3164962247,PL
3164962248,3164962251,FR
3164962252,3164962255,DE
@@ -76384,7 +80202,9 @@
3164962260,3164962263,DE
3164962264,3164962279,ES
3164962280,3164962283,DE
-3164962284,3164962295,ES
+3164962284,3164962287,ES
+3164962288,3164962291,FR
+3164962292,3164962295,ES
3164962296,3164962303,PL
3164962304,3164962319,NL
3164962320,3164962335,FR
@@ -76405,7 +80225,8 @@
3164962632,3164962639,FR
3164962640,3164962647,ES
3164962648,3164962655,PT
-3164962656,3164962687,ES
+3164962656,3164962671,GB
+3164962672,3164962687,FR
3164962688,3164962703,PL
3164962704,3164962715,FR
3164962716,3164962719,NL
@@ -76478,8 +80299,7 @@
3164969880,3164969883,ES
3164969884,3164969887,PL
3164969888,3164969903,IE
-3164969904,3164969919,GB
-3164969920,3164969983,FR
+3164969904,3164969983,FR
3164969984,3164970047,IE
3164970048,3164970079,GB
3164970080,3164970111,DE
@@ -76504,7 +80324,9 @@
3164970364,3164970367,ES
3164970368,3164970371,PL
3164970372,3164970375,ES
-3164970376,3164970399,IT
+3164970376,3164970379,FR
+3164970380,3164970383,PL
+3164970384,3164970399,IT
3164970400,3164970407,CH
3164970408,3164970411,IT
3164970412,3164970415,GB
@@ -76540,13 +80362,13 @@
3164970848,3164970887,FR
3164970888,3164970891,GB
3164970892,3164970911,FR
-3164970912,3164970915,ES
+3164970912,3164970915,NL
3164970916,3164970919,FR
3164970920,3164970923,GB
3164970924,3164970927,LT
3164970928,3164970991,FR
3164970992,3164971007,BE
-3164971008,3164971011,ES
+3164971008,3164971011,IT
3164971012,3164971015,FR
3164971016,3164971023,PL
3164971024,3164971071,FR
@@ -76575,7 +80397,7 @@
3164972000,3164972015,CH
3164972016,3164972019,ES
3164972020,3164972027,FR
-3164972028,3164972031,ES
+3164972028,3164972031,CH
3164972032,3164972287,GB
3164972288,3164972319,FR
3164972320,3164972351,DE
@@ -76585,28 +80407,79 @@
3164972500,3164972511,DE
3164972512,3164972527,GB
3164972528,3164972531,DE
-3164972532,3164972799,FR
+3164972532,3164972559,FR
+3164972560,3164972575,IT
+3164972576,3164972579,CZ
+3164972580,3164972583,GB
+3164972584,3164972587,NL
+3164972588,3164972591,FR
+3164972592,3164972595,IE
+3164972596,3164972599,PL
+3164972600,3164972607,FR
+3164972608,3164972639,PL
+3164972640,3164972655,IT
+3164972656,3164972671,FR
+3164972672,3164972679,PL
+3164972680,3164972691,FR
+3164972692,3164972695,FI
+3164972696,3164972699,FR
+3164972700,3164972703,DE
+3164972704,3164972735,FR
+3164972736,3164972767,GB
+3164972768,3164972799,IT
3164972800,3164973311,ES
-3164973312,3164973823,FR
+3164973312,3164973407,DE
+3164973408,3164973415,GB
+3164973416,3164973419,FR
+3164973420,3164973423,ES
+3164973424,3164973439,DE
+3164973440,3164973503,PL
+3164973504,3164973511,FR
+3164973512,3164973515,ES
+3164973516,3164973519,DE
+3164973520,3164973551,PL
+3164973552,3164973555,GB
+3164973556,3164973559,FR
+3164973560,3164973563,BE
+3164973564,3164973575,CZ
+3164973576,3164973583,GB
+3164973584,3164973599,FR
+3164973600,3164973615,IE
+3164973616,3164973623,BE
+3164973624,3164973627,PL
+3164973628,3164973631,CH
+3164973632,3164973663,IE
+3164973664,3164973695,ES
+3164973696,3164973727,DE
+3164973728,3164973743,GB
+3164973744,3164973759,FR
+3164973760,3164973791,GB
+3164973792,3164973807,DE
+3164973808,3164973815,GB
+3164973816,3164973823,FR
3164973824,3164973855,DE
3164973856,3164973863,PL
3164973864,3164973867,FR
-3164973868,3164973875,ES
+3164973868,3164973871,ES
+3164973872,3164973875,PL
3164973876,3164973879,GB
3164973880,3164973883,FR
3164973884,3164973887,DE
-3164973888,3164973919,ES
-3164973920,3164973935,FR
+3164973888,3164973903,GB
+3164973904,3164973911,FR
+3164973912,3164973915,DE
+3164973916,3164973935,FR
3164973936,3164973939,GB
3164973940,3164973943,FR
3164973944,3164973951,PL
3164973952,3164974591,FR
3164974592,3164974623,PL
-3164974624,3164974647,FR
+3164974624,3164974643,FR
+3164974644,3164974647,PL
3164974648,3164974651,PT
3164974652,3164974655,DE
-3164974656,3164974663,FR
-3164974664,3164974667,GB
+3164974656,3164974659,BE
+3164974660,3164974667,GB
3164974668,3164974671,DE
3164974672,3164974675,FR
3164974676,3164974719,PL
@@ -76621,9 +80494,7 @@
3164975104,3164975167,CH
3164975168,3164975231,GB
3164975232,3164975299,IT
-3164975300,3164975303,ES
-3164975304,3164975311,IT
-3164975312,3164975343,ES
+3164975300,3164975343,ES
3164975344,3164975351,GB
3164975352,3164975355,NL
3164975356,3164975359,FR
@@ -76632,7 +80503,7 @@
3164975664,3164975679,DE
3164975680,3164975695,GB
3164975696,3164975699,PL
-3164975700,3164975703,ES
+3164975700,3164975703,DE
3164975704,3164975719,PL
3164975720,3164975731,ES
3164975732,3164975735,PT
@@ -76643,7 +80514,7 @@
3164975760,3164975775,PL
3164975776,3164975807,FR
3164975808,3164975823,PL
-3164975824,3164975839,GB
+3164975824,3164975839,ES
3164975840,3164975843,DE
3164975844,3164975847,PL
3164975848,3164975851,ES
@@ -76652,15 +80523,15 @@
3164975936,3164975939,ES
3164975940,3164975943,PT
3164975944,3164975947,PL
-3164975948,3164975967,GB
+3164975948,3164975951,NL
+3164975952,3164975967,GB
3164975968,3164975983,NL
-3164975984,3164975987,PL
-3164975988,3164975991,DE
+3164975984,3164975991,DE
3164975992,3164976011,PL
3164976012,3164976015,ES
3164976016,3164976023,PL
-3164976024,3164976027,ES
-3164976028,3164976063,FR
+3164976024,3164976031,ES
+3164976032,3164976063,FR
3164976064,3164976095,PT
3164976096,3164976127,PL
3164976128,3164976131,NL
@@ -76682,7 +80553,7 @@
3164976288,3164976295,ES
3164976296,3164976303,IT
3164976304,3164976307,FR
-3164976308,3164976311,DE
+3164976308,3164976311,IE
3164976312,3164976315,GB
3164976316,3164976319,FR
3164976320,3164976327,DE
@@ -76698,14 +80569,15 @@
3164976404,3164976407,FR
3164976408,3164976415,DE
3164976416,3164976431,IT
-3164976432,3164976459,FR
+3164976432,3164976447,PT
+3164976448,3164976459,FR
3164976460,3164976479,DE
3164976480,3164976511,PL
3164976512,3164976767,FR
3164976768,3164976783,DE
-3164976784,3164976799,ES
+3164976784,3164976799,CZ
3164976800,3164976815,DE
-3164976816,3164976831,GB
+3164976816,3164976831,CZ
3164976832,3164976835,IT
3164976836,3164976839,ES
3164976840,3164976847,FR
@@ -76726,8 +80598,8 @@
3164977792,3164977823,FR
3164977824,3164977839,GB
3164977840,3164977871,FR
-3164977872,3164977875,DE
-3164977876,3164977879,ES
+3164977872,3164977875,GB
+3164977876,3164977879,NL
3164977880,3164977883,DE
3164977884,3164977887,GB
3164977888,3164977903,IT
@@ -76749,11 +80621,8 @@
3164978156,3164978159,DE
3164978160,3164978175,FR
3164978176,3164978431,IT
-3164978432,3164978495,FR
-3164978496,3164978511,IT
-3164978512,3164978527,ES
-3164978528,3164978543,FR
-3164978544,3164978563,PT
+3164978432,3164978559,FR
+3164978560,3164978563,PT
3164978564,3164978567,PL
3164978568,3164978571,GB
3164978572,3164978575,FR
@@ -76766,19 +80635,19 @@
3164978952,3164978955,PL
3164978956,3164978959,GB
3164978960,3164978975,FR
-3164978976,3164978991,ES
-3164978992,3164978999,PL
+3164978976,3164978983,ES
+3164978984,3164978999,PL
3164979000,3164979003,FR
3164979004,3164979007,DE
3164979008,3164979023,GB
3164979024,3164979047,FR
3164979048,3164979051,BE
3164979052,3164979103,FR
-3164979104,3164979111,GB
+3164979104,3164979107,PL
+3164979108,3164979111,GB
3164979112,3164979119,PL
3164979120,3164979135,NL
-3164979136,3164979151,DE
-3164979152,3164979159,FR
+3164979136,3164979159,FR
3164979160,3164979167,PL
3164979168,3164979175,DE
3164979176,3164979183,FR
@@ -76853,14 +80722,19 @@
3168829440,3168862207,RO
3168862208,3168894975,RU
3168894976,3168927743,PS
-3168927744,3169058815,RU
+3168927744,3169026047,RU
+3169026048,3169034239,CZ
+3169034240,3169042431,GB
+3169042432,3169044479,GR
+3169044480,3169046527,NL
+3169046528,3169050623,AZ
+3169050624,3169052671,HU
+3169052672,3169054719,PS
+3169054720,3169056767,GB
+3169056768,3169058815,EE
3169058816,3169091583,DK
3169091584,3169124351,IT
-3169124352,3169149439,RO
-3169149440,3169149695,IT
-3169149696,3169149951,PS
-3169149952,3169150463,SY
-3169150464,3169157119,RO
+3169124352,3169157119,RO
3169157120,3169189887,SY
3169189888,3169222655,UA
3169222656,3169255423,SI
@@ -76922,7 +80796,9 @@
3170263040,3170271231,CZ
3170271232,3170279423,PL
3170279424,3170287615,RU
-3170287616,3170295807,GB
+3170287616,3170289151,GB
+3170289152,3170289167,BA
+3170289168,3170295807,GB
3170295808,3170303999,RU
3170304000,3170312191,SY
3170312192,3170320383,RU
@@ -76967,7 +80843,7 @@
3187851264,3187855359,PY
3187855360,3187857407,PA
3187859456,3187863551,PA
-3187867648,3187908607,AR
+3187863552,3187908607,AR
3187908608,3187910655,CO
3187910656,3187914751,CL
3187914752,3187916799,BO
@@ -76979,6 +80855,7 @@
3187953664,3187955711,CL
3187955712,3187957759,CR
3187957760,3187961855,CL
+3187961856,3187965951,AR
3187965952,3187982335,AN
3187982336,3187998719,CL
3187998720,3188006911,AR
@@ -77001,14 +80878,19 @@
3188178944,3188187135,CR
3188187136,3188203519,AR
3188203520,3188207615,DO
+3188207616,3188211711,AR
3188211712,3188228095,CL
3188228096,3188236287,PE
3188236288,3188237311,PA
3188237312,3188238335,VE
3188240384,3188241407,CO
+3188241408,3188242431,EC
+3188242432,3188244479,AR
3188244480,3188260863,CO
3188260864,3188269055,AR
-3188269056,3188273151,VE
+3188269056,3188269439,VE
+3188269440,3188269567,CO
+3188269568,3188273151,VE
3188273152,3188275199,PA
3188275200,3188277247,CL
3188277248,3188293631,CO
@@ -77026,14 +80908,23 @@
3188473856,3188482047,PE
3188482048,3188490239,AR
3188490240,3188498431,CO
-3188498432,3188513279,AR
+3188498432,3188509695,AR
+3188509696,3188510207,US
+3188510208,3188513279,AR
3188513280,3188513535,US
-3188513536,3188523007,AR
+3188513536,3188516351,AR
+3188516352,3188516607,US
+3188516608,3188517119,AR
+3188517120,3188517375,US
+3188517376,3188523007,AR
3188523008,3188539391,CO
3188539392,3188543487,CL
3188543488,3188545535,PA
3188545536,3188547583,AR
3188547584,3188551679,CO
+3188551680,3188552703,AR
+3188552704,3188553727,CL
+3188553728,3188555775,AN
3188555776,3188572159,CL
3188572160,3188576255,CO
3188576256,3188597759,AR
@@ -77076,6 +80967,7 @@
3191093248,3191095295,AR
3191095296,3191099391,EC
3191103488,3191107583,CO
+3191107584,3191111679,PE
3191111680,3191128063,PY
3191128064,3191132159,EC
3191136256,3191144447,DO
@@ -77102,7 +80994,9 @@
3191603200,3191608319,MX
3191608320,3191608831,CO
3191608832,3191609087,MX
-3191609088,3191635967,CO
+3191609088,3191611391,CO
+3191611392,3191619583,VE
+3191619584,3191635967,CO
3191635968,3191637503,AR
3191637504,3191638095,CO
3191638096,3191638103,AR
@@ -77139,18 +81033,23 @@
3193782272,3193798655,TT
3193798656,3193806847,CO
3193806848,3193810943,CR
+3193810944,3193815039,PY
3193815040,3193823231,AR
3193823232,3193827327,CL
3193831424,3193864191,DO
3193864192,3193872383,EC
+3193872384,3193880575,AR
3193880576,3193896959,VE
3193896960,3193929727,CL
3193929728,3193962495,EC
-3193962496,3193995263,CL
+3193962496,3193987071,CL
+3193987072,3193989119,EC
+3193991168,3193995263,AR
3193995264,3194028031,CO
3194028032,3194044415,AR
3194044416,3194052607,CO
3194052608,3194056703,TT
+3194056704,3194058751,AN
3194060800,3194093567,CO
3194093568,3194126335,SR
3194126336,3194127359,GT
@@ -77205,7 +81104,9 @@
3194642432,3194646527,AR
3194650624,3194653439,AR
3194653440,3194653695,US
-3194653696,3194665983,AR
+3194653696,3194663167,AR
+3194663168,3194663423,US
+3194663424,3194665983,AR
3194665984,3194666239,US
3194666240,3194667007,AR
3194683392,3194687487,CU
@@ -77224,7 +81125,7 @@
3194781696,3194798079,CL
3194798080,3194799103,AR
3194799104,3194802175,GY
-3194806272,3194810367,AR
+3194806272,3194814463,AR
3194818560,3194822655,AR
3194830848,3194839039,PA
3194847232,3194863615,CO
@@ -77244,10 +81145,10 @@
3194994688,3195023359,AR
3195023360,3195024383,CL
3195024384,3195025407,UY
-3195025408,3195035647,AR
+3195025408,3195043839,AR
3195043840,3195060223,CO
3195060224,3195064319,UY
-3195068416,3195072511,AN
+3195068416,3195076607,AN
3195076608,3195084799,CL
3195092992,3195097087,AR
3195101184,3195109375,CR
@@ -77346,8 +81247,9 @@
3198910464,3198926847,CL
3198943232,3199500799,AR
3199500800,3199501311,US
-3199501312,3199516671,AR
+3199501312,3199533055,AR
3199533056,3199549439,BO
+3199549440,3199565823,AR
3199565824,3199582207,NI
3199598592,3199631359,CO
3199664128,3199729663,AR
@@ -77366,7 +81268,12 @@
3201302528,3201433599,CL
3201433600,3201499135,AR
3201499136,3201515519,CL
-3201531904,3201540095,AR
+3201515520,3201522687,AR
+3201522688,3201531903,CR
+3201531904,3201533951,AR
+3201533952,3201534975,HN
+3201534976,3201535999,CO
+3201536000,3201540095,AR
3201540096,3201544191,CL
3201548288,3201556479,AR
3201556480,3201560575,BO
@@ -77395,8 +81302,18 @@
3203476736,3203476991,CR
3203476992,3203477375,CO
3203477376,3203530751,CR
-3203530752,3203538943,NI
-3203538944,3203661823,CO
+3203530752,3203531519,NI
+3203531520,3203531775,PA
+3203531776,3203532287,NI
+3203532288,3203532543,PA
+3203532544,3203532799,NI
+3203532800,3203534847,PA
+3203534848,3203535871,NI
+3203535872,3203536383,PA
+3203536384,3203538943,NI
+3203538944,3203547135,CO
+3203547136,3203549183,PA
+3203549184,3203661823,CO
3203661824,3203923967,AR
3203923968,3204448255,CO
3221233664,3221237759,US
@@ -78255,9 +82172,7 @@
3225937664,3225938431,SE
3225938432,3225938687,US
3225938688,3225944063,SE
-3225944064,3225977855,TW
-3225977856,3225978111,CH
-3225978112,3226008831,TW
+3225944064,3226008831,TW
3226008832,3226009343,US
3226009600,3226010879,US
3226010880,3226011135,CA
@@ -78288,9 +82203,7 @@
3226191360,3226191615,US
3226191872,3226201855,CA
3226201856,3226202111,US
-3226202112,3226205439,CA
-3226205440,3226205695,AE
-3226205696,3226205951,CA
+3226202112,3226206207,CA
3226206208,3226215423,GB
3226215424,3226236927,US
3226237184,3226237439,US
@@ -79176,9 +83089,15 @@
3229151744,3229155327,US
3229155328,3229155839,SE
3229155840,3229156095,ES
-3229156096,3229171455,SE
+3229156096,3229168895,SE
+3229168896,3229169151,JP
+3229169152,3229171455,SE
3229171456,3229171711,MT
-3229171712,3229200895,SE
+3229171712,3229189119,SE
+3229189120,3229189375,GB
+3229189376,3229191167,SE
+3229191168,3229191423,GB
+3229191424,3229200895,SE
3229200896,3229201151,DE
3229201152,3229201663,SE
3229201664,3229201919,DK
@@ -79237,22 +83156,7 @@
3229391872,3229394943,US
3229394944,3229408255,RU
3229408256,3229412095,US
-3229412096,3229470719,DE
-3229470720,3229471231,IE
-3229471232,3229471999,DE
-3229472000,3229472255,IE
-3229472256,3229472767,GB
-3229472768,3229473791,DE
-3229473792,3229474047,GB
-3229474048,3229474303,DE
-3229474304,3229475839,GB
-3229475840,3229478399,DE
-3229478400,3229478655,IE
-3229478656,3229478911,DE
-3229478912,3229480959,IE
-3229480960,3229481471,DE
-3229481472,3229482239,GB
-3229482240,3229483007,IE
+3229412096,3229483007,DE
3229483008,3229499647,FI
3229499648,3229500671,US
3229548544,3229679615,US
@@ -79590,9 +83494,7 @@
3230368768,3230370303,US
3230370304,3230370559,CA
3230370816,3230400511,CA
-3230400512,3230681599,EU
-3230681600,3230682623,FR
-3230682624,3230793727,EU
+3230681088,3230683135,FR
3230793728,3230823679,US
3230823680,3230823935,DK
3230824192,3230824447,FR
@@ -79732,7 +83634,8 @@
3230996480,3230997247,US
3230997248,3230997503,AT
3230997504,3230997759,US
-3230997760,3230999039,NL
+3230997760,3230998015,SE
+3230998016,3230999039,NL
3230999040,3230999295,US
3230999296,3230999551,NL
3230999552,3230999807,AU
@@ -80287,7 +84190,10 @@
3232131072,3232133119,DE
3232133120,3232133631,UA
3232133632,3232134143,DE
-3232134144,3232137215,EU
+3232134144,3232135167,RU
+3232135168,3232135679,PL
+3232135680,3232135935,RO
+3232135936,3232137215,RU
3232137216,3232139263,UA
3232139264,3232140287,GB
3232140288,3232141311,FR
@@ -81154,6 +85060,7 @@
3238007040,3238010879,NL
3238010880,3238017023,CH
3238017024,3238018303,DK
+3238018304,3238018559,UA
3238018560,3238018815,FR
3238018816,3238019071,DE
3238019072,3238035455,PL
@@ -81202,7 +85109,9 @@
3238502400,3238504447,RU
3238504448,3238526975,DE
3238526976,3238527231,RU
-3238527232,3238542591,CH
+3238527232,3238541567,CH
+3238541568,3238541823,PL
+3238541824,3238542591,CH
3238542592,3238542847,PL
3238542848,3238545919,CH
3238545920,3238546431,RU
@@ -81288,7 +85197,6 @@
3239062784,3239063551,UA
3239063552,3239075839,DE
3239075840,3239076095,MT
-3239076096,3239076351,SE
3239076352,3239076607,DE
3239076608,3239076863,PL
3239076864,3239077119,NL
@@ -81333,7 +85241,6 @@
3239108096,3239109887,DE
3239109888,3239110143,PL
3239110144,3239110655,DE
-3239110656,3239110911,RU
3239110912,3239111167,UA
3239111168,3239111423,NL
3239111424,3239111935,DE
@@ -81350,7 +85257,7 @@
3239114752,3239116543,DE
3239116544,3239116799,PL
3239116800,3239117055,PT
-3239117056,3239119871,DE
+3239117312,3239119871,DE
3239119872,3239120127,GB
3239120128,3239120383,CZ
3239120384,3239120639,PL
@@ -81361,6 +85268,7 @@
3239127040,3239127295,PT
3239127296,3239127551,PL
3239127552,3239127807,IL
+3239127808,3239128063,RU
3239128064,3239128319,AT
3239128320,3239128575,IT
3239128576,3239128831,UA
@@ -81395,11 +85303,12 @@
3239160576,3239160831,DE
3239160832,3239161087,PL
3239161088,3239161343,BY
-3239161344,3239161599,UA
3239161600,3239161855,HU
3239161856,3239162623,DE
3239162624,3239162879,BE
-3239162880,3239164671,DE
+3239162880,3239163903,DE
+3239163904,3239164159,PL
+3239164160,3239164671,DE
3239164672,3239164927,GB
3239164928,3239165183,DK
3239165184,3239165951,DE
@@ -81439,7 +85348,8 @@
3239175424,3239175679,BG
3239175680,3239175935,DE
3239175936,3239176191,FI
-3239176192,3239181311,DE
+3239176192,3239180287,DE
+3239180288,3239181311,CZ
3239181312,3239181567,AT
3239181568,3239181823,UA
3239181824,3239264255,DE
@@ -81480,6 +85390,7 @@
3239287808,3239288831,GB
3239288832,3239289855,DE
3239289856,3239290879,PL
+3239290880,3239291903,RU
3239291904,3239292927,BG
3239292928,3239293951,CZ
3239293952,3239294975,DE
@@ -81510,6 +85421,7 @@
3239452416,3239452671,HR
3239452672,3239464959,DE
3239464960,3239465215,IL
+3239465216,3239465471,PL
3239465472,3239465727,AT
3239465728,3239465983,PL
3239465984,3239466239,UA
@@ -81619,6 +85531,7 @@
3239556608,3239556863,HR
3239556864,3239557119,UA
3239557120,3239567359,DE
+3239567360,3239567615,GB
3239567616,3239567871,UA
3239567872,3239568127,DE
3239568128,3239568383,FR
@@ -81653,6 +85566,7 @@
3239634944,3239635967,RU
3239635968,3239636991,DE
3239636992,3239638015,BG
+3239638016,3239639039,PL
3239639040,3239640063,SI
3239640064,3239641087,DE
3239641088,3239643135,PL
@@ -81678,7 +85592,6 @@
3239682560,3239683071,BG
3239683072,3239683583,PT
3239683584,3239684607,PL
-3239684608,3239685119,GB
3239685120,3239686143,DE
3239686144,3239686655,UA
3239686656,3239687167,IT
@@ -81777,8 +85690,10 @@
3239783424,3239783679,DK
3239783680,3239783935,CH
3239783936,3239784191,DE
+3239784192,3239784447,FR
3239784448,3239788543,DE
3239788544,3239789055,EU
+3239789056,3239789567,DE
3239789568,3239790079,FR
3239790080,3239790591,RO
3239790592,3239791103,LV
@@ -81789,12 +85704,12 @@
3239793664,3239794175,RO
3239794176,3239794687,NL
3239794688,3239795199,GB
+3239795200,3239795711,PL
3239795712,3239796223,IL
3239796224,3239796735,NO
3239796736,3239821311,DE
3239821312,3239821823,SE
3239821824,3239822335,FR
-3239822336,3239822847,RU
3239822848,3239823359,PL
3239823360,3239823871,SE
3239823872,3239824383,IT
@@ -81864,11 +85779,12 @@
3239877632,3239877887,UA
3239877888,3239878143,IT
3239878144,3239878399,PL
-3239878400,3239882751,DE
+3239878656,3239882751,DE
3239882752,3239883007,GB
3239883008,3239883263,UA
3239883264,3239883775,GB
3239883776,3239884031,DE
+3239884032,3239884287,IR
3239884288,3239884543,GB
3239884544,3239884799,FR
3239884800,3239885055,UA
@@ -81892,6 +85808,7 @@
3239895296,3239895551,TR
3239895552,3239895807,PL
3239895808,3239896063,DK
+3239896064,3239896319,DE
3239896320,3239896575,AT
3239896576,3239896831,PL
3239896832,3239897087,HU
@@ -82048,6 +85965,7 @@
3240189952,3240190463,DE
3240190464,3240190975,IT
3240190976,3240191487,RU
+3240191488,3240191999,AE
3240192000,3240192511,UA
3240192512,3240193023,RO
3240193024,3240193535,GB
@@ -82080,6 +85998,7 @@
3240207872,3240208383,RU
3240208384,3240208895,FR
3240208896,3240209407,GB
+3240209408,3240209919,AE
3240209920,3240210943,PL
3240210944,3240211455,GB
3240211456,3240211967,NL
@@ -82189,6 +86108,7 @@
3240282112,3240282239,DE
3240282240,3240282367,UA
3240282368,3240282495,RO
+3240282496,3240282623,RU
3240282624,3240282879,SE
3240282880,3240283007,UA
3240283008,3240283391,PL
@@ -82203,7 +86123,16 @@
3240296448,3240296703,RO
3240296704,3240302847,GB
3240302848,3240303103,UA
-3240303104,3240361983,GB
+3240303104,3240321023,GB
+3240321024,3240321791,RU
+3240321792,3240322047,PL
+3240322048,3240322559,RU
+3240322560,3240324095,CZ
+3240324096,3240324351,RO
+3240324352,3240324607,RU
+3240324608,3240324863,PL
+3240324864,3240325119,SI
+3240325120,3240361983,GB
3240361984,3240362239,TR
3240362240,3240370175,GB
3240370176,3240370431,CH
@@ -82232,7 +86161,7 @@
3240409088,3240409343,TR
3240409344,3240409599,GB
3240409600,3240409855,NL
-3240409856,3240410111,DE
+3240409856,3240410367,DE
3240410368,3240410623,AT
3240410624,3240410879,PT
3240410880,3240411135,NO
@@ -82284,6 +86213,7 @@
3240577280,3240577535,RO
3240577536,3240577791,DE
3240577792,3240578559,UA
+3240578560,3240578815,RU
3240578816,3240579071,IL
3240579072,3240587263,GB
3240587264,3240587519,NL
@@ -82375,7 +86305,6 @@
3240730624,3240731647,ES
3240731648,3240732671,GB
3240732672,3240733695,SE
-3240733696,3240734719,UA
3240734720,3240735743,IT
3240735744,3240736255,FR
3240736256,3240736767,BG
@@ -82391,12 +86320,12 @@
3240740608,3240741119,DE
3240741120,3240741375,AT
3240741376,3240741631,IL
+3240741632,3240741887,RU
3240741888,3240742143,LV
3240742144,3240742399,IT
3240742400,3240742655,RO
3240742656,3240742911,AT
3240742912,3240743423,IL
-3240743424,3240743935,DK
3240743936,3240744447,DE
3240744448,3240744959,SE
3240744960,3240745471,RO
@@ -82425,7 +86354,6 @@
3240791552,3240791807,RU
3240791808,3240792063,ES
3240792064,3240792319,GB
-3240792320,3240792575,RO
3240792576,3240792831,CH
3240792832,3240793087,PL
3240793088,3240793343,UA
@@ -82502,7 +86430,7 @@
3240867584,3240867839,CH
3240867840,3240873983,IT
3240873984,3240874495,RU
-3240874496,3240875007,UA
+3240874496,3240875007,CZ
3240875008,3240875519,AT
3240875520,3240876031,FR
3240876032,3240876543,DK
@@ -82630,7 +86558,6 @@
3241119232,3241119487,DK
3241119488,3241119743,BE
3241119744,3241119999,RO
-3241120000,3241120255,UA
3241120256,3241120511,RU
3241120512,3241120767,GB
3241120768,3241121023,RU
@@ -82666,8 +86593,7 @@
3241146880,3241148415,CH
3241148416,3241476095,FR
3241476096,3241476351,CH
-3241476352,3241481471,BE
-3241481472,3241481727,NL
+3241476352,3241481727,BE
3241481728,3241481983,PT
3241481984,3241482239,DE
3241482240,3241484799,SE
@@ -82690,7 +86616,6 @@
3241501440,3241501951,EU
3241501952,3241502975,BE
3241502976,3241503231,GR
-3241503232,3241503487,FR
3241503488,3241508095,BE
3241508096,3241508351,NL
3241508352,3241541375,BE
@@ -82797,7 +86722,7 @@
3243514368,3243514623,IE
3243514624,3243514879,DK
3243514880,3243515135,AT
-3243515136,3243515391,PL
+3243515136,3243515391,CH
3243515392,3243515647,DE
3243515648,3243515903,RU
3243515904,3243520511,CZ
@@ -83060,6 +86985,7 @@
3244844800,3244845055,GB
3244845056,3244845311,NL
3244845312,3244845567,NO
+3244845568,3244845823,RO
3244845824,3244846335,GB
3244846336,3244846591,TR
3244846592,3244846847,CZ
@@ -83095,10 +87021,8 @@
3244854528,3244855295,RU
3244855296,3244855551,GB
3244855552,3244855807,UA
-3244855808,3244856063,CZ
3244856064,3244856319,IL
3244856320,3244856575,CH
-3244856576,3244856831,RU
3244856832,3244857087,RO
3244857088,3244857343,IT
3244857344,3244857599,GB
@@ -83166,7 +87090,6 @@
3244875008,3244875263,PL
3244875264,3244875519,LI
3244875520,3244875775,IT
-3244875776,3244876799,BZ
3244876800,3244877055,GB
3244877056,3244877311,JO
3244877312,3244877567,RU
@@ -83192,7 +87115,6 @@
3244882432,3244882687,IT
3244882688,3244882943,PL
3244882944,3244883199,NL
-3244883200,3244883455,UA
3244883456,3244883711,CZ
3244883712,3244883967,NL
3244883968,3244884223,DE
@@ -83206,10 +87128,8 @@
3244886016,3244886271,LB
3244886272,3244886527,CH
3244886528,3244886783,DK
-3244886784,3244887039,UA
3244887040,3244887295,NL
3244887296,3244887551,GB
-3244887552,3244887807,CZ
3244887808,3244888063,BE
3244888064,3244888319,RU
3244888320,3244888575,DE
@@ -83270,6 +87190,7 @@
3244903168,3244903423,PL
3244903424,3244903679,FI
3244903680,3244903935,NO
+3244903936,3244904191,RO
3244904192,3244904447,IT
3244904448,3244904703,GR
3244904704,3244904959,FR
@@ -83282,6 +87203,7 @@
3244906752,3244907007,SA
3244907008,3244907263,FR
3244907264,3244907519,RO
+3244907520,3244907775,UA
3244907776,3244908287,RU
3244908288,3244908543,NL
3244908544,3244908799,RU
@@ -83305,6 +87227,7 @@
3244913408,3244913663,SI
3244913664,3244913919,DK
3244913920,3244914431,RU
+3244914432,3244914687,SA
3244914688,3244914943,GB
3244914944,3244915199,UA
3244915200,3244915455,PL
@@ -83383,6 +87306,7 @@
3244935168,3244935423,NL
3244935424,3244935679,UA
3244935680,3244935935,PL
+3244935936,3244936191,IL
3244936192,3244936959,AT
3244936960,3244937215,KZ
3244937216,3244937471,TR
@@ -83474,12 +87398,16 @@
3245001728,3245002751,IL
3245002752,3245003263,PL
3245003264,3245003519,SE
+3245003520,3245003775,UA
3245003776,3245004799,RU
3245004800,3245005823,PL
3245005824,3245006847,UA
3245006848,3245007871,DE
3245007872,3245008895,PL
3245008896,3245009919,RU
+3245009920,3245010431,UA
+3245010432,3245010687,PL
+3245010688,3245010943,FR
3245010944,3245011967,RU
3245011968,3245012991,PL
3245012992,3245014015,UA
@@ -83632,6 +87560,7 @@
3245136384,3245136639,GB
3245136640,3245136895,EU
3245136896,3245137151,PL
+3245137152,3245137407,GB
3245137408,3245137663,DE
3245137664,3245137919,SE
3245137920,3245138431,DK
@@ -83641,6 +87570,7 @@
3245139968,3245140479,CH
3245140480,3245140991,RO
3245140992,3245141503,UA
+3245141504,3245142015,RO
3245142016,3245143039,UA
3245143040,3245144063,GB
3245144064,3245145087,UA
@@ -83722,6 +87652,7 @@
3245200384,3245200639,PL
3245200640,3245200895,GR
3245200896,3245201151,DE
+3245201152,3245201407,KW
3245201408,3245201663,UA
3245201664,3245201919,NO
3245201920,3245202175,SA
@@ -83999,7 +87930,9 @@
3245909568,3245909631,US
3245909632,3245910831,IE
3245910832,3245910847,GB
-3245910848,3245921279,IE
+3245910848,3245919456,IE
+3245919457,3245919462,IN
+3245919463,3245921279,IE
3245921280,3245921535,BE
3245921536,3245922959,IE
3245922960,3245922975,US
@@ -84059,7 +87992,8 @@
3246784512,3246915583,CH
3246915584,3247046655,PT
3247046656,3247046911,AT
-3247046912,3247048703,SI
+3247046912,3247048191,SI
+3247048192,3247048703,NO
3247048704,3247048959,EE
3247048960,3247049215,SI
3247049216,3247054079,DE
@@ -84102,6 +88036,7 @@
3247071488,3247072255,RO
3247072256,3247072511,IE
3247072512,3247072767,BE
+3247072768,3247073023,SE
3247073024,3247073279,RO
3247073280,3247073535,DE
3247073536,3247073791,AT
@@ -84393,9 +88328,12 @@
3247308728,3247308735,DE
3247308736,3247308799,NL
3247308800,3247309055,BG
-3247309056,3247316479,FI
+3247309056,3247313663,FI
+3247313664,3247313919,AM
+3247313920,3247316479,FI
3247316480,3247316735,NO
-3247316736,3247322367,FI
+3247316736,3247316991,RU
+3247316992,3247322367,FI
3247322368,3247322623,DE
3247322624,3247323135,FI
3247323136,3247323647,RU
@@ -84411,7 +88349,9 @@
3247335424,3247336447,FI
3247336448,3247337215,NO
3247337216,3247337471,CH
-3247337472,3247338495,PL
+3247337472,3247337983,PL
+3247337984,3247338239,UA
+3247338240,3247338495,PL
3247338496,3247338751,SI
3247338752,3247339519,GB
3247339520,3247340543,FI
@@ -84451,8 +88391,7 @@
3247366144,3247371007,FI
3247371008,3247371263,PL
3247371264,3247371519,SE
-3247371520,3247371775,GB
-3247371776,3247374335,FI
+3247372032,3247374335,FI
3247374336,3247374591,RU
3247374592,3247394047,FI
3247394048,3247394303,PL
@@ -84470,7 +88409,8 @@
3247438336,3247439871,FI
3247439872,3247702015,ES
3247702016,3247702271,RO
-3247702272,3247704831,ES
+3247702272,3247703551,ES
+3247704064,3247704831,ES
3247704832,3247705087,GB
3247705088,3247705855,ES
3247705856,3247706111,RU
@@ -84506,8 +88446,62 @@
3247825920,3247826943,BE
3247826944,3247828991,CH
3247828992,3247833087,BE
+3247833088,3247833599,RU
+3247833600,3247834111,PL
+3247834112,3247834623,DE
+3247834624,3247835135,UA
+3247835136,3247836159,GB
+3247836160,3247837183,CZ
+3247837184,3247838207,ES
+3247838208,3247838719,CH
+3247838720,3247839231,NO
+3247839232,3247839743,CZ
+3247839744,3247840255,GB
+3247840256,3247841279,UA
+3247841280,3247841791,RU
+3247841792,3247842047,GB
+3247842048,3247842303,CZ
+3247842304,3247842815,PL
+3247842816,3247843327,CZ
+3247843328,3247843583,LT
+3247843584,3247845375,PL
+3247845376,3247845631,CH
+3247845632,3247845887,UA
+3247845888,3247846399,PL
+3247846400,3247847423,RU
+3247847424,3247848447,UA
+3247848448,3247849471,IT
+3247849472,3247849727,DE
+3247849728,3247849983,RU
+3247849984,3247850239,GB
+3247850240,3247850495,BG
+3247850496,3247850751,RU
+3247850752,3247851007,PL
+3247851008,3247851519,RU
+3247851520,3247852543,SK
+3247852544,3247853567,PL
+3247853568,3247854591,RU
+3247854592,3247855615,DK
+3247855616,3247856127,UA
+3247856128,3247856639,ES
+3247856640,3247857663,RU
+3247857664,3247858175,UA
+3247858176,3247858687,EU
+3247858688,3247859711,RU
+3247859712,3247859967,SE
+3247859968,3247861759,RU
+3247861760,3247862015,IT
+3247862016,3247862271,UA
+3247862272,3247864063,RU
+3247864064,3247864319,NO
+3247864320,3247864575,UA
+3247864576,3247864831,PL
+3247864832,3247865343,RU
+3247865344,3247865599,MT
+3247865600,3247865855,IL
3247865856,3247871999,GB
3247872000,3247875327,NL
+3247875328,3247875583,PL
3247875584,3247876095,DE
3247876096,3247876351,PL
3247876352,3247876607,FR
@@ -84584,7 +88578,12 @@
3248522240,3248525311,NO
3248525312,3248525567,DE
3248525568,3248525823,DK
-3248525824,3248545791,NO
+3248525824,3248528895,NO
+3248528896,3248529151,RU
+3248529152,3248529407,BG
+3248529408,3248540671,NO
+3248540672,3248541183,RU
+3248541184,3248545791,NO
3248545792,3248546815,UA
3248546816,3248547839,RU
3248547840,3248553727,NO
@@ -84594,7 +88593,10 @@
3248557056,3248558079,UA
3248558080,3248575487,NO
3248575488,3248576511,CZ
-3248576512,3248619263,NO
+3248576512,3248603135,NO
+3248603136,3248603391,BG
+3248603392,3248603647,RU
+3248603648,3248619263,NO
3248619264,3248619519,UA
3248619520,3248638463,DK
3248638464,3248638719,GB
@@ -84634,8 +88636,8 @@
3248790784,3248791039,PL
3248791040,3248791295,BE
3248791296,3248791551,DE
-3248791552,3248792527,GB
-3248792528,3248796607,EU
+3248791552,3248792543,GB
+3248792544,3248796607,EU
3248796608,3248796863,GB
3248796864,3248798975,EU
3248798976,3248799231,GB
@@ -84676,12 +88678,9 @@
3248881664,3249012735,FI
3249012736,3249012991,DE
3249012992,3249014271,LU
-3249014272,3249014783,EU
3249014784,3249025535,LU
3249025536,3249025791,FR
-3249025792,3249026559,LU
-3249026560,3249026815,EU
-3249026816,3249045503,LU
+3249025792,3249045503,LU
3249045504,3249078271,DE
3249078272,3249078783,RU
3249078784,3249079295,CH
@@ -84814,7 +88813,13 @@
3249574144,3249574399,RU
3249574400,3249574655,SE
3249574656,3249574911,UA
-3249574912,3249668095,NL
+3249574912,3249590527,NL
+3249590528,3249590783,FR
+3249590784,3249600255,NL
+3249600256,3249600511,AT
+3249600512,3249601535,UA
+3249601536,3249601791,RU
+3249601792,3249668095,NL
3249668096,3249676287,IE
3249676288,3249676543,GB
3249676544,3249676799,IE
@@ -84922,12 +88927,18 @@
3249872384,3249872639,GB
3249872640,3249910783,SE
3249910784,3249912319,GB
-3249912320,3249931007,SE
+3249912320,3249926143,SE
+3249926144,3249926399,AU
+3249926400,3249926655,SE
+3249926656,3249926911,AU
+3249926912,3249931007,SE
3249931008,3249931263,GB
3249931264,3249932031,SE
3249932032,3249932287,GB
3249932288,3249934335,US
-3249934336,3249967615,SE
+3249934336,3249961471,SE
+3249961472,3249961727,NL
+3249961728,3249967615,SE
3249967616,3249967871,GB
3249967872,3249968127,SE
3249968128,3249969151,FR
@@ -84941,7 +88952,9 @@
3249976832,3249977087,GB
3249977088,3249991679,SE
3249991680,3249991935,US
-3249991936,3249995263,SE
+3249991936,3249993215,SE
+3249993216,3249993471,NL
+3249993472,3249995263,SE
3249995264,3249995519,GB
3249995520,3249997055,SE
3249997056,3249997311,US
@@ -84991,7 +89004,7 @@
3250200832,3250201087,RO
3250201088,3250201343,RU
3250201344,3250201599,DK
-3250201600,3250233855,AT
+3250202624,3250233855,AT
3250233856,3250234111,GB
3250234112,3250234367,GR
3250234368,3250245631,AT
@@ -85030,18 +89043,18 @@
3250359296,3250359807,HU
3250359808,3250362879,KW
3250362880,3250363391,DE
-3250363392,3250363903,EU
+3250363392,3250363903,SE
3250363904,3250364415,DE
3250364416,3250372607,KW
3250372608,3250373375,HU
3250373376,3250373631,GB
3250373632,3250374143,DE
+3250374144,3250374655,PL
3250374656,3250374911,SA
3250374912,3250375679,SE
3250375680,3250376703,GB
3250376704,3250380799,AT
-3250380800,3250381055,DK
-3250381056,3250386943,CH
+3250380800,3250386943,CH
3250386944,3250387199,SE
3250387200,3250387455,FR
3250387456,3250387711,DE
@@ -85116,6 +89129,7 @@
3250589440,3250589471,IE
3250589472,3250589503,NL
3250589504,3250589567,HR
+3250589568,3250589631,RU
3250589632,3250589695,NO
3250589696,3250593791,CH
3250593792,3250594815,GB
@@ -85146,6 +89160,9 @@
3250692096,3250692351,NO
3250692352,3250692607,NL
3250692608,3250693375,BG
+3250693376,3250693631,NL
+3250693632,3250694143,DE
+3250694144,3250694399,PL
3250694400,3250694655,GB
3250694656,3250694911,SK
3250694912,3250695167,NL
@@ -85155,6 +89172,7 @@
3250697728,3250697983,BG
3250697984,3250698239,IT
3250698240,3250698751,GR
+3250698752,3250699263,RU
3250699264,3250699775,GB
3250699776,3250700287,DE
3250700288,3250708479,UA
@@ -85167,6 +89185,15 @@
3250722304,3250724863,GB
3250724864,3250733055,MA
3250733056,3250741247,DZ
+3250741248,3250742783,RU
+3250742784,3250743551,AT
+3250743552,3250743807,CY
+3250743808,3250746367,UA
+3250746368,3250747391,NL
+3250747392,3250747903,SI
+3250747904,3250748159,SA
+3250748160,3250748415,PL
+3250748416,3250749439,UA
3250749440,3250749695,GH
3250749696,3250749951,IT
3250749952,3250750463,RO
@@ -85395,6 +89422,7 @@
3251182080,3251182591,FR
3251182592,3251183103,IT
3251183104,3251183615,RU
+3251183616,3251183871,LT
3251183872,3251184127,CH
3251184128,3251184383,PL
3251184384,3251184639,DK
@@ -85431,12 +89459,10 @@
3251201536,3251201791,AT
3251201792,3251202047,FR
3251202048,3251202303,NL
-3251202304,3251202559,PL
3251202560,3251202815,AT
3251202816,3251203327,ES
3251203328,3251203583,SI
3251203584,3251203839,CZ
-3251203840,3251204095,SE
3251204096,3251204607,DE
3251204608,3251205119,BG
3251205120,3251205631,UA
@@ -85521,7 +89547,8 @@
3251237888,3251238911,DK
3251238912,3251239935,FR
3251239936,3251240959,US
-3251240960,3251243007,GB
+3251240960,3251241215,DE
+3251241216,3251243007,GB
3251243008,3251245055,BE
3251245056,3251245311,DE
3251245312,3251245567,BE
@@ -85575,7 +89602,7 @@
3251308544,3251310591,EU
3251310592,3251311103,SI
3251311104,3251311615,RS
-3251311616,3251312127,EU
+3251311616,3251312127,GB
3251312128,3251312383,RS
3251312384,3251312639,CH
3251312640,3251313151,RS
@@ -85676,7 +89703,44 @@
3251927992,3251927999,NL
3251928000,3252015687,NO
3252015688,3252015695,SE
-3252015696,3252289535,NO
+3252015696,3252168191,NO
+3252168192,3252174847,SE
+3252174848,3252177151,NO
+3252177152,3252177407,SE
+3252177408,3252178431,NO
+3252178432,3252178943,SE
+3252178944,3252179199,NO
+3252179200,3252189183,SE
+3252189184,3252189695,NO
+3252189696,3252190975,SE
+3252190976,3252191231,NO
+3252191232,3252197119,SE
+3252197120,3252197375,NO
+3252197376,3252205567,SE
+3252205568,3252205823,NO
+3252205824,3252211967,SE
+3252211968,3252212223,NO
+3252212224,3252213759,SE
+3252213760,3252214527,NO
+3252214528,3252218879,SE
+3252218880,3252219135,NO
+3252219136,3252220927,SE
+3252220928,3252221183,NO
+3252221184,3252222463,SE
+3252222464,3252223231,NO
+3252223232,3252223743,SE
+3252223744,3252223999,NO
+3252224000,3252233215,SE
+3252233216,3252240383,NO
+3252240384,3252244479,SE
+3252244480,3252246527,NO
+3252246528,3252276223,SE
+3252276224,3252277759,NO
+3252277760,3252279295,SE
+3252279296,3252279807,NO
+3252279808,3252286463,SE
+3252286464,3252286975,NO
+3252286976,3252289535,SE
3252289536,3252291327,GR
3252291328,3252291583,SK
3252291584,3252293631,FR
@@ -85694,7 +89758,8 @@
3252318720,3252318975,MQ
3252318976,3252319231,PL
3252319232,3252319743,AT
-3252319744,3252321791,GR
+3252319744,3252319999,UA
+3252320000,3252321791,GR
3252321792,3252322303,PL
3252322304,3252323327,NO
3252323328,3252324351,PL
@@ -85714,18 +89779,17 @@
3252342144,3252342207,LU
3252342208,3252342239,GB
3252342240,3252342271,CH
+3252342272,3252342527,SE
3252342528,3252342543,NO
3252342544,3252342591,DE
3252342592,3252342607,IE
-3252342640,3252342655,LV
3252342656,3252342783,IL
3252342784,3252346367,DE
3252346368,3252346623,GB
3252346624,3252355071,GR
3252355072,3252355327,GB
3252355328,3252358911,LT
-3252358912,3252358927,GB
-3252358928,3252359167,DE
+3252358912,3252359167,DE
3252359168,3252362239,DK
3252362240,3252362495,PL
3252362496,3252362751,IT
@@ -85774,8 +89838,7 @@
3252407760,3252407775,CD
3252407776,3252407791,GH
3252407792,3252407807,NO
-3252407808,3252407999,GN
-3252408000,3252408063,NO
+3252407808,3252408063,GN
3252408064,3252408079,ML
3252408080,3252408159,NO
3252408160,3252408191,GQ
@@ -85785,7 +89848,7 @@
3252408336,3252408343,GN
3252408344,3252408351,LT
3252408352,3252408367,GN
-3252408368,3252408375,NG
+3252408368,3252408375,LT
3252408376,3252408383,GN
3252408384,3252408391,BI
3252408392,3252408415,LT
@@ -85814,9 +89877,7 @@
3252409040,3252409047,MR
3252409048,3252409103,LT
3252409104,3252409111,SD
-3252409112,3252409119,LT
-3252409120,3252409127,NG
-3252409128,3252409151,LT
+3252409112,3252409151,LT
3252409152,3252409159,KE
3252409160,3252409167,LT
3252409168,3252409175,UG
@@ -85839,9 +89900,7 @@
3252409504,3252409511,GH
3252409512,3252409519,BF
3252409520,3252409527,NG
-3252409528,3252409535,LT
-3252409536,3252409543,BI
-3252409544,3252409599,LT
+3252409528,3252409599,LT
3252409600,3252409615,MA
3252409616,3252409631,LT
3252409632,3252409647,AO
@@ -85871,7 +89930,9 @@
3252411824,3252411839,LT
3252411840,3252411855,MR
3252411856,3252411879,LT
-3252411880,3252411903,CD
+3252411880,3252411887,CD
+3252411888,3252411895,LT
+3252411896,3252411903,CD
3252411904,3252414463,LT
3252414464,3252414479,GH
3252414480,3252414511,LT
@@ -85883,10 +89944,8 @@
3252414624,3252414639,TZ
3252414640,3252414647,GH
3252414648,3252414655,NE
-3252414656,3252414991,LT
-3252414992,3252414999,IQ
-3252415000,3252415015,LT
-3252415016,3252415031,IQ
+3252414656,3252414975,LT
+3252414976,3252415031,IQ
3252415032,3252415039,LT
3252415040,3252415095,IQ
3252415096,3252415103,LT
@@ -85904,9 +89963,9 @@
3252417024,3252417279,LT
3252417280,3252417287,IQ
3252417288,3252417463,AF
-3252417464,3252417479,LT
-3252417480,3252417487,AF
-3252417488,3252417791,LT
+3252417464,3252417471,LT
+3252417472,3252417511,AF
+3252417512,3252417791,LT
3252417792,3252417855,NG
3252417856,3252417919,LT
3252417920,3252417935,MW
@@ -85961,8 +90020,7 @@
3252424704,3252424719,GN
3252424720,3252424735,LT
3252424736,3252424751,GA
-3252424752,3252424767,MA
-3252424768,3252424799,LT
+3252424752,3252424799,LT
3252424800,3252424815,NE
3252424816,3252425023,LT
3252425024,3252425215,SO
@@ -85973,8 +90031,7 @@
3252425552,3252425575,AO
3252425576,3252425727,LT
3252425728,3252425983,A2
-3252425984,3252426239,LT
-3252426240,3252426751,BW
+3252425984,3252426751,LT
3252426752,3252427263,MZ
3252427264,3252427519,NG
3252427520,3252427775,LT
@@ -85989,8 +90046,8 @@
3252430336,3252430463,NE
3252430464,3252430511,LT
3252430512,3252430519,BF
-3252430520,3252430527,LT
-3252430528,3252430543,BF
+3252430520,3252430535,LT
+3252430536,3252430543,BF
3252430544,3252430559,BJ
3252430560,3252430591,LT
3252430592,3252430847,GN
@@ -86011,8 +90068,11 @@
3252434704,3252434711,TZ
3252434712,3252434719,LT
3252434720,3252434743,GH
-3252434744,3252435199,LT
-3252435200,3252435247,TZ
+3252434744,3252434751,ML
+3252434752,3252434759,GN
+3252434760,3252435199,LT
+3252435200,3252435231,TZ
+3252435232,3252435247,LT
3252435248,3252435263,BW
3252435264,3252435279,ML
3252435280,3252435295,LT
@@ -86020,21 +90080,18 @@
3252435312,3252435319,CF
3252435320,3252435327,MZ
3252435328,3252435343,CD
-3252435344,3252435359,BF
-3252435360,3252435375,LT
+3252435344,3252435375,BF
3252435376,3252435415,GN
3252435416,3252435423,LT
-3252435424,3252435447,CD
-3252435448,3252435455,LT
+3252435424,3252435455,CD
3252435456,3252435711,TZ
3252435712,3252435855,GH
3252435856,3252435871,MR
3252435872,3252435887,GH
-3252435888,3252435903,LT
+3252435888,3252435903,CD
3252435904,3252435919,BW
3252435920,3252435935,BF
-3252435936,3252435951,CF
-3252435952,3252435967,LT
+3252435936,3252435967,LT
3252435968,3252436223,TZ
3252436224,3252436239,GN
3252436240,3252436255,LT
@@ -86046,8 +90103,7 @@
3252436336,3252436351,ZM
3252436352,3252436383,GN
3252436384,3252436399,LR
-3252436400,3252436407,SL
-3252436408,3252436415,ML
+3252436400,3252436415,SL
3252436416,3252436447,LT
3252436448,3252436479,ER
3252436480,3252436991,LT
@@ -86063,7 +90119,9 @@
3252439272,3252439287,LT
3252439288,3252439295,SN
3252439296,3252439391,SO
-3252439392,3252439807,LT
+3252439392,3252439551,LT
+3252439552,3252439615,SO
+3252439616,3252439807,LT
3252439808,3252439871,SO
3252439872,3252444287,LT
3252444288,3252444351,TZ
@@ -86137,7 +90195,9 @@
3252457472,3252460799,LT
3252460800,3252460831,AF
3252460832,3252460847,US
-3252460848,3252461055,LT
+3252460848,3252460863,LT
+3252460864,3252460927,IQ
+3252460928,3252461055,LT
3252461056,3252461567,NO
3252461568,3252464383,LT
3252464384,3252465663,NO
@@ -86174,6 +90234,7 @@
3252510720,3252514815,FR
3252514816,3252515071,SI
3252515072,3252515327,GB
+3252515328,3252515583,NL
3252515584,3252515839,SI
3252515840,3252516095,CH
3252516096,3252516351,FR
@@ -86190,11 +90251,12 @@
3252518912,3252527103,NL
3252527104,3252535295,BE
3252535296,3252539391,GB
-3252539392,3252540415,EU
+3252539392,3252540415,IE
3252540416,3252541951,NL
3252541952,3252542207,CI
3252542208,3252551679,BE
-3252551680,3252567295,CH
+3252551680,3252563967,CH
+3252566784,3252567295,CH
3252567296,3252567551,GB
3252567552,3252567807,RU
3252567808,3252568063,RO
@@ -86225,7 +90287,9 @@
3252616704,3252616959,ES
3252616960,3252617215,CH
3252617216,3252617471,PL
-3252617472,3252636671,CH
+3252617472,3252634623,CH
+3252634624,3252634879,RU
+3252634880,3252636671,CH
3252636672,3252636927,TR
3252636928,3252637183,DE
3252637184,3252637695,GB
@@ -86281,6 +90345,7 @@
3252912896,3252913151,PL
3252913152,3252913407,ES
3252913408,3252913663,FR
+3252913664,3252913919,RU
3252913920,3252914175,NO
3252914176,3252916223,FR
3252916224,3252920319,DE
@@ -86349,17 +90414,22 @@
3253265920,3253270527,RU
3253270528,3253271551,BY
3253271552,3253338111,RU
-3253338112,3253380863,SE
+3253338112,3253338367,PL
+3253338368,3253380863,SE
3253380864,3253381119,IT
3253381120,3253383935,SE
3253383936,3253384191,NO
-3253384192,3253409791,SE
+3253384192,3253403647,SE
+3253403648,3253403903,PL
+3253403904,3253409791,SE
3253409792,3253410047,GB
-3253410048,3253412351,SE
+3253410048,3253411327,SE
+3253411328,3253411583,NO
+3253411584,3253412351,SE
3253412352,3253412607,US
3253412608,3253416447,SE
-3253416448,3253416703,GB
-3253416704,3253428223,SE
+3253416448,3253416959,GB
+3253416960,3253428223,SE
3253428224,3253428479,DE
3253428480,3253429759,SE
3253429760,3253430015,ES
@@ -86376,9 +90446,16 @@
3253453312,3253453567,NO
3253453568,3253454079,SE
3253454080,3253454335,GB
-3253454336,3253460735,SE
+3253454336,3253455615,SE
+3253455616,3253455871,US
+3253455872,3253456383,SE
+3253456384,3253456639,US
+3253456640,3253460735,SE
3253460736,3253460991,IT
-3253460992,3253469183,SE
+3253460992,3253461247,US
+3253461248,3253463039,SE
+3253463040,3253464063,GB
+3253464064,3253469183,SE
3253469184,3253471231,AO
3253471232,3253534719,PT
3253534720,3253600255,GB
@@ -86470,7 +90547,6 @@
3253697536,3253698559,PL
3253698560,3253699071,UA
3253699072,3253699583,RO
-3253699584,3253700095,UA
3253700096,3253700607,RO
3253700608,3253701119,PL
3253701120,3253702143,RO
@@ -86539,6 +90615,7 @@
3253888256,3253888511,BE
3253888512,3253888767,GB
3253888768,3253889023,SE
+3253889024,3253889279,RO
3253889280,3253889535,CH
3253889536,3253889791,DE
3253889792,3253890047,DK
@@ -86581,6 +90658,7 @@
3253968896,3253969407,DE
3253969408,3253969919,AT
3253969920,3253970431,NL
+3253970432,3253970687,RU
3253970688,3253970943,UA
3253970944,3253971967,RS
3253971968,3253972991,RU
@@ -86780,6 +90858,7 @@
3254708224,3254708735,UA
3254708736,3254709247,RO
3254709248,3254709759,DE
+3254709760,3254710271,PL
3254710272,3254710783,IT
3254710784,3254711295,RO
3254711296,3254711807,FR
@@ -86807,10 +90886,13 @@
3254785280,3254785535,KZ
3254785536,3254785791,DK
3254785792,3254786047,LU
-3254786304,3254786815,AT
+3254786048,3254786815,AT
3254786816,3254787071,SM
3254787072,3254788095,NL
3254788096,3254788351,BG
+3254788352,3254789119,ES
+3254789120,3254789375,FR
+3254789632,3254790655,TK
3254796288,3254797311,SE
3254797312,3254798335,RU
3254798336,3254799359,AT
@@ -86822,6 +90904,7 @@
3254804480,3254806527,PL
3254806528,3254807551,UA
3254807552,3254808575,KZ
+3254808576,3254809599,RU
3254809600,3254810623,UA
3254810624,3254811647,RU
3254811648,3254812671,RO
@@ -86880,6 +90963,7 @@
3254827776,3254828031,UA
3254828032,3254828287,DE
3254828288,3254828799,RO
+3254828800,3254829055,SI
3254829056,3254829311,NO
3254829312,3254829567,GB
3254829568,3254829823,NL
@@ -86927,6 +91011,7 @@
3254840320,3254840575,DK
3254840576,3254840831,UA
3254840832,3254841343,GB
+3254841344,3254841599,PL
3254841600,3254841855,IE
3254841856,3254842111,LV
3254842112,3254842367,GB
@@ -87285,9 +91370,7 @@
3255300804,3255300807,LU
3255300808,3255304191,BE
3255304192,3255304447,DE
-3255304448,3255305215,LV
-3255305216,3255305471,EU
-3255305472,3255307775,LV
+3255304448,3255307775,LV
3255307776,3255308031,PL
3255308032,3255308287,CH
3255308288,3255311359,LV
@@ -87295,8 +91378,7 @@
3255311616,3255311871,SE
3255311872,3255312127,PT
3255312128,3255312383,SE
-3255312384,3255315455,LV
-3255315456,3255315711,EU
+3255312384,3255315711,LV
3255315712,3255316223,PL
3255316224,3255316479,RU
3255316480,3255316991,GB
@@ -87343,6 +91425,7 @@
3255366144,3255367167,DK
3255367168,3255367679,RU
3255367680,3255368191,UA
+3255368192,3255368703,FR
3255368704,3255369215,CZ
3255369216,3255369727,GB
3255369728,3255370239,LU
@@ -87379,7 +91462,7 @@
3255385600,3255386111,FR
3255386112,3255386623,KE
3255386624,3255387135,PL
-3255387136,3255388159,UA
+3255387648,3255388159,UA
3255388160,3255388671,DE
3255388672,3255389183,SE
3255389184,3255389695,GB
@@ -87396,6 +91479,7 @@
3255412480,3255412735,RO
3255412736,3255413247,DE
3255413248,3255413503,LV
+3255413504,3255413759,UZ
3255413760,3255414271,GB
3255414272,3255414527,TR
3255414528,3255414783,LV
@@ -87405,7 +91489,6 @@
3255416832,3255417855,FR
3255417856,3255418879,GB
3255418880,3255422975,DE
-3255422976,3255426047,GB
3255426048,3255426559,IT
3255426560,3255426815,FR
3255426816,3255427071,PL
@@ -87504,9 +91587,7 @@
3255558144,3255558399,BE
3255558400,3255564031,CH
3255564032,3255564287,RU
-3255564288,3255565567,CH
-3255565568,3255566079,DE
-3255566080,3255566335,CH
+3255564288,3255566335,CH
3255566336,3255574527,SE
3255574528,3255578623,CZ
3255578624,3255582719,SE
@@ -87519,14 +91600,18 @@
3255660544,3255666431,NL
3255666432,3255666687,DE
3255666688,3255697407,NL
-3255697408,3255710719,SE
+3255697408,3255698687,SE
+3255698688,3255698943,GB
+3255698944,3255710719,SE
3255710720,3255710975,ES
3255710976,3255724543,SE
3255724544,3255725055,US
3255725056,3255725311,ES
3255725312,3255739647,SE
3255739648,3255739903,GB
-3255739904,3255743231,SE
+3255739904,3255742719,SE
+3255742720,3255742975,SG
+3255742976,3255743231,SE
3255743232,3255743487,IT
3255743488,3255743743,DE
3255743744,3255745535,SE
@@ -87561,7 +91646,11 @@
3256075008,3256076287,DK
3256076288,3256076799,SE
3256076800,3256082431,DK
-3256082432,3256090623,LV
+3256082432,3256088063,LV
+3256088064,3256088095,RU
+3256088096,3256088103,LV
+3256088104,3256088319,RU
+3256088320,3256090623,LV
3256090624,3256164863,IT
3256164864,3256165375,SE
3256165376,3256187391,IT
@@ -87603,6 +91692,7 @@
3256413184,3256413695,UA
3256413696,3256414207,PL
3256414208,3256414719,RU
+3256414720,3256415231,DE
3256415232,3256415743,PL
3256415744,3256416255,UA
3256416256,3256416767,RS
@@ -87706,7 +91796,7 @@
3256699392,3256700415,GB
3256700416,3256700671,NL
3256700672,3256700927,FR
-3256700928,3256701183,EU
+3256700928,3256701183,DE
3256701184,3256701439,BE
3256701440,3256701695,GB
3256701696,3256705279,EU
@@ -87742,6 +91832,7 @@
3256788224,3256788479,RU
3256788480,3256788735,GB
3256788736,3256788991,DE
+3256788992,3256789247,RO
3256789248,3256789503,SE
3256789504,3256789759,UA
3256789760,3256790015,GB
@@ -87767,7 +91858,9 @@
3256795136,3256811519,GR
3256811520,3256864511,DE
3256864512,3256864767,CH
-3256864768,3256877055,DE
+3256864768,3256870911,DE
+3256870912,3256871167,RU
+3256871168,3256877055,DE
3256877056,3256915455,GB
3256915456,3256915967,SE
3256915968,3256945663,GB
@@ -87781,7 +91874,6 @@
3256988672,3256989183,UA
3256989184,3256989439,FR
3256989440,3256989695,GB
-3256989696,3256989951,HU
3256989952,3256990207,PL
3256990208,3256990463,CH
3256990464,3256990719,PL
@@ -87837,6 +91929,7 @@
3257401344,3257466879,CH
3257466880,3257467135,DE
3257467136,3257467391,GB
+3257467392,3257467903,SE
3257467904,3257468927,IT
3257468928,3257469183,EU
3257469184,3257469439,IT
@@ -88712,9 +92805,7 @@
3257827840,3257829375,GB
3257829376,3257830399,IE
3257830400,3257835519,GB
-3257835520,3257844223,IE
-3257844224,3257851903,GB
-3257851904,3257860095,IE
+3257835520,3257860095,IE
3257860096,3257925631,SE
3257925632,3257925887,AT
3257925888,3257926143,SE
@@ -88986,7 +93077,8 @@
3258765056,3258765311,NL
3258765312,3258767615,GB
3258767616,3258767871,CH
-3258767872,3258802175,GB
+3258767872,3258769919,GB
+3258777600,3258802175,GB
3258802176,3258806271,LU
3258806272,3258818047,GB
3258818048,3258818303,SE
@@ -89020,7 +93112,9 @@
3259031656,3259031659,ES
3259031660,3259031895,DE
3259031896,3259031899,ES
-3259031900,3259032199,DE
+3259031900,3259032151,DE
+3259032152,3259032159,GB
+3259032160,3259032199,DE
3259032200,3259032203,ES
3259032204,3259032439,DE
3259032440,3259032443,ES
@@ -89052,17 +93146,27 @@
3259236864,3259237119,CH
3259237120,3259237887,SE
3259237888,3259238143,FR
-3259238144,3259248127,SE
+3259238144,3259243519,SE
+3259243520,3259244543,US
+3259244544,3259248127,SE
3259248128,3259248383,GB
3259248384,3259258623,SE
3259258624,3259258879,ES
3259258880,3259262719,SE
3259262720,3259262975,DK
-3259262976,3259269375,SE
+3259262976,3259266047,SE
+3259266048,3259266303,SG
+3259266304,3259269375,SE
3259269376,3259269631,FR
3259269632,3259276287,SE
3259276288,3259276543,ES
-3259276544,3259285759,SE
+3259276544,3259279615,SE
+3259279616,3259279871,JP
+3259279872,3259281407,SE
+3259281408,3259282431,US
+3259282432,3259282687,SE
+3259282688,3259282943,JP
+3259282944,3259285759,SE
3259285760,3259286015,GB
3259286016,3259290879,SE
3259290880,3259291135,US
@@ -89180,9 +93284,13 @@
3259457280,3259457535,IT
3259457536,3259460351,SE
3259460352,3259460607,DE
-3259460608,3259465215,SE
+3259460608,3259461375,SE
+3259461376,3259461631,GB
+3259461632,3259465215,SE
3259465216,3259465471,KH
-3259465472,3259479807,SE
+3259465472,3259470847,SE
+3259470848,3259471871,US
+3259471872,3259479807,SE
3259479808,3259480063,DK
3259480064,3259480831,SE
3259480832,3259481087,ES
@@ -89278,7 +93386,9 @@
3259696640,3259696895,ES
3259696896,3259701759,GB
3259701760,3259702303,DE
-3259702304,3259752191,GB
+3259702304,3259709999,GB
+3259710000,3259710007,JE
+3259710008,3259752191,GB
3259752192,3259752447,FR
3259752448,3259760639,GB
3259760640,3259814399,DE
@@ -89371,6 +93481,7 @@
3260587520,3260588031,PL
3260588032,3260596223,DE
3260596224,3260596735,CH
+3260596736,3260597247,SK
3260597248,3260597759,CH
3260597760,3260598271,DE
3260598272,3260598783,RU
@@ -89422,12 +93533,12 @@
3260894208,3260895231,AT
3260895232,3260898303,SE
3260898304,3260899327,ES
-3260899328,3260900095,CH
-3260900096,3260900607,EU
+3260899328,3260900351,CH
3260900608,3260901119,NL
3260901120,3260903423,DE
3260903424,3260906239,CH
3260906240,3260906495,DE
+3260906496,3260907519,PL
3260907520,3260915711,GB
3260915712,3260923903,UA
3260923904,3261071359,DE
@@ -89455,7 +93566,13 @@
3261503936,3261530111,RO
3261530112,3261531903,SE
3261531904,3261532159,GB
-3261532160,3261570303,SE
+3261532160,3261532671,SE
+3261532672,3261532927,US
+3261532928,3261533439,SE
+3261533440,3261533695,US
+3261533696,3261539327,SE
+3261539328,3261540351,SG
+3261540352,3261570303,SE
3261570304,3261570559,IT
3261570560,3261595647,SE
3261595648,3261661183,NL
@@ -89482,8 +93599,7 @@
3261697024,3261698047,RO
3261698048,3261698559,UA
3261698560,3261699071,DE
-3261699072,3261699583,SA
-3261699584,3261700095,NL
+3261699072,3261700095,NL
3261700096,3261700607,FR
3261700608,3261701119,GB
3261701120,3261701631,RU
@@ -89500,7 +93616,6 @@
3261775872,3261776383,PL
3261776384,3261777407,RU
3261777408,3261777663,IR
-3261777664,3261777919,KZ
3261777920,3261778431,PL
3261778432,3261778943,RU
3261778944,3261779455,RO
@@ -89591,29 +93706,41 @@
3262034048,3262034119,AX
3262034120,3262034123,FI
3262034124,3262034127,AX
-3262034128,3262034175,FI
-3262034176,3262034191,AX
-3262034192,3262034431,FI
+3262034128,3262034143,FI
+3262034144,3262034191,AX
+3262034192,3262034239,FI
+3262034240,3262034287,AX
+3262034288,3262034431,FI
3262034432,3262034447,AX
3262034448,3262034455,FI
3262034456,3262034463,AX
3262034464,3262034527,FI
-3262034528,3262034559,AX
-3262034560,3262034687,FI
-3262034688,3262034719,AX
-3262034720,3262034783,FI
+3262034528,3262034567,AX
+3262034568,3262034575,FI
+3262034576,3262034591,AX
+3262034592,3262034687,FI
+3262034688,3262034723,AX
+3262034724,3262034783,FI
3262034784,3262034791,AX
-3262034792,3262034839,FI
+3262034792,3262034799,FI
+3262034800,3262034807,AX
+3262034808,3262034815,FI
+3262034816,3262034831,AX
+3262034832,3262034839,FI
3262034840,3262034847,AX
3262034848,3262034943,FI
3262034944,3262035455,AX
3262035456,3262035487,FI
3262035488,3262035551,AX
-3262035552,3262036143,FI
-3262036144,3262036151,AX
+3262035552,3262035711,FI
+3262035712,3262035967,AX
+3262035968,3262036127,FI
+3262036128,3262036139,AX
+3262036140,3262036141,FI
+3262036142,3262036151,AX
3262036152,3262036287,FI
-3262036288,3262036303,AX
-3262036304,3262036311,FI
+3262036288,3262036307,AX
+3262036308,3262036311,FI
3262036312,3262036335,AX
3262036336,3262036367,FI
3262036368,3262036383,AX
@@ -89622,8 +93749,12 @@
3262036432,3262036463,FI
3262036464,3262036479,AX
3262036480,3262036607,FI
-3262036608,3262036615,AX
-3262036616,3262036719,FI
+3262036608,3262036623,AX
+3262036624,3262036655,FI
+3262036656,3262036659,AX
+3262036660,3262036663,FI
+3262036664,3262036671,AX
+3262036672,3262036719,FI
3262036720,3262038015,AX
3262038016,3262038271,FR
3262038272,3262038527,RU
@@ -89687,24 +93818,32 @@
3262120448,3262120703,FI
3262120704,3262121599,AX
3262121600,3262121663,FI
-3262121664,3262121727,AX
-3262121728,3262121983,FI
-3262121984,3262122007,AX
+3262121664,3262122007,AX
3262122008,3262122015,FI
-3262122016,3262122039,AX
-3262122040,3262122143,FI
+3262122016,3262122047,AX
+3262122048,3262122143,FI
3262122144,3262122159,AX
-3262122160,3262122239,FI
+3262122160,3262122167,FI
+3262122168,3262122183,AX
+3262122184,3262122199,FI
+3262122200,3262122207,AX
+3262122208,3262122239,FI
3262122240,3262122367,AX
3262122368,3262122431,FI
-3262122432,3262122455,AX
-3262122456,3262122463,FI
-3262122464,3262122591,AX
-3262122592,3262122631,FI
-3262122632,3262122639,AX
-3262122640,3262122751,FI
-3262122752,3262122815,AX
-3262122816,3262124031,FI
+3262122432,3262122623,AX
+3262122624,3262122631,FI
+3262122632,3262122655,AX
+3262122656,3262122751,FI
+3262122752,3262123007,AX
+3262123008,3262123263,FI
+3262123264,3262123295,AX
+3262123296,3262123311,FI
+3262123312,3262123327,AX
+3262123328,3262123391,FI
+3262123392,3262123519,AX
+3262123520,3262123527,FI
+3262123528,3262123775,AX
+3262123776,3262124031,FI
3262124032,3262128127,DE
3262128128,3262136319,GB
3262136320,3262137599,EU
@@ -89765,7 +93904,7 @@
3262283776,3262284799,RU
3262284800,3262286847,UA
3262286848,3262287871,SE
-3262287872,3262289919,PL
+3262288896,3262289919,PL
3262289920,3262316543,SE
3262316544,3262348799,DE
3262348800,3262349055,NL
@@ -89787,6 +93926,10 @@
3262423040,3262423551,GB
3262423552,3262424063,UA
3262424064,3262424575,IT
+3262424576,3262424831,PL
+3262424832,3262425087,GB
+3262425088,3262425343,GR
+3262425344,3262425599,RU
3262425600,3262426111,UA
3262426112,3262426623,DE
3262426624,3262427135,GB
@@ -89831,7 +93974,6 @@
3262460416,3262460543,UA
3262460544,3262460671,RU
3262460672,3262460927,AE
-3262460928,3262461055,HU
3262461056,3262461183,DK
3262461184,3262461311,SN
3262461312,3262461439,NO
@@ -90587,7 +94729,7 @@
3262476656,3262476667,US
3262476668,3262476671,GB
3262476672,3262476675,SE
-3262476676,3262476679,AT
+3262476676,3262476679,DE
3262476680,3262476683,NL
3262476684,3262476687,IT
3262476688,3262476691,DE
@@ -91670,7 +95812,7 @@
3262479279,3262479279,ES
3262479280,3262479280,DE
3262479281,3262479281,FR
-3262479282,3262479282,AD
+3262479282,3262479282,DE
3262479283,3262479283,IT
3262479284,3262479284,NO
3262479285,3262479289,DE
@@ -91769,8 +95911,7 @@
3262479420,3262479420,ES
3262479421,3262479421,DE
3262479422,3262479422,SE
-3262479423,3262479423,AT
-3262479424,3262479426,DE
+3262479423,3262479426,DE
3262479427,3262479427,IT
3262479428,3262479429,FR
3262479430,3262479430,GB
@@ -92423,7 +96564,6 @@
3262510080,3262511103,FR
3262511104,3262511615,GB
3262511616,3262512127,DE
-3262512128,3262512639,GB
3262512640,3262513151,DE
3262513152,3262578687,AT
3262578688,3262611455,FR
@@ -92570,6 +96710,7 @@
3263072256,3263074303,LB
3263074304,3263074815,CH
3263074816,3263075327,RO
+3263075328,3263075839,IT
3263075840,3263076351,SE
3263076352,3263076863,RO
3263076864,3263077375,IT
@@ -92617,6 +96758,7 @@
3263096064,3263096319,PL
3263096320,3263096575,TR
3263096576,3263096831,SA
+3263096832,3263097087,PL
3263097088,3263097343,FR
3263097344,3263097599,DK
3263097600,3263097855,NL
@@ -92654,12 +96796,20 @@
3263459584,3263459839,FR
3263459840,3263461631,SE
3263461632,3263461887,AE
-3263461888,3263477759,SE
+3263461888,3263469567,SE
+3263469568,3263470591,SG
+3263470592,3263472127,SE
+3263472128,3263472383,SG
+3263472384,3263475711,SE
+3263475712,3263476735,JP
+3263476736,3263477759,SE
3263477760,3263478015,JP
3263478016,3263478271,AU
3263478272,3263478527,SE
3263478528,3263478783,ES
-3263478784,3263496191,SE
+3263478784,3263480831,SE
+3263480832,3263481855,JP
+3263481856,3263496191,SE
3263496192,3263497983,EU
3263497984,3263498239,GB
3263498240,3263498751,EU
@@ -92832,9 +96982,7 @@
3264092288,3264092295,AX
3264092296,3264099839,FI
3264099840,3264100095,GB
-3264100096,3264118595,FI
-3264118596,3264118599,AX
-3264118600,3264124927,FI
+3264100096,3264124927,FI
3264124928,3264125183,DE
3264125184,3264125439,NL
3264125440,3264125695,FI
@@ -92892,6 +97040,7 @@
3264320000,3264320255,DE
3264320256,3264321023,GB
3264321024,3264321535,DE
+3264321536,3264321791,GB
3264321792,3264322047,RS
3264322048,3264322303,FR
3264322304,3264322559,RO
@@ -92929,7 +97078,9 @@
3264340992,3264341503,PL
3264341504,3264341759,DE
3264341760,3264342015,IT
-3264342016,3264343295,DE
+3264342016,3264342783,DE
+3264342784,3264343039,FR
+3264343040,3264343295,DE
3264343296,3264343551,GB
3264343552,3264343807,RO
3264343808,3264344063,DE
@@ -92937,7 +97088,9 @@
3264345088,3264346111,NL
3264346112,3264347135,SE
3264347136,3264348159,DE
-3264348160,3264375039,FR
+3264348160,3264372223,FR
+3264372224,3264372735,GB
+3264372736,3264375039,FR
3264375040,3264376063,SE
3264376064,3264376319,HR
3264376320,3264376575,UA
@@ -92952,7 +97105,7 @@
3264378880,3264379135,PL
3264379136,3264379391,BE
3264379392,3264379647,RU
-3264379648,3264380159,DE
+3264379904,3264380159,DE
3264380160,3264380415,RO
3264380416,3264380671,CH
3264380672,3264380927,NL
@@ -93031,20 +97184,34 @@
3264610304,3264612351,GB
3264612352,3264612599,FR
3264612600,3264612607,GB
-3264612608,3264613183,FR
-3264613184,3264613375,GB
+3264612608,3264613199,FR
+3264613200,3264613247,GB
+3264613248,3264613311,FR
+3264613312,3264613375,GB
3264613376,3264613887,NL
3264613888,3264613895,GB
-3264613896,3264613903,NL
-3264613904,3264614399,GB
+3264613896,3264613919,NL
+3264613920,3264614399,GB
3264614400,3264614655,NL
-3264614656,3264615423,GB
-3264615424,3264615679,CH
-3264615680,3264617215,GB
-3264617216,3264617471,DE
+3264614656,3264614911,SE
+3264614912,3264615423,GB
+3264615424,3264615735,CH
+3264615736,3264615743,GB
+3264615744,3264615775,CH
+3264615776,3264616447,GB
+3264616448,3264616463,DE
+3264616464,3264616575,GB
+3264616576,3264616703,DE
+3264616704,3264616959,GB
+3264616960,3264617471,DE
3264617472,3264618239,GB
3264618240,3264618495,US
-3264618496,3264622847,GB
+3264618496,3264618751,PL
+3264618752,3264619007,GB
+3264619008,3264619263,BE
+3264619264,3264620543,GB
+3264620544,3264620575,FR
+3264620576,3264622847,GB
3264622848,3264623103,FR
3264623104,3264626687,GB
3264626688,3264627711,EE
@@ -93065,6 +97232,7 @@
3264652288,3264652799,RU
3264652800,3264653311,PL
3264653312,3264653823,EU
+3264653824,3264654335,PL
3264654336,3264654847,DE
3264654848,3264655359,UA
3264655360,3264655871,GB
@@ -93185,7 +97353,7 @@
3264846592,3264846719,US
3264846720,3264846847,RU
3264846848,3264846911,DK
-3264846976,3264847103,GB
+3264847040,3264847103,GB
3264847104,3264847135,FR
3264847136,3264847167,ES
3264847168,3264847199,IE
@@ -93204,7 +97372,7 @@
3264850688,3264850943,LV
3264850944,3264851967,IT
3264851968,3264854015,CH
-3264854016,3264854527,DE
+3264854016,3264854783,DE
3264854784,3264855039,IT
3264855040,3264855551,CH
3264855552,3264856063,DE
@@ -93342,7 +97510,7 @@
3265603328,3265603583,MD
3265603584,3265603839,DE
3265603840,3265604095,PL
-3265604096,3265604351,SA
+3265604096,3265604351,NL
3265604352,3265604607,FR
3265604608,3265604863,CH
3265604864,3265605119,RU
@@ -93350,7 +97518,9 @@
3265605376,3265605631,CZ
3265605632,3265605887,PL
3265605888,3265606143,FR
+3265606400,3265606655,NL
3265606656,3265606911,AT
+3265606912,3265607167,RU
3265607168,3265607423,PL
3265607424,3265607935,DK
3265607936,3265608191,CZ
@@ -93530,7 +97700,11 @@
3266799104,3266799615,NL
3266799616,3266800895,GB
3266800896,3266801151,NL
-3266801152,3266804223,GB
+3266801152,3266801487,GB
+3266801488,3266801503,NL
+3266801504,3266803815,GB
+3266803816,3266803823,NL
+3266803824,3266804223,GB
3266804224,3266804479,NL
3266804480,3266805759,GB
3266805760,3266813951,AT
@@ -93895,9 +98069,7 @@
3267662952,3267662959,GB
3267662960,3267662991,IE
3267662992,3267663007,EU
-3267663008,3267663071,IE
-3267663072,3267663087,EU
-3267663088,3267663103,IE
+3267663008,3267663103,IE
3267663104,3267663327,IT
3267663328,3267663359,EU
3267663360,3267663871,GB
@@ -94395,8 +98567,10 @@
3268739072,3268739327,DE
3268739328,3268739583,PL
3268739584,3268739839,DE
+3268739840,3268740095,GB
3268740096,3268740351,IL
3268740352,3268740607,DE
+3268740608,3268740863,RO
3268740864,3268741119,CH
3268741120,3268741375,FR
3268741376,3268741887,LV
@@ -94530,7 +98704,7 @@
3269284864,3269285055,FR
3269285056,3269285087,EU
3269285088,3269285135,DE
-3269285136,3269285151,EU
+3269285136,3269285151,GB
3269285152,3269285215,DE
3269285216,3269285311,EU
3269285312,3269285327,DE
@@ -94851,6 +99025,7 @@
3270653440,3270653695,NL
3270653696,3270653951,GB
3270653952,3270654207,ES
+3270654208,3270654463,RO
3270654464,3270654719,BE
3270654720,3270655231,UA
3270655232,3270655487,IT
@@ -94931,6 +99106,7 @@
3270980608,3270980863,MD
3270980864,3270981631,RU
3270981632,3270981887,IT
+3270981888,3270982143,AT
3270982144,3270982399,RU
3270982400,3270982655,TR
3270982656,3270982911,UA
@@ -95121,10 +99297,14 @@
3271426304,3271491583,FR
3271491584,3271495679,DK
3271495680,3271495807,SE
-3271495808,3271501663,DK
+3271495808,3271501567,DK
+3271501568,3271501575,SE
+3271501576,3271501663,DK
3271501664,3271501679,DE
3271501680,3271501695,SE
-3271501696,3271557119,DK
+3271501696,3271501783,DK
+3271501784,3271501791,SE
+3271501792,3271557119,DK
3271557120,3271589887,BE
3271589888,3271688191,NO
3271688192,3271691775,EU
@@ -95192,6 +99372,7 @@
3271805952,3271806975,UA
3271806976,3271807999,EU
3271808000,3271810047,DE
+3271810048,3271811071,PL
3271811072,3271812095,UA
3271812096,3271813119,ES
3271813120,3271814143,PL
@@ -95220,8 +99401,8 @@
3271915008,3271915519,SE
3271915520,3271916031,NL
3271916032,3271916543,GB
-3271916544,3271917055,UA
-3271917568,3271925759,RU
+3271916544,3271917311,UA
+3271917312,3271925759,RU
3271925760,3271926015,DE
3271926016,3271926271,MD
3271926272,3271926527,RU
@@ -95263,9 +99444,15 @@
3272040448,3272048639,FR
3272048640,3272056831,NL
3272056832,3272065023,RU
-3272065024,3272070143,GB
+3272065024,3272065631,GB
+3272065632,3272065663,NL
+3272065664,3272069503,GB
+3272069504,3272069567,NL
+3272069568,3272070143,GB
3272070144,3272070175,NL
-3272070176,3272081407,GB
+3272070176,3272070239,GB
+3272070240,3272070255,NL
+3272070256,3272081407,GB
3272081408,3272081919,PT
3272081920,3272082687,CV
3272082688,3272083455,PT
@@ -95328,7 +99515,7 @@
3272111872,3272112383,RO
3272112384,3272113151,DE
3272113152,3272113407,FR
-3272113664,3272113919,GB
+3272113408,3272113919,GB
3272113920,3272114175,AT
3272114176,3272122367,PL
3272122368,3272131071,GB
@@ -95391,29 +99578,10 @@
3272214352,3272214407,FR
3272214408,3272214431,EU
3272214432,3272214463,SE
-3272214464,3272214655,EU
-3272214656,3272214671,NL
-3272214672,3272214679,GB
-3272214680,3272214687,FR
-3272214688,3272214815,EU
-3272214816,3272214823,CH
-3272214824,3272214831,EU
-3272214832,3272214847,BE
-3272214848,3272214879,NL
-3272214880,3272214883,EU
-3272214884,3272214887,NL
-3272214888,3272214895,EU
-3272214896,3272214903,ES
-3272214904,3272214911,SE
-3272214912,3272214943,EU
-3272214944,3272214951,DE
-3272214952,3272214959,BE
-3272214960,3272215007,NL
-3272215008,3272215015,FR
-3272215016,3272215023,IT
-3272215024,3272215039,EU
+3272214464,3272214527,EU
+3272214528,3272215039,FR
3272215040,3272215295,ES
-3272215296,3272215551,IR
+3272215296,3272215551,NL
3272215552,3272215807,CH
3272215808,3272215823,NL
3272215824,3272215871,EU
@@ -95482,8 +99650,8 @@
3272219904,3272220159,DE
3272220160,3272220415,FR
3272220416,3272221183,GB
-3272221184,3272221311,NL
-3272221312,3272221439,EU
+3272221184,3272221375,NL
+3272221376,3272221439,EU
3272221440,3272221447,SE
3272221448,3272221455,NO
3272221456,3272221463,SE
@@ -95509,7 +99677,9 @@
3272224256,3272224383,GI
3272224384,3272224511,EU
3272224512,3272225279,GB
-3272225280,3272225791,IT
+3272225280,3272225535,IT
+3272225536,3272225591,GB
+3272225592,3272225791,IT
3272225792,3272226047,EU
3272226048,3272226815,FR
3272226816,3272227071,GB
@@ -95532,11 +99702,65 @@
3272228736,3272228799,NL
3272228800,3272228863,CH
3272228864,3272237055,LU
-3272237056,3272240575,GB
+3272237056,3272238919,GB
+3272238920,3272238975,IM
+3272238976,3272239039,GB
+3272239040,3272239103,IM
+3272239104,3272239687,GB
+3272239688,3272239695,IM
+3272239696,3272239703,GB
+3272239704,3272239711,IM
+3272239712,3272239775,GB
+3272239776,3272239799,IM
+3272239800,3272240127,GB
+3272240128,3272240367,IM
+3272240368,3272240575,GB
3272240576,3272240639,GH
-3272240640,3272243967,GB
+3272240640,3272241215,GB
+3272241216,3272241247,IM
+3272241248,3272241279,GB
+3272241280,3272241295,IM
+3272241296,3272241303,GB
+3272241304,3272241311,IM
+3272241312,3272241335,GB
+3272241336,3272241407,IM
+3272241408,3272241518,GB
+3272241519,3272241599,IM
+3272241600,3272241663,GB
+3272241664,3272241855,IM
+3272241856,3272242215,GB
+3272242216,3272242223,IM
+3272242224,3272242239,GB
+3272242240,3272242591,IM
+3272242592,3272242607,GB
+3272242608,3272242623,IM
+3272242624,3272242655,GB
+3272242656,3272242719,IM
+3272242720,3272242735,GB
+3272242736,3272242751,IM
+3272242752,3272242783,GB
+3272242784,3272242943,IM
+3272242944,3272243207,GB
+3272243208,3272243215,IM
+3272243216,3272243231,GB
+3272243232,3272243263,IM
+3272243264,3272243327,GB
+3272243328,3272243455,IM
+3272243456,3272243967,GB
3272243968,3272244007,IM
-3272244008,3272245247,GB
+3272244008,3272244015,GB
+3272244016,3272244031,IM
+3272244032,3272244039,GB
+3272244040,3272244047,IM
+3272244048,3272244071,GB
+3272244072,3272244079,IM
+3272244080,3272244111,GB
+3272244112,3272244127,IM
+3272244128,3272244151,GB
+3272244152,3272244159,IM
+3272244160,3272244175,GB
+3272244176,3272244215,IM
+3272244216,3272245247,GB
3272245248,3272261631,FI
3272261632,3272261887,MT
3272261888,3272262143,BG
@@ -95583,8 +99807,8 @@
3272376320,3272376447,SK
3272376448,3272376479,SR
3272376480,3272376495,SK
-3272376496,3272376519,SR
-3272376520,3272376535,SK
+3272376496,3272376527,SR
+3272376528,3272376535,SK
3272376536,3272376543,SR
3272376544,3272376607,SK
3272376608,3272376639,SR
@@ -95592,11 +99816,13 @@
3272376736,3272376751,SR
3272376752,3272376767,SK
3272376768,3272376831,SR
-3272376832,3272384511,SK
+3272376832,3272378183,SK
+3272378184,3272378201,SR
+3272378202,3272384511,SK
3272384512,3272392703,LT
3272392704,3272400895,AT
-3272400896,3272400903,EU
-3272400904,3272400927,GB
+3272400896,3272400911,EU
+3272400912,3272400927,GB
3272400928,3272401023,EU
3272401024,3272401087,GB
3272401088,3272401279,EU
@@ -95736,7 +99962,8 @@
3272646785,3272646911,GB
3272646912,3272647423,DE
3272647424,3272649215,GB
-3272649216,3272649727,IE
+3272649216,3272649471,IE
+3272649472,3272649727,SA
3272649728,3272650623,GB
3272650624,3272650639,FR
3272650640,3272650655,GB
@@ -95830,7 +100057,6 @@
3272897536,3272898047,FI
3272898048,3272898559,UA
3272898560,3272899071,DE
-3272899072,3272899583,GB
3272899584,3272900095,UA
3272900096,3272900607,LV
3272900608,3272900863,RU
@@ -95884,14 +100110,12 @@
3272923648,3272924159,PL
3272924160,3272924671,DE
3272924672,3272925183,GB
-3272925184,3272933375,DE
-3272933376,3272933759,GB
-3272933760,3272933775,DK
-3272933776,3272940287,GB
+3272925184,3272931135,DE
+3272931136,3272931151,GB
+3272931152,3272933375,DE
+3272933376,3272940287,GB
3272940288,3272940543,DE
-3272940544,3272964351,GB
-3272964352,3272964607,DE
-3272964608,3272998911,GB
+3272940544,3272998911,GB
3272998912,3273007103,PT
3273007104,3273015295,CZ
3273015296,3273023487,SE
@@ -95994,7 +100218,7 @@
3273264640,3273265151,AT
3273265152,3273266175,UA
3273266176,3273266687,LV
-3273266688,3273267711,PL
+3273266688,3273267455,PL
3273267712,3273268223,GB
3273268224,3273268735,SE
3273268736,3273269247,RU
@@ -96024,7 +100248,8 @@
3273327424,3273327511,GB
3273327512,3273327519,EU
3273327520,3273327551,IE
-3273327552,3273328511,EU
+3273327552,3273327583,GB
+3273327584,3273328511,EU
3273328512,3273328639,DE
3273328640,3273329199,GB
3273329200,3273329215,DE
@@ -96215,8 +100440,8 @@
3273387552,3273387583,DE
3273387584,3273388159,EU
3273388160,3273388223,DE
-3273388224,3273388799,EU
-3273388800,3273388807,DE
+3273388224,3273388543,EU
+3273388544,3273388807,DE
3273388808,3273388815,EU
3273388816,3273388863,DE
3273388864,3273388871,EU
@@ -96263,14 +100488,13 @@
3273437184,3273437695,RO
3273437696,3273438207,PL
3273438208,3273438719,IL
-3273438720,3273439231,PL
3273439232,3273439743,RO
3273439744,3273440255,DE
3273440256,3273440767,RO
3273440768,3273441279,AT
3273441280,3273443327,GB
-3273443328,3273443839,FR
-3273443840,3273449471,GB
+3273443328,3273444095,FR
+3273444096,3273449471,GB
3273449472,3273457663,CH
3273457664,3273523199,HR
3273523200,3273588735,DE
@@ -96362,7 +100586,6 @@
3273878528,3273879039,DE
3273879040,3273879551,BE
3273879552,3273880063,GB
-3273880064,3273880575,LV
3273880576,3273881087,RU
3273881088,3273881343,RO
3273881344,3273881599,CH
@@ -96419,6 +100642,8 @@
3274172416,3274172927,UA
3274172928,3274173439,DE
3274173440,3274173951,GR
+3274173952,3274174207,GB
+3274174208,3274174463,CZ
3274174464,3274175487,UA
3274175488,3274175999,BE
3274176000,3274176511,DE
@@ -96498,7 +100723,6 @@
3274398208,3274399231,RU
3274399232,3274399743,SC
3274399744,3274407935,LU
-3274407936,3274408191,ES
3274408192,3274408447,IT
3274408448,3274408703,NL
3274408704,3274408959,SI
@@ -96525,6 +100749,7 @@
3274414336,3274414591,CH
3274414592,3274414847,NL
3274414848,3274415103,IE
+3274415104,3274415359,PL
3274415360,3274415615,GB
3274415616,3274415871,NL
3274415872,3274416127,SI
@@ -96743,7 +100968,6 @@
3274692864,3274693119,AT
3274693120,3274693375,LT
3274693376,3274693631,UA
-3274693632,3274693887,NL
3274693888,3274694143,IT
3274694144,3274694399,DK
3274694400,3274694655,GB
@@ -96775,6 +100999,7 @@
3274701056,3274701311,DE
3274701312,3274701567,TJ
3274701568,3274701823,IT
+3274701824,3274702079,IL
3274702080,3274702335,UA
3274702336,3274702591,SE
3274702592,3274702847,KZ
@@ -96988,6 +101213,7 @@
3274964992,3275030527,DE
3275030528,3275096063,ES
3275096064,3275104767,RU
+3275104768,3275105279,DE
3275105280,3275105791,GB
3275105792,3275106303,NL
3275106304,3275106815,RU
@@ -96997,6 +101223,7 @@
3275108352,3275108863,FR
3275108864,3275109375,PL
3275109376,3275109887,UA
+3275109888,3275110399,RO
3275110400,3275110911,NL
3275110912,3275111423,GB
3275111424,3275111935,IT
@@ -97039,13 +101266,9 @@
3275423752,3275423775,EU
3275423776,3275423807,GB
3275423808,3275423871,EU
-3275423872,3275425031,GB
-3275425032,3275425791,EU
-3275425792,3275427631,GB
-3275427632,3275427647,EU
-3275427648,3275427711,GB
-3275427712,3275427839,EU
-3275427840,3275428399,GB
+3275423872,3275425159,GB
+3275425160,3275425791,EU
+3275425792,3275428399,GB
3275428400,3275428415,EU
3275428416,3275428447,GB
3275428448,3275429887,EU
@@ -97053,24 +101276,22 @@
3275430144,3275430271,EU
3275430272,3275430399,GB
3275430400,3275430591,EU
-3275430592,3275430623,GB
-3275430624,3275431935,EU
+3275430592,3275430631,GB
+3275430632,3275430655,EU
+3275430656,3275430911,GB
+3275430912,3275431935,EU
3275431936,3275432831,GB
3275432832,3275433983,EU
-3275433984,3275437567,GB
-3275437568,3275438079,EU
-3275438080,3275438639,GB
-3275438640,3275438719,EU
-3275438720,3275439103,GB
-3275439104,3275440127,EU
+3275433984,3275439423,GB
+3275439424,3275440127,EU
3275440128,3275440639,GB
3275440640,3275442175,EU
3275442176,3275442719,GB
3275442720,3275444223,EU
3275444224,3275444735,GB
3275444736,3275446271,EU
-3275446272,3275447103,GB
-3275447104,3275448319,EU
+3275446272,3275447151,GB
+3275447152,3275448319,EU
3275448320,3275449519,GB
3275449520,3275449527,FR
3275449528,3275450879,GB
@@ -97083,7 +101304,8 @@
3275457024,3275457791,FK
3275457792,3275458559,GB
3275458560,3275460095,IE
-3275460096,3275460607,EU
+3275460096,3275460223,GB
+3275460224,3275460607,EU
3275460608,3275460863,HK
3275460864,3275463523,GB
3275463524,3275463527,EU
@@ -97097,8 +101319,18 @@
3275468768,3275468799,IE
3275468800,3275469071,GB
3275469072,3275469087,IE
-3275469088,3275473151,GB
-3275473152,3275489279,EU
+3275469088,3275473519,GB
+3275473520,3275473535,EU
+3275473536,3275473599,GB
+3275473600,3275474943,EU
+3275474944,3275474975,GB
+3275474976,3275475071,EU
+3275475072,3275475199,GB
+3275475200,3275476991,EU
+3275476992,3275477055,GB
+3275477056,3275477503,EU
+3275477504,3275477567,GB
+3275477568,3275489279,EU
3275489280,3275497471,GB
3275497472,3275505663,DE
3275505664,3275506175,PL
@@ -97141,7 +101373,7 @@
3275512832,3275512895,SE
3275512896,3275512959,AT
3275512960,3275513023,PL
-3275513024,3275513151,UA
+3275513024,3275513087,UA
3275513152,3275513215,ES
3275513216,3275513279,CH
3275513280,3275513343,DK
@@ -97157,7 +101389,6 @@
3275530752,3275531263,AT
3275531264,3275531775,GB
3275531776,3275532287,IE
-3275532288,3275532799,CH
3275532800,3275533823,GB
3275533824,3275534335,UA
3275534336,3275534847,IL
@@ -97174,8 +101405,8 @@
3275542528,3275543551,DE
3275543552,3275544575,NL
3275544576,3275545599,PL
+3275545600,3275546623,RU
3275546624,3275547647,UA
-3275547648,3275548671,RU
3275548672,3275549695,IL
3275549696,3275550719,SY
3275550720,3275551743,PL
@@ -97449,6 +101680,8 @@
3275902720,3275902975,UA
3275902976,3275903231,FR
3275903232,3275903487,GB
+3275903488,3275903743,FR
+3275903744,3275903999,DE
3275904000,3275904255,RU
3275904256,3275904511,CH
3275904512,3275904767,PL
@@ -97473,6 +101706,7 @@
3275909888,3275910143,SI
3275910144,3275910399,RU
3275910400,3275910655,DK
+3275910656,3275910911,UA
3275910912,3275911167,DE
3275911168,3275911423,FR
3275911424,3275911679,RO
@@ -97557,11 +101791,15 @@
3276014472,3276014495,GB
3276014496,3276014775,FR
3276014776,3276014783,GB
-3276014784,3276014887,FR
+3276014784,3276014815,FR
+3276014816,3276014823,GB
+3276014824,3276014887,FR
3276014888,3276014895,IE
3276014896,3276014943,FR
3276014944,3276014951,GB
-3276014952,3276015103,FR
+3276014952,3276015031,FR
+3276015032,3276015039,GB
+3276015040,3276015103,FR
3276015104,3276015119,GB
3276015120,3276015199,FR
3276015200,3276015231,GB
@@ -97623,8 +101861,8 @@
3276018240,3276018271,GB
3276018272,3276018375,FR
3276018376,3276018383,GB
-3276018384,3276018431,FR
-3276018432,3276018447,GB
+3276018384,3276018423,FR
+3276018424,3276018447,GB
3276018448,3276018495,FR
3276018496,3276018527,GB
3276018528,3276018543,FR
@@ -97637,9 +101875,7 @@
3276019024,3276019071,GB
3276019072,3276019135,FR
3276019136,3276019151,GB
-3276019152,3276019463,FR
-3276019464,3276019471,GB
-3276019472,3276019479,FR
+3276019152,3276019479,FR
3276019480,3276019487,GB
3276019488,3276019503,FR
3276019504,3276019511,GB
@@ -97679,11 +101915,17 @@
3276020880,3276020887,GB
3276020888,3276020943,FR
3276020944,3276020991,GB
-3276020992,3276021591,FR
+3276020992,3276021103,FR
+3276021104,3276021111,GB
+3276021112,3276021591,FR
3276021592,3276021599,GB
3276021600,3276021815,FR
3276021816,3276021823,GB
-3276021824,3276022127,FR
+3276021824,3276021847,FR
+3276021848,3276021855,GB
+3276021856,3276022031,FR
+3276022032,3276022039,GB
+3276022040,3276022127,FR
3276022128,3276022143,GB
3276022144,3276022215,FR
3276022216,3276022223,GB
@@ -97741,9 +101983,7 @@
3276025248,3276025279,GB
3276025280,3276025295,FR
3276025296,3276025327,GB
-3276025328,3276026143,FR
-3276026144,3276026159,GB
-3276026160,3276026167,FR
+3276025328,3276026167,FR
3276026168,3276026175,GB
3276026176,3276026191,FR
3276026192,3276026199,GB
@@ -97869,7 +102109,9 @@
3276032056,3276032063,GB
3276032064,3276032103,FR
3276032104,3276032111,GB
-3276032112,3276032223,FR
+3276032112,3276032191,FR
+3276032192,3276032207,GB
+3276032208,3276032223,FR
3276032224,3276032255,GB
3276032256,3276032263,FR
3276032264,3276032303,GB
@@ -97913,7 +102155,9 @@
3276036384,3276036415,GB
3276036416,3276036591,FR
3276036592,3276036607,GB
-3276036608,3276037127,FR
+3276036608,3276036639,FR
+3276036640,3276036863,GB
+3276036864,3276037127,FR
3276037128,3276037135,GB
3276037136,3276037199,FR
3276037200,3276037215,GB
@@ -97955,9 +102199,7 @@
3276040064,3276040095,GB
3276040096,3276040159,FR
3276040160,3276040175,GB
-3276040176,3276040191,FR
-3276040192,3276040215,GB
-3276040216,3276040231,FR
+3276040176,3276040231,FR
3276040232,3276040239,GB
3276040240,3276040319,FR
3276040320,3276040327,GB
@@ -97975,8 +102217,8 @@
3276040640,3276040671,GB
3276040672,3276040879,FR
3276040880,3276040895,GB
-3276040896,3276040991,FR
-3276040992,3276041007,GB
+3276040896,3276040975,FR
+3276040976,3276041007,GB
3276041008,3276041071,FR
3276041072,3276041087,GB
3276041088,3276041199,FR
@@ -98037,9 +102279,7 @@
3276044992,3276044999,GB
3276045000,3276045023,FR
3276045024,3276045039,GB
-3276045040,3276045063,FR
-3276045064,3276045071,GB
-3276045072,3276045111,FR
+3276045040,3276045111,FR
3276045112,3276045151,GB
3276045152,3276045191,FR
3276045192,3276045199,GB
@@ -98094,7 +102334,11 @@
3276073472,3276073983,SK
3276073984,3276074495,DE
3276074496,3276075007,GB
-3276075008,3276077055,DE
+3276075008,3276075519,RU
+3276075520,3276076031,DE
+3276076032,3276076287,NL
+3276076288,3276076543,RU
+3276076544,3276077055,DE
3276077056,3276077567,UA
3276077568,3276078079,FR
3276078080,3276078591,RU
@@ -98133,7 +102377,6 @@
3276127232,3276128255,UZ
3276128256,3276129279,AT
3276129280,3276131327,UA
-3276131328,3276132351,DK
3276132352,3276133375,PL
3276133376,3276134399,GB
3276134400,3276135423,RU
@@ -98141,6 +102384,7 @@
3276136448,3276137471,NL
3276137472,3276138495,PL
3276138496,3276139519,NL
+3276139520,3276140543,RU
3276140544,3276141567,DE
3276141568,3276143615,UA
3276143616,3276144639,GB
@@ -98152,11 +102396,7 @@
3276185600,3276193791,NO
3276193792,3276201983,RU
3276201984,3276210175,AT
-3276210176,3276233791,DE
-3276233792,3276233799,RO
-3276233800,3276233807,DE
-3276233808,3276233823,RO
-3276233824,3276234303,DE
+3276210176,3276234303,DE
3276234304,3276234367,GB
3276234368,3276241759,DE
3276241760,3276241767,FR
@@ -98171,7 +102411,9 @@
3276250096,3276275711,DE
3276275712,3276283903,SK
3276283904,3276292095,GB
-3276292096,3276300287,BE
+3276292096,3276294655,BE
+3276294656,3276294663,LU
+3276294664,3276300287,BE
3276300288,3276304383,DE
3276304384,3276304639,BG
3276304640,3276305407,GB
@@ -98795,9 +103037,7 @@
3276361680,3276361687,DE
3276361688,3276361751,NL
3276361752,3276361767,DE
-3276361768,3276361999,NL
-3276362000,3276362007,DE
-3276362008,3276362047,NL
+3276361768,3276362047,NL
3276362048,3276362055,DE
3276362056,3276362071,NL
3276362072,3276362079,DE
@@ -100274,7 +104514,8 @@
3276474368,3276474623,EU
3276474624,3276474879,GB
3276474880,3276475015,EU
-3276475016,3276475039,IT
+3276475016,3276475023,IT
+3276475024,3276475039,FR
3276475040,3276475055,EU
3276475056,3276475071,IT
3276475072,3276475903,EU
@@ -100290,9 +104531,7 @@
3276477984,3276478319,EU
3276478320,3276478335,CH
3276478336,3276478463,EU
-3276478464,3276479127,FR
-3276479128,3276479135,EU
-3276479136,3276479167,FR
+3276478464,3276479167,FR
3276479168,3276479199,EU
3276479200,3276479215,FR
3276479216,3276479223,EU
@@ -100342,7 +104581,8 @@
3276489216,3276490751,EU
3276490752,3276491263,NL
3276491264,3276491327,CZ
-3276491328,3276491391,EU
+3276491328,3276491359,EU
+3276491360,3276491391,NO
3276491392,3276491775,CZ
3276491776,3276491847,GB
3276491848,3276491855,EU
@@ -100492,14 +104732,14 @@
3276518024,3276518095,EU
3276518096,3276518111,NL
3276518112,3276518127,EU
-3276518128,3276518175,NL
-3276518176,3276518183,EU
-3276518184,3276518191,NL
+3276518128,3276518191,NL
3276518192,3276518207,EU
3276518208,3276518271,NL
3276518272,3276518303,EU
3276518304,3276518335,NL
-3276518336,3276518399,EU
+3276518336,3276518351,EU
+3276518352,3276518367,NL
+3276518368,3276518399,EU
3276518400,3276518527,BE
3276518528,3276518591,EU
3276518592,3276518655,BE
@@ -100580,7 +104820,9 @@
3276528448,3276528503,BE
3276528504,3276528511,EU
3276528512,3276528519,BE
-3276528520,3276528559,EU
+3276528520,3276528527,EU
+3276528528,3276528543,BE
+3276528544,3276528559,EU
3276528560,3276528567,BE
3276528568,3276528575,EU
3276528576,3276528719,BE
@@ -100607,8 +104849,8 @@
3276529392,3276529407,TR
3276529408,3276529663,EU
3276529664,3276530447,NL
-3276530448,3276530463,EU
-3276530464,3276530495,NL
+3276530448,3276530455,EU
+3276530456,3276530495,NL
3276530496,3276530559,EU
3276530560,3276532735,NL
3276532736,3276532775,TR
@@ -100647,8 +104889,8 @@
3276534880,3276534887,EU
3276534888,3276534895,NL
3276534896,3276534911,EU
-3276534912,3276534927,NL
-3276534928,3276535015,EU
+3276534912,3276534919,NL
+3276534920,3276535015,EU
3276535016,3276535039,GB
3276535040,3276535063,RU
3276535064,3276535071,LV
@@ -100660,8 +104902,8 @@
3276535344,3276535351,EU
3276535352,3276535359,FI
3276535360,3276535375,EU
-3276535376,3276535423,FI
-3276535424,3276535551,EU
+3276535376,3276535455,FI
+3276535456,3276535551,EU
3276535552,3276535807,PK
3276535808,3276536063,FI
3276536064,3276536319,EU
@@ -100728,6 +104970,7 @@
3276697600,3276698111,UA
3276698112,3276699647,RU
3276699648,3276700159,NL
+3276700160,3276700671,CZ
3276700672,3276701183,RO
3276701184,3276701695,RU
3276701696,3276709887,SE
@@ -101112,8 +105355,11 @@
3276799872,3276799999,NL
3276800000,3276824575,GB
3276824576,3276832767,EE
+3276832768,3276834815,PL
+3276834816,3276835839,RU
+3276835840,3276836351,UA
+3276836352,3276836863,RO
3276836864,3276837887,RU
-3276837888,3276838911,EU
3276838912,3276840959,FR
3276840960,3276849151,SK
3276849152,3276857343,DE
@@ -101151,13 +105397,16 @@
3276869728,3276869855,IT
3276869856,3276869887,GB
3276869888,3276870143,NL
-3276870144,3276871423,IT
-3276871424,3276871679,GB
-3276871680,3276872479,DE
+3276870144,3276871679,IT
+3276871680,3276872255,DE
+3276872256,3276872319,CZ
+3276872320,3276872479,DE
3276872480,3276872511,GB
3276872512,3276872703,DE
3276872704,3276873727,GB
-3276873728,3276874559,ES
+3276873728,3276874367,ES
+3276874368,3276874495,GB
+3276874496,3276874559,ES
3276874560,3276874751,GB
3276874752,3276875007,NL
3276875008,3276875263,CH
@@ -101172,7 +105421,11 @@
3276877552,3276878079,GB
3276878080,3276878335,BG
3276878336,3276878399,GB
-3276878400,3276878847,FR
+3276878400,3276878431,FR
+3276878432,3276878463,GB
+3276878464,3276878559,FR
+3276878560,3276878591,GB
+3276878592,3276878847,FR
3276878848,3276879359,ES
3276879360,3276879423,TR
3276879424,3276879615,GB
@@ -101182,9 +105435,11 @@
3276881152,3276881279,GB
3276881280,3276881407,DE
3276881408,3276881919,FR
-3276881920,3276883967,IT
-3276883968,3276884487,PL
-3276884488,3276884735,GB
+3276881920,3276883327,IT
+3276883328,3276883391,GB
+3276883392,3276883967,IT
+3276883968,3276884495,PL
+3276884496,3276884735,GB
3276884736,3276884991,PL
3276884992,3276886015,GB
3276886016,3276886271,RO
@@ -101196,12 +105451,12 @@
3276887056,3276887071,GB
3276887072,3276888063,DE
3276888064,3276888575,GB
-3276888576,3276888831,IT
-3276888832,3276890111,GB
+3276888576,3276889087,IT
+3276889088,3276890111,GB
3276890112,3276890135,US
3276890136,3276890143,GB
-3276890144,3276890191,US
-3276890192,3276890367,GB
+3276890144,3276890207,US
+3276890208,3276890367,GB
3276890368,3276890623,US
3276890624,3276891135,IT
3276891136,3276891391,BE
@@ -101217,13 +105472,17 @@
3276896896,3276896927,BE
3276896928,3276897023,GB
3276897024,3276897663,BE
-3276897664,3276898047,GB
-3276898048,3276898303,CZ
-3276898304,3276898775,CH
+3276897664,3276897919,GB
+3276897920,3276898303,CZ
+3276898304,3276898399,CH
+3276898400,3276898407,GB
+3276898408,3276898655,CH
+3276898656,3276898671,GB
+3276898672,3276898775,CH
3276898776,3276898783,GB
-3276898784,3276899087,CH
-3276899088,3276899103,GB
-3276899104,3276900039,CH
+3276898784,3276899071,CH
+3276899072,3276899087,GB
+3276899088,3276900039,CH
3276900040,3276900047,GB
3276900048,3276900351,CH
3276900352,3276900607,GB
@@ -101235,22 +105494,23 @@
3276901624,3276901631,GB
3276901632,3276902151,CH
3276902152,3276902159,GB
-3276902160,3276902199,CH
-3276902200,3276902207,GB
-3276902208,3276902335,CH
+3276902160,3276902335,CH
3276902336,3276902399,GB
-3276902400,3276902407,SE
-3276902408,3276902415,GB
-3276902416,3276902583,SE
+3276902400,3276902559,SE
+3276902560,3276902575,GB
+3276902576,3276902583,SE
3276902584,3276902615,GB
3276902616,3276902639,SE
3276902640,3276902655,GB
3276902656,3276903319,SE
3276903320,3276903327,GB
3276903328,3276903359,NO
-3276903360,3276903423,GB
-3276903424,3276903935,SE
-3276903936,3276904191,GB
+3276903360,3276903935,SE
+3276903936,3276903999,GB
+3276904000,3276904079,SE
+3276904080,3276904095,GB
+3276904096,3276904127,SE
+3276904128,3276904191,GB
3276904192,3276904447,SE
3276904448,3276905311,GB
3276905312,3276905319,ES
@@ -101268,7 +105528,9 @@
3276906624,3276906751,GB
3276906752,3276906823,NL
3276906824,3276906831,CH
-3276906832,3276907551,NL
+3276906832,3276907339,NL
+3276907340,3276907343,GB
+3276907344,3276907551,NL
3276907552,3276907567,BE
3276907568,3276907643,NL
3276907644,3276907647,GB
@@ -101282,14 +105544,14 @@
3276908192,3276909055,NL
3276909056,3276909567,GB
3276909568,3276910591,NL
-3276910592,3276912319,IT
-3276912320,3276912383,GB
-3276912384,3276912615,IT
+3276910592,3276912615,IT
3276912616,3276912623,GB
3276912624,3276913183,IT
3276913184,3276913215,GB
3276913216,3276913359,IT
-3276913360,3276913375,GB
+3276913360,3276913360,GB
+3276913361,3276913374,IT
+3276913375,3276913375,GB
3276913376,3276913919,IT
3276913920,3276913983,US
3276913984,3276914079,IT
@@ -101299,7 +105561,8 @@
3276914160,3276914687,IT
3276914688,3276915567,ES
3276915568,3276915583,NL
-3276915584,3276916087,ES
+3276915584,3276915711,GB
+3276915712,3276916087,ES
3276916088,3276916095,GB
3276916096,3276916175,ES
3276916176,3276916183,GB
@@ -101362,6 +105625,7 @@
3277179392,3277179647,DE
3277179648,3277180159,BE
3277180160,3277180415,NL
+3277180416,3277180671,RU
3277180672,3277180927,FR
3277180928,3277181183,DE
3277181184,3277181439,PL
@@ -101390,6 +105654,7 @@
3277187072,3277187327,GB
3277187328,3277187583,UA
3277187584,3277188351,RU
+3277188352,3277188607,DE
3277188608,3277188863,RU
3277188864,3277189119,RO
3277189120,3277189375,DE
@@ -101476,7 +105741,6 @@
3277359616,3277360127,UA
3277360128,3277360639,BG
3277360640,3277361151,CZ
-3277361152,3277361663,UA
3277361664,3277362175,RU
3277362176,3277362687,ES
3277362688,3277363199,IE
@@ -101493,7 +105757,6 @@
3277368320,3277369343,RO
3277369344,3277369855,CY
3277369856,3277370367,RU
-3277370368,3277370879,SE
3277370880,3277371391,RO
3277371392,3277371903,RU
3277371904,3277372415,PL
@@ -101522,7 +105785,6 @@
3277386240,3277386751,UA
3277386752,3277387263,SA
3277387264,3277388287,RU
-3277388288,3277388799,SE
3277388800,3277389311,RU
3277389312,3277389823,AM
3277389824,3277394943,GB
@@ -101666,6 +105928,7 @@
3277822208,3277822463,ES
3277822464,3277822719,PL
3277822720,3277822975,RU
+3277822976,3277823231,ES
3277823232,3277823487,UA
3277823488,3277823743,SI
3277823744,3277823999,UA
@@ -101705,7 +105968,8 @@
3277835776,3277836287,UA
3277836288,3277836799,FI
3277836800,3277837311,UA
-3277837312,3277838847,RU
+3277837312,3277839103,RU
+3277839104,3277839359,CH
3277839360,3277839871,DE
3277839872,3277840383,UA
3277840384,3277840895,FR
@@ -101724,21 +105988,23 @@
3277856768,3277864959,DE
3277864960,3277873151,RU
3277873152,3277881343,NL
-3277881344,3277884175,IT
+3277881344,3277881375,A2
+3277881376,3277881407,IT
+3277881408,3277884175,A2
3277884176,3277884191,IR
-3277884192,3277885439,IT
+3277884192,3277885439,A2
3277885440,3277885695,IQ
3277885696,3277885727,LB
-3277885728,3277885951,IT
+3277885728,3277885951,A2
3277885952,3277886463,LB
3277886464,3277886719,IQ
3277886720,3277886975,IR
3277886976,3277887487,IQ
-3277887488,3277888255,IT
+3277887488,3277888255,A2
3277888256,3277888319,LB
-3277888320,3277889023,IT
+3277888320,3277889023,A2
3277889024,3277889279,IQ
-3277889280,3277889535,IT
+3277889280,3277889535,A2
3277889536,3277897727,RU
3277897728,3277905919,IT
3277905920,3277914111,BG
@@ -101761,9 +106027,7 @@
3278103296,3278110719,GB
3278110720,3278110751,SE
3278110752,3278110767,ES
-3278110768,3278111239,SE
-3278111240,3278111247,ES
-3278111248,3278115327,SE
+3278110768,3278115327,SE
3278115328,3278116607,ES
3278116608,3278116863,SE
3278116864,3278118399,ES
@@ -103350,8 +107614,7 @@
3278943625,3278943625,FR
3278943626,3278943628,DE
3278943629,3278943630,FR
-3278943631,3278943631,CH
-3278943632,3278943632,DE
+3278943631,3278943632,DE
3278943633,3278943633,GB
3278943634,3278943634,DE
3278943635,3278943635,IT
@@ -103577,7 +107840,7 @@
3278943912,3278943913,IT
3278943914,3278943914,DE
3278943915,3278943915,PL
-3278943916,3278943916,IT
+3278943916,3278943916,DE
3278943917,3278943917,FR
3278943918,3278943918,ES
3278943919,3278943920,FR
@@ -104299,6 +108562,7 @@
3279053312,3279053823,DE
3279053824,3279054335,NL
3279054336,3279054847,GB
+3279054848,3279055359,RU
3279055360,3279055871,SA
3279055872,3279056383,TR
3279056384,3279056895,GB
@@ -104316,7 +108580,8 @@
3279078656,3279078911,FR
3279078912,3279084543,ES
3279084544,3279085567,IT
-3279085568,3279093759,NL
+3279085568,3279093503,NL
+3279093504,3279093759,DE
3279093760,3279103103,FR
3279103104,3279103135,GB
3279103136,3279119295,FR
@@ -104692,7 +108957,7 @@
3280126976,3280127231,CH
3280127232,3280127487,PL
3280127488,3280127743,AT
-3280127744,3280127999,EU
+3280127744,3280127999,NL
3280128000,3280128255,SE
3280128256,3280128511,GB
3280128512,3280129023,HU
@@ -104726,11 +108991,13 @@
3280355328,3280371711,GR
3280371712,3280379903,CH
3280379904,3280388095,FR
-3280388096,3280392703,GB
+3280388096,3280390719,GB
+3280390720,3280390751,FR
+3280390752,3280392703,GB
3280392704,3280392831,FR
-3280392832,3280396255,GB
-3280396256,3280396263,FR
-3280396264,3280396287,GB
+3280392832,3280395263,GB
+3280395264,3280395519,FR
+3280395520,3280396287,GB
3280396288,3280404479,FI
3280404480,3280437247,IT
3280437248,3280453631,DE
@@ -104742,8 +109009,10 @@
3280458752,3280459775,RU
3280459776,3280460799,DK
3280460800,3280462847,DE
+3280462848,3280463871,PL
3280463872,3280466943,RU
3280466944,3280467967,UA
+3280467968,3280468991,ES
3280468992,3280470015,CY
3280470016,3280535551,PL
3280535552,3280568319,GB
@@ -104791,6 +109060,7 @@
3280589312,3280590335,DE
3280590336,3280590847,NL
3280590848,3280591359,DE
+3280591360,3280591871,UA
3280591872,3280592383,GB
3280592384,3280592895,TR
3280592896,3280593407,DE
@@ -105584,7 +109854,9 @@
3280963312,3280963327,GB
3280963328,3280963343,DE
3280963344,3280963359,GB
-3280963360,3280963495,DE
+3280963360,3280963423,DE
+3280963424,3280963487,GB
+3280963488,3280963495,DE
3280963496,3280963511,GB
3280963512,3280963515,DE
3280963516,3280963519,GB
@@ -105686,7 +109958,9 @@
3280976720,3280976831,GB
3280976832,3280976847,DE
3280976848,3280976895,GB
-3280976896,3280977119,DE
+3280976896,3280977023,DE
+3280977024,3280977031,GB
+3280977032,3280977119,DE
3280977120,3280977135,GB
3280977136,3280977407,DE
3280977408,3280977439,GB
@@ -106361,20 +110635,21 @@
3281339392,3281339647,PL
3281339648,3281339903,GB
3281339904,3281340159,UA
+3281340160,3281340415,BG
3281340416,3281340927,RO
3281340928,3281341183,DE
3281341184,3281341439,AT
3281341440,3281341695,DE
3281341696,3281341951,PL
3281341952,3281342207,DK
-3281342464,3281343231,DE
+3281342208,3281343231,DE
3281343232,3281343487,FI
3281343488,3281343743,GB
3281343744,3281343999,TR
3281344000,3281344255,FR
3281344256,3281344511,RU
3281344512,3281344767,UA
-3281344768,3281345023,RU
+3281344768,3281345279,RU
3281345280,3281345535,SA
3281345536,3281345791,CH
3281345792,3281346047,RU
@@ -106518,6 +110793,7 @@
3282149472,3282173951,RU
3282173952,3282174463,UA
3282174464,3282174975,GB
+3282174976,3282175487,DE
3282175488,3282177023,RU
3282177024,3282177535,GB
3282177536,3282178047,KZ
@@ -106682,6 +110958,7 @@
3283210752,3283211263,PL
3283211264,3283211775,GB
3283211776,3283212287,NL
+3283212288,3283212799,PL
3283212800,3283213311,BG
3283213312,3283213823,ES
3283213824,3283214335,UA
@@ -106808,6 +111085,7 @@
3283495680,3283495935,NL
3283495936,3283496191,BG
3283496192,3283496447,DE
+3283496448,3283496703,HR
3283496704,3283496959,LV
3283496960,3283497215,DE
3283497216,3283497471,GB
@@ -106817,7 +111095,6 @@
3283498496,3283498751,PL
3283498752,3283499007,AT
3283499008,3283499263,DE
-3283499264,3283499519,GB
3283499520,3283499775,DE
3283499776,3283500031,GB
3283500032,3283500287,DE
@@ -107426,11 +111703,23 @@
3284016384,3284016639,CH
3284016640,3284017151,DK
3284017152,3284025343,GR
-3284025344,3284028415,GB
+3284025344,3284025439,GB
+3284025440,3284025471,DE
+3284025472,3284027327,GB
+3284027328,3284027343,DE
+3284027344,3284028415,GB
3284028416,3284028671,DE
-3284028672,3284031743,GB
+3284028672,3284028879,GB
+3284028880,3284028895,DE
+3284028896,3284031743,GB
3284031744,3284031999,DE
-3284032000,3284033535,GB
+3284032000,3284032063,GB
+3284032064,3284032095,DE
+3284032096,3284032159,GB
+3284032160,3284032191,DE
+3284032192,3284032671,GB
+3284032672,3284032703,DE
+3284032704,3284033535,GB
3284033536,3284041727,RU
3284041728,3284041983,DK
3284041984,3284042239,SI
@@ -107455,6 +111744,7 @@
3284047104,3284047359,DK
3284047360,3284047615,DE
3284047616,3284047871,NL
+3284047872,3284048127,UA
3284048128,3284048383,DK
3284048384,3284048639,GB
3284048640,3284049151,FR
@@ -107594,7 +111884,6 @@
3284598784,3284664319,HU
3284664320,3284672511,GB
3284672512,3284680703,DE
-3284680704,3284681215,UA
3284681216,3284681727,RO
3284681728,3284682239,FI
3284682240,3284682751,DE
@@ -107603,12 +111892,12 @@
3284683776,3284684287,GB
3284684288,3284684799,FR
3284684800,3284685311,DE
-3284685312,3284685823,NL
-3284685824,3284686335,US
+3284685312,3284686335,NL
3284686336,3284686847,RO
3284686848,3284687359,PL
3284687360,3284687871,UA
3284687872,3284688383,NG
+3284688384,3284688895,IT
3284688896,3284697087,FR
3284697088,3284697215,GB
3284697216,3284697279,FR
@@ -107664,15 +111953,9 @@
3284795392,3284803583,FR
3284803584,3284811775,DE
3284811776,3284819967,KE
-3284819968,3284820479,GB
-3284820480,3284820495,DE
-3284820496,3284823519,GB
-3284823520,3284823527,DE
-3284823528,3284825343,GB
+3284819968,3284825343,GB
3284825344,3284825359,DE
-3284825360,3284825423,GB
-3284825424,3284825439,DE
-3284825440,3284828159,GB
+3284825360,3284828159,GB
3284828160,3284844543,AT
3284844544,3284860927,CH
3284860928,3284863743,DE
@@ -107770,8 +112053,7 @@
3285387264,3285388287,PL
3285388288,3285389311,CH
3285389312,3285390335,FI
-3285390336,3285391359,RU
-3285392384,3285393407,RU
+3285390336,3285393407,RU
3285393408,3285394431,AT
3285394432,3285396479,RU
3285396480,3285397503,IR
@@ -107795,6 +112077,7 @@
3285419008,3285420031,SE
3285420032,3285424127,UA
3285424128,3285425151,RO
+3285425152,3285426175,LV
3285426176,3285427199,UA
3285427200,3285428223,GB
3285428224,3285429247,RU
@@ -107850,9 +112133,7 @@
3285457664,3285457759,IT
3285457760,3285457791,EU
3285457792,3285457919,IT
-3285457920,3285458127,GB
-3285458128,3285458143,EU
-3285458144,3285458151,GB
+3285457920,3285458151,GB
3285458152,3285458175,EU
3285458176,3285458943,GB
3285458944,3285458975,DK
@@ -107871,20 +112152,15 @@
3285461008,3285461055,EU
3285461056,3285461111,NL
3285461112,3285461119,EU
-3285461120,3285461231,NL
-3285461232,3285461247,EU
-3285461248,3285461263,NL
+3285461120,3285461263,NL
3285461264,3285461279,BE
3285461280,3285461311,EU
3285461312,3285461375,CH
3285461376,3285461407,NL
3285461408,3285461423,EU
-3285461424,3285461439,NL
-3285461440,3285461447,EU
+3285461424,3285461447,NL
3285461448,3285461455,DE
-3285461456,3285461519,NL
-3285461520,3285461527,EU
-3285461528,3285461535,NL
+3285461456,3285461535,NL
3285461536,3285461567,EU
3285461568,3285461807,NL
3285461808,3285461855,EU
@@ -107907,8 +112183,8 @@
3285462952,3285462959,AT
3285462960,3285463007,EU
3285463008,3285463039,AT
-3285463040,3285463079,LU
-3285463080,3285463103,EU
+3285463040,3285463087,LU
+3285463088,3285463103,EU
3285463104,3285463135,LU
3285463136,3285463295,EU
3285463296,3285463311,FR
@@ -107924,9 +112200,7 @@
3285463664,3285463671,EU
3285463672,3285463743,BE
3285463744,3285463775,EU
-3285463776,3285463839,BE
-3285463840,3285463855,EU
-3285463856,3285463991,BE
+3285463776,3285463991,BE
3285463992,3285464031,EU
3285464032,3285464063,BE
3285464064,3285464071,EU
@@ -108009,8 +112283,7 @@
3285472512,3285473327,EU
3285473328,3285473343,DE
3285473344,3285473439,EU
-3285473440,3285473567,DE
-3285473568,3285473583,EU
+3285473440,3285473583,DE
3285473584,3285473591,GB
3285473592,3285473599,DE
3285473600,3285473631,EU
@@ -108057,9 +112330,7 @@
3285476896,3285477023,EU
3285477024,3285477087,AT
3285477088,3285477151,EU
-3285477152,3285477319,IT
-3285477320,3285477327,EU
-3285477328,3285477343,IT
+3285477152,3285477343,IT
3285477344,3285477359,EU
3285477360,3285477375,IT
3285477376,3285477631,FR
@@ -108959,7 +113230,8 @@
3285571904,3285571967,SE
3285571968,3285572095,BE
3285572096,3285572223,DE
-3285572224,3285572351,FI
+3285572224,3285572335,BE
+3285572336,3285572351,ES
3285572352,3285572367,IR
3285572368,3285572383,ES
3285572384,3285572447,BE
@@ -109114,8 +113386,7 @@
3285860352,3285868543,FI
3285868544,3285876735,IE
3285876736,3285909503,RU
-3285909504,3285910015,GB
-3285910016,3285910271,EU
+3285909504,3285910271,GB
3285910272,3285910303,ES
3285910304,3285910335,GB
3285910336,3285910399,ES
@@ -109127,9 +113398,7 @@
3285911552,3285912575,EU
3285912576,3285913087,GB
3285913088,3285913215,ES
-3285913216,3285913231,GB
-3285913232,3285913247,EU
-3285913248,3285913279,GB
+3285913216,3285913279,GB
3285913280,3285913343,ES
3285913344,3285913599,GB
3285913600,3285915647,EU
@@ -109141,8 +113410,8 @@
3285916704,3285916711,DE
3285916712,3285916719,CY
3285916720,3285916735,ES
-3285916736,3285916799,GB
-3285916800,3285916927,EU
+3285916736,3285916831,GB
+3285916832,3285916927,EU
3285916928,3285917183,GB
3285917184,3285917439,ES
3285917440,3285917695,YE
@@ -109174,10 +113443,11 @@
3285926408,3285926415,ES
3285926416,3285926431,GB
3285926432,3285926463,CH
-3285926464,3285926511,GB
-3285926512,3285926639,EU
-3285926640,3285926671,GB
-3285926672,3285926687,EU
+3285926464,3285926527,GB
+3285926528,3285926623,EU
+3285926624,3285926631,US
+3285926632,3285926639,EU
+3285926640,3285926687,GB
3285926688,3285926719,IN
3285926720,3285926783,EU
3285926784,3285926815,GB
@@ -109186,19 +113456,19 @@
3285926912,3285927423,DE
3285927424,3285927679,GB
3285927680,3285927935,IR
-3285927936,3285928063,EU
+3285927936,3285927951,GB
+3285927952,3285928063,EU
3285928064,3285928191,ES
3285928192,3285928207,PL
3285928208,3285928223,GB
3285928224,3285928255,DE
3285928256,3285928271,GB
3285928272,3285928287,DE
-3285928288,3285928319,GB
-3285928320,3285928447,EU
+3285928288,3285928335,GB
+3285928336,3285928447,EU
3285928448,3285928959,ES
3285928960,3285929983,EU
-3285929984,3285930511,GB
-3285930512,3285930559,EU
+3285929984,3285930559,GB
3285930560,3285930575,ES
3285930576,3285930623,GB
3285930624,3285930631,BE
@@ -109207,9 +113477,7 @@
3285930656,3285930671,NL
3285930672,3285930679,BE
3285930680,3285930687,DE
-3285930688,3285930719,GB
-3285930720,3285930751,EU
-3285930752,3285931007,GB
+3285930688,3285931007,GB
3285931008,3285932031,EU
3285932032,3285932287,NL
3285932288,3285932799,GB
@@ -109222,7 +113490,8 @@
3285934848,3285935615,GB
3285935616,3285938175,EU
3285938176,3285938431,ES
-3285938432,3285938559,EU
+3285938432,3285938447,GB
+3285938448,3285938559,EU
3285938560,3285938607,GB
3285938608,3285938623,FR
3285938624,3285938631,NG
@@ -109234,7 +113503,9 @@
3285938952,3285938959,NL
3285938960,3285938975,US
3285938976,3285939071,ES
-3285939072,3285939199,EU
+3285939072,3285939087,EU
+3285939088,3285939103,FR
+3285939104,3285939199,EU
3285939200,3285939711,ES
3285939712,3285940223,EU
3285940224,3285940479,ES
@@ -109247,14 +113518,16 @@
3285943552,3285943567,GB
3285943568,3285943575,ES
3285943576,3285943583,DE
-3285943584,3285943631,GB
-3285943632,3285943679,EU
+3285943584,3285943647,GB
+3285943648,3285943679,NG
3285943680,3285943807,GB
3285943808,3285944319,EU
3285944320,3285944831,US
3285944832,3285945343,DK
3285945344,3285945599,ES
-3285945600,3285945663,EU
+3285945600,3285945615,EU
+3285945616,3285945631,GB
+3285945632,3285945663,EU
3285945664,3285945695,FR
3285945696,3285945743,GB
3285945744,3285945855,EU
@@ -109273,18 +113546,18 @@
3285949696,3285949823,ES
3285949824,3285949855,EU
3285949856,3285949887,ES
-3285949888,3285949903,GB
-3285949904,3285949951,EU
+3285949888,3285949919,GB
+3285949920,3285949951,EU
3285949952,3285950463,ES
3285950464,3285950719,GB
3285950720,3285950783,US
-3285950784,3285950799,GB
-3285950800,3285950959,EU
-3285950960,3285950975,GB
+3285950784,3285950815,GB
+3285950816,3285950943,EU
+3285950944,3285950975,GB
3285950976,3285951231,NL
3285951232,3285951487,IT
-3285951488,3285951503,GB
-3285951504,3285951615,EU
+3285951488,3285951519,GB
+3285951520,3285951615,EU
3285951616,3285951647,GB
3285951648,3285951679,ES
3285951680,3285951695,GB
@@ -109303,8 +113576,8 @@
3285957632,3285957887,PL
3285957888,3285958143,GB
3285958144,3285958655,EU
-3285958656,3285958671,GB
-3285958672,3285958783,EU
+3285958656,3285958687,GB
+3285958688,3285958783,EU
3285958784,3285958799,GB
3285958800,3285958847,EU
3285958848,3285958895,NL
@@ -109328,8 +113601,8 @@
3285968384,3285968639,ES
3285968640,3285968895,PL
3285968896,3285971007,EU
-3285971008,3285971023,GB
-3285971024,3285971183,EU
+3285971008,3285971039,GB
+3285971040,3285971183,EU
3285971184,3285971199,GB
3285971200,3285971455,FR
3285971456,3285971711,DE
@@ -109372,9 +113645,7 @@
3286264880,3286264895,NL
3286264896,3286279423,GB
3286279424,3286279679,US
-3286279680,3286289919,GB
-3286289920,3286290175,US
-3286290176,3286291807,GB
+3286279680,3286291807,GB
3286291808,3286291823,US
3286291824,3286302719,GB
3286302720,3286310911,NO
@@ -109386,6 +113657,8 @@
3286313984,3286314495,CH
3286314496,3286315007,IL
3286315008,3286315519,UA
+3286315520,3286315775,SI
+3286315776,3286316031,BG
3286316032,3286316543,UA
3286316544,3286317055,NL
3286317056,3286317567,RU
@@ -109439,7 +113712,9 @@
3286367232,3286368255,BG
3286368256,3286376447,CH
3286376448,3286384639,GB
-3286384640,3286401023,DE
+3286384640,3286397607,DE
+3286397608,3286397615,A2
+3286397616,3286401023,DE
3286401024,3286409215,GB
3286409216,3286417407,DE
3286417408,3286417663,UA
@@ -109491,6 +113766,7 @@
3286654976,3286655231,UA
3286655232,3286655487,KZ
3286655488,3286655743,LT
+3286655744,3286655999,RU
3286656000,3286656255,CH
3286656256,3286656511,RU
3286656512,3286656767,GR
@@ -109572,74 +113848,7 @@
3286790912,3286791679,GB
3286791680,3286791935,AT
3286791936,3286794239,GB
-3286794240,3286795263,DE
-3286795264,3286795519,LR
-3286795520,3286795775,DE
-3286795776,3286796031,LR
-3286796032,3286796287,DE
-3286796288,3286796543,LR
-3286796544,3286796799,DE
-3286796800,3286797055,RO
-3286797056,3286797311,DE
-3286797312,3286797567,HU
-3286797568,3286798847,DE
-3286798848,3286799359,IT
-3286799360,3286801407,DE
-3286801408,3286801663,NL
-3286801664,3286802943,DE
-3286802944,3286803199,AU
-3286803200,3286805503,DE
-3286805504,3286806527,GB
-3286806528,3286808063,DE
-3286808064,3286808575,GR
-3286808576,3286809087,EG
-3286809088,3286809599,DE
-3286809600,3286809855,GB
-3286809856,3286810111,PT
-3286810112,3286812927,DE
-3286812928,3286813183,PT
-3286813184,3286813695,EG
-3286813696,3286813951,DE
-3286813952,3286814207,AU
-3286814208,3286814719,HU
-3286814720,3286819839,DE
-3286819840,3286820863,NZ
-3286820864,3286826751,DE
-3286826752,3286827007,IT
-3286827008,3286827263,DE
-3286827264,3286827519,GB
-3286827520,3286832127,DE
-3286832128,3286832895,GB
-3286832896,3286835711,DE
-3286835712,3286836223,ES
-3286836224,3286836479,IT
-3286836480,3286836735,DE
-3286836736,3286836991,IT
-3286836992,3286837247,DE
-3286837248,3286839295,GB
-3286839296,3286839807,DE
-3286839808,3286840319,ES
-3286840320,3286841087,DE
-3286841088,3286841343,IT
-3286841344,3286842623,DE
-3286842624,3286843391,IT
-3286843392,3286844415,IE
-3286844416,3286844671,IT
-3286844672,3286847487,DE
-3286847488,3286848511,GB
-3286848512,3286849535,DE
-3286849536,3286849791,IT
-3286849792,3286851583,DE
-3286851584,3286852607,IE
-3286852608,3286855679,DE
-3286855680,3286857727,IE
-3286857728,3286864895,DE
-3286864896,3286865151,IT
-3286865152,3286872063,DE
-3286872064,3286879231,IE
-3286879232,3286882303,DE
-3286882304,3286883327,IE
-3286883328,3286888447,DE
+3286794240,3286888447,DE
3286888448,3286889471,IE
3286889472,3286892543,DE
3286892544,3286893055,LI
@@ -109681,7 +113890,6 @@
3286907392,3286907647,AT
3286907648,3286907903,ES
3286907904,3286908159,CH
-3286908160,3286908415,UA
3286908416,3286908671,FR
3286908672,3286908927,PL
3286908928,3286909951,CH
@@ -109868,7 +114076,8 @@
3287443968,3287444479,BG
3287444480,3287444991,PL
3287444992,3287445503,DE
-3287445504,3287446527,UA
+3287445504,3287446015,GB
+3287446016,3287446527,UA
3287446528,3287447039,PL
3287447040,3287447551,IL
3287447552,3287448063,DK
@@ -109923,6 +114132,8 @@
3287468032,3287469055,UA
3287469056,3287471103,DE
3287471104,3287472127,GB
+3287472128,3287472639,RU
+3287472640,3287473151,UA
3287473152,3287474175,GB
3287474176,3287476223,DE
3287476224,3287477247,PL
@@ -109941,9 +114152,7 @@
3287515376,3287515383,CZ
3287515384,3287523303,DE
3287523304,3287523311,US
-3287523312,3287526303,DE
-3287526304,3287526311,LU
-3287526312,3287534807,DE
+3287523312,3287534807,DE
3287534808,3287534815,IT
3287534816,3287541087,DE
3287541088,3287541095,CZ
@@ -109981,7 +114190,7 @@
3287632384,3287632895,SE
3287632896,3287633407,RU
3287633408,3287633919,SK
-3287633920,3287634431,UA
+3287633920,3287634431,GB
3287634432,3287634943,RO
3287634944,3287635455,PL
3287635456,3287635967,DE
@@ -109993,7 +114202,6 @@
3287638528,3287639039,DE
3287639040,3287639551,GB
3287639552,3287640063,RU
-3287640064,3287640575,DE
3287640576,3287641087,SI
3287641088,3287641599,A2
3287641600,3287642111,FI
@@ -110195,13 +114403,14 @@
3287949824,3287950079,IT
3287950080,3287950335,DE
3287950336,3287950591,UA
-3287950592,3287950847,PL
+3287950592,3287951103,PL
3287951104,3287951359,HU
3287951360,3287951615,FR
3287951616,3287951871,CH
3287951872,3287952127,RU
3287952128,3287952383,UA
-3287952384,3287953407,CH
+3287952384,3287953151,CH
+3287953152,3287953407,UA
3287953408,3287953663,DE
3287953664,3287953919,GB
3287953920,3287954175,DE
@@ -110213,7 +114422,6 @@
3287955712,3287955967,DE
3287955968,3287956223,SI
3287956224,3287956479,RO
-3287956480,3287956735,FR
3287956736,3287956991,SE
3287956992,3287957247,UA
3287957248,3287957503,GB
@@ -110316,7 +114524,6 @@
3288444928,3288449023,NG
3288449024,3288465407,SD
3288465408,3288465919,JM
-3288465920,3288466175,BW
3288466176,3288466431,MU
3288466432,3288467455,SY
3288467456,3288469503,BI
@@ -110495,7 +114702,7 @@
3290497024,3290955775,ZA
3290955776,3290980351,CR
3290980352,3290984447,ZA
-3291000832,3291004927,KE
+3290988544,3290992639,KE
3291004928,3291021311,NG
3291021312,3291029503,ZA
3291029504,3291033343,TZ
@@ -110533,6 +114740,10 @@
3291208704,3291208959,KE
3291208960,3291209215,TZ
3291209216,3291209471,KE
+3291209472,3291209727,AO
+3291209728,3291209983,NG
+3291209984,3291210239,GH
+3291216896,3291217919,MU
3291217920,3291230207,ZA
3291230208,3291234303,GH
3291234304,3291242495,ZA
@@ -110557,7 +114768,9 @@
3291326464,3291330559,ZA
3291330560,3291331583,TZ
3291331584,3291332607,MW
-3291332608,3291348991,NG
+3291332608,3291332615,ZA
+3291332616,3291332863,NG
+3291332864,3291348991,ZA
3291348992,3291353087,MZ
3291353088,3291353343,KE
3291353344,3291353599,EG
@@ -110714,7 +114927,7 @@
3302805504,3302809599,MW
3302813696,3302817791,NG
3302817792,3302883327,EG
-3302883328,3302948863,MA
+3302883328,3302948863,RW
3302948864,3302949119,MU
3302949120,3302949375,AO
3302949376,3302949631,ZM
@@ -110737,6 +114950,7 @@
3302955008,3302955263,LS
3302955264,3302955519,UG
3302955520,3302955775,ZW
+3302955776,3302956031,MW
3305111552,3307208703,TN
3307208704,3309305855,EG
3309305856,3312451583,ZA
@@ -110747,6 +114961,12 @@
3314024448,3314286591,KE
3314286592,3314548735,DZ
3315335168,3315351551,ZA
+3315351552,3315367935,ET
+3315367936,3315384319,KE
+3315564544,3315568639,GH
+3315572736,3315580927,ST
+3315580928,3315589119,CI
+3315589120,3315597311,CM
3315597312,3316121599,EG
3316121600,3316645887,ZA
3316645888,3317170175,KE
@@ -110754,7 +114974,7 @@
3318218752,3318743039,DZ
3319398400,3319529471,MZ
3319529472,3319537663,ZM
-3319537664,3319545855,UG
+3319537664,3319545855,MW
3319545856,3319554047,SO
3319554048,3319562239,KE
3319562240,3319570431,LS
@@ -110773,10 +114993,14 @@
3320643584,3320709119,KE
3320709120,3320840191,ZA
3321102336,3321167871,NG
+3321167872,3321233407,ZA
+3321233408,3321298943,EG
+3321298944,3321364479,MA
3321364480,3321430015,KE
3321430016,3321495551,MZ
3321495552,3321561087,TZ
3321561088,3321593855,SD
+3321593856,3321626623,GH
3321626624,3321692159,SD
3321692160,3321708543,NG
3321708544,3321724927,GH
@@ -110792,6 +115016,7 @@
3321868288,3321872383,CG
3321872384,3321876479,GM
3321876480,3321880575,NG
+3321880576,3321884671,KM
3321954304,3321970687,US
3322019840,3322023935,US
3322023936,3322028031,CL
@@ -110881,7 +115106,11 @@
3323662336,3323674623,US
3323723776,3324011007,US
3324011008,3324011263,KN
-3324011264,3324036351,US
+3324011264,3324030463,US
+3324030464,3324030719,KN
+3324030720,3324035583,US
+3324035584,3324035839,KN
+3324035840,3324036351,US
3324036352,3324047615,KN
3324047616,3324051455,US
3324051456,3324182527,CA
@@ -111150,7 +115379,9 @@
3328235520,3328241663,CA
3328241664,3328243199,US
3328243200,3328245759,CA
-3328245760,3328414719,US
+3328245760,3328394239,US
+3328394240,3328394495,GB
+3328394496,3328414719,US
3328414720,3328414975,CH
3328414976,3328420351,US
3328420352,3328420607,CA
@@ -111494,7 +115725,7 @@
3338916352,3338916479,CN
3338916480,3339075583,US
3339075584,3339076863,GB
-3339076864,3339077631,NO
+3339076864,3339077631,JP
3339077632,3339077887,SG
3339077888,3339079167,US
3339079168,3339079423,DK
@@ -111516,8 +115747,9 @@
3339146496,3339147007,US
3339147008,3339147775,CA
3339147776,3339148031,MS
-3339148032,3339149311,US
-3339157504,3339159551,US
+3339148032,3339153407,US
+3339153408,3339155455,BB
+3339155456,3339159551,US
3339159552,3339160575,CA
3339160576,3339164671,US
3339164672,3339165695,CA
@@ -111533,10 +115765,15 @@
3339184128,3339184639,CA
3339184640,3339184895,US
3339184896,3339186175,CA
-3339186176,3339669503,US
+3339186176,3339327999,US
+3339328512,3339329535,CA
+3339329536,3339669503,US
3339669504,3339671807,CA
-3339672576,3339673599,US
-3339681792,3339747327,US
+3339672576,3339728895,US
+3339728896,3339729919,AG
+3339729920,3339743231,US
+3339743232,3339744255,CA
+3339744256,3339747327,US
3339747328,3339747583,CA
3339747584,3339747839,FR
3339747840,3339748351,CA
@@ -111552,14 +115789,19 @@
3339778480,3339778495,CY
3339778496,3339923455,US
3339923456,3339927551,CA
-3339943936,3339952127,US
+3339927552,3339934719,US
+3339934720,3339935743,CA
+3339935744,3339952127,US
3339952128,3339956223,CA
3339956224,3339965439,US
3339965440,3339969311,CA
3339969312,3339969327,AU
3339969328,3339969375,CA
-3339969376,3340058623,US
-3340075008,3340080127,US
+3339969376,3340071007,US
+3340071008,3340071055,GB
+3340071056,3340071063,US
+3340071064,3340071071,ES
+3340071072,3340080127,US
3340080128,3340081151,CA
3340081152,3340084223,US
3340084224,3340085247,KN
@@ -111572,16 +115814,20 @@
3340369920,3340386559,US
3340387328,3340388351,CA
3340388352,3340390399,US
-3340394496,3340429823,US
+3340390400,3340391423,CA
+3340391424,3340429823,US
3340429824,3340430079,PA
-3340430080,3340451839,US
-3340468224,3340481535,US
+3340430080,3340460031,US
+3340460032,3340462079,PR
+3340462080,3340466175,US
+3340466176,3340467199,A2
+3340467200,3340481535,US
3340481536,3340482559,CA
3340482560,3340490751,US
3340490752,3340492799,CA
3340492800,3340584703,US
3340584704,3340584959,KW
-3340584960,3340648447,US
+3340584960,3340664831,US
3340664832,3340665855,CA
3340665856,3340677119,US
3340677120,3340679167,CA
@@ -111678,8 +115924,7 @@
3340926928,3340926935,ES
3340926936,3340926951,US
3340926952,3340926959,BR
-3340926960,3341041663,US
-3341058048,3341082623,US
+3340926960,3341082623,US
3341082624,3341084671,CA
3341084672,3341444863,US
3341444864,3341445631,DE
@@ -111816,9 +116061,7 @@
3343167488,3343169535,CA
3343169536,3343171583,US
3343171584,3343172607,BM
-3343172608,3343172735,US
-3343172736,3343172751,HK
-3343172752,3343319295,US
+3343172608,3343319295,US
3343319296,3343364095,CA
3343364096,3343365119,US
3343365632,3343372543,CA
@@ -111888,7 +116131,11 @@
3345008640,3345010687,US
3345010688,3345011711,CA
3345011712,3345301503,US
-3345317888,3345327103,US
+3345317888,3345318943,US
+3345318944,3345318975,HK
+3345318976,3345321471,US
+3345321472,3345321727,CA
+3345321728,3345327103,US
3345327104,3345328127,CA
3345328128,3345333247,US
3345333248,3345334271,MF
@@ -111898,15 +116145,113 @@
3345383424,3345384447,CA
3345384448,3345390591,US
3345390592,3345391615,CA
-3345391616,3345398783,US
+3345391616,3345393151,US
+3345393152,3345393279,AU
+3345393280,3345393407,US
+3345393408,3345393535,AU
+3345393536,3345398783,US
3345398784,3345399807,BS
3345399808,3345401855,PR
3345401856,3345403903,CA
-3345403904,3345408197,US
+3345403904,3345408005,US
+3345408006,3345408009,CZ
+3345408010,3345408017,US
+3345408018,3345408021,GB
+3345408022,3345408092,US
+3345408093,3345408094,GB
+3345408095,3345408098,VE
+3345408099,3345408110,US
+3345408111,3345408114,AU
+3345408115,3345408161,US
+3345408162,3345408165,CA
+3345408166,3345408189,US
+3345408190,3345408193,AR
+3345408194,3345408197,US
3345408198,3345408225,IN
-3345408226,3345408949,US
+3345408226,3345408227,GB
+3345408228,3345408235,US
+3345408236,3345408239,CN
+3345408240,3345408319,US
+3345408320,3345408323,GB
+3345408324,3345408335,US
+3345408336,3345408339,GB
+3345408340,3345408386,US
+3345408387,3345408394,GB
+3345408395,3345408415,US
+3345408416,3345408420,AU
+3345408421,3345408424,US
+3345408425,3345408428,GB
+3345408429,3345408460,US
+3345408461,3345408464,IN
+3345408465,3345408479,US
+3345408480,3345408483,GB
+3345408484,3345408534,US
+3345408535,3345408538,AU
+3345408539,3345408542,CA
+3345408543,3345408569,US
+3345408570,3345408573,CA
+3345408574,3345408577,US
+3345408578,3345408589,GB
+3345408590,3345408634,US
+3345408635,3345408639,CA
+3345408640,3345408651,US
+3345408652,3345408655,CA
+3345408656,3345408667,US
+3345408668,3345408671,CA
+3345408672,3345408697,US
+3345408698,3345408701,GB
+3345408702,3345408784,US
+3345408785,3345408788,CA
+3345408789,3345408888,US
+3345408889,3345408892,MX
+3345408893,3345408903,US
+3345408904,3345408907,GB
+3345408908,3345408949,US
3345408950,3345408993,IN
-3345408994,3345418239,US
+3345408994,3345409033,US
+3345409034,3345409037,CA
+3345409038,3345409085,US
+3345409086,3345409089,CA
+3345409090,3345409093,US
+3345409094,3345409097,CA
+3345409098,3345409101,US
+3345409102,3345409105,GB
+3345409106,3345409171,US
+3345409172,3345409175,GB
+3345409176,3345409179,CN
+3345409180,3345409204,US
+3345409205,3345409212,AU
+3345409213,3345409217,US
+3345409218,3345409221,AU
+3345409222,3345409245,US
+3345409246,3345409255,GB
+3345409256,3345409558,US
+3345409559,3345409562,CA
+3345409563,3345409576,US
+3345409577,3345409580,GB
+3345409581,3345409706,US
+3345409707,3345409718,IN
+3345409719,3345409722,US
+3345409723,3345409727,GB
+3345409728,3345409782,US
+3345409783,3345409786,SG
+3345409787,3345409816,US
+3345409817,3345409820,GB
+3345409821,3345409887,US
+3345409888,3345409891,GB
+3345409892,3345409895,US
+3345409896,3345409899,PR
+3345409900,3345409903,CA
+3345409904,3345409911,US
+3345409912,3345409915,CA
+3345409916,3345409919,AU
+3345409920,3345409945,US
+3345409946,3345409949,SG
+3345409950,3345409957,US
+3345409958,3345409961,CA
+3345409962,3345410032,US
+3345410033,3345410036,GB
+3345410037,3345418239,US
3345418240,3345419519,NL
3345419520,3345422847,US
3345423360,3345424383,TC
@@ -111961,9 +116306,12 @@
3346497536,3346498559,CA
3346498560,3346499583,US
3346499584,3346501631,VI
-3346501632,3346506047,US
-3346506048,3346506055,CA
-3346506056,3346510271,US
+3346501632,3346506039,US
+3346506040,3346506055,CA
+3346506056,3346506111,US
+3346506112,3346506119,JM
+3346506120,3346506127,MX
+3346506128,3346510271,US
3346510272,3346510335,IL
3346510336,3346520063,US
3346520064,3346521087,CA
@@ -111971,7 +116319,9 @@
3346522348,3346522350,BD
3346522351,3346522401,US
3346522402,3346522404,IN
-3346522405,3346522691,US
+3346522405,3346522411,US
+3346522412,3346522413,AE
+3346522414,3346522691,US
3346522692,3346522704,PT
3346522705,3346522773,US
3346522774,3346522783,PT
@@ -112013,16 +116363,32 @@
3349608448,3349609215,US
3349609216,3349610495,CA
3349610496,3349614591,US
-3349643264,3349644287,CA
-3349644288,3349645311,US
+3349643264,3349643487,CA
+3349643488,3349643503,US
+3349643504,3349644287,CA
+3349644288,3349644656,US
+3349644657,3349644672,GB
+3349644673,3349645215,US
+3349645216,3349645231,ID
+3349645232,3349645311,US
3349645312,3349647359,CA
3349647360,3349649407,US
3349649408,3349653503,CA
3349653504,3349692415,US
-3349708800,3349731327,US
+3349708800,3349723260,US
+3349723261,3349723265,CA
+3349723266,3349723360,US
+3349723361,3349723367,CA
+3349723368,3349723996,US
+3349723997,3349724000,LK
+3349724001,3349724985,US
+3349724986,3349724999,PK
+3349725000,3349731327,US
3349731328,3349733375,CA
3349733376,3349739519,US
-3349739520,3349740543,CA
+3349739520,3349739551,CA
+3349739552,3349739559,US
+3349739560,3349740543,CA
3349740544,3349987327,US
3349987328,3349996543,BM
3349996544,3349997055,KY
@@ -112040,7 +116406,27 @@
3350470656,3350475775,US
3350475776,3350476799,CA
3350476800,3350478847,US
-3350495232,3350593535,US
+3350495232,3350495577,US
+3350495578,3350495585,GB
+3350495586,3350495602,US
+3350495603,3350495604,BD
+3350495605,3350495645,US
+3350495646,3350495652,RO
+3350495653,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
+3350496533,3350496533,IN
+3350496534,3350496659,US
+3350496660,3350496675,BR
+3350496676,3350496721,US
+3350496722,3350496723,IN
+3350496724,3350593535,US
3350593536,3350609919,CA
3350614016,3350618111,US
3350626304,3350790143,US
@@ -112056,11 +116442,43 @@
3350980608,3350994943,US
3350994944,3350998015,CA
3350998016,3350999039,US
-3351019520,3351027711,US
-3351052288,3351068671,US
-3351117824,3351232511,US
+3351019520,3351030783,US
+3351030784,3351031807,CA
+3351031808,3351034879,US
+3351034880,3351035903,CA
+3351035904,3351036927,US
+3351036928,3351037951,CA
+3351037952,3351043071,US
+3351043072,3351043079,FR
+3351043080,3351044095,CA
+3351044096,3351068671,US
+3351085056,3351086079,US
+3351086080,3351087103,CA
+3351087104,3351103487,US
+3351103488,3351104511,CA
+3351104512,3351112703,US
+3351112704,3351113727,CA
+3351113728,3351232511,US
3351232512,3351232767,IL
-3351232768,3351380223,US
+3351232768,3351265279,US
+3351281664,3351293951,US
+3351293952,3351294975,CA
+3351294976,3351295999,US
+3351296000,3351298047,CA
+3351298048,3351303167,US
+3351303168,3351304191,CA
+3351304192,3351306239,US
+3351306240,3351307263,VC
+3351307264,3351307519,US
+3351307520,3351307775,CA
+3351307776,3351308287,US
+3351308288,3351310335,CA
+3351310336,3351330815,US
+3351347200,3351357439,US
+3351357440,3351359487,CA
+3351359488,3351372799,US
+3351372800,3351373823,BM
+3351373824,3351380223,US
3351380224,3351380479,CA
3351380480,3351380735,US
3351380736,3351381759,CA
@@ -112166,7 +116584,9 @@
3351441152,3351441407,CA
3351441408,3351441919,US
3351441920,3351442175,CA
-3351442176,3351478271,US
+3351442176,3351483391,US
+3351483392,3351484415,CA
+3351484416,3351485439,US
3351511040,3351524095,US
3351524096,3351524351,GB
3351524352,3351642111,US
@@ -112174,7 +116594,9 @@
3351698432,3351904255,US
3351912448,3351927551,CA
3351927552,3351927807,US
-3351927808,3351969791,CA
+3351927808,3351959551,CA
+3351959552,3351961599,US
+3351961600,3351969791,CA
3351969792,3352035327,IL
3352035328,3352036351,CA
3352036352,3352046591,US
@@ -112204,7 +116626,37 @@
3353722624,3353729023,US
3353729024,3353729279,HK
3353729280,3353730047,US
-3353739264,3353979647,US
+3353739264,3353752581,US
+3353752582,3353752585,FR
+3353752586,3353752589,BE
+3353752590,3353752606,US
+3353752607,3353752610,AU
+3353752611,3353752630,US
+3353752631,3353752634,CA
+3353752635,3353752650,US
+3353752651,3353752654,AU
+3353752655,3353752677,US
+3353752678,3353752681,ES
+3353752682,3353752716,US
+3353752717,3353752720,IT
+3353752721,3353752740,US
+3353752741,3353752744,CA
+3353752745,3353752748,US
+3353752749,3353752752,CA
+3353752753,3353752769,US
+3353752770,3353752773,AU
+3353752774,3353752811,US
+3353752812,3353752815,CA
+3353752816,3353752828,US
+3353752829,3353752830,FR
+3353752831,3353752936,US
+3353752937,3353752940,SE
+3353752941,3353752987,US
+3353752988,3353752991,GB
+3353752992,3353753055,US
+3353753056,3353753059,BR
+3353753060,3353753067,GB
+3353753068,3353979647,US
3353979648,3353979903,CA
3353979904,3353982719,US
3353982720,3353983231,CA
@@ -112234,7 +116686,7 @@
3355260928,3355262719,CA
3355262720,3355310591,US
3355310592,3355311103,CA
-3355312128,3355319295,US
+3355311104,3355319295,US
3355319296,3355320319,CA
3355320320,3355324415,US
3355324416,3355328511,CA
@@ -112704,8 +117156,8 @@
3356341808,3356341863,SV
3356341864,3356341871,HN
3356341872,3356343295,SV
-3356343296,3356343423,HN
-3356343424,3356344319,SV
+3356343296,3356343551,HN
+3356343552,3356344319,SV
3356344320,3356360703,CO
3356360704,3356362751,CL
3356362752,3356364799,VE
@@ -112723,7 +117175,7 @@
3356380928,3356381183,DO
3356381184,3356381439,CL
3356381440,3356381695,PA
-3356381696,3356381951,UY
+3356381696,3356381951,CL
3356381952,3356382207,EC
3356382208,3356389375,CL
3356389376,3356389887,CO
@@ -112751,7 +117203,9 @@
3356514304,3356514559,US
3356514560,3356514815,AR
3356514816,3356515327,DO
-3356515328,3356515583,AN
+3356515328,3356515839,AN
+3356515840,3356516095,EC
+3356516096,3356516351,VE
3356516352,3356520447,AR
3356520448,3356521471,CL
3356521472,3356521727,AR
@@ -112895,8 +117349,8 @@
3358064640,3358130175,UY
3358130176,3358131199,EC
3358131200,3358131391,CO
-3358131392,3358131415,GT
-3358131416,3358131983,CO
+3358131392,3358131407,GT
+3358131408,3358131983,CO
3358131984,3358131991,GT
3358131992,3358132223,CO
3358132224,3358132479,AR
@@ -112918,7 +117372,9 @@
3358150656,3358151167,EC
3358151168,3358151423,PY
3358151424,3358151679,CO
-3358151680,3358152703,GT
+3358151680,3358151935,GT
+3358151936,3358152063,PE
+3358152064,3358152703,GT
3358152704,3358152735,AR
3358152736,3358152767,VE
3358152768,3358152831,US
@@ -113007,13 +117463,14 @@
3358720000,3358720075,PR
3358720076,3358720083,DO
3358720084,3358722047,PR
-3358722048,3358723071,DO
+3358722048,3358722671,DO
+3358722672,3358722687,PR
+3358722688,3358723071,DO
3358723072,3358723327,PR
3358723328,3358723583,AN
3358723584,3358724095,PR
3358724096,3358725119,DO
-3358725120,3358725375,AN
-3358725376,3358728191,PR
+3358725120,3358728191,PR
3358728192,3358736383,CL
3358736384,3358737111,BB
3358737112,3358737119,CA
@@ -113141,7 +117598,9 @@
3359475520,3359475551,AR
3359475552,3359475615,CO
3359475616,3359475623,AR
-3359475624,3359478687,CO
+3359475624,3359477247,CO
+3359477248,3359477759,AR
+3359477760,3359478687,CO
3359478688,3359478719,AR
3359478720,3359479295,CO
3359479296,3359479303,AR
@@ -113171,7 +117630,10 @@
3359481856,3359498239,AR
3359498240,3359501311,PY
3359501312,3359502335,SR
-3359502336,3359504383,AR
+3359502336,3359505407,AR
+3359505408,3359505663,VE
+3359505664,3359505919,AN
+3359505920,3359506431,AR
3359506432,3359508479,US
3359508480,3359514623,VE
3359514624,3359516671,GT
@@ -113237,7 +117699,9 @@
3360231680,3360234751,CL
3360234752,3360235263,CO
3360235264,3360235271,CL
-3360235272,3360235519,CO
+3360235272,3360235487,CO
+3360235488,3360235495,CL
+3360235496,3360235519,CO
3360235520,3360236287,CL
3360236288,3360236303,CO
3360236304,3360236311,CL
@@ -113335,7 +117799,9 @@
3360763904,3360765951,GT
3360765952,3360767999,CO
3360768000,3360770047,PY
-3360770048,3360771327,EC
+3360770048,3360771071,EC
+3360771072,3360771199,AR
+3360771200,3360771327,EC
3360771328,3360771839,AR
3360771840,3360772095,EC
3360772096,3360772351,AR
@@ -113352,7 +117818,7 @@
3360775168,3360775679,BO
3360775680,3360788479,AR
3360788480,3360790527,CL
-3360790528,3360849919,AR
+3360792576,3360849919,AR
3360849920,3360882687,VE
3360882688,3360948223,CL
3360948224,3361013759,VE
@@ -113403,7 +117869,9 @@
3362328576,3362330623,CO
3362330624,3362332671,MX
3362332672,3362336767,PA
-3362336768,3362338815,CO
+3362336768,3362337279,CO
+3362337280,3362337535,US
+3362337536,3362338815,CO
3362338816,3362339839,AR
3362339840,3362341887,CO
3362341888,3362342143,GT
@@ -113427,6 +117895,11 @@
3362428928,3362430975,CL
3362430976,3362447359,CO
3362447360,3362451455,SV
+3362451456,3362452479,AR
+3362452480,3362452991,BO
+3362452992,3362453247,HN
+3362453248,3362453503,NI
+3362453504,3362455551,AR
3362455552,3362471935,EC
3362471936,3362476031,CL
3362476032,3362476287,HN
@@ -113534,12 +118007,13 @@
3363504128,3363512319,PE
3363512320,3363553791,AR
3363553792,3363554047,PE
-3363554048,3363557375,AR
+3363554048,3363554175,US
+3363554176,3363557375,AR
3363561472,3363565567,CO
3363569664,3363577855,PA
3363577856,3363586047,CL
3363586048,3363594239,BZ
-3363594240,3363598335,AR
+3363594240,3363602431,AR
3363602432,3363610623,AN
3363610624,3363614719,CO
3363618816,3363622911,UY
@@ -113551,19 +118025,23 @@
3363678208,3363680255,NI
3363680256,3363682303,GT
3363682304,3363684351,VE
-3363684352,3363700735,EC
-3363700736,3363708927,CU
+3363684352,3363700991,EC
+3363700992,3363701247,CU
+3363701248,3363708927,EC
3363708928,3363713023,CL
3363717120,3363733503,CL
3363733504,3363831807,AR
3363831808,3378511871,BR
3378511872,3383754751,MX
-3383754752,3384279039,AR
+3383754752,3384147967,AR
+3384147968,3384213503,PA
3384279040,3384410111,CO
3384410112,3384672255,CL
3384672256,3384688639,HN
3384688640,3384705023,CO
-3384705024,3384737791,PA
+3384705024,3384721407,PA
+3384721408,3384725503,US
+3384725504,3384737791,PA
3384737792,3385851903,CR
3385851904,3386114047,VE
3386114048,3386245119,AR
@@ -113578,6 +118056,7 @@
3386458112,3386474495,EC
3386474496,3386490879,UY
3386490880,3386499071,CO
+3386499072,3386503167,AR
3386507264,3386523647,EC
3386523648,3386540031,PA
3386540032,3386548223,CL
@@ -114101,9 +118580,7 @@
3390414336,3390414847,SG
3390414848,3390418943,JP
3390418944,3390423039,MV
-3390423040,3390429439,SG
-3390429440,3390429951,HK
-3390429952,3390439423,SG
+3390423040,3390439423,SG
3390439424,3390441471,NZ
3390441472,3390443519,TH
3390443520,3390447359,NZ
@@ -114237,7 +118714,8 @@
3391879168,3391881215,ID
3391881216,3391895551,TH
3391895552,3391896575,IN
-3391896576,3391900415,TH
+3391896576,3391897599,NZ
+3391897600,3391900415,TH
3391900416,3391901695,AU
3391901696,3391905791,PK
3391905792,3391906047,TH
@@ -114396,7 +118874,6 @@
3392440832,3392441343,BD
3392441344,3392441855,ID
3392441856,3392442111,AU
-3392442112,3392442367,IN
3392442368,3392442623,HK
3392442624,3392442879,AU
3392442880,3392443391,ID
@@ -115776,19 +120253,7 @@
3399515648,3399524351,AU
3399524352,3399528447,IN
3399528448,3399532543,CN
-3399532544,3399544575,SG
-3399544576,3399544831,IN
-3399544832,3399546879,SG
-3399546880,3399547135,US
-3399547136,3399547903,SG
-3399547904,3399547911,PK
-3399547912,3399547935,SG
-3399547936,3399547951,PK
-3399547952,3399547967,SG
-3399547968,3399547999,PK
-3399548000,3399548415,SG
-3399548416,3399548671,ID
-3399548672,3399548927,SG
+3399532544,3399548927,SG
3399548928,3399557119,AU
3399557120,3399565311,SG
3399565312,3399581695,AU
@@ -116105,8 +120570,8 @@
3400438112,3400438143,HK
3400438144,3400438175,BD
3400438176,3400438399,HK
-3400438400,3400438591,BD
-3400438592,3400438783,HK
+3400438400,3400438527,BD
+3400438528,3400438783,AF
3400438784,3400438815,KZ
3400438816,3400438831,PK
3400438832,3400438839,AF
@@ -116539,7 +121004,7 @@
3407326464,3407328767,AU
3407328768,3407329023,CN
3407329024,3407329791,AU
-3407330048,3407330303,CN
+3407329792,3407330303,CN
3407330304,3407360511,AU
3407360512,3407361023,ID
3407361024,3407362047,AU
@@ -116732,9 +121197,7 @@
3409491712,3409491967,SG
3409491968,3409498111,AU
3409498112,3409498879,CN
-3409498880,3409503999,AU
-3409504000,3409504255,HK
-3409504256,3409505023,AU
+3409498880,3409505023,AU
3409505024,3409505279,US
3409505280,3409506559,AU
3409506560,3409506815,IN
@@ -116756,9 +121219,7 @@
3409567232,3409567487,CN
3409567488,3409574143,AU
3409574144,3409574399,CN
-3409574400,3409802831,AU
-3409802832,3409802847,MT
-3409802848,3409838335,AU
+3409574400,3409838335,AU
3409838336,3409838591,MY
3409838592,3409838847,CN
3409838848,3409876991,AU
@@ -117052,6 +121513,7 @@
3411644928,3411645951,ID
3411645952,3411646207,SG
3411646208,3411647487,IN
+3411647488,3411648511,AU
3411648512,3411656703,NZ
3411656704,3411673087,AU
3411673088,3411674111,CN
@@ -117410,9 +121872,7 @@
3413852160,3413868543,AU
3413868544,3413884927,IN
3413884928,3413893119,KR
-3413893120,3413899199,ID
-3413899200,3413899203,IN
-3413899204,3413901311,ID
+3413893120,3413901311,ID
3413901312,3413902847,SG
3413902848,3413903359,JP
3413903360,3413905407,HK
@@ -118335,10 +122795,7 @@
3418513408,3418517503,IN
3418517504,3418519551,MN
3418519552,3418521599,CN
-3418521600,3418524574,HK
-3418524575,3418524606,CN
-3418524607,3418524638,TH
-3418524639,3418554367,HK
+3418521600,3418554367,HK
3418554368,3418570751,VN
3418570752,3418578943,CN
3418578944,3418583039,TH
@@ -118453,7 +122910,9 @@
3419456912,3419456927,JP
3419456928,3419459007,SG
3419459008,3419459071,AF
-3419459072,3419471871,SG
+3419459072,3419459407,SG
+3419459408,3419459423,GB
+3419459424,3419471871,SG
3419471872,3419504639,TH
3419504640,3419508735,HK
3419508736,3419512831,JP
@@ -118537,7 +122996,7 @@
3420033024,3420034047,IN
3420034048,3420036095,AU
3420036096,3420037119,JP
-3420037120,3420039167,AU
+3420037120,3420038143,AU
3420039168,3420040191,KH
3420040192,3420040703,ID
3420040704,3420040959,IN
@@ -118661,8 +123120,8 @@
3420368896,3420368935,HK
3420368936,3420368943,TW
3420368944,3420368991,HK
-3420368992,3420369023,AU
-3420369024,3420369055,HK
+3420368992,3420369007,AU
+3420369008,3420369055,HK
3420369056,3420369087,AU
3420369088,3420369139,HK
3420369140,3420369223,CN
@@ -119152,7 +123611,9 @@
3423554768,3423571967,US
3423571968,3423574015,PR
3423574016,3423582207,US
-3423582208,3423584335,CA
+3423582208,3423584271,CA
+3423584272,3423584279,US
+3423584280,3423584335,CA
3423584336,3423584351,US
3423584352,3423584359,AU
3423584360,3423584367,CA
@@ -119169,9 +123630,7 @@
3423584752,3423584767,US
3423584768,3423585535,CA
3423585536,3423585551,MY
-3423585552,3423585631,CA
-3423585632,3423585647,US
-3423585648,3423585775,CA
+3423585552,3423585775,CA
3423585776,3423585791,MY
3423585792,3423585895,CA
3423585896,3423585903,NL
@@ -119234,6 +123693,7 @@
3423838720,3423838975,US
3423838976,3423848447,CA
3423848448,3423849471,KN
+3423849472,3423849983,US
3423849984,3423850495,CA
3423850496,3423850751,US
3423850752,3423854335,CA
@@ -119259,14 +123719,14 @@
3425173504,3425304575,CA
3425304576,3425697791,US
3425697792,3425699839,CA
-3425699840,3425828863,US
+3425699840,3425714175,US
+3425714176,3425722367,CA
+3425722368,3425828863,US
3425828864,3425830815,CA
3425830816,3425830831,US
3425830832,3425850519,CA
3425850520,3425850527,US
-3425850528,3425855231,CA
-3425855232,3425855487,US
-3425855488,3425864711,CA
+3425850528,3425864711,CA
3425864712,3425864719,US
3425864720,3425869167,CA
3425869168,3425869183,US
@@ -119285,9 +123745,13 @@
3425916480,3425916543,DK
3425916544,3426013183,US
3426013184,3426013439,IL
-3426013440,3426387967,US
+3426013440,3426369023,US
+3426369024,3426369535,CA
+3426369536,3426387967,US
3426387968,3426388991,MX
-3426388992,3426617855,US
+3426388992,3426400255,US
+3426400256,3426400511,CA
+3426400512,3426617855,US
3426618368,3426618687,US
3426618688,3426618703,NZ
3426618704,3426618735,US
@@ -119295,21 +123759,29 @@
3426618752,3426618911,US
3426618912,3426619071,NZ
3426619072,3426619167,US
-3426619168,3426619231,NZ
-3426619232,3426646015,US
+3426619168,3426619247,NZ
+3426619248,3426619263,US
+3426619264,3426619295,NZ
+3426619296,3426646015,US
3426646016,3426647039,CA
3426647040,3426729471,US
3426729472,3426729983,CA
3426729984,3426744319,US
3426744320,3426746367,CA
-3426746368,3427127295,US
+3426746368,3427033087,US
+3427033088,3427041279,A1
+3427041280,3427117055,US
+3427117056,3427117311,CA
+3427117312,3427127295,US
3427127296,3427127551,CA
3427127552,3427127807,US
3427128064,3427618303,US
3427618304,3427618559,CA
-3427618560,3427647743,US
+3427618560,3427647999,US
3427648000,3427648511,CA
-3427648512,3427729407,US
+3427648512,3427651071,US
+3427651072,3427651327,CA
+3427651328,3427729407,US
3427729408,3427729663,CA
3427729664,3427730431,US
3427730432,3427730687,BE
@@ -119464,11 +123936,19 @@
3428286720,3428286975,CA
3428286976,3428296959,US
3428296960,3428297215,CL
-3428297472,3428299519,US
+3428297216,3428299519,US
3428299520,3428299775,ZA
-3428299776,3428306175,US
+3428299776,3428302079,US
+3428302080,3428302335,CA
+3428302336,3428306175,US
3428306176,3428306431,MX
-3428306432,3428437503,US
+3428306432,3428318975,US
+3428318976,3428319231,CA
+3428319232,3428399359,US
+3428399360,3428399615,CA
+3428400128,3428433919,US
+3428433920,3428434175,CA
+3428434176,3428437503,US
3428437504,3428437759,MX
3428437760,3428496639,US
3428496640,3428497151,NL
@@ -119837,7 +124317,8 @@
3431752704,3431753215,US
3431753216,3431753471,SG
3431753472,3431755007,CA
-3431755008,3431759615,NL
+3431755008,3431755775,NL
+3431755776,3431759615,CA
3431759616,3431759871,DE
3431759872,3431783431,US
3431783432,3431783435,NL
@@ -119921,7 +124402,9 @@
3434133760,3434133791,IL
3434133792,3434134015,US
3434134016,3434134079,CA
-3434134080,3434423295,US
+3434134080,3434299391,US
+3434299392,3434303487,VE
+3434303488,3434423295,US
3434423296,3434423303,CA
3434423304,3434427391,US
3434427392,3434428415,HR
@@ -119938,7 +124421,27 @@
3434584064,3434807551,US
3434807552,3434810111,CA
3434810112,3434810367,US
-3434810368,3434831359,CA
+3434810368,3434810879,CA
+3434810880,3434810895,GB
+3434810896,3434810911,US
+3434810912,3434810943,CA
+3434810944,3434810959,US
+3434810960,3434810975,AE
+3434810976,3434811007,CA
+3434811008,3434811023,US
+3434811024,3434811039,ZA
+3434811040,3434811071,US
+3434811072,3434811135,CA
+3434811136,3434811151,US
+3434811152,3434811167,CA
+3434811168,3434811199,US
+3434811200,3434811215,AU
+3434811216,3434811311,US
+3434811312,3434811327,GB
+3434811328,3434811359,US
+3434811360,3434811375,CA
+3434811376,3434811383,US
+3434811384,3434831359,CA
3434831360,3434831615,US
3434831616,3434872575,CA
3434872576,3434907647,US
@@ -119968,7 +124471,9 @@
3435518528,3436249343,US
3436249344,3436255743,CA
3436255744,3436256255,US
-3436256256,3436282367,CA
+3436256256,3436278271,CA
+3436278272,3436278527,US
+3436278528,3436282367,CA
3436282368,3436282623,US
3436282624,3436289791,CA
3436289792,3436290047,US
@@ -120314,9 +124819,7 @@
3438545424,3438545431,US
3438545432,3438545471,CA
3438545472,3438545479,US
-3438545480,3438545583,CA
-3438545584,3438545591,US
-3438545592,3438550071,CA
+3438545480,3438550071,CA
3438550072,3438550079,US
3438550080,3438550447,CA
3438550448,3438550463,US
@@ -120324,7 +124827,9 @@
3438552272,3438552287,US
3438552288,3438559647,CA
3438559648,3438559679,US
-3438559680,3438570031,CA
+3438559680,3438569215,CA
+3438569216,3438569343,US
+3438569344,3438570031,CA
3438570032,3438570039,MY
3438570040,3438570495,CA
3438570496,3438570527,US
@@ -120500,7 +125005,10 @@
3448569056,3448569087,MX
3448569088,3448569735,US
3448569736,3448569743,GB
-3448569744,3449001245,US
+3448569744,3448983807,US
+3448983808,3448983871,GB
+3448983872,3448985599,US
+3448987648,3449001245,US
3449001246,3449001246,MC
3449001247,3449159679,US
3449159680,3449160703,CA
@@ -120699,7 +125207,12 @@
3450272768,3450345231,US
3450345232,3450345247,FR
3450345248,3450345263,IT
-3450345264,3450345439,US
+3450345264,3450345279,US
+3450345280,3450345311,NE
+3450345312,3450345343,GE
+3450345344,3450345391,US
+3450345392,3450345399,BG
+3450345400,3450345439,US
3450345440,3450345471,GE
3450345472,3450731519,US
3450731520,3450732543,CA
@@ -120724,7 +125237,11 @@
3451236608,3451371519,US
3451371520,3451371775,GB
3451371776,3451482111,US
-3451482112,3451486207,CA
+3451482112,3451482439,CA
+3451482440,3451482447,AR
+3451482448,3451483423,CA
+3451483424,3451483431,US
+3451483432,3451486207,CA
3451486208,3451506687,US
3451506688,3451507711,BR
3451507712,3451715583,US
@@ -120963,8 +125480,8 @@
3453375144,3453375167,US
3453375168,3453375191,SA
3453375192,3453375215,US
-3453375216,3453375239,GB
-3453375240,3453375255,US
+3453375216,3453375231,GB
+3453375232,3453375255,US
3453375256,3453375263,IN
3453375264,3453375279,GB
3453375280,3453375319,TK
@@ -121078,22 +125595,30 @@
3453554160,3453554175,GB
3453554176,3453554207,US
3453554208,3453554215,GB
-3453554216,3453554431,US
+3453554216,3453554239,US
+3453554240,3453554255,GB
+3453554256,3453554431,US
3453554432,3453554687,GB
3453554688,3453554863,US
3453554864,3453554879,NL
3453554880,3453555711,US
3453555712,3453555767,GB
3453555768,3453583615,US
-3453583616,3453583631,SG
-3453583632,3453599999,US
+3453583616,3453583695,SG
+3453583696,3453595527,US
+3453595528,3453595551,CA
+3453595552,3453595583,US
+3453595584,3453595623,CA
+3453595624,3453599999,US
3453600000,3453600767,GB
3453600768,3453601863,US
3453601864,3453601871,GB
3453601872,3453601879,CH
3453601880,3453602175,US
3453602176,3453602183,GB
-3453602184,3453607935,US
+3453602184,3453602207,US
+3453602208,3453602223,GB
+3453602224,3453607935,US
3453607936,3453608959,KN
3453608960,3453609983,LC
3453609984,3453610495,AG
@@ -121107,7 +125632,9 @@
3453615104,3453615359,AG
3453615360,3453615615,KN
3453615616,3453616127,AG
-3453616128,3454003013,US
+3453616128,3453681943,US
+3453681944,3453681951,IN
+3453681952,3454003013,US
3454003014,3454003014,ES
3454003015,3454004997,US
3454004998,3454004998,GB
@@ -121147,9 +125674,24 @@
3454703256,3454703263,CA
3454703264,3454703647,US
3454703648,3454703663,CA
-3454703664,3454705151,US
+3454703664,3454703951,US
+3454703952,3454703959,AF
+3454703960,3454704007,US
+3454704008,3454704015,ID
+3454704016,3454704047,US
+3454704048,3454704055,CA
+3454704056,3454704063,US
+3454704064,3454704079,CA
+3454704080,3454704087,AE
+3454704088,3454704103,US
+3454704104,3454704111,GB
+3454704112,3454705151,US
3454705152,3454705215,GB
-3454705216,3454708927,US
+3454705216,3454705439,US
+3454705440,3454705447,GB
+3454705448,3454705511,US
+3454705512,3454705519,CA
+3454705520,3454708927,US
3454708928,3454708991,IN
3454708992,3454710551,US
3454710552,3454710559,SO
@@ -121316,7 +125858,9 @@
3455647488,3455647743,IT
3455647744,3455713279,US
3455713280,3455778815,CA
-3455778816,3455871999,US
+3455778816,3455797375,US
+3455797376,3455797407,FR
+3455797408,3455871999,US
3455872000,3455872255,ZM
3455872256,3456303103,US
3456303104,3456311295,JP
@@ -121596,7 +126140,9 @@
3460453632,3460453887,BS
3460453888,3460507647,US
3460507648,3460507903,MX
-3460507904,3460854439,US
+3460507904,3460800511,US
+3460800512,3460808703,A1
+3460808704,3460854439,US
3460854440,3460854447,CA
3460854448,3460854831,US
3460854832,3460854847,VE
@@ -122264,7 +126810,8 @@
3464341504,3464341759,US
3464341760,3464341775,JP
3464341776,3464341783,AU
-3464341784,3464341807,US
+3464341784,3464341799,US
+3464341800,3464341807,CA
3464341808,3464341815,JP
3464341816,3464341823,US
3464341824,3464341831,PT
@@ -122274,9 +126821,9 @@
3464341896,3464341903,GB
3464341904,3464341927,US
3464341928,3464341935,CV
-3464341936,3464341951,US
-3464341952,3464341959,CZ
-3464341960,3464342543,US
+3464341936,3464341983,US
+3464341984,3464341991,PR
+3464341992,3464342543,US
3464342544,3464342559,SE
3464342560,3464342567,US
3464342568,3464342575,PT
@@ -122296,46 +126843,21 @@
3464384512,3464388607,CA
3464388608,3464394751,US
3464394752,3464396799,VC
-3464396800,3464548367,US
-3464548368,3464548375,AG
-3464548376,3464548391,US
-3464548392,3464548399,AG
-3464548400,3464548415,US
-3464548416,3464548431,AG
-3464548432,3464548479,US
-3464548480,3464548599,AG
-3464548600,3464548607,US
+3464396800,3464548351,US
+3464548352,3464548607,AG
3464548608,3464548863,LC
3464548864,3464549119,KN
3464549120,3464549375,VG
-3464549376,3464549391,US
-3464549392,3464549399,AG
-3464549400,3464549415,US
-3464549416,3464549439,AG
+3464549376,3464549439,AG
3464549440,3464549503,MS
-3464549504,3464549519,AG
-3464549520,3464549551,US
-3464549552,3464549567,AG
-3464549568,3464549639,US
-3464549640,3464549679,AG
-3464549680,3464549687,US
-3464549688,3464549727,AG
+3464549504,3464549727,AG
3464549728,3464549759,KN
-3464549760,3464549855,AG
-3464549856,3464549863,US
-3464549864,3464549871,AG
-3464549872,3464549919,US
-3464549920,3464549927,AG
-3464549928,3464549935,US
-3464549936,3464549943,AG
-3464549944,3464549951,US
-3464549952,3464550015,AG
-3464550016,3464550047,US
-3464550048,3464550127,AG
-3464550128,3464550143,US
+3464549760,3464550143,AG
3464550144,3464550399,LC
3464550400,3464626175,US
-3464626176,3464630271,CA
+3464626432,3464626687,CA
+3464626688,3464627199,US
+3464627968,3464630271,CA
3464630272,3464631295,US
3464631296,3464650751,CA
3464650752,3464664063,US
@@ -122377,11 +126899,23 @@
3465468352,3465468367,FI
3465468368,3465468383,US
3465468384,3465468399,GB
-3465468400,3465510911,US
+3465468400,3465468879,US
+3465468880,3465468911,SG
+3465468912,3465468935,US
+3465468936,3465468943,SG
+3465468944,3465469183,US
+3465469184,3465469215,GB
+3465469216,3465510911,US
3465510912,3465543679,JP
3465543680,3465953503,US
3465953504,3465953535,CA
-3465953536,3465982991,US
+3465953536,3465954175,US
+3465954176,3465954303,CA
+3465954304,3465961607,US
+3465961608,3465961615,CA
+3465961616,3465961631,US
+3465961632,3465961663,CA
+3465961664,3465982991,US
3465982992,3465983007,GB
3465983008,3465983023,US
3465983024,3465983127,GB
@@ -122409,7 +126943,9 @@
3466286104,3466286111,DE
3466286112,3466290687,US
3466290688,3466290943,CH
-3466290944,3466313727,US
+3466290944,3466294271,US
+3466294272,3466294319,CA
+3466294320,3466313727,US
3466313728,3466317823,CA
3466317824,3466489855,US
3466489856,3466490111,CA
@@ -123359,17 +127895,29 @@
3470360688,3470360695,AF
3470360696,3470360799,US
3470360800,3470360807,CA
-3470360808,3470360815,US
-3470360816,3470360823,AU
-3470360824,3470361039,US
+3470360808,3470360895,US
+3470360896,3470360911,CA
+3470360912,3470360927,US
+3470360928,3470360935,CA
+3470360936,3470361039,US
3470361040,3470361055,CA
-3470361056,3470361487,US
+3470361056,3470361231,US
+3470361232,3470361247,IN
+3470361248,3470361295,US
+3470361296,3470361311,IN
+3470361312,3470361471,US
+3470361472,3470361479,JP
+3470361480,3470361487,US
3470361488,3470361495,SG
3470361496,3470361663,US
3470361664,3470361671,CA
3470361672,3470361703,US
3470361704,3470361711,AF
-3470361712,3470362111,US
+3470361712,3470361771,US
+3470361772,3470361775,AE
+3470361776,3470362099,US
+3470362100,3470362103,AE
+3470362104,3470362111,US
3470362112,3470362119,CA
3470362120,3470362127,AU
3470362128,3470362135,US
@@ -123384,11 +127932,12 @@
3470362320,3470362335,AF
3470362336,3470362455,US
3470362456,3470362471,CA
-3470362472,3470362487,US
-3470362488,3470362495,ES
-3470362496,3470362559,US
+3470362472,3470362543,US
+3470362544,3470362559,SE
3470362560,3470362623,CA
-3470362624,3470362791,US
+3470362624,3470362731,US
+3470362732,3470362735,AE
+3470362736,3470362791,US
3470362792,3470362799,SG
3470362800,3470362847,US
3470362848,3470362855,AR
@@ -123401,7 +127950,11 @@
3470363544,3470363555,AF
3470363556,3470363559,US
3470363560,3470363567,CA
-3470363568,3470363903,US
+3470363568,3470363615,US
+3470363616,3470363631,ES
+3470363632,3470363671,US
+3470363672,3470363679,SE
+3470363680,3470363903,US
3470363904,3470363919,CA
3470363920,3470363967,US
3470363968,3470363983,CA
@@ -123411,9 +127964,7 @@
3470364096,3470364103,AU
3470364104,3470364415,US
3470364416,3470364479,CA
-3470364480,3470364495,US
-3470364496,3470364503,CA
-3470364504,3470364655,US
+3470364480,3470364655,US
3470364656,3470364663,CA
3470364664,3470458879,US
3470458880,3470475263,KR
@@ -123447,7 +127998,9 @@
3470645744,3470645747,ES
3470645748,3470645751,US
3470645752,3470645759,BR
-3470645760,3470646015,US
+3470645760,3470645791,US
+3470645792,3470645799,CN
+3470645800,3470646015,US
3470646016,3470646019,BR
3470646020,3470646035,US
3470646036,3470646039,VI
@@ -123695,7 +128248,9 @@
3471572992,3472375807,US
3472375808,3472392191,PR
3472392192,3472408575,CA
-3472408576,3472990207,US
+3472408576,3472613375,US
+3472613376,3472621567,A1
+3472621568,3472990207,US
3472990208,3472990463,AS
3472990464,3473039359,US
3473039360,3473040639,BM
@@ -123856,7 +128411,9 @@
3476722240,3476722255,SA
3476722256,3476722287,US
3476722288,3476722319,IT
-3476722320,3476722527,US
+3476722320,3476722495,US
+3476722496,3476722511,AU
+3476722512,3476722527,US
3476722528,3476722543,AU
3476722544,3476722591,US
3476722592,3476722607,GB
@@ -123926,7 +128483,9 @@
3478261904,3478261935,SG
3478261936,3478262271,US
3478262272,3478262279,SG
-3478262280,3478294527,US
+3478262280,3478262655,US
+3478262656,3478262671,SG
+3478262672,3478294527,US
3478294528,3478294543,GB
3478294544,3478323391,US
3478323392,3478323399,CA
@@ -124015,7 +128574,9 @@
3479294224,3479294231,TH
3479294232,3479294419,US
3479294420,3479294423,CA
-3479294424,3479294487,US
+3479294424,3479294425,US
+3479294426,3479294427,CA
+3479294428,3479294487,US
3479294488,3479294495,MX
3479294496,3479294527,US
3479294528,3479294543,BD
@@ -124025,9 +128586,7 @@
3479294664,3479294671,AU
3479294672,3479294775,US
3479294776,3479294783,CA
-3479294784,3479294911,US
-3479294912,3479294919,CA
-3479294920,3479295015,US
+3479294784,3479295015,US
3479295016,3479295023,MY
3479295024,3479295071,US
3479295072,3479295079,CR
@@ -124308,9 +128867,7 @@
3480907264,3480907775,FR
3480907776,3480968191,US
3480968192,3480968447,AU
-3480968448,3481169151,US
-3481169152,3481169407,NZ
-3481169408,3481182503,US
+3480968448,3481182503,US
3481182504,3481182511,CA
3481182512,3481665535,US
3481665536,3481731071,CA
@@ -124352,7 +128909,9 @@
3482778384,3482779647,PR
3482779648,3482910719,US
3482910720,3482927103,CA
-3482927104,3483296004,US
+3482927104,3483238399,US
+3483238400,3483254783,A1
+3483254784,3483296004,US
3483296005,3483296005,BE
3483296006,3483435007,US
3483435008,3483533311,CA
@@ -124527,7 +129086,9 @@
3484777696,3484778495,CA
3484778496,3484884991,US
3484884992,3484893183,CA
-3484893184,3485220863,US
+3484893184,3484937103,US
+3484937104,3484937111,SE
+3484937112,3485220863,US
3485220864,3485229055,CA
3485229056,3485290463,US
3485290464,3485290479,GB
@@ -124538,7 +129099,8 @@
3485446144,3485458847,US
3485458848,3485458863,FR
3485458864,3485462527,US
-3485462528,3485466623,VC
+3485462528,3485464575,VC
+3485464576,3485466623,LC
3485466624,3485597695,US
3485597696,3485671583,CA
3485671584,3485671615,US
@@ -124814,7 +129376,9 @@
3486700440,3486700447,IT
3486700448,3486701311,US
3486701312,3486701567,CA
-3486701568,3486711551,US
+3486701568,3486707559,US
+3486707560,3486707567,HN
+3486707568,3486711551,US
3486711552,3486711807,CA
3486711808,3487039487,US
3487039488,3487105023,CA
@@ -124838,9 +129402,13 @@
3487507376,3487507391,CA
3487507392,3487559711,US
3487559712,3487559743,AU
-3487559744,3487559855,US
-3487559856,3487559871,AU
-3487559872,3487766527,US
+3487559744,3487559839,US
+3487559840,3487559871,AU
+3487559872,3487560167,US
+3487560168,3487560175,AU
+3487560176,3487561471,US
+3487561472,3487561727,AU
+3487561728,3487766527,US
3487766528,3487768575,CA
3487768576,3487842303,US
3487842304,3487858687,CA
@@ -124850,7 +129418,9 @@
3487862016,3487875071,BM
3487875072,3487891455,US
3487891456,3487907839,CA
-3487907840,3487969791,US
+3487907840,3487912959,US
+3487912960,3487913087,CA
+3487913088,3487969791,US
3487969792,3487970047,KW
3487970048,3488014335,US
3488014336,3488022527,CA
@@ -124995,9 +129565,7 @@
3491743744,3491745791,CO
3491745792,3491764783,US
3491764784,3491764791,PR
-3491764792,3491780607,US
-3491780608,3491781631,EC
-3491781632,3491826687,US
+3491764792,3491826687,US
3491826688,3491826943,AN
3491826944,3491832575,US
3491832576,3491832583,PR
@@ -125036,7 +129604,9 @@
3492188800,3492188831,CH
3492188832,3492472039,US
3492472040,3492472047,GB
-3492472048,3492646623,US
+3492472048,3492576143,US
+3492576144,3492576151,CN
+3492576152,3492646623,US
3492646624,3492646639,IL
3492646640,3492669695,US
3492669696,3492671487,PA
@@ -125078,13 +129648,11 @@
3493081600,3493082623,PY
3493082624,3493089023,US
3493089024,3493089279,A2
-3493089280,3493137151,US
-3493137152,3493137215,DE
-3493137216,3493137247,US
-3493137248,3493137407,DE
-3493137408,3493138207,US
+3493089280,3493138207,US
3493138208,3493138239,DE
-3493138240,3493141279,US
+3493138240,3493140223,US
+3493140224,3493140479,DE
+3493140480,3493141279,US
3493141280,3493141311,CY
3493141312,3493244927,US
3493244928,3493249023,PR
@@ -125107,7 +129675,9 @@
3493901760,3493901767,AE
3493901768,3493901791,US
3493901792,3493901823,AE
-3493901824,3493901951,US
+3493901824,3493901847,US
+3493901848,3493901851,CA
+3493901852,3493901951,US
3493901952,3493901983,CA
3493901984,3493902215,US
3493902216,3493902223,CA
@@ -125197,9 +129767,7 @@
3494122496,3494135807,US
3494135808,3494136831,CA
3494136832,3494139903,US
-3494139904,3494141735,CA
-3494141736,3494141743,US
-3494141744,3494141951,CA
+3494139904,3494141951,CA
3494141952,3494143999,US
3494144000,3494145023,CA
3494145024,3494159039,US
@@ -125303,10 +129871,8 @@
3494313328,3494313343,CO
3494313344,3494313359,US
3494313360,3494313375,MX
-3494313376,3494313391,ES
-3494313392,3494313535,US
-3494313536,3494313551,AU
-3494313552,3494316031,US
+3494313376,3494313383,ES
+3494313384,3494316031,US
3494316032,3494317055,CA
3494317056,3494336511,US
3494336512,3494337023,CA
@@ -125394,8 +129960,7 @@
3494438144,3494438399,DM
3494438400,3494438655,KN
3494438656,3494438911,DM
-3494438912,3494439935,CA
-3494439936,3494449287,US
+3494438912,3494449287,US
3494449288,3494449311,CA
3494449312,3494449439,US
3494449440,3494449663,CA
@@ -125508,8 +130073,8 @@
3494701056,3494705319,US
3494705320,3494705327,MX
3494705328,3494712319,US
-3494712320,3494713343,CA
-3494713344,3494727679,US
+3494712320,3494712575,CA
+3494712576,3494727679,US
3494727680,3494729727,CA
3494729728,3494730751,US
3494730752,3494731775,CA
@@ -125525,9 +130090,7 @@
3494745304,3494745311,AU
3494745312,3494745879,US
3494745880,3494745887,GB
-3494745888,3494745919,US
-3494745920,3494745927,CN
-3494745928,3494745951,US
+3494745888,3494745951,US
3494745952,3494745959,GB
3494745960,3494746019,US
3494746020,3494746023,AU
@@ -125573,17 +130136,29 @@
3494852608,3494854655,CA
3494854656,3494861087,US
3494861088,3494861095,CA
-3494861096,3494861615,US
+3494861096,3494861575,US
+3494861576,3494861583,CH
+3494861584,3494861615,US
3494861616,3494861623,AU
3494861624,3494861839,US
3494861840,3494861855,AU
-3494861856,3494862639,US
+3494861856,3494861935,US
+3494861936,3494861943,AU
+3494861944,3494861999,US
+3494862000,3494862007,CA
+3494862008,3494862255,US
+3494862256,3494862263,CZ
+3494862264,3494862639,US
3494862640,3494862647,JP
3494862648,3494862847,US
3494862848,3494863871,DM
3494863872,3494866943,US
3494866944,3494867967,CA
-3494867968,3494893567,US
+3494867968,3494874111,US
+3494874112,3494874367,ES
+3494874368,3494874879,US
+3494874880,3494874911,ES
+3494874912,3494893567,US
3494893568,3494894591,CA
3494894592,3494906455,US
3494906456,3494906463,GB
@@ -125657,21 +130232,24 @@
3495153664,3495155711,CA
3495155712,3495157039,US
3495157040,3495157047,SE
-3495157048,3495159807,US
-3495159808,3495159815,ES
-3495159816,3495159839,US
+3495157048,3495159839,US
3495159840,3495159847,BR
3495159848,3495159871,US
3495159872,3495159879,AE
-3495159880,3495159895,US
+3495159880,3495159887,BD
+3495159888,3495159895,GB
3495159896,3495159903,IN
-3495159904,3495160111,US
+3495159904,3495159927,US
+3495159928,3495159935,IN
+3495159936,3495160071,US
+3495160072,3495160079,HK
+3495160080,3495160111,US
3495160112,3495160119,NZ
3495160120,3495160303,US
3495160304,3495160319,TR
-3495160320,3495160367,US
-3495160368,3495160383,ZA
-3495160384,3495160447,US
+3495160320,3495160359,US
+3495160360,3495160367,GB
+3495160368,3495160447,US
3495160448,3495160455,BR
3495160456,3495160463,US
3495160464,3495160479,TR
@@ -125706,9 +130284,7 @@
3495235904,3495235911,CA
3495235912,3495235975,US
3495235976,3495235983,VN
-3495235984,3495235999,US
-3495236000,3495236007,HK
-3495236008,3495236015,US
+3495235984,3495236015,US
3495236016,3495236031,GB
3495236032,3495236247,US
3495236248,3495236255,AZ
@@ -125843,7 +130419,13 @@
3495515136,3495516159,CA
3495516160,3495520375,US
3495520376,3495520379,SG
-3495520380,3495526399,US
+3495520380,3495520571,US
+3495520572,3495520579,KE
+3495520580,3495520667,US
+3495520668,3495520706,BR
+3495520707,3495520707,US
+3495520708,3495520715,CH
+3495520716,3495526399,US
3495526400,3495527423,CA
3495527424,3495542783,US
3495542784,3495544831,A2
@@ -125935,7 +130517,9 @@
3495749736,3495749745,US
3495749746,3495749785,CA
3495749786,3495749829,GB
-3495749830,3495749908,CA
+3495749830,3495749846,CA
+3495749847,3495749856,US
+3495749857,3495749908,CA
3495749909,3495749933,GB
3495749934,3495749959,CA
3495749960,3495749990,GB
@@ -125983,7 +130567,7 @@
3495866080,3495866359,CA
3495866360,3495866363,US
3495866364,3495866367,CA
-3495866368,3495868415,VC
+3495866368,3495868415,LC
3495868416,3495871487,US
3495871488,3495872511,CA
3495872512,3495881119,US
@@ -126265,7 +130849,13 @@
3497226392,3497226399,IR
3497226400,3497226687,US
3497226688,3497226719,GB
-3497226720,3497233407,US
+3497226720,3497226943,US
+3497226944,3497226975,CA
+3497226976,3497227311,US
+3497227312,3497227327,CA
+3497227328,3497227599,US
+3497227600,3497227615,CA
+3497227616,3497233407,US
3497233408,3497233663,CN
3497233664,3497263815,US
3497263816,3497263823,GB
@@ -126388,11 +130978,31 @@
3500486656,3500490751,CR
3500490752,3500613631,US
3500613632,3500614655,MZ
-3500614656,3500664511,US
-3500664512,3500664527,CA
-3500664528,3500664831,US
-3500664832,3500665087,CA
-3500665088,3500689407,US
+3500614656,3500663545,US
+3500663546,3500663546,CA
+3500663547,3500664319,US
+3500664320,3500664375,CA
+3500664376,3500664383,US
+3500664384,3500664431,CA
+3500664432,3500664511,US
+3500664512,3500664535,CA
+3500664536,3500664573,US
+3500664574,3500664574,CA
+3500664575,3500664575,US
+3500664576,3500664591,CA
+3500664592,3500664831,US
+3500664832,3500665103,CA
+3500665104,3500665119,US
+3500665120,3500665343,CA
+3500665344,3500665855,US
+3500665856,3500665871,CA
+3500665872,3500665887,US
+3500665888,3500665935,CA
+3500665936,3500665983,US
+3500665984,3500666111,CA
+3500666112,3500669951,US
+3500669952,3500670463,CA
+3500670464,3500689407,US
3500689408,3500689919,CL
3500689920,3500707327,US
3500707328,3500707839,CA
@@ -126409,7 +131019,11 @@
3500809992,3500809999,CA
3500810000,3500810247,US
3500810248,3500810255,CA
-3500810256,3500812175,US
+3500810256,3500811567,US
+3500811568,3500811583,AU
+3500811584,3500811591,US
+3500811592,3500811631,AU
+3500811632,3500812175,US
3500812176,3500812183,GB
3500812184,3500921279,US
3500921280,3500921311,AU
@@ -126506,10 +131120,7 @@
3503250432,3503250943,PK
3503250944,3503323135,US
3503323136,3503323647,KE
-3503323648,3503323903,A2
-3503323904,3503372031,US
-3503372032,3503372287,A2
-3503372288,3503386111,US
+3503323648,3503386111,US
3503386112,3503386367,CH
3503386368,3503413871,US
3503413872,3503413887,PR
@@ -126590,9 +131201,7 @@
3506135264,3506135295,GB
3506135296,3506161975,US
3506161976,3506161983,AF
-3506161984,3506177967,US
-3506177968,3506177983,DE
-3506177984,3506192639,US
+3506161984,3506192639,US
3506192640,3506192895,A2
3506192896,3506194535,US
3506194536,3506194543,AU
@@ -127392,7 +132001,9 @@
3509777450,3509777545,ID
3509777546,3509777584,US
3509777585,3509777648,ID
-3509777649,3509778399,US
+3509777649,3509778239,US
+3509778240,3509778271,IN
+3509778272,3509778399,US
3509778400,3509778431,NL
3509778432,3509778703,US
3509778704,3509778711,CA
@@ -127472,15 +132083,17 @@
3510242560,3510245375,CA
3510245376,3510245631,BD
3510245632,3510246735,CA
-3510246736,3510246767,US
-3510246768,3510249471,CA
+3510246736,3510246775,US
+3510246776,3510249471,CA
3510249472,3510249983,QA
3510249984,3510251519,CA
3510251520,3510252799,DO
3510252800,3510253311,CA
3510253312,3510253567,NC
3510253568,3510253631,US
-3510253632,3510255439,CA
+3510253632,3510253759,CA
+3510253760,3510253775,US
+3510253776,3510255439,CA
3510255440,3510255447,US
3510255448,3510261503,CA
3510261504,3510261759,ZM
@@ -128138,9 +132751,13 @@
3512269824,3512270847,US
3512270848,3512336383,CA
3512336384,3512369151,US
-3512369152,3512378435,CA
+3512369152,3512377231,CA
+3512377232,3512377239,US
+3512377240,3512378435,CA
3512378436,3512378436,US
-3512378437,3512385535,CA
+3512378437,3512378983,CA
+3512378984,3512378991,US
+3512378992,3512385535,CA
3512385536,3512397823,US
3512397824,3512399375,CA
3512399376,3512399383,US
@@ -128598,9 +133215,7 @@
3513501568,3513501631,AZ
3513501632,3513502719,US
3513502720,3513502975,A1
-3513502976,3513503743,US
-3513503744,3513503999,SC
-3513504000,3513506047,US
+3513502976,3513506047,US
3513506048,3513506303,A1
3513506304,3513506559,US
3513506560,3513506815,CA
@@ -128608,7 +133223,9 @@
3513670912,3513671167,A2
3513671168,3513778175,US
3513778176,3513794559,CA
-3513794560,3514007551,US
+3513794560,3513839615,US
+3513839616,3513843711,A1
+3513843712,3514007551,US
3514007552,3514040319,CA
3514040320,3514367999,US
3514368000,3514433535,CA
@@ -128646,11 +133263,7 @@
3515453056,3515453071,JP
3515453072,3515453679,US
3515453680,3515453687,JP
-3515453688,3515454063,US
-3515454064,3515454079,JP
-3515454080,3515454095,US
-3515454096,3515454111,JP
-3515454112,3515454143,US
+3515453688,3515454143,US
3515454144,3515454207,JP
3515454208,3515454399,US
3515454400,3515454463,JP
@@ -128663,13 +133276,16 @@
3515456768,3515596799,US
3515596800,3515613183,CA
3515613184,3515686911,US
-3515686912,3515695103,CA
+3515686912,3515687167,CA
+3515687168,3515688191,US
+3515688192,3515695103,CA
3515695104,3515711487,US
3515711488,3515731967,CA
-3515731968,3515736063,US
-3515744256,3515793351,US
+3515731968,3515793351,US
3515793352,3515793359,MO
-3515793360,3515867151,US
+3515793360,3515860351,US
+3515860352,3515860431,IN
+3515860432,3515867151,US
3515867152,3515867167,AU
3515867168,3515867391,US
3515867392,3515867519,AU
@@ -128700,7 +133316,9 @@
3516139264,3516153855,US
3516153856,3516162047,CA
3516162048,3516170239,US
-3516170240,3516203007,CA
+3516170240,3516193943,CA
+3516193944,3516193951,US
+3516193952,3516203007,CA
3516203008,3516334079,US
3516334080,3516342271,CA
3516342272,3516351055,US
@@ -128815,9 +133433,7 @@
3517396144,3517396175,US
3517396176,3517396911,CA
3517396912,3517396927,US
-3517396928,3517396943,CA
-3517396944,3517396959,US
-3517396960,3517397503,CA
+3517396928,3517397503,CA
3517397504,3517397759,US
3517397760,3517398015,CA
3517398016,3517398527,US
@@ -128990,8 +133606,8 @@
3517437000,3517437007,CA
3517437008,3517437015,US
3517437016,3517437039,CA
-3517437040,3517437063,US
-3517437064,3517437071,CA
+3517437040,3517437055,US
+3517437056,3517437071,CA
3517437072,3517437079,US
3517437080,3517437087,CA
3517437088,3517437095,NO
@@ -129011,9 +133627,7 @@
3517438880,3517438911,KW
3517438912,3517439487,CA
3517439488,3517439615,US
-3517439616,3517440255,CA
-3517440256,3517440511,US
-3517440512,3517442239,CA
+3517439616,3517442239,CA
3517442240,3517442303,US
3517442304,3517442319,CA
3517442320,3517442335,US
@@ -129061,7 +133675,8 @@
3517596672,3517596927,NO
3517596928,3517597183,IE
3517597184,3517597695,US
-3517597696,3517598207,SE
+3517597696,3517597951,IE
+3517597952,3517598207,DE
3517598208,3517598463,IE
3517598464,3517598527,SE
3517598528,3517598559,FR
@@ -129075,7 +133690,9 @@
3517601280,3517602047,SE
3517602048,3517602303,DE
3517602304,3517602559,US
-3517602560,3517602623,SE
+3517602560,3517602575,SE
+3517602576,3517602591,US
+3517602592,3517602623,SE
3517602624,3517602815,US
3517602816,3517603071,SE
3517603072,3517603615,US
@@ -129191,11 +133808,7 @@
3518897120,3518897127,IT
3518897128,3518903191,US
3518903192,3518903199,JP
-3518903200,3518903927,US
-3518903928,3518903935,RU
-3518903936,3518904015,US
-3518904016,3518904031,EG
-3518904032,3518905599,US
+3518903200,3518905599,US
3518905600,3518905855,GB
3518905856,3518911743,US
3518911744,3518911999,GB
@@ -129299,7 +133912,10 @@
3519420768,3519420775,HK
3519420776,3519422495,US
3519422496,3519422527,CA
-3519422528,3519475711,US
+3519422528,3519466895,US
+3519466896,3519466911,SZ
+3519466912,3519467519,US
+3519469568,3519475711,US
3519475712,3519476223,BH
3519476224,3519477759,A2
3519477760,3519578367,US
@@ -129344,8 +133960,7 @@
3519723520,3519724031,CA
3519724032,3519741951,US
3519741952,3519758335,ZA
-3519758336,3519791103,US
-3519799296,3519799871,US
+3519758336,3519799871,US
3519799872,3519799903,IN
3519799904,3519805119,US
3519805120,3519805183,GB
@@ -129608,7 +134223,9 @@
3520036360,3520036863,CA
3520036864,3520071823,US
3520071824,3520071839,NL
-3520071840,3520073967,US
+3520071840,3520072751,US
+3520072752,3520072767,AR
+3520072768,3520073967,US
3520073968,3520073975,CA
3520073976,3520074671,US
3520074672,3520074687,GB
@@ -129635,7 +134252,9 @@
3520086272,3520086527,CA
3520086528,3520086959,US
3520086960,3520086975,CA
-3520086976,3520088447,US
+3520086976,3520087327,US
+3520087328,3520087359,DE
+3520087360,3520088447,US
3520088448,3520088463,ES
3520088464,3520095455,US
3520095456,3520095471,NL
@@ -129665,7 +134284,9 @@
3520527872,3520528383,A2
3520528384,3520626687,US
3520626688,3520634879,CA
-3520634880,3520675839,US
+3520634880,3520643071,US
+3520643072,3520659455,A1
+3520659456,3520675839,US
3520675840,3520675991,CA
3520675992,3520675999,US
3520676000,3520679439,CA
@@ -129693,15 +134314,27 @@
3520956156,3520956159,CH
3520956160,3520978943,US
3520978944,3520979711,BZ
-3520979712,3520999423,US
+3520979712,3520987903,US
+3520987904,3520987935,A1
+3520987936,3520994815,US
+3520994816,3520995327,ES
+3520995328,3520999423,US
3520999424,3521003519,CA
3521003520,3521003583,US
3521003584,3521003647,IL
-3521003648,3521005319,US
+3521003648,3521004031,US
+3521004032,3521004039,MY
+3521004040,3521004063,US
+3521004064,3521004071,RO
+3521004072,3521004159,US
+3521004160,3521004175,FR
+3521004176,3521005311,US
+3521005312,3521005319,MY
3521005320,3521005327,GB
-3521005328,3521009663,US
-3521009664,3521009671,AR
-3521009672,3521011719,US
+3521005328,3521005335,DE
+3521005336,3521009679,US
+3521009680,3521009687,MY
+3521009688,3521011719,US
3521011720,3521011727,BR
3521011728,3521011735,AU
3521011736,3521011743,US
@@ -129779,7 +134412,9 @@
3521372096,3521372159,CA
3521372160,3521377407,US
3521377408,3521377439,IT
-3521377440,3521835903,US
+3521377440,3521835567,US
+3521835568,3521835575,CH
+3521835576,3521835903,US
3521835904,3521835967,CA
3521835968,3521836687,US
3521836688,3521836703,GB
@@ -129820,7 +134455,8 @@
3521933842,3521933929,US
3521933930,3521933937,IN
3521933938,3521933945,GB
-3521933946,3521933981,US
+3521933946,3521933953,EG
+3521933954,3521933981,US
3521933982,3521933989,IN
3521933990,3521934089,US
3521934090,3521934097,EG
@@ -129828,18 +134464,18 @@
3521934122,3521934129,ID
3521934130,3521934137,US
3521934138,3521934145,GR
-3521934146,3521934153,ID
-3521934154,3521934169,US
+3521934146,3521934161,ID
+3521934162,3521934169,US
3521934170,3521934177,EG
-3521934178,3521934233,US
+3521934178,3521934185,US
+3521934186,3521934201,LK
+3521934202,3521934233,US
3521934234,3521934241,ID
3521934242,3521934421,US
3521934422,3521934429,EG
3521934430,3521934437,US
3521934438,3521934445,IN
-3521934446,3521934477,US
-3521934478,3521934485,ID
-3521934486,3521934509,US
+3521934446,3521934509,US
3521934510,3521934517,IN
3521934518,3521934735,US
3521934736,3521934743,EG
@@ -129847,8 +134483,8 @@
3521934769,3521934776,MA
3521934777,3521935310,US
3521935311,3521935318,EG
-3521935319,3521935717,US
-3521935718,3521935725,IN
+3521935319,3521935709,US
+3521935710,3521935725,IN
3521935726,3521935993,US
3521935994,3521936025,EG
3521936026,3521936049,US
@@ -129863,7 +134499,8 @@
3521936670,3521936677,PK
3521936678,3521936739,US
3521936740,3521936747,ID
-3521936748,3521936766,US
+3521936748,3521936758,US
+3521936759,3521936766,IN
3521936767,3521936774,PE
3521936775,3521936827,US
3521936828,3521936860,EG
@@ -129874,7 +134511,9 @@
3521936978,3521936993,US
3521936994,3521937001,LK
3521937002,3521937005,US
-3521937006,3521937013,EG
+3521937006,3521937009,EG
+3521937010,3521937011,US
+3521937012,3521937013,EG
3521937014,3521937017,US
3521937018,3521937025,SG
3521937026,3521937161,US
@@ -129924,8 +134563,7 @@
3522133664,3522133695,DE
3522133696,3522133759,US
3522133760,3522133791,IR
-3522133792,3522133823,DE
-3522133824,3522174975,US
+3522133792,3522174975,US
3522174976,3522179071,BM
3522179072,3522195455,US
3522195456,3522199551,CA
@@ -129975,7 +134613,7 @@
3523553280,3523555327,MY
3523555328,3523557375,NZ
3523557376,3523575807,PH
-3523579904,3523583999,CN
+3523575808,3523583999,CN
3523584000,3523592479,HK
3523592480,3523592495,YE
3523592496,3523592511,HK
@@ -130202,9 +134840,7 @@
3524781792,3524781823,SG
3524781824,3524788223,PH
3524788224,3524853759,SG
-3524853760,3525300739,CN
-3525300740,3525300743,US
-3525300744,3526361087,CN
+3524853760,3526361087,CN
3526361088,3526393855,NZ
3526393856,3526395903,JP
3526395904,3526397951,KH
@@ -130348,9 +134984,7 @@
3546808320,3547856895,KR
3547856896,3548905471,JP
3548905472,3551002623,CN
-3551002624,3554544607,KR
-3554544608,3554544639,DE
-3554544640,3556769791,KR
+3551002624,3556769791,KR
3556769792,3556774399,DE
3556774400,3556786175,EU
3556786176,3556794367,RU
@@ -130373,6 +135007,10 @@
3556851712,3556868095,UA
3556868096,3556876287,GB
3556876288,3556884479,NL
+3556884480,3556886527,IR
+3556886528,3556888575,GB
+3556888576,3556890623,US
+3556890624,3556892671,GB
3556892672,3556900863,RU
3556900864,3556909055,GB
3556909056,3556925439,DE
@@ -130456,26 +135094,27 @@
3557138432,3557146623,RU
3557146624,3557154815,SK
3557154816,3557171199,RU
-3557171200,3557172479,IT
+3557171200,3557172479,A2
3557172480,3557172991,IR
3557172992,3557173503,IQ
3557173504,3557173631,IR
3557173632,3557173695,IQ
3557173696,3557173703,AE
-3557173704,3557173759,IT
+3557173704,3557173759,A2
3557173760,3557174015,IR
-3557174016,3557174527,IT
+3557174016,3557174527,A2
3557174528,3557174783,IR
3557174784,3557175039,AE
3557175040,3557176063,IR
-3557176064,3557176575,IT
+3557176064,3557176575,A2
3557176576,3557176619,NE
-3557176620,3557176831,IT
+3557176620,3557176831,A2
3557176832,3557177023,IQ
-3557177024,3557177199,IT
+3557177024,3557177199,A2
3557177200,3557177215,IR
-3557177216,3557178367,IT
-3557178368,3557179135,IR
+3557177216,3557177343,A2
+3557177344,3557177599,IT
+3557177600,3557179135,A2
3557179136,3557179391,IT
3557179392,3557213351,DE
3557213352,3557213359,US
@@ -130507,16 +135146,16 @@
3557336192,3557336255,EU
3557336256,3557336319,BE
3557336320,3557336575,EU
-3557336576,3557336671,BE
-3557336672,3557336703,EU
-3557336704,3557336831,BE
+3557336576,3557336831,BE
3557336832,3557338111,EU
3557338112,3557338367,BE
3557338368,3557338495,EU
-3557338496,3557339175,BE
+3557338496,3557338615,BE
+3557338616,3557338623,EU
+3557338624,3557339175,BE
3557339176,3557339183,EU
-3557339184,3557339199,BE
-3557339200,3557339215,EU
+3557339184,3557339191,BE
+3557339192,3557339215,EU
3557339216,3557339223,BE
3557339224,3557339239,EU
3557339240,3557339247,BE
@@ -130566,9 +135205,7 @@
3557360560,3557360575,JE
3557360576,3557360680,GB
3557360681,3557360687,JE
-3557360688,3557360891,GB
-3557360892,3557360895,JE
-3557360896,3557360927,GB
+3557360688,3557360927,GB
3557360928,3557360943,JE
3557360944,3557360959,GB
3557360960,3557360967,JE
@@ -130600,11 +135237,9 @@
3557363672,3557363679,JE
3557363680,3557364103,GB
3557364104,3557364107,JE
-3557364108,3557364147,GB
-3557364148,3557364151,JE
-3557364152,3557364159,GB
-3557364160,3557364223,JE
-3557364224,3557364479,GB
+3557364108,3557364195,GB
+3557364196,3557364199,JE
+3557364200,3557364479,GB
3557364480,3557364495,JE
3557364496,3557364527,GB
3557364528,3557364559,JE
@@ -130650,11 +135285,11 @@
3557365936,3557366015,JE
3557366016,3557366055,GB
3557366056,3557366063,JE
-3557366064,3557366111,GB
-3557366112,3557366119,JE
-3557366120,3557366263,GB
+3557366064,3557366263,GB
3557366264,3557366271,JE
-3557366272,3557367807,GB
+3557366272,3557366279,GB
+3557366280,3557366287,JE
+3557366288,3557367807,GB
3557367808,3557375999,DE
3557376000,3557384191,ES
3557384192,3557392383,GB
@@ -130721,7 +135356,10 @@
3557810176,3557818367,ES
3557818368,3557826559,RU
3557826560,3557834751,AT
-3557834752,3557842943,IR
+3557834752,3557836287,GB
+3557836288,3557836543,IR
+3557836544,3557837055,GB
+3557837056,3557842943,IR
3557842944,3557851135,FI
3557851136,3557859327,HU
3557859328,3557859839,SE
@@ -130734,7 +135372,18 @@
3557860832,3557860847,FI
3557860848,3557860863,SE
3557860864,3557861119,NO
-3557861120,3557863887,SE
+3557861120,3557862015,SE
+3557862016,3557862031,BE
+3557862032,3557862399,SE
+3557862400,3557862911,FI
+3557862912,3557863351,SE
+3557863352,3557863359,FI
+3557863360,3557863391,SE
+3557863392,3557863399,FI
+3557863400,3557863487,SE
+3557863488,3557863503,NO
+3557863504,3557863519,DK
+3557863520,3557863887,SE
3557863888,3557863903,NO
3557863904,3557863919,FI
3557863920,3557864287,SE
@@ -130934,11 +135583,13 @@
3558288640,3558288671,BE
3558288672,3558288687,DE
3558288688,3558288895,BE
-3558288896,3558289111,FR
-3558289112,3558289119,GB
+3558288896,3558289103,FR
+3558289104,3558289119,GB
3558289120,3558289151,FR
3558289152,3558289407,GB
-3558289408,3558289663,NL
+3558289408,3558289503,NL
+3558289504,3558289535,GB
+3558289536,3558289663,NL
3558289664,3558289747,IT
3558289748,3558289751,GB
3558289752,3558289775,IT
@@ -130951,11 +135602,12 @@
3558290592,3558290599,BE
3558290600,3558290615,GB
3558290616,3558290663,BE
-3558290664,3558290671,GB
-3558290672,3558290687,BE
+3558290664,3558290679,GB
+3558290680,3558290687,BE
3558290688,3558290871,ES
3558290872,3558290879,GB
-3558290880,3558290943,ES
+3558290880,3558290911,ES
+3558290912,3558290943,GB
3558290944,3558290959,DE
3558290960,3558290967,NL
3558290968,3558290975,GB
@@ -130982,7 +135634,8 @@
3558292608,3558292735,NL
3558292736,3558292863,GB
3558292864,3558292871,CH
-3558292872,3558293119,NL
+3558292872,3558292879,GB
+3558292880,3558293119,NL
3558293120,3558293143,CH
3558293144,3558293151,GB
3558293152,3558293247,NL
@@ -131079,7 +135732,9 @@
3558547456,3558555647,FR
3558555648,3558572031,AT
3558572032,3558580223,DE
-3558580224,3558588415,CH
+3558580224,3558581423,CH
+3558581424,3558581439,DE
+3558581440,3558588415,CH
3558588416,3558596607,CZ
3558596608,3558604799,EE
3558604800,3558612991,GB
@@ -131325,7 +135980,9 @@
3559088368,3559088371,GB
3559088372,3559088375,BE
3559088376,3559088379,GB
-3559088380,3559089023,BE
+3559088380,3559088631,BE
+3559088632,3559088639,DE
+3559088640,3559089023,BE
3559089024,3559089027,GB
3559089028,3559089079,BE
3559089080,3559089087,GB
@@ -131337,8 +135994,8 @@
3559089440,3559089443,GB
3559089444,3559089447,BE
3559089448,3559089451,GB
-3559089452,3559089459,BE
-3559089460,3559089467,GB
+3559089452,3559089463,BE
+3559089464,3559089467,GB
3559089468,3559089547,BE
3559089548,3559089551,GB
3559089552,3559089607,BE
@@ -131387,7 +136044,9 @@
3559091424,3559091427,GB
3559091428,3559091439,BE
3559091440,3559091447,ES
-3559091448,3559091495,BE
+3559091448,3559091455,BE
+3559091456,3559091487,DE
+3559091488,3559091495,BE
3559091496,3559091503,GB
3559091504,3559091507,BE
3559091508,3559091511,GB
@@ -131401,15 +136060,17 @@
3559091632,3559091639,LU
3559091640,3559091815,BE
3559091816,3559091823,GB
-3559091824,3559092159,BE
+3559091824,3559091887,BE
+3559091888,3559091903,GB
+3559091904,3559092159,BE
3559092160,3559092160,GB
3559092161,3559092222,BE
3559092223,3559092223,GB
-3559092224,3559092311,BE
-3559092312,3559092319,GB
-3559092320,3559092399,BE
-3559092400,3559092407,GB
-3559092408,3559092735,BE
+3559092224,3559092239,BE
+3559092240,3559092247,GB
+3559092248,3559092359,BE
+3559092360,3559092367,GB
+3559092368,3559092735,BE
3559092736,3559092739,GB
3559092740,3559092799,BE
3559092800,3559092803,GB
@@ -131426,7 +136087,9 @@
3559093000,3559093007,BE
3559093008,3559093015,GB
3559093016,3559093023,FR
-3559093024,3559093047,BE
+3559093024,3559093031,BE
+3559093032,3559093039,GB
+3559093040,3559093047,BE
3559093048,3559093055,GB
3559093056,3559093063,BE
3559093064,3559093071,FR
@@ -131707,7 +136370,9 @@
3559776256,3559792639,RU
3559792640,3559800831,SA
3559800832,3559809023,IT
-3559809024,3559815595,DE
+3559809024,3559815427,DE
+3559815428,3559815431,AT
+3559815432,3559815595,DE
3559815596,3559815599,NL
3559815600,3559817215,DE
3559817216,3559825407,GB
@@ -131736,19 +136401,13 @@
3559900424,3559900432,EE
3559900433,3559900439,UA
3559900440,3559900447,EE
-3559900448,3559900471,UA
-3559900472,3559900479,EE
-3559900480,3559900483,UA
+3559900448,3559900483,UA
3559900484,3559900487,EE
3559900488,3559900492,UA
3559900493,3559900493,EE
-3559900494,3559900494,UA
-3559900495,3559900495,EE
-3559900496,3559900503,UA
+3559900494,3559900503,UA
3559900504,3559900511,EE
-3559900512,3559900519,UA
-3559900520,3559900523,EE
-3559900524,3559900611,UA
+3559900512,3559900611,UA
3559900612,3559900624,EE
3559900625,3559900927,UA
3559900928,3559900951,EE
@@ -131774,17 +136433,13 @@
3559902240,3559902431,UA
3559902432,3559902463,EE
3559902464,3559902975,UA
-3559902976,3559903487,EE
-3559903488,3559903551,UA
-3559903552,3559903615,EE
-3559903616,3559903679,UA
+3559902976,3559903631,EE
+3559903632,3559903679,UA
3559903680,3559904003,EE
3559904004,3559904015,UA
-3559904016,3559904039,EE
-3559904040,3559904127,UA
-3559904128,3559904383,EE
-3559904384,3559904511,UA
-3559904512,3559904767,EE
+3559904016,3559904043,EE
+3559904044,3559904127,UA
+3559904128,3559904767,EE
3559904768,3559904799,UA
3559904800,3559904815,EE
3559904816,3559905019,UA
@@ -131809,16 +136464,22 @@
3559905318,3559905319,LT
3559905320,3559905323,UA
3559905324,3559905331,EE
-3559905332,3559905535,UA
-3559905536,3559905623,EE
-3559905624,3559905631,UA
-3559905632,3559905695,EE
-3559905696,3559905703,UA
-3559905704,3559905903,EE
+3559905332,3559905347,UA
+3559905348,3559905349,EE
+3559905350,3559905535,UA
+3559905536,3559905615,EE
+3559905616,3559905631,UA
+3559905632,3559905903,EE
3559905904,3559905911,UA
-3559905912,3559906257,EE
+3559905912,3559906239,EE
+3559906240,3559906247,UA
+3559906248,3559906257,EE
3559906258,3559906263,UA
-3559906264,3559906975,EE
+3559906264,3559906267,EE
+3559906268,3559906271,UA
+3559906272,3559906287,EE
+3559906288,3559906303,UA
+3559906304,3559906975,EE
3559906976,3559907071,UA
3559907072,3559907327,EE
3559907328,3559915519,FR
@@ -131867,7 +136528,9 @@
3560235008,3560243199,DE
3560243200,3560247295,BE
3560247296,3560251391,NL
-3560251392,3560253439,RU
+3560251392,3560252351,RU
+3560252352,3560252367,CZ
+3560252368,3560253439,RU
3560253440,3560253695,CZ
3560253696,3560259583,RU
3560259584,3560267775,GB
@@ -132639,9 +137302,7 @@
3560942952,3560942955,ES
3560942956,3560942959,DE
3560942960,3560942963,GB
-3560942964,3560942975,DE
-3560942976,3560942979,IT
-3560942980,3560942983,DE
+3560942964,3560942983,DE
3560942984,3560942987,BE
3560942988,3560942999,IT
3560943000,3560943003,PL
@@ -133263,7 +137924,7 @@
3560943861,3560943865,DE
3560943866,3560943866,BE
3560943867,3560943867,ES
-3560943868,3560943868,FR
+3560943868,3560943868,DE
3560943869,3560943869,LU
3560943870,3560943871,DE
3560943872,3560943875,BR
@@ -134310,7 +138971,9 @@
3561924720,3561924895,GB
3561924896,3561924903,FR
3561924904,3561924911,GB
-3561924912,3561925039,NL
+3561924912,3561924927,NL
+3561924928,3561924943,GB
+3561924944,3561925039,NL
3561925040,3561925087,GB
3561925088,3561925119,NL
3561925120,3561926943,GB
@@ -134352,7 +139015,9 @@
3561939833,3561939835,GB
3561939836,3561940991,IE
3561940992,3561942015,GB
-3561942016,3561947135,IE
+3561942016,3561942847,IE
+3561942848,3561942911,GB
+3561942912,3561947135,IE
3561947136,3561963519,DE
3561963520,3561971711,BE
3561971712,3561975807,CZ
@@ -134392,11 +139057,37 @@
3562086400,3562087423,SE
3562087424,3562088447,GB
3562088448,3562094591,SE
-3562094592,3562105599,GB
+3562094592,3562095607,GB
+3562095608,3562095615,FR
+3562095616,3562096063,GB
+3562096064,3562096127,FR
+3562096128,3562098367,GB
+3562098368,3562098375,FR
+3562098376,3562101471,GB
+3562101472,3562101479,FR
+3562101480,3562101631,GB
+3562101632,3562101639,FR
+3562101640,3562104991,GB
+3562104992,3562104999,FR
+3562105000,3562105599,GB
3562105600,3562105855,FR
3562105856,3562106879,GB
3562106880,3562106911,FR
-3562106912,3562110463,GB
+3562106912,3562106943,GB
+3562106944,3562106959,FR
+3562106960,3562107071,GB
+3562107072,3562107103,FR
+3562107104,3562107231,GB
+3562107232,3562107263,FR
+3562107264,3562107519,GB
+3562107520,3562107583,FR
+3562107584,3562108959,GB
+3562108960,3562108975,FR
+3562108976,3562109567,GB
+3562109568,3562109583,FR
+3562109584,3562110399,GB
+3562110400,3562110431,FR
+3562110432,3562110463,GB
3562110464,3562110719,FR
3562110720,3562110975,GB
3562110976,3562143743,ES
@@ -134422,6 +139113,10 @@
3562258432,3562263975,NL
3562263976,3562263983,BE
3562263984,3562283007,NL
+3562283008,3562285055,IT
+3562285056,3562287103,IE
+3562287104,3562289151,IT
+3562289152,3562291199,FR
3562291200,3562307583,GB
3562307584,3562315775,NL
3562315776,3562321231,GB
@@ -134443,7 +139138,8 @@
3562373120,3562381311,FR
3562381312,3562389503,SI
3562389504,3562395647,GH
-3562395648,3562396159,TZ
+3562395648,3562395903,BR
+3562395904,3562396159,TZ
3562396160,3562397695,SZ
3562397696,3562405887,GB
3562405888,3562414079,FI
@@ -134464,9 +139160,7 @@
3562545152,3562553343,GB
3562553344,3562561535,DK
3562561536,3562569727,UG
-3562569728,3562572143,DE
-3562572144,3562572159,LU
-3562572160,3562572223,DE
+3562569728,3562572223,DE
3562572224,3562572239,US
3562572240,3562572543,DE
3562572544,3562572799,LU
@@ -134533,9 +139227,7 @@
3563005952,3563006463,TR
3563006464,3563006591,DE
3563006592,3563006719,CA
-3563006720,3563006847,DE
-3563006848,3563006911,US
-3563006912,3563007487,DE
+3563006720,3563007487,DE
3563007488,3563007999,TR
3563008000,3563008255,DE
3563008256,3563008511,PL
@@ -134564,7 +139256,7 @@
3563068416,3563069183,NG
3563069184,3563069439,GH
3563069440,3563077631,HU
-3563077632,3563085823,SE
+3563077632,3563085823,KZ
3563085824,3563094015,RU
3563094016,3563096255,DE
3563096256,3563096287,GB
@@ -134579,6 +139271,7 @@
3563097344,3563102207,DE
3563102208,3563110399,CZ
3563110400,3563118591,RU
+3563118592,3563126783,PL
3563126784,3563134975,KG
3563134976,3563143167,IT
3563143168,3563151359,GB
@@ -134766,8 +139459,8 @@
3563848704,3563848979,NL
3563848980,3563848983,ES
3563848984,3563848987,NL
-3563848988,3563848999,ES
-3563849000,3563849151,NL
+3563848988,3563849007,ES
+3563849008,3563849151,NL
3563849152,3563849183,ES
3563849184,3563849191,NL
3563849192,3563849215,ES
@@ -134779,9 +139472,7 @@
3563850048,3563850111,NL
3563850112,3563850239,ES
3563850240,3563850751,GB
-3563850752,3563850767,NL
-3563850768,3563850783,ES
-3563850784,3563850815,NL
+3563850752,3563850815,NL
3563850816,3563850831,ES
3563850832,3563850847,NL
3563850848,3563850879,ES
@@ -134790,7 +139481,9 @@
3563851136,3563851839,NL
3563851840,3563851903,ES
3563851904,3563852031,NL
-3563852032,3563852095,ES
+3563852032,3563852071,ES
+3563852072,3563852079,NL
+3563852080,3563852095,ES
3563852096,3563852191,NL
3563852192,3563852207,GB
3563852208,3563852216,NL
@@ -134805,8 +139498,8 @@
3563853568,3563854079,ES
3563854080,3563854095,NL
3563854096,3563854103,ES
-3563854104,3563854175,NL
-3563854176,3563854239,ES
+3563854104,3563854191,NL
+3563854192,3563854239,ES
3563854240,3563854259,NL
3563854260,3563854591,ES
3563854592,3563854847,NL
@@ -134924,7 +139617,23 @@
3564314624,3564322815,GB
3564322816,3564331007,IT
3564331008,3564339199,ES
-3564339200,3564355583,GB
+3564339200,3564339991,GB
+3564339992,3564339999,NL
+3564340000,3564344031,GB
+3564344032,3564344047,NL
+3564344048,3564345143,GB
+3564345144,3564345151,NL
+3564345152,3564349615,GB
+3564349616,3564349631,NL
+3564349632,3564350399,GB
+3564350400,3564350431,NL
+3564350432,3564351439,GB
+3564351440,3564351455,NL
+3564351456,3564351551,GB
+3564351552,3564351615,NL
+3564351616,3564353207,GB
+3564353208,3564353215,NL
+3564353216,3564355583,GB
3564355584,3564363775,NL
3564363776,3564371967,UA
3564371968,3564380159,DE
@@ -135219,9 +139928,7 @@
3564881664,3564881727,NL
3564881728,3564881935,GB
3564881936,3564881939,NL
-3564881940,3564881983,GB
-3564881984,3564881991,NL
-3564881992,3564881999,GB
+3564881940,3564881999,GB
3564882000,3564882079,NL
3564882080,3564882095,GB
3564882096,3564882119,NL
@@ -135229,9 +139936,7 @@
3564882128,3564882135,NL
3564882136,3564882143,GB
3564882144,3564882239,NL
-3564882240,3564882431,GB
-3564882432,3564882943,NL
-3564882944,3564883007,GB
+3564882240,3564883007,GB
3564883008,3564883039,NL
3564883040,3564883071,GB
3564883072,3564883087,NL
@@ -135245,8 +139950,8 @@
3564884336,3564884343,NL
3564884344,3564884359,GB
3564884360,3564884367,NL
-3564884368,3564884375,GB
-3564884376,3564884399,NL
+3564884368,3564884383,GB
+3564884384,3564884399,NL
3564884400,3564884407,GB
3564884408,3564884415,NL
3564884416,3564884431,GB
@@ -135606,7 +140311,8 @@
3564961320,3564961791,AT
3564961792,3564969983,TR
3564969984,3564972607,DE
-3564972608,3564972631,AT
+3564972608,3564972623,AT
+3564972624,3564972631,DE
3564972632,3564972639,LI
3564972640,3564978175,DE
3564978176,3564986367,GB
@@ -135630,10 +140336,8 @@
3565038664,3565038687,GB
3565038688,3565038719,IE
3565038720,3565038727,GB
-3565038728,3565038759,IE
-3565038760,3565038783,GB
-3565038784,3565038847,IE
-3565038848,3565039615,GB
+3565038728,3565038823,IE
+3565038824,3565039615,GB
3565039616,3565042175,IE
3565042176,3565043711,GB
3565043712,3565047807,AT
@@ -135644,9 +140348,7 @@
3565068288,3565076479,CH
3565076480,3565084671,DE
3565084672,3565092863,IS
-3565092864,3565093391,GB
-3565093392,3565093399,NO
-3565093400,3565096759,GB
+3565092864,3565096759,GB
3565096760,3565096767,IE
3565096768,3565097151,GB
3565097152,3565097167,TZ
@@ -135803,9 +140505,7 @@
3565752464,3565752471,EU
3565752472,3565752479,GB
3565752480,3565752487,EU
-3565752488,3565752535,GB
-3565752536,3565752543,EU
-3565752544,3565752839,GB
+3565752488,3565752839,GB
3565752840,3565752855,EU
3565752856,3565752879,GB
3565752880,3565752887,EU
@@ -136004,9 +140704,7 @@
3566993408,3567058943,TR
3567058944,3567103047,FR
3567103048,3567103055,IT
-3567103056,3567108255,FR
-3567108256,3567108263,SE
-3567108264,3567124479,FR
+3567103056,3567124479,FR
3567124480,3567124991,EU
3567124992,3567125023,GB
3567125024,3567125247,EU
@@ -136205,7 +140903,8 @@
3567393280,3567393535,HU
3567393536,3567393791,GB
3567393792,3567394047,SI
-3567394048,3567394975,GB
+3567394048,3567394175,HR
+3567394176,3567394975,GB
3567394976,3567395007,DE
3567395008,3567395071,GB
3567395072,3567395327,DE
@@ -136451,9 +141150,7 @@
3568848792,3568848799,PL
3568848800,3568848871,DE
3568848872,3568848879,GB
-3568848880,3568876159,DE
-3568876160,3568876287,ES
-3568876288,3568915791,DE
+3568848880,3568915791,DE
3568915792,3568915807,LU
3568915808,3568916399,DE
3568916400,3568916407,IT
@@ -136468,7 +141165,9 @@
3569068544,3569068671,BG
3569068672,3569068951,GB
3569068952,3569068991,DE
-3569068992,3569075711,GB
+3569068992,3569074879,GB
+3569074880,3569074887,IE
+3569074888,3569075711,GB
3569075712,3569075839,FR
3569075840,3569083903,GB
3569083904,3569084159,US
@@ -136893,39 +141592,115 @@
3571056640,3571122175,DE
3571122176,3571187711,GB
3571187712,3571253247,RU
-3571253248,3571268607,BE
+3571253248,3571264607,BE
+3571264608,3571264639,FR
+3571264640,3571268607,BE
3571268608,3571268639,LU
3571268640,3571286015,BE
3571286016,3571318783,DE
3571318784,3571319807,GB
3571319808,3571319935,DE
-3571319936,3571321599,GB
+3571319936,3571320855,GB
+3571320856,3571320863,DE
+3571320864,3571320943,GB
+3571320944,3571320959,DE
+3571320960,3571321599,GB
3571321600,3571321727,DE
-3571321728,3571326207,GB
+3571321728,3571321823,GB
+3571321824,3571321855,DE
+3571321856,3571321983,GB
+3571321984,3571321999,DE
+3571322000,3571323967,GB
+3571323968,3571324031,DE
+3571324032,3571326207,GB
3571326208,3571326215,DE
-3571326216,3571328511,GB
+3571326216,3571326231,GB
+3571326232,3571326247,DE
+3571326248,3571326983,GB
+3571326984,3571326991,DE
+3571326992,3571328511,GB
3571328512,3571328543,DE
-3571328544,3571331839,GB
+3571328544,3571328863,GB
+3571328864,3571328879,DE
+3571328880,3571329215,GB
+3571329216,3571329247,DE
+3571329248,3571331647,GB
+3571331648,3571331679,DE
+3571331680,3571331839,GB
3571331840,3571332351,DE
-3571332352,3571342079,GB
+3571332352,3571335807,GB
+3571335808,3571335935,DE
+3571335936,3571340415,GB
+3571340416,3571340447,DE
+3571340448,3571342079,GB
3571342080,3571342335,DE
-3571342336,3571347455,GB
+3571342336,3571343391,GB
+3571343392,3571343455,DE
+3571343456,3571347455,GB
3571347456,3571347711,BE
-3571347712,3571351551,GB
+3571347712,3571348387,GB
+3571348388,3571348391,DE
+3571348392,3571349087,GB
+3571349088,3571349119,DE
+3571349120,3571351551,GB
3571351552,3571351807,DE
-3571351808,3571355391,GB
+3571351808,3571354463,GB
+3571354464,3571354495,DE
+3571354496,3571355071,GB
+3571355072,3571355135,DE
+3571355136,3571355391,GB
3571355392,3571355903,DE
-3571355904,3571357183,GB
+3571355904,3571355999,GB
+3571356000,3571356031,DE
+3571356032,3571357183,GB
3571357184,3571357695,DE
-3571357696,3571361279,GB
+3571357696,3571357871,GB
+3571357872,3571357919,DE
+3571357920,3571358239,GB
+3571358240,3571358255,DE
+3571358256,3571358999,GB
+3571359000,3571359007,DE
+3571359008,3571359011,GB
+3571359012,3571359015,DE
+3571359016,3571359143,GB
+3571359144,3571359151,DE
+3571359152,3571359191,GB
+3571359192,3571359199,DE
+3571359200,3571359303,GB
+3571359304,3571359311,DE
+3571359312,3571359407,GB
+3571359408,3571359415,DE
+3571359416,3571359447,GB
+3571359448,3571359455,DE
+3571359456,3571361279,GB
3571361280,3571361407,DE
-3571361408,3571362815,GB
+3571361408,3571361471,GB
+3571361472,3571361535,DE
+3571361536,3571361999,GB
+3571362000,3571362015,DE
+3571362016,3571362815,GB
3571362816,3571362879,DE
3571362880,3571363583,GB
3571363584,3571364095,DE
-3571364096,3571368703,GB
+3571364096,3571368623,GB
+3571368624,3571368639,DE
+3571368640,3571368703,GB
3571368704,3571368959,DE
-3571368960,3571384319,GB
+3571368960,3571371327,GB
+3571371328,3571371359,DE
+3571371360,3571379343,GB
+3571379344,3571379351,DE
+3571379352,3571379359,GB
+3571379360,3571379367,DE
+3571379368,3571379375,GB
+3571379376,3571379391,DE
+3571379392,3571379535,GB
+3571379536,3571379559,DE
+3571379560,3571379887,GB
+3571379888,3571379895,DE
+3571379896,3571382623,GB
+3571382624,3571382655,DE
+3571382656,3571384319,GB
3571384320,3571385151,DE
3571385152,3571385183,GB
3571385184,3571385631,DE
@@ -136942,7 +141717,9 @@
3571415040,3571415295,GB
3571415296,3571415311,DE
3571415312,3571415327,AT
-3571415328,3571425695,DE
+3571415328,3571423743,DE
+3571423744,3571423999,US
+3571424000,3571425695,DE
3571425696,3571425727,ES
3571425728,3571426895,DE
3571426896,3571426899,ES
@@ -136959,9 +141736,7 @@
3571485196,3571515391,BE
3571515392,3571548159,GB
3571548160,3571580927,ES
-3571580928,3571595727,FI
-3571595728,3571595743,AX
-3571595744,3571646463,FI
+3571580928,3571646463,FI
3571646464,3571655560,DE
3571655561,3571655561,RO
3571655562,3571675679,DE
@@ -137213,7 +141988,11 @@
3575367112,3575367119,DE
3575367120,3575372239,ES
3575372240,3575372247,PT
-3575372248,3575382015,ES
+3575372248,3575373183,ES
+3575373184,3575373191,GB
+3575373192,3575374319,ES
+3575374320,3575374327,GB
+3575374328,3575382015,ES
3575382016,3575412991,FI
3575412992,3575413119,RU
3575413120,3575419903,FI
@@ -137489,7 +142268,7 @@
3575635704,3575635775,BE
3575635776,3575635839,CH
3575635840,3575635847,GB
-3575635848,3575635855,FR
+3575635848,3575635855,BE
3575635856,3575635871,TR
3575635872,3575635983,BE
3575635984,3575635999,DE
@@ -137983,15 +142762,37 @@
3576096768,3576099071,EU
3576099072,3576100863,GB
3576100864,3576101375,EU
-3576101376,3576108287,GB
-3576108288,3576108295,FR
-3576108296,3576121343,GB
+3576101376,3576103375,GB
+3576103376,3576103423,FR
+3576103424,3576105791,GB
+3576105792,3576105855,FR
+3576105856,3576107711,GB
+3576107712,3576107743,FR
+3576107744,3576108287,GB
+3576108288,3576108303,FR
+3576108304,3576108831,GB
+3576108832,3576108847,FR
+3576108848,3576111423,GB
+3576111424,3576111551,FR
+3576111552,3576119471,GB
+3576119472,3576119487,CH
+3576119488,3576121343,GB
3576121344,3576121471,CH
3576121472,3576121855,GB
3576121856,3576122111,CH
-3576122112,3576134399,GB
+3576122112,3576122543,GB
+3576122544,3576122551,CH
+3576122552,3576122695,GB
+3576122696,3576122703,CH
+3576122704,3576132943,GB
+3576132944,3576132959,CH
+3576132960,3576133759,GB
+3576133760,3576133775,CH
+3576133776,3576134399,GB
3576134400,3576134655,CH
-3576134656,3576135679,GB
+3576134656,3576135295,GB
+3576135296,3576135359,CH
+3576135360,3576135679,GB
3576135680,3576168447,DE
3576168448,3576233983,GB
3576233984,3576236703,FR
@@ -138018,16 +142819,12 @@
3576237712,3576237743,GB
3576237744,3576237919,FR
3576237920,3576237935,GB
-3576237936,3576238143,FR
-3576238144,3576238159,GB
+3576237936,3576238151,FR
+3576238152,3576238159,GB
3576238160,3576238305,FR
3576238306,3576238335,GB
-3576238336,3576238447,FR
-3576238448,3576238463,GB
-3576238464,3576238511,FR
-3576238512,3576238527,GB
-3576238528,3576238559,FR
-3576238560,3576238575,GB
+3576238336,3576238567,FR
+3576238568,3576238575,GB
3576238576,3576238863,FR
3576238864,3576238879,GB
3576238880,3576238895,FR
@@ -138040,12 +142837,9 @@
3576239040,3576239071,GB
3576239072,3576239087,FR
3576239088,3576239103,GB
-3576239104,3576239615,FR
-3576239616,3576239623,GB
+3576239104,3576239623,FR
3576239624,3576239631,IT
-3576239632,3576239663,FR
-3576239664,3576239671,GB
-3576239672,3576240039,FR
+3576239632,3576240039,FR
3576240040,3576240047,GB
3576240048,3576240111,FR
3576240112,3576240127,GB
@@ -138114,8 +142908,10 @@
3576251648,3576252415,FR
3576252416,3576252671,GB
3576252672,3576254543,FR
-3576254544,3576254559,GB
-3576254560,3576254607,FR
+3576254544,3576254551,GB
+3576254552,3576254567,FR
+3576254568,3576254575,GB
+3576254576,3576254607,FR
3576254608,3576254615,GB
3576254616,3576254623,FR
3576254624,3576254647,GB
@@ -138181,7 +142977,9 @@
3576256896,3576256959,GB
3576256960,3576256991,FR
3576256992,3576257007,GB
-3576257008,3576257135,FR
+3576257008,3576257103,FR
+3576257104,3576257119,GB
+3576257120,3576257135,FR
3576257136,3576257151,GB
3576257152,3576257159,FR
3576257160,3576257167,GB
@@ -138227,8 +143025,8 @@
3576258672,3576258687,GB
3576258688,3576258703,FR
3576258704,3576258783,GB
-3576258784,3576258823,FR
-3576258824,3576258847,GB
+3576258784,3576258831,FR
+3576258832,3576258847,GB
3576258848,3576258863,FR
3576258864,3576258895,GB
3576258896,3576258943,FR
@@ -138306,9 +143104,7 @@
3576263528,3576263567,FR
3576263568,3576263575,GB
3576263576,3576263583,FR
-3576263584,3576263599,GB
-3576263600,3576263615,FR
-3576263616,3576263623,GB
+3576263584,3576263623,GB
3576263624,3576263679,FR
3576263680,3576263743,GB
3576263744,3576263751,FR
@@ -138331,15 +143127,9 @@
3576264640,3576264687,GB
3576264688,3576265319,FR
3576265320,3576265327,GB
-3576265328,3576265335,FR
-3576265336,3576265367,GB
-3576265368,3576265375,FR
-3576265376,3576265383,GB
-3576265384,3576265399,FR
-3576265400,3576265431,GB
-3576265432,3576265439,FR
-3576265440,3576265455,GB
-3576265456,3576265463,FR
+3576265328,3576265423,FR
+3576265424,3576265431,GB
+3576265432,3576265463,FR
3576265464,3576265471,GB
3576265472,3576265759,FR
3576265760,3576265775,GB
@@ -138355,8 +143145,8 @@
3576265920,3576265935,GB
3576265936,3576266255,FR
3576266256,3576266495,GB
-3576266496,3576266663,FR
-3576266664,3576266751,GB
+3576266496,3576266671,FR
+3576266672,3576266751,GB
3576266752,3576299519,FR
3576299520,3576365055,AE
3576365056,3576430591,TR
@@ -138392,12 +143182,12 @@
3576823808,3576889343,SE
3576889344,3576954879,NL
3576954880,3576987647,NO
-3576987648,3577001983,GB
-3577001984,3577003647,NL
-3577003648,3577003711,GB
-3577003712,3577003767,NL
-3577003768,3577003771,GB
-3577003772,3577004031,NL
+3576987648,3577000959,GB
+3577000960,3577001343,NL
+3577001344,3577001983,GB
+3577001984,3577003643,NL
+3577003644,3577003711,GB
+3577003712,3577004031,NL
3577004032,3577020415,GB
3577020416,3577085951,NL
3577085952,3577151487,DE
@@ -138419,8 +143209,8 @@
3577545984,3577546111,SE
3577546112,3577546239,DE
3577546240,3577546367,US
-3577546368,3577547455,DE
-3577547456,3577547519,FR
+3577546368,3577547487,DE
+3577547488,3577547519,FR
3577547520,3577550983,DE
3577550984,3577550991,CH
3577550992,3577551407,DE
@@ -138533,8 +143323,8 @@
3577638960,3577638967,EU
3577638968,3577639239,FR
3577639240,3577639247,EU
-3577639248,3577639679,FR
-3577639680,3577639767,EU
+3577639248,3577639743,FR
+3577639744,3577639767,EU
3577639768,3577639783,FR
3577639784,3577639799,EU
3577639800,3577639807,FR
@@ -138557,9 +143347,7 @@
3577642056,3577642063,EU
3577642064,3577642239,GB
3577642240,3577642495,EU
-3577642496,3577642623,FR
-3577642624,3577642751,EU
-3577642752,3577643007,FR
+3577642496,3577643007,FR
3577643008,3577643231,NL
3577643232,3577643247,GB
3577643248,3577643263,NL
@@ -138727,7 +143515,9 @@
3579197312,3579197439,US
3579197440,3579197887,GB
3579197888,3579197903,IT
-3579197904,3579205631,GB
+3579197904,3579204127,GB
+3579204128,3579204143,BE
+3579204144,3579205631,GB
3579205632,3579205887,IE
3579205888,3579210079,GB
3579210080,3579210087,BE
@@ -138961,16 +143751,28 @@
3580199936,3580200447,EE
3580200448,3580200959,SE
3580200960,3580201983,LT
-3580201984,3580203519,SE
+3580201984,3580203007,SE
+3580203008,3580203135,HR
+3580203136,3580203519,SE
3580203520,3580204543,RU
3580204544,3580205055,NL
3580205056,3580207103,HR
3580207104,3580208127,SE
3580208128,3580209151,EE
-3580209152,3580213247,SE
+3580209152,3580211199,SE
+3580211200,3580213247,HR
3580213248,3580214271,CH
3580214272,3580214783,LV
-3580214784,3580223487,SE
+3580214784,3580215295,HR
+3580215296,3580216319,EE
+3580216320,3580216831,SE
+3580216832,3580217087,EE
+3580217088,3580221439,SE
+3580221440,3580221951,HR
+3580221952,3580222335,SE
+3580222336,3580222719,HR
+3580222720,3580222975,SE
+3580222976,3580223487,HR
3580223488,3580231679,DE
3580231680,3580231935,LT
3580231936,3580232447,LV
@@ -139145,10 +143947,13 @@
3582076928,3582077111,ES
3582077112,3582077439,GB
3582077440,3582077471,DE
-3582077472,3582078631,GB
+3582077472,3582077503,GB
+3582077504,3582077759,DE
+3582077760,3582078631,GB
3582078632,3582078639,DE
-3582078640,3582081023,GB
-3582081024,3582081535,ES
+3582078640,3582081055,GB
+3582081056,3582081087,ES
+3582081088,3582081535,GB
3582081536,3582081791,DE
3582081792,3582083071,GB
3582083072,3582091263,BG
@@ -139191,9 +143996,7 @@
3582222864,3582222879,NO
3582222880,3582223087,SE
3582223088,3582223095,NL
-3582223096,3582223967,SE
-3582223968,3582223975,NO
-3582223976,3582224375,SE
+3582223096,3582224375,SE
3582224376,3582224379,FI
3582224380,3582225719,SE
3582225720,3582225727,FI
@@ -139512,7 +144315,9 @@
3582571488,3582571647,EU
3582571648,3582571687,IE
3582571688,3582571691,EU
-3582571692,3582571719,IE
+3582571692,3582571695,IE
+3582571696,3582571707,EU
+3582571708,3582571719,IE
3582571720,3582571751,EU
3582571752,3582571839,IE
3582571840,3582571999,EU
@@ -139588,8 +144393,7 @@
3582722048,3582730239,IT
3582730240,3582736383,ES
3582736384,3582737407,DZ
-3582737408,3582737919,MA
-3582737920,3582738431,ES
+3582737408,3582738431,ES
3582738432,3582746623,DK
3582746624,3582754815,RU
3582754816,3582763007,GR
@@ -139612,7 +144416,8 @@
3582885888,3582894079,TR
3582894080,3582902271,CH
3582902272,3582910463,RU
-3582910464,3582918655,SI
+3582910464,3582917631,SI
+3582917632,3582918655,LU
3582918656,3582926847,GB
3582926848,3582935039,ES
3582935040,3582943231,SI
@@ -139676,14 +144481,12 @@
3583157280,3583157439,GB
3583157440,3583157471,IE
3583157472,3583157487,GB
-3583157488,3583157503,IE
-3583157504,3583158511,GB
+3583157488,3583157759,IE
+3583157760,3583158511,GB
3583158512,3583158527,IE
3583158528,3583158783,GB
3583158784,3583159039,DE
-3583159040,3583159359,GB
-3583159360,3583159375,DE
-3583159376,3583160319,GB
+3583159040,3583160319,GB
3583160320,3583161343,DE
3583161344,3583162271,GB
3583162272,3583162303,IE
@@ -139806,9 +144609,7 @@
3583706056,3583706063,RU
3583706064,3583706103,UA
3583706104,3583706107,NA
-3583706108,3583706151,UA
-3583706152,3583706159,NA
-3583706160,3583706191,UA
+3583706108,3583706191,UA
3583706192,3583706199,NA
3583706200,3583706295,UA
3583706296,3583706319,NA
@@ -139826,9 +144627,7 @@
3583706592,3583706607,NA
3583706608,3583706615,UA
3583706616,3583706623,NA
-3583706624,3583706679,UA
-3583706680,3583706687,NA
-3583706688,3583706695,UA
+3583706624,3583706695,UA
3583706696,3583706711,NA
3583706712,3583706743,UA
3583706744,3583706767,NA
@@ -139860,13 +144659,9 @@
3583707216,3583707223,NA
3583707224,3583707519,UA
3583707520,3583707535,NA
-3583707536,3583707663,UA
-3583707664,3583707671,NA
-3583707672,3583707751,UA
-3583707752,3583707767,NA
-3583707768,3583707775,UA
-3583707776,3583707791,NA
-3583707792,3583707807,UA
+3583707536,3583707751,UA
+3583707752,3583707759,NA
+3583707760,3583707807,UA
3583707808,3583707815,NA
3583707816,3583707839,UA
3583707840,3583707855,NA
@@ -139898,11 +144693,10 @@
3583709736,3583709743,NA
3583709744,3583709759,UA
3583709760,3583709767,NA
-3583709768,3583709839,UA
-3583709840,3583709863,NA
+3583709768,3583709847,UA
+3583709848,3583709863,NA
3583709864,3583709871,RU
-3583709872,3583709879,NA
-3583709880,3583709887,UA
+3583709872,3583709887,UA
3583709888,3583709911,NA
3583709912,3583709927,UA
3583709928,3583709943,NA
@@ -139933,8 +144727,7 @@
3583710744,3583710751,BE
3583710752,3583710887,UA
3583710888,3583710895,NA
-3583710896,3583711007,UA
-3583711008,3583711015,RU
+3583710896,3583711015,UA
3583711016,3583711023,NA
3583711024,3583711247,UA
3583711248,3583711255,NA
@@ -139944,17 +144737,13 @@
3583711360,3583711367,NA
3583711368,3583711375,UA
3583711376,3583711383,NA
-3583711384,3583711695,UA
-3583711696,3583711703,NA
-3583711704,3583711711,UA
+3583711384,3583711711,UA
3583711712,3583711719,NA
3583711720,3583711783,UA
3583711784,3583711799,NA
3583711800,3583711815,UA
3583711816,3583711823,NA
-3583711824,3583711871,UA
-3583711872,3583711879,NA
-3583711880,3583712015,UA
+3583711824,3583712015,UA
3583712016,3583712023,NA
3583712024,3583712119,UA
3583712120,3583712127,NA
@@ -139968,8 +144757,7 @@
3583712528,3583712535,IN
3583712536,3583712775,UA
3583712776,3583712783,NA
-3583712784,3583712927,UA
-3583712928,3583712935,IN
+3583712784,3583712935,UA
3583712936,3583712943,NA
3583712944,3583713007,UA
3583713008,3583713015,RU
@@ -140002,14 +144790,12 @@
3583744104,3583744111,GB
3583744112,3583744287,EU
3583744288,3583744303,GB
-3583744304,3583744311,EU
-3583744312,3583744319,DE
+3583744304,3583744319,EU
3583744320,3583744447,GB
3583744448,3583744511,EU
3583744512,3583744767,GB
3583744768,3583744831,DE
-3583744832,3583744839,GB
-3583744840,3583744927,EU
+3583744832,3583744927,EU
3583744928,3583744959,DE
3583744960,3583744991,GB
3583744992,3583744999,EU
@@ -140023,7 +144809,9 @@
3583745724,3583745799,EU
3583745800,3583745807,NL
3583745808,3583745823,GB
-3583745824,3583746047,EU
+3583745824,3583745919,EU
+3583745920,3583745951,GB
+3583745952,3583746047,EU
3583746048,3583754239,PL
3583754240,3583762431,RU
3583762432,3583770623,CZ
@@ -140059,8 +144847,10 @@
3583855248,3583855311,FI
3583855312,3583855327,US
3583855328,3583856383,FI
-3583856384,3583856463,SG
-3583856464,3583856615,FI
+3583856384,3583856510,SG
+3583856511,3583856511,FI
+3583856512,3583856543,SG
+3583856544,3583856615,FI
3583856616,3583856639,SG
3583856640,3583860735,FI
3583860736,3583868927,HU
@@ -140273,38 +145063,10 @@
3584929600,3584929727,DE
3584929728,3584931375,CH
3584931376,3584931391,ES
-3584931392,3584933887,CH
-3584933888,3584933919,NO
-3584933920,3584933927,PL
-3584933928,3584934079,NO
-3584934080,3584934087,PL
-3584934088,3584934167,NO
-3584934168,3584934171,PL
-3584934172,3584934219,NO
-3584934220,3584934223,PL
-3584934224,3584934431,NO
-3584934432,3584934439,PL
-3584934440,3584935487,NO
-3584935488,3584935491,PL
-3584935492,3584935735,NO
-3584935736,3584935739,PL
-3584935740,3584935775,NO
-3584935776,3584935779,PL
-3584935780,3584936227,NO
-3584936228,3584936231,PL
-3584936232,3584936327,NO
-3584936328,3584936331,PL
-3584936332,3584938607,NO
-3584938608,3584938611,PL
-3584938612,3584938711,NO
-3584938712,3584938715,PL
-3584938716,3584938719,NO
-3584938720,3584938723,PL
-3584938724,3584941111,NO
-3584941112,3584941115,PL
-3584941116,3584941131,NO
-3584941132,3584941135,PL
-3584941136,3584942079,NO
+3584931392,3584932295,CH
+3584932296,3584932303,DE
+3584932304,3584933887,CH
+3584933888,3584942079,NO
3584942080,3584950271,DK
3584950272,3584958463,UA
3584958464,3584966655,DE
@@ -140334,9 +145096,7 @@
3585048576,3585050623,IQ
3585050624,3585056767,GB
3585056768,3585064959,LB
-3585064960,3585071405,GB
-3585071406,3585071409,IN
-3585071410,3585081343,GB
+3585064960,3585081343,GB
3585081344,3585114111,IR
3585114112,3585122303,IS
3585122304,3585130495,ES
@@ -140369,9 +145129,7 @@
3585318912,3585327103,DZ
3585327104,3585331327,NL
3585331328,3585331343,FI
-3585331344,3585332223,NL
-3585332224,3585332351,A1
-3585332352,3585335295,NL
+3585331344,3585335295,NL
3585335296,3585343487,UA
3585343488,3585351679,EE
3585351680,3585359871,CZ
@@ -140400,7 +145158,8 @@
3585542336,3585542351,TR
3585542352,3585544903,DE
3585544904,3585544911,CH
-3585544912,3585548287,DE
+3585544912,3585544927,TR
+3585544928,3585548287,DE
3585548288,3585556479,RU
3585556480,3585564671,DE
3585564672,3585572863,RU
@@ -140712,9 +145471,7 @@
3586476032,3586476063,TR
3586476064,3586476287,HU
3586476288,3586476295,SK
-3586476296,3586476311,HU
-3586476312,3586476319,AT
-3586476320,3586476351,HU
+3586476296,3586476351,HU
3586476352,3586476383,AT
3586476384,3586476407,UA
3586476408,3586476415,BG
@@ -140737,11 +145494,21 @@
3586543760,3586543791,GB
3586543792,3586544703,DE
3586544704,3586544719,AE
-3586544720,3586545679,DE
+3586544720,3586545119,DE
+3586545120,3586545127,GB
+3586545128,3586545679,DE
3586545680,3586545703,GB
-3586545704,3586546375,DE
+3586545704,3586546287,DE
+3586546288,3586546303,GB
+3586546304,3586546311,DE
+3586546312,3586546319,GB
+3586546320,3586546375,DE
3586546376,3586546383,GB
-3586546384,3586555903,DE
+3586546384,3586546415,DE
+3586546416,3586546423,GB
+3586546424,3586547087,DE
+3586547088,3586547095,GB
+3586547096,3586555903,DE
3586555904,3586572287,IT
3586572288,3586588671,RS
3586588672,3586596863,IT
@@ -140805,6 +145572,7 @@
3586703360,3586719743,CH
3586719744,3586752511,ES
3586752512,3586785279,NL
+3586785280,3586793471,OM
3586793472,3586801663,CH
3586801664,3586804751,HR
3586804752,3586804767,HU
@@ -140818,7 +145586,9 @@
3586883584,3586899967,IT
3586899968,3586900287,DE
3586900288,3586900351,NL
-3586900352,3586904831,DE
+3586900352,3586901311,DE
+3586901312,3586901375,ES
+3586901376,3586904831,DE
3586904832,3586904839,VG
3586904840,3586905199,DE
3586905200,3586905215,GB
@@ -140923,12 +145693,10 @@
3587178796,3587178799,US
3587178800,3587179439,AT
3587179440,3587179455,GB
-3587179456,3587179463,AT
-3587179464,3587179471,CH
-3587179472,3587186687,AT
+3587179456,3587186687,AT
3587186688,3587186815,DE
3587186816,3587187199,A2
-3587187200,3587187455,DE
+3587187200,3587187455,GB
3587187456,3587188479,A2
3587188480,3587188735,DE
3587188736,3587194495,A2
@@ -140983,9 +145751,7 @@
3587230528,3587230543,NL
3587230544,3587230607,GB
3587230608,3587230623,NL
-3587230624,3587230687,GB
-3587230688,3587230719,NL
-3587230720,3587230791,GB
+3587230624,3587230791,GB
3587230792,3587230799,NL
3587230800,3587230847,GB
3587230848,3587230911,NL
@@ -140998,7 +145764,9 @@
3587232536,3587232711,GB
3587232712,3587232719,NL
3587232720,3587232767,GB
-3587232768,3587233103,NL
+3587232768,3587232911,NL
+3587232912,3587232927,GB
+3587232928,3587233103,NL
3587233104,3587233119,GB
3587233120,3587233295,NL
3587233296,3587233319,GB
@@ -141022,11 +145790,15 @@
3587234000,3587234047,GB
3587234048,3587234079,NL
3587234080,3587234095,GB
-3587234096,3587234143,NL
+3587234096,3587234111,NL
+3587234112,3587234127,GB
+3587234128,3587234143,NL
3587234144,3587234159,GB
3587234160,3587234207,NL
3587234208,3587234815,GB
-3587234816,3587236447,NL
+3587234816,3587236351,NL
+3587236352,3587236383,GB
+3587236384,3587236447,NL
3587236448,3587236479,GB
3587236480,3587236511,NL
3587236512,3587236543,GB
@@ -141052,29 +145824,35 @@
3587238568,3587238583,GB
3587238584,3587238607,NL
3587238608,3587238911,GB
-3587238912,3587239303,NL
+3587238912,3587239279,NL
+3587239280,3587239287,GB
+3587239288,3587239303,NL
3587239304,3587239311,GB
-3587239312,3587239911,NL
+3587239312,3587239359,NL
+3587239360,3587239423,GB
+3587239424,3587239911,NL
3587239912,3587239919,GB
-3587239920,3587239975,NL
-3587239976,3587239983,GB
-3587239984,3587240063,NL
-3587240064,3587240071,GB
-3587240072,3587240087,NL
-3587240088,3587240095,GB
-3587240096,3587240103,NL
+3587239920,3587239999,NL
+3587240000,3587240007,GB
+3587240008,3587240063,NL
+3587240064,3587240071,BE
+3587240072,3587240103,NL
3587240104,3587240107,GB
3587240108,3587240271,NL
-3587240272,3587240287,GB
-3587240288,3587240359,NL
+3587240272,3587240279,GB
+3587240280,3587240359,NL
3587240360,3587240367,GB
-3587240368,3587240439,NL
-3587240440,3587240447,GB
-3587240448,3587240511,NL
-3587240512,3587240575,GB
-3587240576,3587240615,NL
-3587240616,3587240623,GB
-3587240624,3587241071,NL
+3587240368,3587240519,NL
+3587240520,3587240527,GB
+3587240528,3587240543,NL
+3587240544,3587240559,IE
+3587240560,3587240567,BE
+3587240568,3587240575,GB
+3587240576,3587240607,NL
+3587240608,3587240623,GB
+3587240624,3587241039,NL
+3587241040,3587241047,GB
+3587241048,3587241071,NL
3587241072,3587241087,GB
3587241088,3587241143,NL
3587241144,3587241151,GB
@@ -141084,13 +145862,17 @@
3587241264,3587241271,GB
3587241272,3587241343,NL
3587241344,3587241471,GB
-3587241472,3587242095,NL
+3587241472,3587242047,NL
+3587242048,3587242055,GB
+3587242056,3587242071,NL
+3587242072,3587242079,IE
+3587242080,3587242095,NL
3587242096,3587242111,GB
3587242112,3587242271,NL
3587242272,3587242287,GB
3587242288,3587242463,NL
-3587242464,3587242471,GB
-3587242472,3587243407,NL
+3587242464,3587242495,GB
+3587242496,3587243407,NL
3587243408,3587243415,GB
3587243416,3587243935,NL
3587243936,3587243951,GB
@@ -141098,7 +145880,8 @@
3587243968,3587243975,GB
3587243976,3587243983,NL
3587243984,3587243991,GB
-3587243992,3587244031,NL
+3587243992,3587244023,NL
+3587244024,3587244031,GB
3587244032,3587260415,IT
3587260416,3587284991,DE
3587284992,3587285135,A2
@@ -141230,7 +146013,7 @@
3587391488,3587407871,KZ
3587407872,3587408383,NL
3587408384,3587408895,BE
-3587408896,3587409407,NL
+3587408896,3587409407,RU
3587409408,3587410431,BE
3587410432,3587410687,NL
3587410688,3587412223,BE
@@ -141239,7 +146022,9 @@
3587440640,3587457023,SE
3587457024,3587459263,GB
3587459264,3587459295,DE
-3587459296,3587473407,GB
+3587459296,3587465359,GB
+3587465360,3587465367,US
+3587465368,3587473407,GB
3587473408,3587489791,IT
3587489792,3587506175,EG
3587506176,3587538943,IT
@@ -141266,7 +146051,9 @@
3587699560,3587699567,GB
3587699568,3587700031,IT
3587700032,3587700039,GB
-3587700040,3587701295,IT
+3587700040,3587701271,IT
+3587701272,3587701279,DE
+3587701280,3587701295,IT
3587701296,3587701303,FR
3587701304,3587702783,IT
3587702784,3587710975,DE
@@ -141341,9 +146128,7 @@
3588521984,3588538367,PT
3588538368,3588544383,GB
3588544384,3588544391,IE
-3588544392,3588550447,GB
-3588550448,3588550463,IE
-3588550464,3588553983,GB
+3588544392,3588553983,GB
3588553984,3588554239,IE
3588554240,3588554687,GB
3588554688,3588554751,IE
@@ -141528,7 +146313,9 @@
3589545984,3589554175,DE
3589554176,3589570559,PS
3589570560,3589570655,NL
-3589570656,3589578751,GB
+3589570656,3589571071,GB
+3589571072,3589571135,NL
+3589571136,3589578751,GB
3589578752,3589579391,NL
3589579392,3589579775,GB
3589579776,3589580799,NL
@@ -141546,7 +146333,9 @@
3589582656,3589583359,NL
3589583360,3589583647,GB
3589583648,3589583663,NL
-3589583664,3589584255,GB
+3589583664,3589583743,GB
+3589583744,3589583871,NL
+3589583872,3589584255,GB
3589584256,3589584271,NL
3589584272,3589584639,GB
3589584640,3589585279,NL
@@ -141799,16 +146588,16 @@
3589891616,3589891631,BE
3589891632,3589931007,GB
3589931008,3589947391,SI
-3589947392,3589951863,FI
-3589951864,3589951871,AX
-3589951872,3589963775,FI
+3589947392,3589963775,FI
3589963776,3589971231,ES
3589971232,3589971247,CA
3589971248,3589980159,ES
3589980160,3589996543,CZ
3589996544,3589997055,GB
3589997056,3589997311,NL
-3589997312,3590012927,GB
+3589997312,3589997559,GB
+3589997560,3589997567,NL
+3589997568,3590012927,GB
3590012928,3590029311,BE
3590029312,3590033759,FR
3590033760,3590033775,AU
@@ -141836,7 +146625,9 @@
3590156432,3590156447,SI
3590156448,3590156543,HR
3590156544,3590156575,SI
-3590156576,3590156671,HR
+3590156576,3590156599,HR
+3590156600,3590156607,SI
+3590156608,3590156671,HR
3590156672,3590156687,SI
3590156688,3590156719,HR
3590156720,3590156727,SI
@@ -141853,8 +146644,8 @@
3590157568,3590157631,SI
3590157632,3590157679,RS
3590157680,3590157687,SI
-3590157688,3590157703,RS
-3590157704,3590157743,SI
+3590157688,3590157719,RS
+3590157720,3590157743,SI
3590157744,3590157751,RS
3590157752,3590157759,SI
3590157760,3590157767,RS
@@ -141868,12 +146659,12 @@
3590158080,3590158343,RS
3590158344,3590158359,SI
3590158360,3590158367,RS
-3590158368,3590158431,SI
+3590158368,3590158407,SI
+3590158408,3590158415,RS
+3590158416,3590158431,ME
3590158432,3590158439,RS
-3590158440,3590158455,SI
-3590158456,3590158463,RS
-3590158464,3590158471,SI
-3590158472,3590158479,RS
+3590158440,3590158447,SI
+3590158448,3590158479,RS
3590158480,3590158527,SI
3590158528,3590158535,RS
3590158536,3590158591,SI
@@ -141889,11 +146680,13 @@
3590225920,3590234111,TR
3590234112,3590242303,GB
3590242304,3590244351,US
-3590244352,3590244863,DE
+3590244352,3590244607,DE
+3590244608,3590244863,IT
3590244864,3590245119,FR
-3590245120,3590245183,BE
-3590245184,3590245279,FR
-3590245280,3590245311,BE
+3590245120,3590245135,BE
+3590245136,3590245143,FR
+3590245144,3590245183,BE
+3590245184,3590245311,FR
3590245312,3590245439,US
3590245440,3590245503,FR
3590245504,3590245567,GB
@@ -141930,10 +146723,9 @@
3590251520,3590251583,FR
3590251584,3590251647,US
3590251648,3590251775,NL
-3590251776,3590251839,FR
-3590251840,3590251903,ES
-3590251904,3590251967,FR
-3590251968,3590252543,ES
+3590251776,3590251967,FR
+3590251968,3590252287,ES
+3590252288,3590252543,FR
3590252544,3590253055,GB
3590253056,3590253311,DE
3590253312,3590253375,FR
@@ -141946,17 +146738,14 @@
3590254144,3590254271,US
3590254272,3590254463,FR
3590254464,3590254591,ES
-3590254592,3590254847,FR
-3590254848,3590254879,ES
-3590254880,3590254911,FR
+3590254592,3590254911,FR
3590254912,3590254975,ES
3590254976,3590255039,DE
3590255040,3590255047,FR
3590255048,3590255071,ES
3590255072,3590255103,FR
3590255104,3590255359,ES
-3590255360,3590255615,FR
-3590255616,3590255871,BE
+3590255360,3590255871,FR
3590255872,3590256127,US
3590256128,3590256383,ES
3590256384,3590256639,FR
@@ -141981,10 +146770,13 @@
3590307904,3590307935,UA
3590307936,3590307951,A2
3590307952,3590307967,NG
-3590307968,3590308031,A2
+3590307968,3590307991,A2
+3590307992,3590307995,SO
+3590307996,3590308031,A2
3590308032,3590308047,UG
3590308048,3590308055,NG
-3590308056,3590308071,A2
+3590308056,3590308063,A2
+3590308064,3590308071,SO
3590308072,3590308079,RW
3590308080,3590308087,IQ
3590308088,3590308095,A2
@@ -142001,7 +146793,9 @@
3590308248,3590308287,IQ
3590308288,3590308303,A2
3590308304,3590308311,SO
-3590308312,3590308343,IQ
+3590308312,3590308319,IQ
+3590308320,3590308327,A2
+3590308328,3590308343,IQ
3590308344,3590308351,A2
3590308352,3590308367,IQ
3590308368,3590308375,A2
@@ -142024,14 +146818,17 @@
3590308568,3590308583,IQ
3590308584,3590308607,A2
3590308608,3590308735,NG
-3590308736,3590308767,A2
+3590308736,3590308743,A2
+3590308744,3590308747,SO
+3590308748,3590308767,A2
3590308768,3590308775,RW
3590308776,3590308783,ZA
3590308784,3590308799,ZW
-3590308800,3590308807,A2
+3590308800,3590308807,GB
3590308808,3590308815,ZM
3590308816,3590308823,KE
-3590308824,3590308855,A2
+3590308824,3590308831,SO
+3590308832,3590308855,A2
3590308856,3590308863,NG
3590308864,3590308951,A2
3590308952,3590308959,GH
@@ -142044,7 +146841,9 @@
3590309072,3590309079,MW
3590309080,3590309103,NG
3590309104,3590309111,ZW
-3590309112,3590309511,A2
+3590309112,3590309251,A2
+3590309252,3590309255,SO
+3590309256,3590309511,A2
3590309512,3590309519,AO
3590309520,3590309527,NG
3590309528,3590309535,CM
@@ -142075,7 +146874,8 @@
3590309888,3590310143,A2
3590310144,3590310175,IQ
3590310176,3590310183,LR
-3590310184,3590310215,IQ
+3590310184,3590310191,A2
+3590310192,3590310215,IQ
3590310216,3590310223,A2
3590310224,3590310255,IQ
3590310256,3590310271,A2
@@ -142097,14 +146897,14 @@
3590310952,3590310959,IQ
3590310960,3590310967,A2
3590310968,3590311007,IQ
-3590311008,3590311015,A2
-3590311016,3590311023,IQ
-3590311024,3590311031,A2
+3590311008,3590311031,A2
3590311032,3590311039,IQ
3590311040,3590311055,A2
3590311056,3590311063,IQ
3590311064,3590311079,A2
-3590311080,3590311111,IQ
+3590311080,3590311087,IQ
+3590311088,3590311103,A2
+3590311104,3590311111,IQ
3590311112,3590311119,A2
3590311120,3590311135,IQ
3590311136,3590311143,A2
@@ -142114,10 +146914,9 @@
3590311184,3590311199,A2
3590311200,3590311207,SD
3590311208,3590311215,CD
-3590311216,3590311223,AO
+3590311216,3590311223,A2
3590311224,3590311231,CD
-3590311232,3590311239,AO
-3590311240,3590311255,A2
+3590311232,3590311255,A2
3590311256,3590311263,ZW
3590311264,3590311271,A2
3590311272,3590311279,SD
@@ -142129,9 +146928,9 @@
3590311320,3590311327,CI
3590311328,3590311335,CD
3590311336,3590311343,SD
-3590311344,3590311351,A2
+3590311344,3590311351,LY
3590311352,3590311359,CD
-3590311360,3590311367,A2
+3590311360,3590311367,LY
3590311368,3590311383,CD
3590311384,3590311391,NG
3590311392,3590311423,A2
@@ -142140,9 +146939,7 @@
3590311936,3590312703,MW
3590312704,3590312799,A2
3590312800,3590312807,KE
-3590312808,3590312815,A2
-3590312816,3590312823,US
-3590312824,3590312895,A2
+3590312808,3590312895,A2
3590312896,3590312903,ZA
3590312904,3590312911,AO
3590312912,3590312919,NG
@@ -142156,8 +146953,7 @@
3590314656,3590314671,A2
3590314672,3590314679,UG
3590314680,3590314687,A2
-3590314688,3590314703,NG
-3590314704,3590314719,A2
+3590314688,3590314719,GB
3590314720,3590314727,TG
3590314728,3590314735,UG
3590314736,3590314743,NG
@@ -142207,9 +147003,7 @@
3590317496,3590317503,LB
3590317504,3590317527,A2
3590317528,3590317543,IQ
-3590317544,3590317567,A2
-3590317568,3590317695,IQ
-3590317696,3590317951,A2
+3590317544,3590317951,A2
3590317952,3590318047,UA
3590318048,3590319167,A2
3590319168,3590319231,AE
@@ -142263,9 +147057,7 @@
3590323200,3590323711,MW
3590323712,3590323903,A2
3590323904,3590323911,CD
-3590323912,3590323967,A2
-3590323968,3590323975,UG
-3590323976,3590323983,A2
+3590323912,3590323983,A2
3590323984,3590323991,NG
3590323992,3590323999,A2
3590324000,3590324007,LR
@@ -142331,7 +147123,9 @@
3624303760,3624304639,CA
3624304640,3624321023,US
3624321024,3624325119,CA
-3624325120,3624357887,US
+3624325120,3624330511,US
+3624330512,3624330519,CA
+3624330520,3624357887,US
3624357888,3624358143,KN
3624358144,3624359679,US
3624359680,3624360703,AN
@@ -142504,10 +147298,52 @@
3624549112,3624549383,US
3624549384,3624549471,A2
3624549472,3624549479,US
-3624549480,3624550143,A2
+3624549480,3624549583,A2
+3624549584,3624549615,US
+3624549616,3624550143,A2
3624550144,3624587263,US
3624587264,3624591359,JM
-3624591360,3624730623,US
+3624591360,3624714239,US
+3624714240,3624714623,SG
+3624714624,3624714639,US
+3624714640,3624714655,SG
+3624714656,3624714679,US
+3624714680,3624714687,SG
+3624714688,3624714719,US
+3624714720,3624714743,SG
+3624714744,3624714751,US
+3624714752,3624715023,SG
+3624715024,3624715071,US
+3624715072,3624715103,SG
+3624715104,3624715167,US
+3624715168,3624715183,SG
+3624715184,3624715263,US
+3624715264,3624715647,SG
+3624715648,3624715655,US
+3624715656,3624715743,SG
+3624715744,3624715775,US
+3624715776,3624716031,SG
+3624716032,3624716223,US
+3624716224,3624716255,AU
+3624716256,3624718335,US
+3624718336,3624718591,SG
+3624718592,3624718863,US
+3624718864,3624718879,AU
+3624718880,3624718951,US
+3624718952,3624718959,SG
+3624718960,3624719103,US
+3624719104,3624719359,SG
+3624719360,3624719535,US
+3624719536,3624719543,AU
+3624719544,3624719615,US
+3624719616,3624719743,SG
+3624719744,3624719751,US
+3624719752,3624719871,SG
+3624719872,3624720895,US
+3624720896,3624721151,SG
+3624721152,3624721727,US
+3624721728,3624721759,SG
+3624721760,3624730623,US
3624730624,3624796159,CA
3624796160,3624817679,US
3624817680,3624817687,CA
@@ -142677,9 +147513,13 @@
3624911648,3624911651,RU
3624911652,3624911999,US
3624912000,3624912127,CA
-3624912128,3624912727,US
+3624912128,3624912679,US
+3624912680,3624912687,IN
+3624912688,3624912727,US
3624912728,3624912735,TT
-3624912736,3624912959,US
+3624912736,3624912759,US
+3624912760,3624912767,MY
+3624912768,3624912959,US
3624912960,3624913087,IN
3624913088,3624913247,US
3624913248,3624913279,CA
@@ -142771,7 +147611,8 @@
3624924896,3624924927,CA
3624924928,3624925054,US
3624925055,3624925695,CA
-3624925696,3624926463,US
+3624925696,3624926335,US
+3624926336,3624926463,TZ
3624926464,3624926527,CA
3624926528,3624926591,US
3624926592,3624926655,IN
@@ -142940,8 +147781,8 @@
3625512960,3625528541,US
3625528542,3625528551,AU
3625528552,3625574399,US
-3625574400,3625578495,A2
-3625578496,3625581631,US
+3625574400,3625578239,A2
+3625578240,3625581631,US
3625581632,3625581647,NL
3625581648,3625631743,US
3625631744,3625639935,CA
@@ -142991,7 +147832,7 @@
3626228464,3626228479,AE
3626228480,3626270719,US
3626270720,3626287103,CA
-3626287104,3626328063,US
+3626287104,3626332159,US
3626332160,3626336255,CA
3626336256,3626381317,US
3626381318,3626381321,AU
@@ -143292,7 +148133,9 @@
3626383299,3626383375,US
3626383376,3626383383,RU
3626383384,3626383391,CA
-3626383392,3626383423,US
+3626383392,3626383399,US
+3626383400,3626383407,IN
+3626383408,3626383423,US
3626383424,3626383431,GB
3626383432,3626383439,AU
3626383440,3626383447,GR
@@ -143305,8 +148148,7 @@
3626383544,3626383551,GB
3626383552,3626383583,US
3626383584,3626383599,CA
-3626383600,3626383607,GB
-3626383608,3626383615,IN
+3626383600,3626383615,IN
3626383616,3626383647,US
3626383648,3626383679,CH
3626383680,3626383727,US
@@ -143345,7 +148187,9 @@
3626385038,3626385041,US
3626385042,3626385045,MX
3626385046,3626385049,CA
-3626385050,3626385073,US
+3626385050,3626385057,US
+3626385058,3626385061,IN
+3626385062,3626385073,US
3626385074,3626385077,IE
3626385078,3626385097,US
3626385098,3626385101,IN
@@ -143354,7 +148198,7 @@
3626385118,3626385121,US
3626385122,3626385125,IN
3626385126,3626385129,ID
-3626385130,3626385133,GR
+3626385130,3626385133,IN
3626385134,3626385137,CA
3626385138,3626385141,GB
3626385142,3626385145,IN
@@ -143378,13 +148222,15 @@
3626385250,3626385253,CN
3626385254,3626385261,US
3626385262,3626385265,GR
-3626385266,3626385321,US
+3626385266,3626385285,US
+3626385286,3626385289,IN
+3626385290,3626385321,US
3626385322,3626385325,FR
3626385326,3626385329,CA
3626385330,3626385333,US
3626385334,3626385337,CA
3626385338,3626385349,US
-3626385350,3626385353,CA
+3626385350,3626385353,IN
3626385354,3626385357,MX
3626385358,3626385361,CA
3626385362,3626385365,US
@@ -143549,8 +148395,7 @@
3626896184,3626905599,CA
3626905600,3626926079,US
3626926080,3626934271,CA
-3626934272,3626942463,US
-3626950656,3627044863,US
+3626934272,3627044863,US
3627044864,3627048959,CA
3627048960,3627065343,US
3627065344,3627069439,CA
@@ -143558,7 +148403,9 @@
3627288576,3627288607,GB
3627288608,3627309455,US
3627309456,3627309471,IL
-3627309472,3627310471,US
+3627309472,3627309695,US
+3627309696,3627309823,AE
+3627309824,3627310471,US
3627310472,3627310479,BM
3627310480,3627317087,US
3627317088,3627317119,GB
@@ -143619,9 +148466,7 @@
3627746400,3627746431,CA
3627746432,3627747159,US
3627747160,3627747167,IN
-3627747168,3627747583,US
-3627747584,3627747615,FR
-3627747616,3627753471,US
+3627747168,3627753471,US
3627753472,3627753727,AR
3627753728,3627755007,US
3627755008,3627755135,IE
@@ -143821,8 +148666,7 @@
3628771456,3628771647,GB
3628771648,3628771839,US
3628771840,3628772095,NO
-3628772096,3628772415,US
-3628772416,3628772431,CA
+3628772096,3628772431,US
3628772432,3628772447,GB
3628772448,3628834815,US
3628834816,3628843007,CA
@@ -143868,14 +148712,14 @@
3629202016,3629202047,CA
3629202048,3629202175,US
3629202176,3629202203,CA
-3629202204,3629202219,US
-3629202220,3629202239,CA
+3629202204,3629202223,US
+3629202224,3629202239,CA
3629202240,3629202263,US
3629202264,3629202271,CA
-3629202272,3629202311,US
-3629202312,3629202367,CA
-3629202368,3629202427,US
-3629202428,3629203199,CA
+3629202272,3629202319,US
+3629202320,3629202367,CA
+3629202368,3629202431,US
+3629202432,3629203199,CA
3629203200,3629318143,US
3629318144,3629326335,CA
3629326336,3629327527,US
@@ -144616,9 +149460,9 @@
3632480496,3632480503,US
3632480504,3632480511,RU
3632480512,3632480543,TK
-3632480544,3632480567,US
-3632480568,3632480575,GB
-3632480576,3632480599,US
+3632480544,3632480559,US
+3632480560,3632480567,DE
+3632480568,3632480599,US
3632480600,3632480607,CA
3632480608,3632480615,GB
3632480616,3632480647,US
@@ -144634,9 +149478,7 @@
3632481280,3632481287,GB
3632481288,3632481295,US
3632481296,3632481311,TH
-3632481312,3632481391,US
-3632481392,3632481399,GB
-3632481400,3632481415,US
+3632481312,3632481415,US
3632481416,3632481423,TH
3632481424,3632481431,US
3632481432,3632481439,CA
@@ -144656,11 +149498,10 @@
3632481768,3632481775,US
3632481776,3632481783,CA
3632481784,3632481791,GB
-3632481792,3632481815,US
-3632481816,3632481823,GB
-3632481824,3632481999,US
+3632481792,3632481999,US
3632482000,3632482007,BZ
-3632482008,3632482039,US
+3632482008,3632482015,CA
+3632482016,3632482039,US
3632482040,3632482047,TK
3632482048,3632482239,US
3632482240,3632482247,GB
@@ -144674,8 +149515,7 @@
3632483152,3632483159,GB
3632483160,3632483327,US
3632483328,3632483335,CA
-3632483336,3632483351,US
-3632483352,3632483359,CN
+3632483336,3632483359,US
3632483360,3632483367,NL
3632483368,3632483375,GI
3632483376,3632483391,GB
@@ -144688,9 +149528,7 @@
3632483584,3632483599,US
3632483600,3632483607,AU
3632483608,3632483615,PL
-3632483616,3632483623,GB
-3632483624,3632483663,US
-3632483664,3632483671,PH
+3632483616,3632483671,US
3632483672,3632483679,CA
3632483680,3632483759,US
3632483760,3632483775,TH
@@ -144732,8 +149570,7 @@
3632484816,3632484823,US
3632484824,3632484831,CA
3632484832,3632484839,HK
-3632484840,3632484847,BZ
-3632484848,3632484855,US
+3632484840,3632484855,US
3632484856,3632484863,GB
3632484864,3632485055,US
3632485056,3632485087,TW
@@ -144752,15 +149589,16 @@
3632485280,3632485311,TH
3632485312,3632485391,US
3632485392,3632485399,SR
-3632485400,3632485431,US
+3632485400,3632485407,US
+3632485408,3632485415,CA
+3632485416,3632485431,US
3632485432,3632485439,CA
3632485440,3632485471,US
3632485472,3632485487,NC
-3632485488,3632485551,US
+3632485488,3632485535,US
+3632485536,3632485551,CA
3632485552,3632485559,GB
-3632485560,3632485567,US
-3632485568,3632485575,GB
-3632485576,3632485615,US
+3632485560,3632485615,US
3632485616,3632485623,TH
3632485624,3632485631,CA
3632485632,3632485639,US
@@ -144774,7 +149612,7 @@
3632485728,3632485735,CA
3632485736,3632485751,US
3632485752,3632485759,CA
-3632485760,3632485767,CZ
+3632485760,3632485767,US
3632485768,3632485775,KW
3632485776,3632485847,US
3632485848,3632485855,CA
@@ -144790,7 +149628,9 @@
3632486112,3632486143,US
3632486144,3632486151,TK
3632486152,3632486159,GB
-3632486160,3632486263,US
+3632486160,3632486191,US
+3632486192,3632486199,GB
+3632486200,3632486263,US
3632486264,3632486271,GB
3632486272,3632486287,FR
3632486288,3632486319,US
@@ -144800,11 +149640,10 @@
3632486344,3632486351,FR
3632486352,3632486407,US
3632486408,3632486415,TH
-3632486416,3632486423,US
-3632486424,3632486431,CA
-3632486432,3632486479,US
+3632486416,3632486479,US
3632486480,3632486495,GB
-3632486496,3632486519,US
+3632486496,3632486511,US
+3632486512,3632486519,HU
3632486520,3632486527,GB
3632486528,3632486543,US
3632486544,3632486551,DE
@@ -144815,14 +149654,13 @@
3632486688,3632486703,HK
3632486704,3632486711,US
3632486712,3632486719,CA
-3632486720,3632486751,TH
+3632486720,3632486751,US
3632486752,3632486759,NL
3632486760,3632486783,US
3632486784,3632486815,DE
3632486816,3632486879,US
3632486880,3632486895,TH
-3632486896,3632486903,GB
-3632486904,3632487023,US
+3632486896,3632487023,US
3632487024,3632487031,TH
3632487032,3632487039,CZ
3632487040,3632487135,US
@@ -144836,8 +149674,9 @@
3632487816,3632487823,IL
3632487824,3632487855,US
3632487856,3632487863,GB
-3632487864,3632487871,CA
-3632487872,3632489087,US
+3632487864,3632487895,US
+3632487896,3632487903,GB
+3632487904,3632489087,US
3632489088,3632489119,SR
3632489120,3632489127,US
3632489128,3632489135,AU
@@ -144890,9 +149729,7 @@
3632491536,3632491543,GB
3632491544,3632491583,US
3632491584,3632491591,TH
-3632491592,3632491599,US
-3632491600,3632491607,TH
-3632491608,3632491639,US
+3632491592,3632491639,US
3632491640,3632491647,CA
3632491648,3632491807,US
3632491808,3632491823,TW
@@ -144900,7 +149737,7 @@
3632491968,3632491999,SR
3632492000,3632492007,NL
3632492008,3632492015,IO
-3632492016,3632492023,IN
+3632492016,3632492023,US
3632492024,3632492031,GB
3632492032,3632492087,US
3632492088,3632492095,GB
@@ -144918,9 +149755,7 @@
3632492456,3632492463,TH
3632492464,3632492543,US
3632492544,3632492551,FR
-3632492552,3632492559,US
-3632492560,3632492575,GB
-3632492576,3632492775,US
+3632492552,3632492775,US
3632492776,3632492791,GB
3632492792,3632492839,US
3632492840,3632492847,CA
@@ -144937,7 +149772,8 @@
3632493088,3632493119,IO
3632493120,3632493151,US
3632493152,3632493159,GR
-3632493160,3632493191,US
+3632493160,3632493183,US
+3632493184,3632493191,BZ
3632493192,3632493199,CA
3632493200,3632493215,US
3632493216,3632493223,DE
@@ -145232,7 +150068,9 @@
3633816520,3633816527,ZA
3633816528,3633816535,CA
3633816536,3633816543,US
-3633816544,3633818703,CA
+3633816544,3633816559,ZA
+3633816560,3633816567,IN
+3633816568,3633818703,CA
3633818704,3633818711,US
3633818712,3633818751,CA
3633818752,3633818767,US
@@ -145245,15 +150083,19 @@
3633819424,3633819647,CA
3633819648,3633821279,US
3633821280,3633821311,BB
-3633821312,3633821439,US
-3633821440,3633821695,SC
-3633821696,3633822175,US
+3633821312,3633822175,US
3633822176,3633822191,GB
3633822192,3633822303,US
3633822304,3633822327,CA
3633822328,3633827839,US
3633827840,3633828095,GB
-3633828096,3633874431,US
+3633828096,3633828970,US
+3633828971,3633828977,IN
+3633828978,3633831306,US
+3633831307,3633831338,IN
+3633831339,3633831383,US
+3633831384,3633831395,AU
+3633831396,3633874431,US
3633874432,3633874687,GB
3633874688,3633881087,US
3633881088,3633885183,AN
@@ -145365,7 +150207,53 @@
3635533000,3635533007,NO
3635533008,3635533535,US
3635533536,3635533551,IN
-3635533552,3635654655,US
+3635533552,3635643391,US
+3635643392,3635643647,JP
+3635643648,3635643679,US
+3635643680,3635643681,JP
+3635643682,3635643710,US
+3635643711,3635643903,JP
+3635643904,3635644159,US
+3635644160,3635644255,JP
+3635644256,3635644319,US
+3635644320,3635644671,JP
+3635644672,3635645439,US
+3635645440,3635645696,JP
+3635645697,3635645728,US
+3635645729,3635645760,JP
+3635645761,3635645776,US
+3635645777,3635645951,JP
+3635645952,3635646335,US
+3635646336,3635646367,JP
+3635646368,3635648767,US
+3635648768,3635649023,JP
+3635649024,3635650559,US
+3635650560,3635650815,JP
+3635650816,3635651071,US
+3635651072,3635651327,JP
+3635651328,3635651583,US
+3635651584,3635651839,JP
+3635651840,3635652607,US
+3635652608,3635652639,HK
+3635652640,3635652815,US
+3635652816,3635652831,HK
+3635652832,3635653071,US
+3635653072,3635653119,HK
+3635653120,3635653151,US
+3635653152,3635653183,HK
+3635653184,3635653631,US
+3635653632,3635653695,JP
+3635653696,3635653727,US
+3635653728,3635653743,JP
+3635653744,3635653775,US
+3635653776,3635653791,JP
+3635653792,3635653887,US
+3635653888,3635653983,JP
+3635653984,3635654015,US
+3635654016,3635654143,JP
+3635654144,3635654303,US
+3635654304,3635654335,JP
+3635654336,3635654655,US
3635654656,3635654911,JP
3635654912,3635655167,US
3635655168,3635655935,JP
@@ -145373,7 +150261,11 @@
3635656192,3635656223,JP
3635656224,3635656319,US
3635656320,3635656447,JP
-3635656448,3635659263,US
+3635656448,3635656703,CA
+3635656704,3635656967,JP
+3635656968,3635657023,US
+3635657024,3635657215,JP
+3635657216,3635659263,US
3635659264,3635660031,ID
3635660032,3635660287,CN
3635660288,3635660799,US
@@ -145403,7 +150295,19 @@
3636019200,3636021775,CA
3636021776,3636021791,US
3636021792,3636027391,CA
-3636027392,3636064255,US
+3636027392,3636028415,US
+3636028416,3636029951,SG
+3636029952,3636030207,US
+3636030208,3636031231,SG
+3636031232,3636031999,US
+3636032000,3636032511,SG
+3636032512,3636032767,US
+3636032768,3636033535,SG
+3636033536,3636033791,US
+3636033792,3636034303,SG
+3636034304,3636035327,US
+3636035328,3636035583,SG
+3636035584,3636064255,US
3636064256,3636068351,CA
3636068352,3636150495,US
3636150496,3636150527,CA
@@ -145412,7 +150316,8 @@
3636150840,3636150911,US
3636150912,3636150935,CA
3636150936,3636150943,US
-3636150944,3636151007,CA
+3636150944,3636150991,CA
+3636150992,3636151007,US
3636151008,3636151023,BS
3636151024,3636151031,CA
3636151032,3636151039,US
@@ -145504,7 +150409,8 @@
3636161872,3636161885,US
3636161886,3636161943,CA
3636161944,3636161951,US
-3636161952,3636161983,CN
+3636161952,3636161967,CA
+3636161968,3636161983,CN
3636161984,3636162015,US
3636162016,3636162559,CA
3636162560,3636163583,US
@@ -145554,9 +150460,7 @@
3636904544,3636904575,IN
3636904576,3636904607,US
3636904608,3636904671,IN
-3636904672,3636904703,US
-3636904704,3636904959,MY
-3636904960,3636905471,US
+3636904672,3636905471,US
3636905472,3636905727,CA
3636905728,3636905791,US
3636905792,3636905823,IN
@@ -145738,7 +150642,9 @@
3638198952,3638198959,BM
3638198960,3638198983,US
3638198984,3638198991,ES
-3638198992,3638199711,US
+3638198992,3638199167,US
+3638199168,3638199295,CN
+3638199296,3638199711,US
3638199712,3638199743,DE
3638199744,3638199807,US
3638199808,3638199815,CN
@@ -145822,7 +150728,9 @@
3638249752,3638249791,GB
3638249792,3638249983,US
3638249984,3638249991,GB
-3638249992,3638250535,US
+3638249992,3638249999,US
+3638250000,3638250031,GB
+3638250032,3638250535,US
3638250536,3638250543,GB
3638250544,3638250559,US
3638250560,3638250623,GB
@@ -145853,7 +150761,13 @@
3638399616,3638399743,US
3638399744,3638399999,CH
3638400000,3638400063,CA
-3638400064,3638509295,US
+3638400064,3638400271,US
+3638400272,3638400279,CA
+3638400280,3638400559,US
+3638400560,3638400567,PA
+3638400568,3638400639,US
+3638400640,3638400767,CA
+3638400768,3638509295,US
3638509296,3638509311,GB
3638509312,3638509567,US
3638509568,3638526911,CA
@@ -145983,12 +150897,15 @@
3639498768,3639498783,SI
3639498784,3639498791,US
3639498792,3639498799,NL
-3639498800,3639533567,US
+3639498800,3639513087,US
+3639513088,3639513119,AE
+3639513120,3639513239,US
+3639513240,3639513243,AE
+3639513244,3639533567,US
3639533568,3639537663,CA
3639537664,3639558143,US
3639558144,3639566335,CA
-3639566336,3639582719,US
-3639590912,3639593983,US
+3639566336,3639593983,US
3639593984,3639595007,GB
3639595008,3639607295,US
3639607296,3639611391,CA
@@ -146087,7 +151004,9 @@
3639886592,3639886599,SG
3639886600,3639888962,US
3639888963,3639888963,ID
-3639888964,3639892359,US
+3639888964,3639888986,US
+3639888987,3639888987,ID
+3639888988,3639892359,US
3639892360,3639892367,ID
3639892368,3639892375,US
3639892376,3639892383,ID
@@ -146246,15 +151165,11 @@
3641078560,3641078567,BE
3641078568,3641085687,DE
3641085688,3641085695,CZ
-3641085696,3641098191,DE
-3641098192,3641098207,ES
-3641098208,3641103719,DE
+3641085696,3641103719,DE
3641103720,3641103727,HU
3641103728,3641106951,DE
3641106952,3641106959,CH
-3641106960,3641134367,DE
-3641134368,3641134375,BE
-3641134376,3641140671,DE
+3641106960,3641140671,DE
3641140672,3641140679,US
3641140680,3641147519,DE
3641147520,3641147527,AT
@@ -146329,18 +151244,16 @@
3641353808,3641353831,GB
3641353832,3641353839,A2
3641353840,3641353855,GB
-3641353856,3641353983,A2
+3641353856,3641353879,NG
+3641353880,3641353983,A2
3641353984,3641354239,AF
-3641354240,3641354255,NG
-3641354256,3641354311,A2
+3641354240,3641354311,A2
3641354312,3641354319,GB
3641354320,3641354327,A2
3641354328,3641354335,GB
3641354336,3641354339,A2
3641354340,3641354367,GB
-3641354368,3641354383,A2
-3641354384,3641354391,NG
-3641354392,3641354495,A2
+3641354368,3641354495,A2
3641354496,3641354751,GB
3641354752,3641355263,NG
3641355264,3641355519,AO
@@ -146350,14 +151263,14 @@
3641355776,3641356031,LB
3641356032,3641356191,A2
3641356192,3641356207,NG
-3641356208,3641357855,A2
+3641356208,3641357823,A2
+3641357824,3641357831,NG
+3641357832,3641357855,A2
3641357856,3641357879,GB
3641357880,3641357887,A2
3641357888,3641357927,GB
3641357928,3641358335,A2
-3641358336,3641358591,GB
-3641358592,3641358847,A2
-3641358848,3641359359,GB
+3641358336,3641359359,GB
3641359360,3641359615,IQ
3641359616,3641359639,GB
3641359640,3641359871,A2
@@ -146418,7 +151331,7 @@
3641565184,3641567343,SE
3641567344,3641567351,FI
3641567352,3641568967,SE
-3641568968,3641568975,NO
+3641568968,3641568975,DK
3641568976,3641573375,SE
3641573376,3641577471,NO
3641577472,3641581567,RU
@@ -146455,6 +151368,7 @@
3641683968,3641688063,KZ
3641688064,3641692159,RU
3641692160,3641696255,IT
+3641696256,3641700351,BE
3641700352,3641704447,SE
3641704448,3641708543,FR
3641708544,3641712639,RU
@@ -146759,6 +151673,8 @@
3642415636,3642415651,GB
3642415652,3642415655,MT
3642415656,3642417151,GB
+3642417152,3642419199,DE
+3642419200,3642421247,GB
3642421248,3642423091,A2
3642423092,3642423099,NG
3642423100,3642424151,A2
@@ -146772,7 +151688,7 @@
3642429440,3642433535,GB
3642433536,3642435583,CY
3642435584,3642436607,RU
-3642436608,3642437119,GR
+3642436608,3642437119,CY
3642437120,3642437631,GB
3642437632,3642439423,CY
3642439424,3642439459,RU
@@ -146815,7 +151731,9 @@
3642539976,3642540031,IS
3642540032,3642540063,SE
3642540064,3642540079,NO
-3642540080,3642544127,SE
+3642540080,3642540135,SE
+3642540136,3642540143,NO
+3642540144,3642544127,SE
3642544128,3642552319,RU
3642552320,3642552639,UA
3642552640,3642552655,EE
@@ -146825,7 +151743,9 @@
3642552672,3642552687,SE
3642552688,3642552831,UA
3642552832,3642552847,EE
-3642552848,3642553095,UA
+3642552848,3642553087,UA
+3642553088,3642553091,LV
+3642553092,3642553095,UA
3642553096,3642553099,LV
3642553100,3642553103,UA
3642553104,3642553161,LV
@@ -146850,8 +151770,7 @@
3642553472,3642553519,RU
3642553520,3642553523,UA
3642553524,3642553535,RU
-3642553536,3642553543,DE
-3642553544,3642553547,UA
+3642553536,3642553547,UA
3642553548,3642553567,RU
3642553568,3642553571,UA
3642553572,3642553575,RU
@@ -146866,20 +151785,26 @@
3642553960,3642554111,UA
3642554112,3642554119,RU
3642554120,3642554127,UA
-3642554128,3642554151,RU
-3642554152,3642554187,UA
-3642554188,3642554207,RU
+3642554128,3642554159,RU
+3642554160,3642554187,UA
+3642554188,3642554193,RU
+3642554194,3642554195,UA
+3642554196,3642554207,RU
3642554208,3642554219,UA
3642554220,3642554223,RU
3642554224,3642554367,UA
-3642554368,3642554571,LT
-3642554572,3642554575,UA
+3642554368,3642554427,LT
+3642554428,3642554431,UA
+3642554432,3642554447,LT
+3642554448,3642554463,UA
+3642554464,3642554573,LT
+3642554574,3642554575,UA
3642554576,3642554623,LT
3642554624,3642554631,UA
3642554632,3642554671,LV
3642554672,3642554675,UA
-3642554676,3642554687,LV
-3642554688,3642554751,UA
+3642554676,3642554703,LV
+3642554704,3642554751,UA
3642554752,3642554795,LV
3642554796,3642554807,UA
3642554808,3642554831,LV
@@ -146888,9 +151813,7 @@
3642554880,3642554911,DE
3642554912,3642554919,NL
3642554920,3642554931,DE
-3642554932,3642554951,UA
-3642554952,3642554955,GE
-3642554956,3642554959,UA
+3642554932,3642554959,UA
3642554960,3642554963,DE
3642554964,3642554967,UA
3642554968,3642554971,LV
@@ -146914,7 +151837,8 @@
3642555070,3642555071,DE
3642555072,3642555087,GE
3642555088,3642555103,DE
-3642555104,3642555135,UA
+3642555104,3642555111,CZ
+3642555112,3642555135,UA
3642555136,3642555153,LT
3642555154,3642555167,UA
3642555168,3642555183,LT
@@ -146923,16 +151847,16 @@
3642555224,3642555227,LV
3642555228,3642555289,LT
3642555290,3642555295,UA
-3642555296,3642555391,LT
+3642555296,3642555359,LT
+3642555360,3642555375,UA
+3642555376,3642555391,LT
3642555392,3642555431,PL
3642555432,3642555437,UA
3642555438,3642555439,PL
3642555440,3642555443,UA
3642555444,3642555463,PL
3642555464,3642555475,UA
-3642555476,3642555493,PL
-3642555494,3642555495,UA
-3642555496,3642555503,PL
+3642555476,3642555503,PL
3642555504,3642555647,UA
3642555648,3642555683,SE
3642555684,3642555685,GB
@@ -146945,14 +151869,14 @@
3642555728,3642555735,SE
3642555736,3642555743,GB
3642555744,3642555759,SE
-3642555760,3642555767,UA
-3642555768,3642555771,GB
+3642555760,3642555771,UA
3642555772,3642555775,SE
3642555776,3642555783,UA
3642555784,3642555787,GB
3642555788,3642555789,UA
3642555790,3642555791,SE
-3642555792,3642556159,UA
+3642555792,3642555795,CZ
+3642555796,3642556159,UA
3642556160,3642556415,LV
3642556416,3642558975,CZ
3642558976,3642559487,HR
@@ -147133,8 +152057,8 @@
3645183744,3645183871,GB
3645183872,3645183903,FR
3645183904,3645183935,IE
-3645183936,3645184256,FR
-3645184257,3645184447,GB
+3645183936,3645184255,FR
+3645184256,3645184447,GB
3645184448,3645186047,FR
3645186048,3645190143,GB
3645190144,3645194239,FI
@@ -147188,9 +152112,7 @@
3645337088,3645337599,DE
3645337600,3645337631,FR
3645337632,3645337663,BE
-3645337664,3645338399,FR
-3645338400,3645338431,BE
-3645338432,3645339295,FR
+3645337664,3645339295,FR
3645339296,3645339359,BE
3645339360,3645339391,FR
3645339392,3645339647,NL
@@ -147229,7 +152151,10 @@
3645435904,3645439999,GB
3645440000,3645444095,SE
3645444096,3645448191,SK
-3645448192,3645452287,DE
+3645448192,3645454335,DE
+3645454336,3645455359,RU
+3645455360,3645455487,DE
+3645455488,3645456383,RU
3645456384,3645460479,GB
3645460480,3645464575,UA
3645464576,3645468671,SE
@@ -147250,6 +152175,8 @@
3645507596,3645507599,DE
3645507600,3645507607,AT
3645507608,3645509631,DE
+3645509632,3645511679,NL
+3645511680,3645513727,TR
3645513728,3645517823,RU
3645517824,3645521919,IE
3645521920,3645526015,PL
@@ -147291,7 +152218,8 @@
3645601508,3645601759,SE
3645601760,3645601775,FR
3645601776,3645601779,GB
-3645601780,3645601799,SE
+3645601780,3645601783,US
+3645601784,3645601799,SE
3645601800,3645601803,GB
3645601804,3645603839,SE
3645603840,3645612031,BG
@@ -147715,9 +152643,7 @@
3645764087,3645764087,CH
3645764088,3645764091,DE
3645764092,3645764092,FR
-3645764093,3645764093,DE
-3645764094,3645764094,IT
-3645764095,3645764097,DE
+3645764093,3645764097,DE
3645764098,3645764098,IT
3645764099,3645764099,DE
3645764100,3645764100,BE
@@ -148260,9 +153186,7 @@
3645889920,3645890559,DE
3645890560,3645894655,RU
3645894656,3645898751,NL
-3645898752,3646501711,DE
-3646501712,3646501719,US
-3646501720,3646513103,DE
+3645898752,3646513103,DE
3646513104,3646513111,CA
3646513112,3646947327,DE
3646947328,3647209471,PL
@@ -148342,8 +153266,8 @@
3647965296,3647965303,DE
3647965304,3647965311,ES
3647965312,3647965319,DE
-3647965320,3647965423,ES
-3647965424,3647965439,DE
+3647965320,3647965431,ES
+3647965432,3647965439,DE
3647965440,3647965695,ES
3647965696,3647966207,CH
3647966208,3647966575,GB
@@ -148369,17 +153293,14 @@
3647973736,3647973743,DE
3647973744,3647973783,IT
3647973784,3647973791,DE
-3647973792,3647973815,IT
-3647973816,3647973823,DE
-3647973824,3647973927,IT
-3647973928,3647973935,DE
-3647973936,3647973967,IT
+3647973792,3647973967,IT
3647973968,3647973975,DE
3647973976,3647974047,IT
3647974048,3647974055,DE
3647974056,3647974399,IT
3647974400,3647976447,ES
-3647976448,3647976559,BE
+3647976448,3647976463,DE
+3647976464,3647976559,BE
3647976560,3647976575,FR
3647976576,3647976647,BE
3647976648,3647976663,DE
@@ -148407,18 +153328,16 @@
3647978776,3647978783,DE
3647978784,3647978895,NL
3647978896,3647978911,DE
-3647978912,3647978967,NL
-3647978968,3647978975,DE
-3647978976,3647979007,NL
+3647978912,3647979007,NL
3647979008,3647979136,IT
3647979137,3647979519,DE
-3647979520,3647980215,FR
+3647979520,3647979983,FR
+3647979984,3647979991,DE
+3647979992,3647980215,FR
3647980216,3647980223,DE
3647980224,3647980239,FR
3647980240,3647980247,DE
-3647980248,3647980255,FR
-3647980256,3647980271,DE
-3647980272,3647980471,FR
+3647980248,3647980471,FR
3647980472,3647980479,DE
3647980480,3647980495,FR
3647980496,3647980503,DE
@@ -148443,18 +153362,24 @@
3647987072,3647987087,DE
3647987088,3647987119,ES
3647987120,3647987127,DE
-3647987128,3647987175,ES
-3647987176,3647987455,DE
-3647987456,3647987527,ES
+3647987128,3647987183,ES
+3647987184,3647987191,DE
+3647987192,3647987199,ES
+3647987200,3647987455,DE
+3647987456,3647987487,ES
+3647987488,3647987495,DE
+3647987496,3647987527,ES
3647987528,3647987535,GB
3647987536,3647987543,DE
3647987544,3647987711,ES
3647987712,3647988735,IT
3647988736,3647988991,DE
-3647988992,3647989375,BE
-3647989376,3647989503,DE
-3647989504,3647989759,BE
-3647989760,3647995903,DE
+3647988992,3647989263,BE
+3647989264,3647989375,DE
+3647989376,3647989759,BE
+3647989760,3647990271,DE
+3647990272,3647990527,ES
+3647990528,3647995903,DE
3647995904,3648004223,RU
3648004224,3648004607,GB
3648004608,3648006271,RU
@@ -148504,8 +153429,7 @@
3648078496,3648078527,BE
3648078528,3648078591,BF
3648078592,3648078847,CG
-3648078848,3648079103,BE
-3648079104,3648080383,UG
+3648078848,3648080383,BE
3648080384,3648080511,TZ
3648080512,3648080543,BF
3648080544,3648080639,TZ
@@ -148524,8 +153448,9 @@
3648082240,3648082311,NE
3648082312,3648082431,BE
3648082432,3648082479,ZM
-3648082480,3648085759,BE
-3648085760,3648086015,LR
+3648082480,3648084991,BE
+3648084992,3648085759,GB
+3648085760,3648086015,ZM
3648086016,3648090111,AT
3648090112,3648094207,RU
3648094208,3648102399,PL
@@ -148609,7 +153534,9 @@
3648184320,3648192511,RU
3648192512,3648196607,DE
3648196608,3648200703,IT
-3648200704,3648208895,SE
+3648200704,3648208479,SE
+3648208480,3648208511,DK
+3648208512,3648208895,SE
3648208896,3648212991,DE
3648212992,3648217087,RU
3648217088,3648221183,UA
@@ -148617,7 +153544,12 @@
3648225280,3648231263,DE
3648231264,3648231295,NL
3648231296,3648233471,DE
-3648233472,3648237567,FR
+3648233472,3648236667,FR
+3648236668,3648236668,GB
+3648236669,3648236669,NL
+3648236670,3648236670,DE
+3648236671,3648236671,SE
+3648236672,3648237567,FR
3648237568,3648241663,RU
3648241664,3648245759,NL
3648245760,3648249855,RO
@@ -148681,12 +153613,9 @@
3648417856,3648417919,GB
3648417920,3648418047,AT
3648418048,3648418079,GB
-3648418080,3648418135,ES
-3648418136,3648418143,GB
-3648418144,3648418247,ES
+3648418080,3648418247,ES
3648418248,3648418255,CH
-3648418256,3648418263,ES
-3648418264,3648418271,GB
+3648418256,3648418271,GB
3648418272,3648418303,ES
3648418304,3648419327,GB
3648419328,3648419455,FR
@@ -148695,8 +153624,8 @@
3648419584,3648419839,GB
3648419840,3648419901,BE
3648419902,3648419903,GB
-3648419904,3648419935,BE
-3648419936,3648420095,GB
+3648419904,3648419967,BE
+3648419968,3648420095,GB
3648420096,3648420351,NL
3648420352,3648420863,GB
3648420864,3648421119,US
@@ -148724,9 +153653,7 @@
3648465272,3648465823,FI
3648465824,3648465855,AX
3648465856,3648466943,FI
-3648466944,3648469263,DE
-3648469264,3648469271,NL
-3648469272,3648469295,DE
+3648466944,3648469295,DE
3648469296,3648469311,AT
3648469312,3648471039,DE
3648471040,3648475135,PL
@@ -148772,8 +153699,15 @@
3649709824,3649765375,GB
3649765376,3649830911,EG
3649830912,3649835007,NL
-3649835008,3649839103,ES
-3649839104,3649847295,GB
+3649835008,3649838079,ES
+3649838080,3649839103,NL
+3649839104,3649840127,GB
+3649840128,3649840383,NL
+3649840384,3649843199,GB
+3649843200,3649845247,NL
+3649845248,3649845759,GB
+3649845760,3649847039,NL
+3649847040,3649847295,GB
3649847296,3649855487,DE
3649855488,3649856511,GB
3649856512,3649857023,US
@@ -148788,6 +153722,7 @@
3650093056,3650097151,JO
3650097152,3650101247,SK
3650101248,3650105343,DE
+3650105344,3650109439,HU
3650109440,3650113535,NO
3650113536,3650117631,GB
3650117632,3650121727,RU
@@ -148919,7 +153854,8 @@
3650367488,3650371583,RU
3650371584,3650375679,ES
3650375680,3650379775,NL
-3650379776,3650387967,IT
+3650379776,3650381823,DE
+3650381824,3650387967,IT
3650387968,3650392063,DE
3650392064,3650396159,NO
3650396160,3650404351,NL
@@ -148928,7 +153864,9 @@
3650416640,3650420735,BE
3650420736,3650424831,ES
3650424832,3650428927,RU
-3650428928,3650433023,NL
+3650428928,3650432431,NL
+3650432432,3650432447,DE
+3650432448,3650433023,NL
3650433024,3650437119,FI
3650437120,3650441215,NL
3650441216,3650445311,IT
@@ -149038,7 +153976,9 @@
3651087872,3651088127,DE
3651088128,3651088383,IE
3651088384,3651088639,GR
-3651088640,3651090919,DE
+3651088640,3651090767,DE
+3651090768,3651090775,GB
+3651090776,3651090919,DE
3651090920,3651090959,IE
3651090960,3651098111,DE
3651098112,3651098367,IE
@@ -149093,8 +154033,10 @@
3651204352,3651204607,PL
3651204608,3651205119,ES
3651205120,3651205375,GB
-3651205376,3651205631,ES
-3651205632,3651207167,DE
+3651205376,3651205887,ES
+3651205888,3651206143,DE
+3651206144,3651206399,PL
+3651206400,3651207167,DE
3651207168,3651207199,GB
3651207200,3651207223,EU
3651207224,3651207295,GB
@@ -149542,7 +154484,9 @@
3653407072,3653407103,A2
3653407104,3653407111,UG
3653407112,3653407119,ZM
-3653407120,3653407167,A2
+3653407120,3653407135,A2
+3653407136,3653407151,MZ
+3653407152,3653407167,A2
3653407168,3653407231,NG
3653407232,3653407391,A2
3653407392,3653407399,NG
@@ -149620,7 +154564,7 @@
3653410248,3653410255,ZM
3653410256,3653410263,A2
3653410264,3653410271,NG
-3653410272,3653410279,SD
+3653410272,3653410279,A2
3653410280,3653410287,IQ
3653410288,3653410295,A2
3653410296,3653410303,MW
@@ -149651,11 +154595,7 @@
3653472592,3653472767,AF
3653472768,3653472775,NL
3653472776,3653472791,AF
-3653472792,3653472799,NL
-3653472800,3653472807,AF
-3653472808,3653472815,NL
-3653472816,3653472823,AF
-3653472824,3653472831,NL
+3653472792,3653472831,NL
3653472832,3653472871,AF
3653472872,3653472879,NL
3653472880,3653472915,AF
@@ -149721,6 +154661,8 @@
3653586944,3653591039,DE
3653591040,3653595135,LU
3653595136,3653599231,RU
+3653599232,3653601279,CH
+3653601280,3653603327,BA
3653603328,3653607423,CZ
3653607424,3653611519,PL
3653611520,3653615615,HU
@@ -149738,10 +154680,11 @@
3653664768,3653664895,DE
3653664896,3653664911,FR
3653664912,3653665023,NL
-3653665024,3653665071,DE
-3653665072,3653666815,NL
-3653666816,3653667327,DE
-3653667328,3653668863,NL
+3653665024,3653665087,DE
+3653665088,3653665151,NL
+3653665152,3653665279,DE
+3653665280,3653665791,NL
+3653665792,3653668863,DE
3653668864,3653672959,SE
3653672960,3653681151,RU
3653681152,3653685247,ES
@@ -149938,9 +154881,7 @@
3673817088,3673882623,HK
3673882624,3673948159,JP
3673948160,3674210303,HK
-3674210304,3674431743,JP
-3674431744,3674431999,UA
-3674432000,3678404607,JP
+3674210304,3678404607,JP
3678404608,3678535679,IN
3678535680,3678666751,JP
3678666752,3678928895,TW
@@ -150182,8 +155123,8 @@
3745513472,3749838847,CN
3749838848,3749839871,SG
3749839872,3749840895,IN
-3749840896,3749841919,PH
-3749841920,3749846015,AU
+3749841920,3749842943,AU
+3749843968,3749846015,AU
3749846016,3749847039,IN
3749847040,3749855231,HK
3749855232,3749969919,KR
@@ -150242,3 +155183,4 @@
3758094336,3758095359,AU
3758095360,3758095871,CN
3758095872,3758096127,SG
+3758096128,3758096383,AU
diff --git a/src/or/Makefile.am b/src/or/Makefile.am
index e2a1b6d64..a5682081a 100644
--- a/src/or/Makefile.am
+++ b/src/or/Makefile.am
@@ -39,6 +39,7 @@ libtor_a_SOURCES = \
networkstatus.c \
nodelist.c \
onion.c \
+ transports.c \
policies.c \
reasons.c \
relay.c \
@@ -104,6 +105,7 @@ noinst_HEADERS = \
ntmain.h \
onion.h \
or.h \
+ transports.h \
policies.h \
reasons.h \
relay.h \
@@ -124,8 +126,9 @@ tor_main.o: micro-revision.i
micro-revision.i: FORCE
@rm -f micro-revision.tmp; \
- if test -d ../../.git && test -x "`which git 2>&1;true`"; then \
- HASH="`git rev-parse --short=16 HEAD`"; \
+ if test -d "$(top_srcdir)/.git" && \
+ test -x "`which git 2>&1;true`"; then \
+ HASH="`cd "$(top_srcdir)" && git rev-parse --short=16 HEAD`"; \
echo \"$$HASH\" > micro-revision.tmp; \
fi; \
if test ! -f micro-revision.tmp ; then \
@@ -139,10 +142,10 @@ micro-revision.i: FORCE
or_sha1.i: $(tor_SOURCES) $(libtor_a_SOURCES)
if test "@SHA1SUM@" != none; then \
- @SHA1SUM@ $(tor_SOURCES) $(libtor_a_SOURCES) | \
+ (cd "$(srcdir)" && @SHA1SUM@ $(tor_SOURCES) $(libtor_a_SOURCES)) | \
@SED@ -n 's/^\(.*\)$$/"\1\\n"/p' > or_sha1.i; \
elif test "@OPENSSL@" != none; then \
- @OPENSSL@ sha1 $(tor_SOURCES) $(libtor_a_SOURCES) | \
+ (cd "$(srcdir)" && @OPENSSL@ sha1 $(tor_SOURCES) $(libtor_a_SOURCES)) | \
@SED@ -n 's/SHA1(\(.*\))= \(.*\)/"\2 \1\\n"/p' > or_sha1.i; \
else \
rm or_sha1.i; \
diff --git a/src/or/buffers.c b/src/or/buffers.c
index 85d58e898..f4aac0f0e 100644
--- a/src/or/buffers.c
+++ b/src/or/buffers.c
@@ -1005,6 +1005,33 @@ fetch_from_buf(char *string, size_t string_len, buf_t *buf)
return (int)buf->datalen;
}
+/** True iff the cell command <b>command</b> is one that implies a
+ * variable-length cell in Tor link protocol <b>linkproto</b>. */
+static inline int
+cell_command_is_var_length(uint8_t command, int linkproto)
+{
+ /* If linkproto is v2 (2), CELL_VERSIONS is the only variable-length cells
+ * work as implemented here. If it's 1, there are no variable-length cells.
+ * Tor does not support other versions right now, and so can't negotiate
+ * them.
+ */
+ switch (linkproto) {
+ case 1:
+ /* Link protocol version 1 has no variable-length cells. */
+ return 0;
+ case 2:
+ /* In link protocol version 2, VERSIONS is the only variable-length cell */
+ return command == CELL_VERSIONS;
+ case 0:
+ case 3:
+ default:
+ /* In link protocol version 3 and later, and in version "unknown",
+ * commands 128 and higher indicate variable-length. VERSIONS is
+ * grandfathered in. */
+ return command == CELL_VERSIONS || command >= 128;
+ }
+}
+
/** Check <b>buf</b> for a variable-length cell according to the rules of link
* protocol version <b>linkproto</b>. If one is found, pull it off the buffer
* and assign a newly allocated var_cell_t to *<b>out</b>, and return 1.
@@ -1019,12 +1046,6 @@ fetch_var_cell_from_buf(buf_t *buf, var_cell_t **out, int linkproto)
var_cell_t *result;
uint8_t command;
uint16_t length;
- /* If linkproto is unknown (0) or v2 (2), variable-length cells work as
- * implemented here. If it's 1, there are no variable-length cells. Tor
- * does not support other versions right now, and so can't negotiate them.
- */
- if (linkproto == 1)
- return 0;
check();
*out = NULL;
if (buf->datalen < VAR_CELL_HEADER_SIZE)
@@ -1032,7 +1053,7 @@ fetch_var_cell_from_buf(buf_t *buf, var_cell_t **out, int linkproto)
peek_from_buf(hdr, sizeof(hdr), buf);
command = get_uint8(hdr+2);
- if (!(CELL_COMMAND_IS_VAR_LENGTH(command)))
+ if (!(cell_command_is_var_length(command, linkproto)))
return 0;
length = ntohs(get_uint16(hdr+3));
@@ -1101,8 +1122,6 @@ fetch_var_cell_from_evbuffer(struct evbuffer *buf, var_cell_t **out,
uint16_t cell_length;
var_cell_t *cell;
int result = 0;
- if (linkproto == 1)
- return 0;
*out = NULL;
buf_len = evbuffer_get_length(buf);
@@ -1113,7 +1132,7 @@ fetch_var_cell_from_evbuffer(struct evbuffer *buf, var_cell_t **out,
tor_assert(n >= VAR_CELL_HEADER_SIZE);
command = get_uint8(hdr+2);
- if (!(CELL_COMMAND_IS_VAR_LENGTH(command))) {
+ if (!(cell_command_is_var_length(command, linkproto))) {
goto done;
}
@@ -1873,9 +1892,9 @@ parse_socks(const char *data, size_t datalen, socks_request_t *req,
}
if (log_sockstype)
log_notice(LD_APP,
- "Your application (using socks5 to port %d) gave "
- "Tor a hostname, which means Tor will do the DNS resolve "
- "for you. This is good.", req->port);
+ "Your application (using socks5 to port %d) instructed "
+ "Tor to take care of the DNS resolution itself if "
+ "necessary. This is good.", req->port);
return 1;
default: /* unsupported */
log_warn(LD_APP,"socks5: unsupported address type %d. Rejecting.",
@@ -1974,9 +1993,9 @@ parse_socks(const char *data, size_t datalen, socks_request_t *req,
if (log_sockstype)
log_notice(LD_APP,
- "Your application (using socks4a to port %d) gave "
- "Tor a hostname, which means Tor will do the DNS resolve "
- "for you. This is good.", req->port);
+ "Your application (using socks4a to port %d) instructed "
+ "Tor to take care of the DNS resolution itself if "
+ "necessary. This is good.", req->port);
}
log_debug(LD_APP,"socks4: Everything is here. Success.");
strlcpy(req->address, startaddr ? startaddr : tmpbuf,
diff --git a/src/or/circuitbuild.c b/src/or/circuitbuild.c
index a66f3406c..7934a2e7f 100644
--- a/src/or/circuitbuild.c
+++ b/src/or/circuitbuild.c
@@ -26,6 +26,7 @@
#include "nodelist.h"
#include "onion.h"
#include "policies.h"
+#include "transports.h"
#include "relay.h"
#include "rephist.h"
#include "router.h"
@@ -123,8 +124,6 @@ static int onion_append_hop(crypt_path_t **head_ptr, extend_info_t *choice);
static void entry_guards_changed(void);
-static const transport_t *transport_get_by_name(const char *name);
-static void transport_free(transport_t *transport);
static void bridge_free(bridge_info_t *bridge);
/**
@@ -1264,7 +1263,7 @@ circuit_build_times_network_check_changed(circuit_build_times_t *cbt)
if (cbt->timeout_ms >= circuit_build_times_get_initial_timeout()) {
if (cbt->timeout_ms > INT32_MAX/2 || cbt->close_ms > INT32_MAX/2) {
log_warn(LD_CIRC, "Insanely large circuit build timeout value. "
- "(timeout = %lfmsec, close = %lfmsec)",
+ "(timeout = %fmsec, close = %fmsec)",
cbt->timeout_ms, cbt->close_ms);
} else {
cbt->timeout_ms *= 2;
@@ -1408,7 +1407,7 @@ circuit_build_times_set_timeout_worker(circuit_build_times_t *cbt)
cbt->close_ms = MAX(cbt->close_ms, circuit_build_times_initial_timeout());
if (cbt->timeout_ms > max_time) {
- log_notice(LD_CIRC,
+ log_info(LD_CIRC,
"Circuit build timeout of %dms is beyond the maximum build "
"time we have ever observed. Capping it to %dms.",
(int)cbt->timeout_ms, max_time);
@@ -1441,7 +1440,7 @@ circuit_build_times_set_timeout(circuit_build_times_t *cbt)
return;
if (cbt->timeout_ms < circuit_build_times_min_timeout()) {
- log_warn(LD_CIRC, "Set buildtimeout to low value %lfms. Setting to %dms",
+ log_warn(LD_CIRC, "Set buildtimeout to low value %fms. Setting to %dms",
cbt->timeout_ms, circuit_build_times_min_timeout());
cbt->timeout_ms = circuit_build_times_min_timeout();
if (cbt->close_ms < cbt->timeout_ms) {
@@ -1456,31 +1455,31 @@ circuit_build_times_set_timeout(circuit_build_times_t *cbt)
timeout_rate = circuit_build_times_timeout_rate(cbt);
if (prev_timeout > tor_lround(cbt->timeout_ms/1000)) {
- log_notice(LD_CIRC,
+ log_info(LD_CIRC,
"Based on %d circuit times, it looks like we don't need to "
"wait so long for circuits to finish. We will now assume a "
"circuit is too slow to use after waiting %ld seconds.",
cbt->total_build_times,
tor_lround(cbt->timeout_ms/1000));
log_info(LD_CIRC,
- "Circuit timeout data: %lfms, %lfms, Xm: %d, a: %lf, r: %lf",
+ "Circuit timeout data: %fms, %fms, Xm: %d, a: %f, r: %f",
cbt->timeout_ms, cbt->close_ms, cbt->Xm, cbt->alpha,
timeout_rate);
} else if (prev_timeout < tor_lround(cbt->timeout_ms/1000)) {
- log_notice(LD_CIRC,
+ log_info(LD_CIRC,
"Based on %d circuit times, it looks like we need to wait "
"longer for circuits to finish. We will now assume a "
"circuit is too slow to use after waiting %ld seconds.",
cbt->total_build_times,
tor_lround(cbt->timeout_ms/1000));
log_info(LD_CIRC,
- "Circuit timeout data: %lfms, %lfms, Xm: %d, a: %lf, r: %lf",
+ "Circuit timeout data: %fms, %fms, Xm: %d, a: %f, r: %f",
cbt->timeout_ms, cbt->close_ms, cbt->Xm, cbt->alpha,
timeout_rate);
} else {
log_info(LD_CIRC,
- "Set circuit build timeout to %lds (%lfms, %lfms, Xm: %d, a: %lf,"
- " r: %lf) based on %d circuit times",
+ "Set circuit build timeout to %lds (%fms, %fms, Xm: %d, a: %f,"
+ " r: %f) based on %d circuit times",
tor_lround(cbt->timeout_ms/1000),
cbt->timeout_ms, cbt->close_ms, cbt->Xm, cbt->alpha, timeout_rate,
cbt->total_build_times);
@@ -1982,9 +1981,10 @@ should_use_create_fast_for_circuit(origin_circuit_t *circ)
return 1; /* our hand is forced: only a create_fast will work. */
if (!options->FastFirstHopPK)
return 0; /* we prefer to avoid create_fast */
- if (server_mode(options)) {
+ if (public_server_mode(options)) {
/* We're a server, and we know an onion key. We can choose.
- * Prefer to blend in. */
+ * Prefer to blend our circuit into the other circuits we are
+ * creating on behalf of others. */
return 0;
}
@@ -3012,7 +3012,7 @@ onion_pick_cpath_exit(origin_circuit_t *circ, extend_info_t *exit)
log_warn(LD_CIRC,"failed to choose an exit server");
return -1;
}
- exit = extend_info_from_node(node);
+ exit = extend_info_from_node(node, 0);
tor_assert(exit);
}
state->chosen_exit = exit;
@@ -3254,14 +3254,19 @@ onion_extend_cpath(origin_circuit_t *circ)
} else if (cur_len == 0) { /* picking first node */
const node_t *r = choose_good_entry_server(purpose, state);
if (r) {
- info = extend_info_from_node(r);
+ /* If we're extending to a bridge, use the preferred address
+ rather than the primary, for potentially extending to an IPv6
+ bridge. */
+ int use_pref_addr = (r->ri != NULL &&
+ r->ri->purpose == ROUTER_PURPOSE_BRIDGE);
+ info = extend_info_from_node(r, use_pref_addr);
tor_assert(info);
}
} else {
const node_t *r =
choose_good_middle_server(purpose, state, circ->cpath, cur_len);
if (r) {
- info = extend_info_from_node(r);
+ info = extend_info_from_node(r, 0);
tor_assert(info);
}
}
@@ -3320,28 +3325,36 @@ extend_info_alloc(const char *nickname, const char *digest,
return info;
}
-/** Allocate and return a new extend_info_t that can be used to build a
- * circuit to or through the router <b>r</b>. */
+/** Allocate and return a new extend_info_t that can be used to build
+ * a circuit to or through the router <b>r</b>. Use the primary
+ * address of the router unless <b>for_direct_connect</b> is true, in
+ * which case the preferred address is used instead. */
extend_info_t *
-extend_info_from_router(const routerinfo_t *r)
+extend_info_from_router(const routerinfo_t *r, int for_direct_connect)
{
- tor_addr_t addr;
+ tor_addr_port_t ap;
tor_assert(r);
- tor_addr_from_ipv4h(&addr, r->addr);
+
+ if (for_direct_connect)
+ router_get_pref_orport(r, &ap);
+ else
+ router_get_prim_orport(r, &ap);
return extend_info_alloc(r->nickname, r->cache_info.identity_digest,
- r->onion_pkey, &addr, r->or_port);
+ r->onion_pkey, &ap.addr, ap.port);
}
-/** Allocate and return a new extend_info that can be used to build a ircuit
- * to or through the node <b>node</b>. May return NULL if there is not
- * enough info about <b>node</b> to extend to it--for example, if there
- * is no routerinfo_t or microdesc_t.
+/** Allocate and return a new extend_info that can be used to build a
+ * ircuit to or through the node <b>node</b>. Use the primary address
+ * of the node unless <b>for_direct_connect</b> is true, in which case
+ * the preferred address is used instead. May return NULL if there is
+ * not enough info about <b>node</b> to extend to it--for example, if
+ * there is no routerinfo_t or microdesc_t.
**/
extend_info_t *
-extend_info_from_node(const node_t *node)
+extend_info_from_node(const node_t *node, int for_direct_connect)
{
if (node->ri) {
- return extend_info_from_router(node->ri);
+ return extend_info_from_router(node->ri, for_direct_connect);
} else if (node->rs && node->md) {
tor_addr_t addr;
tor_addr_from_ipv4h(&addr, node->rs->addr);
@@ -4186,7 +4199,7 @@ choose_random_entry(cpath_build_state_t *state)
goto choose_and_finish;
}
if (smartlist_len(live_entry_guards) >= options->NumEntryGuards)
- break; /* we have enough */
+ goto choose_and_finish; /* we have enough */
} SMARTLIST_FOREACH_END(entry);
if (entry_list_is_constrained(options)) {
@@ -4594,6 +4607,32 @@ bridge_free(bridge_info_t *bridge)
/** A list of pluggable transports found in torrc. */
static smartlist_t *transport_list = NULL;
+/** Mark every entry of the transport list to be removed on our next call to
+ * sweep_transport_list unless it has first been un-marked. */
+void
+mark_transport_list(void)
+{
+ if (!transport_list)
+ transport_list = smartlist_create();
+ SMARTLIST_FOREACH(transport_list, transport_t *, t,
+ t->marked_for_removal = 1);
+}
+
+/** Remove every entry of the transport list that was marked with
+ * mark_transport_list if it has not subsequently been un-marked. */
+void
+sweep_transport_list(void)
+{
+ if (!transport_list)
+ transport_list = smartlist_create();
+ SMARTLIST_FOREACH_BEGIN(transport_list, transport_t *, t) {
+ if (t->marked_for_removal) {
+ SMARTLIST_DEL_CURRENT(transport_list, t);
+ transport_free(t);
+ }
+ } SMARTLIST_FOREACH_END(t);
+}
+
/** Initialize the pluggable transports list to empty, creating it if
* needed. */
void
@@ -4606,7 +4645,7 @@ clear_transport_list(void)
}
/** Free the pluggable transport struct <b>transport</b>. */
-static void
+void
transport_free(transport_t *transport)
{
if (!transport)
@@ -4618,7 +4657,7 @@ transport_free(transport_t *transport)
/** Returns the transport in our transport list that has the name <b>name</b>.
* Else returns NULL. */
-static const transport_t *
+transport_t *
transport_get_by_name(const char *name)
{
tor_assert(name);
@@ -4626,7 +4665,7 @@ transport_get_by_name(const char *name)
if (!transport_list)
return NULL;
- SMARTLIST_FOREACH_BEGIN(transport_list, const transport_t *, transport) {
+ SMARTLIST_FOREACH_BEGIN(transport_list, transport_t *, transport) {
if (!strcmp(transport->name, name))
return transport;
} SMARTLIST_FOREACH_END(transport);
@@ -4634,41 +4673,139 @@ transport_get_by_name(const char *name)
return NULL;
}
-/** Remember a new pluggable transport proxy at <b>addr</b>:<b>port</b>.
- * <b>name</b> is set to the name of the protocol this proxy uses.
- * <b>socks_ver</b> is set to the SOCKS version of the proxy.
- *
- * Returns 0 on success, -1 on fail. */
-int
-transport_add_from_config(const tor_addr_t *addr, uint16_t port,
- const char *name, int socks_ver)
+/** Returns a transport_t struct for a transport proxy supporting the
+ protocol <b>name</b> listening at <b>addr</b>:<b>port</b> using
+ SOCKS version <b>socks_ver</b>. */
+transport_t *
+transport_create(const tor_addr_t *addr, uint16_t port,
+ const char *name, int socks_ver)
{
- transport_t *t;
+ transport_t *t = tor_malloc_zero(sizeof(transport_t));
- if (transport_get_by_name(name)) { /* check for duplicate names */
- log_warn(LD_CONFIG, "More than one transport has '%s' as "
- "its name.", name);
- return -1;
- }
-
- t = tor_malloc_zero(sizeof(transport_t));
tor_addr_copy(&t->addr, addr);
t->port = port;
t->name = tor_strdup(name);
t->socks_version = socks_ver;
- if (!transport_list)
- transport_list = smartlist_create();
+ return t;
+}
+
+/** Resolve any conflicts that the insertion of transport <b>t</b>
+ * might cause.
+ * Return 0 if <b>t</b> is OK and should be registered, 1 if there is
+ * a transport identical to <b>t</b> already registered and -1 if
+ * <b>t</b> cannot be added due to conflicts. */
+static int
+transport_resolve_conflicts(transport_t *t)
+{
+ /* This is how we resolve transport conflicts:
+
+ If there is already a transport with the same name and addrport,
+ we either have duplicate torrc lines OR we are here post-HUP and
+ this transport was here pre-HUP as well. In any case, mark the
+ old transport so that it doesn't get removed and ignore the new
+ one. Our caller has to free the new transport so we return '1' to
+ signify this.
+
+ If there is already a transport with the same name but different
+ addrport:
+ * if it's marked for removal, it means that it either has a lower
+ priority than 't' in torrc (otherwise the mark would have been
+ cleared by the paragraph above), or it doesn't exist at all in
+ the post-HUP torrc. We destroy the old transport and register 't'.
+ * if it's *not* marked for removal, it means that it was newly
+ added in the post-HUP torrc or that it's of higher priority, in
+ this case we ignore 't'. */
+ transport_t *t_tmp = transport_get_by_name(t->name);
+ if (t_tmp) { /* same name */
+ if (tor_addr_eq(&t->addr, &t_tmp->addr) && (t->port == t_tmp->port)) {
+ /* same name *and* addrport */
+ t_tmp->marked_for_removal = 0;
+ return 1;
+ } else { /* same name but different addrport */
+ if (t_tmp->marked_for_removal) { /* marked for removal */
+ log_notice(LD_GENERAL, "You tried to add transport '%s' at '%s:%u' "
+ "but there was already a transport marked for deletion at "
+ "'%s:%u'. We deleted the old transport and registered the "
+ "new one.", t->name, fmt_addr(&t->addr), t->port,
+ fmt_addr(&t_tmp->addr), t_tmp->port);
+ smartlist_remove(transport_list, t_tmp);
+ transport_free(t_tmp);
+ } else { /* *not* marked for removal */
+ log_notice(LD_GENERAL, "You tried to add transport '%s' at '%s:%u' "
+ "but the same transport already exists at '%s:%u'. "
+ "Skipping.", t->name, fmt_addr(&t->addr), t->port,
+ fmt_addr(&t_tmp->addr), t_tmp->port);
+ return -1;
+ }
+ }
+ }
- smartlist_add(transport_list, t);
return 0;
}
-/** Warns the user of possible pluggable transport misconfiguration. */
-void
+/** Add transport <b>t</b> to the internal list of pluggable
+ * transports.
+ * Returns 0 if the transport was added correctly, 1 if the same
+ * transport was already registered (in this case the caller must
+ * free the transport) and -1 if there was an error. */
+int
+transport_add(transport_t *t)
+{
+ int r;
+ tor_assert(t);
+
+ r = transport_resolve_conflicts(t);
+
+ switch (r) {
+ case 0: /* should register transport */
+ if (!transport_list)
+ transport_list = smartlist_create();
+ smartlist_add(transport_list, t);
+ return 0;
+ default: /* let our caller know the return code */
+ return r;
+ }
+}
+
+/** Remember a new pluggable transport proxy at <b>addr</b>:<b>port</b>.
+ * <b>name</b> is set to the name of the protocol this proxy uses.
+ * <b>socks_ver</b> is set to the SOCKS version of the proxy. */
+int
+transport_add_from_config(const tor_addr_t *addr, uint16_t port,
+ const char *name, int socks_ver)
+{
+ transport_t *t = transport_create(addr, port, name, socks_ver);
+
+ int r = transport_add(t);
+
+ switch (r) {
+ case -1:
+ default:
+ log_notice(LD_GENERAL, "Could not add transport %s at %s:%u. Skipping.",
+ t->name, fmt_addr(&t->addr), t->port);
+ transport_free(t);
+ return -1;
+ case 1:
+ log_info(LD_GENERAL, "Succesfully registered transport %s at %s:%u.",
+ t->name, fmt_addr(&t->addr), t->port);
+ transport_free(t); /* falling */
+ return 0;
+ case 0:
+ log_info(LD_GENERAL, "Succesfully registered transport %s at %s:%u.",
+ t->name, fmt_addr(&t->addr), t->port);
+ return 0;
+ }
+}
+
+/** Warn the user of possible pluggable transport misconfiguration.
+ * Return 0 if the validation happened, -1 if we should postpone the
+ * validation. */
+int
validate_pluggable_transports_config(void)
{
- if (bridge_list) {
+ /* Don't validate if managed proxies are not yet fully configured. */
+ if (bridge_list && !pt_proxies_configuration_pending()) {
SMARTLIST_FOREACH_BEGIN(bridge_list, bridge_info_t *, b) {
/* Skip bridges without transports. */
if (!b->transport_name)
@@ -4682,6 +4819,10 @@ validate_pluggable_transports_config(void)
"corresponding ClientTransportPlugin line.",
b->transport_name);
} SMARTLIST_FOREACH_END(b);
+
+ return 0;
+ } else {
+ return -1;
}
}
@@ -4713,10 +4854,11 @@ get_configured_bridge_by_addr_port_digest(const tor_addr_t *addr,
static bridge_info_t *
get_configured_bridge_by_routerinfo(const routerinfo_t *ri)
{
- tor_addr_t addr;
- tor_addr_from_ipv4h(&addr, ri->addr);
- return get_configured_bridge_by_addr_port_digest(&addr,
- ri->or_port, ri->cache_info.identity_digest);
+ tor_addr_port_t ap;
+
+ router_get_pref_orport(ri, &ap);
+ return get_configured_bridge_by_addr_port_digest(&ap.addr, ap.port,
+ ri->cache_info.identity_digest);
}
/** Return 1 if <b>ri</b> is one of our known bridges, else 0. */
@@ -4730,18 +4872,31 @@ routerinfo_is_a_configured_bridge(const routerinfo_t *ri)
int
node_is_a_configured_bridge(const node_t *node)
{
- tor_addr_t addr;
- uint16_t orport;
+ int retval = 0; /* Negative. */
+ smartlist_t *orports = NULL;
+
if (!node)
- return 0;
- if (node_get_addr(node, &addr) < 0)
- return 0;
- orport = node_get_orport(node);
- if (orport == 0)
- return 0;
+ goto out;
+
+ orports = node_get_all_orports(node);
+ if (orports == NULL)
+ goto out;
- return get_configured_bridge_by_addr_port_digest(
- &addr, orport, node->identity) != NULL;
+ SMARTLIST_FOREACH_BEGIN(orports, tor_addr_port_t *, orport) {
+ if (get_configured_bridge_by_addr_port_digest(&orport->addr, orport->port,
+ node->identity) != NULL) {
+ retval = 1;
+ goto out;
+ }
+ } SMARTLIST_FOREACH_END(orport);
+
+ out:
+ if (orports != NULL) {
+ SMARTLIST_FOREACH(orports, tor_addr_port_t *, p, tor_free(p));
+ smartlist_free(orports);
+ orports = NULL;
+ }
+ return retval;
}
/** We made a connection to a router at <b>addr</b>:<b>port</b>
@@ -4869,7 +5024,6 @@ launch_direct_bridge_descriptor_fetch(bridge_info_t *bridge)
DIR_PURPOSE_FETCH_SERVERDESC))
return; /* it's already on the way */
- address = tor_dup_addr(&bridge->addr);
if (routerset_contains_bridge(options->ExcludeNodes, bridge)) {
download_status_mark_impossible(&bridge->fetch_status);
log_warn(LD_APP, "Not using bridge at %s: it is in ExcludeNodes.",
@@ -4877,6 +5031,8 @@ launch_direct_bridge_descriptor_fetch(bridge_info_t *bridge)
return;
}
+ address = tor_dup_addr(&bridge->addr);
+
directory_initiate_command(address, &bridge->addr,
bridge->port, 0,
0, /* does not matter */
@@ -4912,6 +5068,11 @@ fetch_bridge_descriptors(const or_options_t *options, time_t now)
if (!bridge_list)
return;
+ /* If we still have unconfigured managed proxies, don't go and
+ connect to a bridge. */
+ if (pt_proxies_configuration_pending())
+ return;
+
SMARTLIST_FOREACH_BEGIN(bridge_list, bridge_info_t *, bridge)
{
if (!download_status_is_ready(&bridge->fetch_status, now,
@@ -4989,18 +5150,52 @@ rewrite_node_address_for_bridge(const bridge_info_t *bridge, node_t *node)
routerinfo_t *ri = node->ri;
tor_addr_from_ipv4h(&addr, ri->addr);
- if (!tor_addr_compare(&bridge->addr, &addr, CMP_EXACT) &&
- bridge->port == ri->or_port) {
+ if ((!tor_addr_compare(&bridge->addr, &addr, CMP_EXACT) &&
+ bridge->port == ri->or_port) ||
+ (!tor_addr_compare(&bridge->addr, &ri->ipv6_addr, CMP_EXACT) &&
+ bridge->port == ri->ipv6_orport)) {
/* they match, so no need to do anything */
} else {
- ri->addr = tor_addr_to_ipv4h(&bridge->addr);
- tor_free(ri->address);
- ri->address = tor_dup_ip(ri->addr);
- ri->or_port = bridge->port;
- log_info(LD_DIR,
- "Adjusted bridge routerinfo for '%s' to match configured "
- "address %s:%d.",
- ri->nickname, ri->address, ri->or_port);
+ if (tor_addr_family(&bridge->addr) == AF_INET) {
+ ri->addr = tor_addr_to_ipv4h(&bridge->addr);
+ tor_free(ri->address);
+ ri->address = tor_dup_ip(ri->addr);
+ ri->or_port = bridge->port;
+ log_info(LD_DIR,
+ "Adjusted bridge routerinfo for '%s' to match configured "
+ "address %s:%d.",
+ ri->nickname, ri->address, ri->or_port);
+ } else if (tor_addr_family(&bridge->addr) == AF_INET6) {
+ tor_addr_copy(&ri->ipv6_addr, &bridge->addr);
+ ri->ipv6_orport = bridge->port;
+ log_info(LD_DIR,
+ "Adjusted bridge routerinfo for '%s' to match configured "
+ "address %s:%d.",
+ ri->nickname, fmt_addr(&ri->ipv6_addr), ri->ipv6_orport);
+ } else {
+ log_err(LD_BUG, "Address family not supported: %d.",
+ tor_addr_family(&bridge->addr));
+ return;
+ }
+ }
+
+ /* Indicate that we prefer connecting to this bridge over the
+ protocol that the bridge address indicates. Last bridge
+ descriptor handled wins. */
+ ri->ipv6_preferred = tor_addr_family(&bridge->addr) == AF_INET6;
+
+ /* XXXipv6 we lack support for falling back to another address for
+ the same relay, warn the user */
+ if (!tor_addr_is_null(&ri->ipv6_addr))
+ {
+ tor_addr_port_t ap;
+ router_get_pref_orport(ri, &ap);
+ log_notice(LD_CONFIG,
+ "Bridge '%s' has both an IPv4 and an IPv6 address. "
+ "Will prefer using its %s address (%s:%d).",
+ ri->nickname,
+ ri->ipv6_preferred ? "IPv6" : "IPv4",
+ fmt_addr(&ap.addr), ap.port);
}
}
if (node->rs) {
@@ -5045,8 +5240,8 @@ learned_bridge_descriptor(routerinfo_t *ri, int from_cache)
rewrite_node_address_for_bridge(bridge, node);
add_an_entry_guard(node, 1, 1);
- log_notice(LD_DIR, "new bridge descriptor '%s' (%s)", ri->nickname,
- from_cache ? "cached" : "fresh");
+ log_notice(LD_DIR, "new bridge descriptor '%s' (%s): %s", ri->nickname,
+ from_cache ? "cached" : "fresh", router_describe(ri));
/* set entry->made_contact so if it goes down we don't drop it from
* our entry node list */
entry_guard_register_connect_status(ri->cache_info.identity_digest,
diff --git a/src/or/circuitbuild.h b/src/or/circuitbuild.h
index bb5c2eb0b..8df274870 100644
--- a/src/or/circuitbuild.h
+++ b/src/or/circuitbuild.h
@@ -22,6 +22,9 @@ typedef struct {
tor_addr_t addr;
/** Port of proxy */
uint16_t port;
+ /** Boolean: We are re-parsing our transport list, and we are going to remove
+ * this one if we don't find it in the list of configured transports. */
+ unsigned marked_for_removal : 1;
} transport_t;
char *circuit_list_path(origin_circuit_t *circ, int verbose);
@@ -56,8 +59,10 @@ void onion_append_to_cpath(crypt_path_t **head_ptr, crypt_path_t *new_hop);
extend_info_t *extend_info_alloc(const char *nickname, const char *digest,
crypto_pk_env_t *onion_key,
const tor_addr_t *addr, uint16_t port);
-extend_info_t *extend_info_from_router(const routerinfo_t *r);
-extend_info_t *extend_info_from_node(const node_t *node);
+extend_info_t *extend_info_from_router(const routerinfo_t *r,
+ int for_direct_connect);
+extend_info_t *extend_info_from_node(const node_t *node,
+ int for_direct_connect);
extend_info_t *extend_info_dup(extend_info_t *info);
void extend_info_free(extend_info_t *info);
const node_t *build_state_get_exit_node(cpath_build_state_t *state);
@@ -77,6 +82,9 @@ int getinfo_helper_entry_guards(control_connection_t *conn,
void mark_bridge_list(void);
void sweep_bridge_list(void);
+void mark_transport_list(void);
+void sweep_transport_list(void);
+
int routerinfo_is_a_configured_bridge(const routerinfo_t *ri);
int node_is_a_configured_bridge(const node_t *node);
void learned_router_identity(const tor_addr_t *addr, uint16_t port,
@@ -142,9 +150,16 @@ int circuit_build_times_get_bw_scale(networkstatus_t *ns);
void clear_transport_list(void);
int transport_add_from_config(const tor_addr_t *addr, uint16_t port,
const char *name, int socks_ver);
+int transport_add(transport_t *t);
+void transport_free(transport_t *transport);
+transport_t *transport_create(const tor_addr_t *addr, uint16_t port,
+ const char *name, int socks_ver);
+
int find_transport_by_bridge_addrport(const tor_addr_t *addr, uint16_t port,
const transport_t **transport);
-void validate_pluggable_transports_config(void);
+transport_t *transport_get_by_name(const char *name);
+
+int validate_pluggable_transports_config(void);
#endif
diff --git a/src/or/circuitlist.c b/src/or/circuitlist.c
index 2222a25af..25b80f11f 100644
--- a/src/or/circuitlist.c
+++ b/src/or/circuitlist.c
@@ -1128,9 +1128,11 @@ circuit_expire_all_dirty_circs(void)
* - If circ isn't open yet: call circuit_build_failed() if we're
* the origin, and in either case call circuit_rep_hist_note_result()
* to note stats.
- * - If purpose is C_INTRODUCE_ACK_WAIT, remove the intro point we
- * just tried from our list of intro points for that service
- * descriptor.
+ * - If purpose is C_INTRODUCE_ACK_WAIT, report the intro point
+ * failure we just had to the hidden service client module.
+ * - If purpose is C_INTRODUCING and <b>reason</b> isn't TIMEOUT,
+ * report to the hidden service client module that the intro point
+ * we just tried may be unreachable.
* - Send appropriate destroys and edge_destroys for conns and
* streams attached to circ.
* - If circ->rend_splice is set (we are the midpoint of a joined
@@ -1199,16 +1201,33 @@ _circuit_mark_for_close(circuit_t *circ, int reason, int line,
}
if (circ->purpose == CIRCUIT_PURPOSE_C_INTRODUCE_ACK_WAIT) {
origin_circuit_t *ocirc = TO_ORIGIN_CIRCUIT(circ);
+ int timed_out = (reason == END_CIRC_REASON_TIMEOUT);
tor_assert(circ->state == CIRCUIT_STATE_OPEN);
tor_assert(ocirc->build_state->chosen_exit);
tor_assert(ocirc->rend_data);
/* treat this like getting a nack from it */
- log_info(LD_REND, "Failed intro circ %s to %s (awaiting ack). "
- "Removing from descriptor.",
+ log_info(LD_REND, "Failed intro circ %s to %s (awaiting ack). %s",
safe_str_client(ocirc->rend_data->onion_address),
+ safe_str_client(build_state_get_exit_nickname(ocirc->build_state)),
+ timed_out ? "Recording timeout." : "Removing from descriptor.");
+ rend_client_report_intro_point_failure(ocirc->build_state->chosen_exit,
+ ocirc->rend_data,
+ timed_out ?
+ INTRO_POINT_FAILURE_TIMEOUT :
+ INTRO_POINT_FAILURE_GENERIC);
+ } else if (circ->purpose == CIRCUIT_PURPOSE_C_INTRODUCING &&
+ reason != END_CIRC_REASON_TIMEOUT) {
+ origin_circuit_t *ocirc = TO_ORIGIN_CIRCUIT(circ);
+ tor_assert(ocirc->build_state->chosen_exit);
+ tor_assert(ocirc->rend_data);
+ log_info(LD_REND, "Failed intro circ %s to %s "
+ "(building circuit to intro point). "
+ "Marking intro point as possibly unreachable.",
+ safe_str_client(ocirc->rend_data->onion_address),
safe_str_client(build_state_get_exit_nickname(ocirc->build_state)));
- rend_client_remove_intro_point(ocirc->build_state->chosen_exit,
- ocirc->rend_data);
+ rend_client_report_intro_point_failure(ocirc->build_state->chosen_exit,
+ ocirc->rend_data,
+ INTRO_POINT_FAILURE_UNREACHABLE);
}
if (circ->n_conn) {
circuit_clear_cell_queue(circ, circ->n_conn);
diff --git a/src/or/circuituse.c b/src/or/circuituse.c
index 7a2ab83ad..0cb934491 100644
--- a/src/or/circuituse.c
+++ b/src/or/circuituse.c
@@ -117,7 +117,7 @@ circuit_is_acceptable(const origin_circuit_t *origin_circ,
if (tor_digest_is_zero(digest)) {
/* we don't know the digest; have to compare addr:port */
tor_addr_t addr;
- int r = tor_addr_from_str(&addr, conn->socks_request->address);
+ int r = tor_addr_parse(&addr, conn->socks_request->address);
if (r < 0 ||
!tor_addr_eq(&build_state->chosen_exit->addr, &addr) ||
build_state->chosen_exit->port != conn->socks_request->port)
@@ -1439,7 +1439,10 @@ circuit_get_open_circ_or_launch(entry_connection_t *conn,
int opt = conn->chosen_exit_optional;
r = node_get_by_nickname(conn->chosen_exit_name, 1);
if (r && node_has_descriptor(r)) {
- extend_info = extend_info_from_node(r);
+ /* We might want to connect to an IPv6 bridge for loading
+ descriptors so we use the preferred address rather than
+ the primary. */
+ extend_info = extend_info_from_node(r, conn->want_onehop ? 1 : 0);
} else {
log_debug(LD_DIR, "considering %d, %s",
want_onehop, conn->chosen_exit_name);
@@ -1454,7 +1457,7 @@ circuit_get_open_circ_or_launch(entry_connection_t *conn,
log_info(LD_DIR, "Broken exit digest on tunnel conn. Closing.");
return -1;
}
- if (tor_addr_from_str(&addr, conn->socks_request->address) < 0) {
+ if (tor_addr_parse(&addr, conn->socks_request->address) < 0) {
log_info(LD_DIR, "Broken address %s on tunnel conn. Closing.",
escaped_safe_str_client(conn->socks_request->address));
return -1;
@@ -1589,6 +1592,14 @@ link_apconn_to_circ(entry_connection_t *apconn, origin_circuit_t *circ,
/* assert_connection_ok(conn, time(NULL)); */
circ->p_streams = ENTRY_TO_EDGE_CONN(apconn);
+ if (connection_edge_is_rendezvous_stream(ENTRY_TO_EDGE_CONN(apconn))) {
+ /* We are attaching a stream to a rendezvous circuit. That means
+ * that an attempt to connect to a hidden service just
+ * succeeded. Tell rendclient.c. */
+ rend_client_note_connection_attempt_ended(
+ ENTRY_TO_EDGE_CONN(apconn)->rend_data->onion_address);
+ }
+
if (cpath) { /* we were given one; use it */
tor_assert(cpath_is_on_circuit(circ, cpath));
} else {
diff --git a/src/or/command.c b/src/or/command.c
index d24373eec..023f2bead 100644
--- a/src/or/command.c
+++ b/src/or/command.c
@@ -46,6 +46,15 @@ uint64_t stats_n_versions_cells_processed = 0;
/** How many CELL_NETINFO cells have we received, ever? */
uint64_t stats_n_netinfo_cells_processed = 0;
+/** How many CELL_VPADDING cells have we received, ever? */
+uint64_t stats_n_vpadding_cells_processed = 0;
+/** How many CELL_CERTS cells have we received, ever? */
+uint64_t stats_n_certs_cells_processed = 0;
+/** How many CELL_AUTH_CHALLENGE cells have we received, ever? */
+uint64_t stats_n_auth_challenge_cells_processed = 0;
+/** How many CELL_AUTHENTICATE cells have we received, ever? */
+uint64_t stats_n_authenticate_cells_processed = 0;
+
/* These are the main functions for processing cells */
static void command_process_create_cell(cell_t *cell, or_connection_t *conn);
static void command_process_created_cell(cell_t *cell, or_connection_t *conn);
@@ -54,6 +63,12 @@ static void command_process_destroy_cell(cell_t *cell, or_connection_t *conn);
static void command_process_versions_cell(var_cell_t *cell,
or_connection_t *conn);
static void command_process_netinfo_cell(cell_t *cell, or_connection_t *conn);
+static void command_process_certs_cell(var_cell_t *cell,
+ or_connection_t *conn);
+static void command_process_auth_challenge_cell(var_cell_t *cell,
+ or_connection_t *conn);
+static void command_process_authenticate_cell(var_cell_t *cell,
+ or_connection_t *conn);
#ifdef KEEP_TIMING_STATS
/** This is a wrapper function around the actual function that processes the
@@ -93,7 +108,7 @@ command_time_process_cell(cell_t *cell, or_connection_t *conn, int *time,
void
command_process_cell(cell_t *cell, or_connection_t *conn)
{
- int handshaking = (conn->_base.state == OR_CONN_STATE_OR_HANDSHAKING);
+ int handshaking = (conn->_base.state != OR_CONN_STATE_OPEN);
#ifdef KEEP_TIMING_STATS
/* how many of each cell have we seen so far this second? needs better
* name. */
@@ -133,10 +148,22 @@ command_process_cell(cell_t *cell, or_connection_t *conn)
#define PROCESS_CELL(tp, cl, cn) command_process_ ## tp ## _cell(cl, cn)
#endif
+ if (conn->_base.marked_for_close)
+ return;
+
/* Reject all but VERSIONS and NETINFO when handshaking. */
+ /* (VERSIONS should actually be impossible; it's variable-length.) */
if (handshaking && cell->command != CELL_VERSIONS &&
- cell->command != CELL_NETINFO)
+ cell->command != CELL_NETINFO) {
+ log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
+ "Received unexpected cell command %d in state %s; ignoring it.",
+ (int)cell->command,
+ conn_state_to_string(CONN_TYPE_OR,conn->_base.state));
return;
+ }
+
+ if (conn->_base.state == OR_CONN_STATE_OR_HANDSHAKING_V3)
+ or_handshake_state_record_cell(conn->handshake_state, cell, 1);
switch (cell->command) {
case CELL_PADDING:
@@ -187,39 +214,101 @@ command_process_var_cell(var_cell_t *cell, or_connection_t *conn)
#ifdef KEEP_TIMING_STATS
/* how many of each cell have we seen so far this second? needs better
* name. */
- static int num_versions=0, num_cert=0;
+ static int num_versions=0, num_certs=0;
time_t now = time(NULL);
if (now > current_second) { /* the second has rolled over */
/* print stats */
log_info(LD_OR,
- "At end of second: %d versions (%d ms), %d cert (%d ms)",
+ "At end of second: %d versions (%d ms), %d certs (%d ms)",
num_versions, versions_time/1000,
- cert, cert_time/1000);
+ num_certs, certs_time/1000);
- num_versions = num_cert = 0;
- versions_time = cert_time = 0;
+ num_versions = num_certs = 0;
+ versions_time = certs_time = 0;
/* remember which second it is, for next time */
current_second = now;
}
#endif
- /* reject all when not handshaking. */
- if (conn->_base.state != OR_CONN_STATE_OR_HANDSHAKING)
+ if (conn->_base.marked_for_close)
return;
+ switch (conn->_base.state)
+ {
+ case OR_CONN_STATE_OR_HANDSHAKING_V2:
+ if (cell->command != CELL_VERSIONS)
+ return;
+ break;
+ case OR_CONN_STATE_TLS_HANDSHAKING:
+ /* If we're using bufferevents, it's entirely possible for us to
+ * notice "hey, data arrived!" before we notice "hey, the handshake
+ * finished!" And we need to be accepting both at once to handle both
+ * the v2 and v3 handshakes. */
+
+ /* fall through */
+ case OR_CONN_STATE_TLS_SERVER_RENEGOTIATING:
+ if (cell->command != CELL_VERSIONS) {
+ log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
+ "Received a non-VERSIONS cell with command %d in state %s; "
+ "ignoring it.",
+ (int)cell->command,
+ conn_state_to_string(CONN_TYPE_OR,conn->_base.state));
+ return;
+ }
+ break;
+ case OR_CONN_STATE_OR_HANDSHAKING_V3:
+ if (cell->command != CELL_AUTHENTICATE)
+ or_handshake_state_record_var_cell(conn->handshake_state, cell, 1);
+ break; /* Everything is allowed */
+ case OR_CONN_STATE_OPEN:
+ if (conn->link_proto < 3) {
+ log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
+ "Received a variable-length cell with command %d in state %s "
+ "with link protocol %d; ignoring it.",
+ (int)cell->command,
+ conn_state_to_string(CONN_TYPE_OR,conn->_base.state),
+ (int)conn->link_proto);
+ return;
+ }
+ break;
+ default:
+ log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
+ "Received var-length cell with command %d in unexpected state "
+ "%s [%d]; ignoring it.",
+ (int)cell->command,
+ conn_state_to_string(CONN_TYPE_OR,conn->_base.state),
+ (int)conn->_base.state);
+ return;
+ }
+
switch (cell->command) {
case CELL_VERSIONS:
++stats_n_versions_cells_processed;
PROCESS_CELL(versions, cell, conn);
break;
+ case CELL_VPADDING:
+ ++stats_n_vpadding_cells_processed;
+ /* Do nothing */
+ break;
+ case CELL_CERTS:
+ ++stats_n_certs_cells_processed;
+ PROCESS_CELL(certs, cell, conn);
+ break;
+ case CELL_AUTH_CHALLENGE:
+ ++stats_n_auth_challenge_cells_processed;
+ PROCESS_CELL(auth_challenge, cell, conn);
+ break;
+ case CELL_AUTHENTICATE:
+ ++stats_n_authenticate_cells_processed;
+ PROCESS_CELL(authenticate, cell, conn);
+ break;
default:
- log_warn(LD_BUG,
+ log_fn(LOG_INFO, LD_PROTOCOL,
"Variable-length cell of unknown type (%d) received.",
cell->command);
- tor_fragile_assert();
break;
}
}
@@ -233,6 +322,7 @@ static void
command_process_create_cell(cell_t *cell, or_connection_t *conn)
{
or_circuit_t *circ;
+ const or_options_t *options = get_options();
int id_is_high;
if (we_are_hibernating()) {
@@ -244,9 +334,11 @@ command_process_create_cell(cell_t *cell, or_connection_t *conn)
return;
}
- if (!server_mode(get_options())) {
+ if (!server_mode(options) ||
+ (!public_server_mode(options) && conn->is_outgoing)) {
log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
- "Received create cell (type %d) from %s:%d, but we're a client. "
+ "Received create cell (type %d) from %s:%d, but we're connected "
+ "to it as a client. "
"Sending back a destroy.",
(int)cell->command, conn->_base.address, conn->_base.port);
connection_or_send_destroy(cell->circ_id, conn,
@@ -309,7 +401,13 @@ command_process_create_cell(cell_t *cell, or_connection_t *conn)
* a CPU worker. */
char keys[CPATH_KEY_MATERIAL_LEN];
char reply[DIGEST_LEN*2];
+
tor_assert(cell->command == CELL_CREATE_FAST);
+
+ /* Make sure we never try to use the OR connection on which we
+ * received this cell to satisfy an EXTEND request, */
+ conn->is_connection_with_client = 1;
+
if (fast_server_handshake(cell->payload, (uint8_t*)reply,
(uint8_t*)keys, sizeof(keys))<0) {
log_warn(LD_OR,"Failed to generate key material. Closing.");
@@ -505,14 +603,40 @@ command_process_versions_cell(var_cell_t *cell, or_connection_t *conn)
{
int highest_supported_version = 0;
const uint8_t *cp, *end;
+ const int started_here = connection_or_nonopen_was_started_here(conn);
if (conn->link_proto != 0 ||
- conn->_base.state != OR_CONN_STATE_OR_HANDSHAKING ||
(conn->handshake_state && conn->handshake_state->received_versions)) {
log_fn(LOG_PROTOCOL_WARN, LD_OR,
"Received a VERSIONS cell on a connection with its version "
"already set to %d; dropping", (int) conn->link_proto);
return;
}
+ switch (conn->_base.state)
+ {
+ case OR_CONN_STATE_OR_HANDSHAKING_V2:
+ break;
+ case OR_CONN_STATE_TLS_HANDSHAKING:
+ case OR_CONN_STATE_TLS_SERVER_RENEGOTIATING:
+ if (started_here) {
+ log_fn(LOG_PROTOCOL_WARN, LD_OR,
+ "Received a versions cell while TLS-handshaking not in "
+ "OR_HANDSHAKING_V3 on a connection we originated.");
+ }
+ conn->_base.state = OR_CONN_STATE_OR_HANDSHAKING_V3;
+ if (connection_init_or_handshake_state(conn, started_here) < 0) {
+ connection_mark_for_close(TO_CONN(conn));
+ return;
+ }
+ or_handshake_state_record_var_cell(conn->handshake_state, cell, 1);
+ break;
+ case OR_CONN_STATE_OR_HANDSHAKING_V3:
+ break;
+ default:
+ log_fn(LOG_PROTOCOL_WARN, LD_OR,
+ "VERSIONS cell while in unexpected state");
+ return;
+ }
+
tor_assert(conn->handshake_state);
end = cell->payload + cell->payload_len;
for (cp = cell->payload; cp+1 < end; ++cp) {
@@ -534,19 +658,87 @@ command_process_versions_cell(var_cell_t *cell, or_connection_t *conn)
"That's crazily non-compliant. Closing connection.");
connection_mark_for_close(TO_CONN(conn));
return;
+ } else if (highest_supported_version < 3 &&
+ conn->_base.state == OR_CONN_STATE_OR_HANDSHAKING_V3) {
+ log_fn(LOG_PROTOCOL_WARN, LD_OR,
+ "Negotiated link protocol 2 or lower after doing a v3 TLS "
+ "handshake. Closing connection.");
+ connection_mark_for_close(TO_CONN(conn));
+ return;
}
+
conn->link_proto = highest_supported_version;
conn->handshake_state->received_versions = 1;
- log_info(LD_OR, "Negotiated version %d with %s:%d; sending NETINFO.",
- highest_supported_version,
- safe_str_client(conn->_base.address),
- conn->_base.port);
- tor_assert(conn->link_proto >= 2);
+ if (conn->link_proto == 2) {
+ log_info(LD_OR, "Negotiated version %d with %s:%d; sending NETINFO.",
+ highest_supported_version,
+ safe_str_client(conn->_base.address),
+ conn->_base.port);
- if (connection_or_send_netinfo(conn) < 0) {
- connection_mark_for_close(TO_CONN(conn));
- return;
+ if (connection_or_send_netinfo(conn) < 0) {
+ connection_mark_for_close(TO_CONN(conn));
+ return;
+ }
+ } else {
+ const int send_versions = !started_here;
+ /* If we want to authenticate, send a CERTS cell */
+ const int send_certs = !started_here || public_server_mode(get_options());
+ /* If we're a relay that got a connection, ask for authentication. */
+ const int send_chall = !started_here && public_server_mode(get_options());
+ /* If our certs cell will authenticate us, or if we have no intention of
+ * authenticating, send a netinfo cell right now. */
+ const int send_netinfo =
+ !(started_here && public_server_mode(get_options()));
+ const int send_any =
+ send_versions || send_certs || send_chall || send_netinfo;
+ tor_assert(conn->link_proto >= 3);
+
+ log_info(LD_OR, "Negotiated version %d with %s:%d; %s%s%s%s%s",
+ highest_supported_version,
+ safe_str_client(conn->_base.address),
+ conn->_base.port,
+ send_any ? "Sending cells:" : "Waiting for CERTS cell",
+ send_versions ? " VERSIONS" : "",
+ send_certs ? " CERTS" : "",
+ send_chall ? " AUTH_CHALLENGE" : "",
+ send_netinfo ? " NETINFO" : "");
+
+#ifdef DISABLE_V3_LINKPROTO_SERVERSIDE
+ if (1) {
+ connection_mark_for_close(TO_CONN(conn));
+ return;
+ }
+#endif
+
+ if (send_versions) {
+ if (connection_or_send_versions(conn, 1) < 0) {
+ log_warn(LD_OR, "Couldn't send versions cell");
+ connection_mark_for_close(TO_CONN(conn));
+ return;
+ }
+ }
+ if (send_certs) {
+ if (connection_or_send_certs_cell(conn) < 0) {
+ log_warn(LD_OR, "Couldn't send certs cell");
+ connection_mark_for_close(TO_CONN(conn));
+ return;
+ }
+ }
+ if (send_chall) {
+ if (connection_or_send_auth_challenge_cell(conn) < 0) {
+ log_warn(LD_OR, "Couldn't send auth_challenge cell");
+ connection_mark_for_close(TO_CONN(conn));
+ return;
+ }
+ }
+ if (send_netinfo) {
+ if (connection_or_send_netinfo(conn) < 0) {
+ log_warn(LD_OR, "Couldn't send netinfo cell");
+ connection_mark_for_close(TO_CONN(conn));
+ return;
+ }
+ }
}
}
@@ -572,13 +764,41 @@ command_process_netinfo_cell(cell_t *cell, or_connection_t *conn)
conn->link_proto == 0 ? "non-versioned" : "a v1");
return;
}
- if (conn->_base.state != OR_CONN_STATE_OR_HANDSHAKING) {
+ if (conn->_base.state != OR_CONN_STATE_OR_HANDSHAKING_V2 &&
+ conn->_base.state != OR_CONN_STATE_OR_HANDSHAKING_V3) {
log_fn(LOG_PROTOCOL_WARN, LD_OR,
"Received a NETINFO cell on non-handshaking connection; dropping.");
return;
}
tor_assert(conn->handshake_state &&
conn->handshake_state->received_versions);
+
+ if (conn->_base.state == OR_CONN_STATE_OR_HANDSHAKING_V3) {
+ tor_assert(conn->link_proto >= 3);
+ if (conn->handshake_state->started_here) {
+ if (!conn->handshake_state->authenticated) {
+ log_fn(LOG_PROTOCOL_WARN, LD_OR, "Got a NETINFO cell from server, "
+ "but no authentication. Closing the connection.");
+ connection_mark_for_close(TO_CONN(conn));
+ return;
+ }
+ } else {
+ /* we're the server. If the client never authenticated, we have
+ some housekeeping to do.*/
+ if (!conn->handshake_state->authenticated) {
+ tor_assert(tor_digest_is_zero(
+ (const char*)conn->handshake_state->authenticated_peer_id));
+ connection_or_set_circid_type(conn, NULL);
+
+ connection_or_init_conn_from_address(conn,
+ &conn->_base.addr,
+ conn->_base.port,
+ (const char*)conn->handshake_state->authenticated_peer_id,
+ 0);
+ }
+ }
+ }
+
/* Decode the cell. */
timestamp = ntohl(get_uint32(cell->payload));
if (labs(now - conn->handshake_state->sent_versions_at) < 180) {
@@ -651,13 +871,409 @@ command_process_netinfo_cell(cell_t *cell, or_connection_t *conn)
* trustworthy. */
(void)my_apparent_addr;
- if (connection_or_set_state_open(conn)<0)
+ if (connection_or_set_state_open(conn)<0) {
+ log_fn(LOG_PROTOCOL_WARN, LD_OR, "Got good NETINFO cell from %s:%d; but "
+ "was unable to make the OR connection become open.",
+ safe_str_client(conn->_base.address),
+ conn->_base.port);
connection_mark_for_close(TO_CONN(conn));
- else
+ } else {
log_info(LD_OR, "Got good NETINFO cell from %s:%d; OR connection is now "
- "open, using protocol version %d",
+ "open, using protocol version %d. Its ID digest is %s",
safe_str_client(conn->_base.address),
- conn->_base.port, (int)conn->link_proto);
+ conn->_base.port, (int)conn->link_proto,
+ hex_str(conn->identity_digest, DIGEST_LEN));
+ }
assert_connection_ok(TO_CONN(conn),time(NULL));
}
+/** Process a CERTS cell from an OR connection.
+ *
+ * If the other side should not have sent us a CERTS cell, or the cell is
+ * malformed, or it is supposed to authenticate the TLS key but it doesn't,
+ * then mark the connection.
+ *
+ * If the cell has a good cert chain and we're doing a v3 handshake, then
+ * store the certificates in or_handshake_state. If this is the client side
+ * of the connection, we then authenticate the server or mark the connection.
+ * If it's the server side, wait for an AUTHENTICATE cell.
+ */
+static void
+command_process_certs_cell(var_cell_t *cell, or_connection_t *conn)
+{
+#define ERR(s) \
+ do { \
+ log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL, \
+ "Received a bad CERTS cell from %s:%d: %s", \
+ safe_str(conn->_base.address), conn->_base.port, (s)); \
+ connection_mark_for_close(TO_CONN(conn)); \
+ goto err; \
+ } while (0)
+
+ tor_cert_t *link_cert = NULL;
+ tor_cert_t *id_cert = NULL;
+ tor_cert_t *auth_cert = NULL;
+
+ uint8_t *ptr;
+ int n_certs, i;
+
+ if (conn->_base.state != OR_CONN_STATE_OR_HANDSHAKING_V3)
+ ERR("We're not doing a v3 handshake!");
+ if (conn->link_proto < 3)
+ ERR("We're not using link protocol >= 3");
+ if (conn->handshake_state->received_certs_cell)
+ ERR("We already got one");
+ if (conn->handshake_state->authenticated) {
+ /* Should be unreachable, but let's make sure. */
+ ERR("We're already authenticated!");
+ }
+ if (cell->payload_len < 1)
+ ERR("It had no body");
+ if (cell->circ_id)
+ ERR("It had a nonzero circuit ID");
+
+ n_certs = cell->payload[0];
+ ptr = cell->payload + 1;
+ for (i = 0; i < n_certs; ++i) {
+ uint8_t cert_type;
+ uint16_t cert_len;
+ if (ptr + 3 > cell->payload + cell->payload_len) {
+ goto truncated;
+ }
+ cert_type = *ptr;
+ cert_len = ntohs(get_uint16(ptr+1));
+ if (ptr + 3 + cert_len > cell->payload + cell->payload_len) {
+ goto truncated;
+ }
+ if (cert_type == OR_CERT_TYPE_TLS_LINK ||
+ cert_type == OR_CERT_TYPE_ID_1024 ||
+ cert_type == OR_CERT_TYPE_AUTH_1024) {
+ tor_cert_t *cert = tor_cert_decode(ptr + 3, cert_len);
+ if (!cert) {
+ log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
+ "Received undecodable certificate in CERTS cell from %s:%d",
+ safe_str(conn->_base.address), conn->_base.port);
+ } else {
+ if (cert_type == OR_CERT_TYPE_TLS_LINK) {
+ if (link_cert) {
+ tor_cert_free(cert);
+ ERR("Too many TLS_LINK certificates");
+ }
+ link_cert = cert;
+ } else if (cert_type == OR_CERT_TYPE_ID_1024) {
+ if (id_cert) {
+ tor_cert_free(cert);
+ ERR("Too many ID_1024 certificates");
+ }
+ id_cert = cert;
+ } else if (cert_type == OR_CERT_TYPE_AUTH_1024) {
+ if (auth_cert) {
+ tor_cert_free(cert);
+ ERR("Too many AUTH_1024 certificates");
+ }
+ auth_cert = cert;
+ } else {
+ tor_cert_free(cert);
+ }
+ }
+ }
+ ptr += 3 + cert_len;
+ continue;
+
+ truncated:
+ ERR("It ends in the middle of a certificate");
+ }
+
+ if (conn->handshake_state->started_here) {
+ int severity;
+ if (! (id_cert && link_cert))
+ ERR("The certs we wanted were missing");
+ /* Okay. We should be able to check the certificates now. */
+ if (! tor_tls_cert_matches_key(conn->tls, link_cert)) {
+ ERR("The link certificate didn't match the TLS public key");
+ }
+ /* Note that this warns more loudly about time and validity if we were
+ * _trying_ to connect to an authority, not necessarily if we _did_ connect
+ * to one. */
+ if (router_digest_is_trusted_dir(conn->identity_digest))
+ severity = LOG_WARN;
+ else
+ severity = LOG_PROTOCOL_WARN;
+
+ if (! tor_tls_cert_is_valid(severity, link_cert, id_cert, 0))
+ ERR("The link certificate was not valid");
+ if (! tor_tls_cert_is_valid(severity, id_cert, id_cert, 1))
+ ERR("The ID certificate was not valid");
+
+ conn->handshake_state->authenticated = 1;
+ {
+ const digests_t *id_digests = tor_cert_get_id_digests(id_cert);
+ crypto_pk_env_t *identity_rcvd;
+ if (!id_digests)
+ ERR("Couldn't compute digests for key in ID cert");
+
+ identity_rcvd = tor_tls_cert_get_key(id_cert);
+ if (!identity_rcvd)
+ ERR("Internal error: Couldn't get RSA key from ID cert.");
+ memcpy(conn->handshake_state->authenticated_peer_id,
+ id_digests->d[DIGEST_SHA1], DIGEST_LEN);
+ connection_or_set_circid_type(conn, identity_rcvd);
+ crypto_free_pk_env(identity_rcvd);
+ }
+
+ if (connection_or_client_learned_peer_id(conn,
+ conn->handshake_state->authenticated_peer_id) < 0)
+ ERR("Problem setting or checking peer id");
+
+ log_info(LD_OR, "Got some good certificates from %s:%d: Authenticated it.",
+ safe_str(conn->_base.address), conn->_base.port);
+
+ conn->handshake_state->id_cert = id_cert;
+ id_cert = NULL;
+ } else {
+ if (! (id_cert && auth_cert))
+ ERR("The certs we wanted were missing");
+
+ /* Remember these certificates so we can check an AUTHENTICATE cell */
+ if (! tor_tls_cert_is_valid(LOG_PROTOCOL_WARN, auth_cert, id_cert, 1))
+ ERR("The authentication certificate was not valid");
+ if (! tor_tls_cert_is_valid(LOG_PROTOCOL_WARN, id_cert, id_cert, 1))
+ ERR("The ID certificate was not valid");
+
+ log_info(LD_OR, "Got some good certificates from %s:%d: "
+ "Waiting for AUTHENTICATE.",
+ safe_str(conn->_base.address), conn->_base.port);
+ /* XXXX check more stuff? */
+
+ conn->handshake_state->id_cert = id_cert;
+ conn->handshake_state->auth_cert = auth_cert;
+ id_cert = auth_cert = NULL;
+ }
+
+ conn->handshake_state->received_certs_cell = 1;
+ err:
+ tor_cert_free(id_cert);
+ tor_cert_free(link_cert);
+ tor_cert_free(auth_cert);
+#undef ERR
+}
+
+/** Process an AUTH_CHALLENGE cell from an OR connection.
+ *
+ * If we weren't supposed to get one (for example, because we're not the
+ * originator of the connection), or it's ill-formed, or we aren't doing a v3
+ * handshake, mark the connection. If the cell is well-formed but we don't
+ * want to authenticate, just drop it. If the cell is well-formed *and* we
+ * want to authenticate, send an AUTHENTICATE cell and then a NETINFO cell. */
+static void
+command_process_auth_challenge_cell(var_cell_t *cell, or_connection_t *conn)
+{
+ int n_types, i, use_type = -1;
+ uint8_t *cp;
+
+#define ERR(s) \
+ do { \
+ log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL, \
+ "Received a bad AUTH_CHALLENGE cell from %s:%d: %s", \
+ safe_str(conn->_base.address), conn->_base.port, (s)); \
+ connection_mark_for_close(TO_CONN(conn)); \
+ return; \
+ } while (0)
+
+ if (conn->_base.state != OR_CONN_STATE_OR_HANDSHAKING_V3)
+ ERR("We're not currently doing a v3 handshake");
+ if (conn->link_proto < 3)
+ ERR("We're not using link protocol >= 3");
+ if (! conn->handshake_state->started_here)
+ ERR("We didn't originate this connection");
+ if (conn->handshake_state->received_auth_challenge)
+ ERR("We already received one");
+ if (! conn->handshake_state->received_certs_cell)
+ ERR("We haven't gotten a CERTS cell yet");
+ if (cell->payload_len < OR_AUTH_CHALLENGE_LEN + 2)
+ ERR("It was too short");
+ if (cell->circ_id)
+ ERR("It had a nonzero circuit ID");
+
+ n_types = ntohs(get_uint16(cell->payload + OR_AUTH_CHALLENGE_LEN));
+ if (cell->payload_len < OR_AUTH_CHALLENGE_LEN + 2 + 2*n_types)
+ ERR("It looks truncated");
+
+ /* Now see if there is an authentication type we can use */
+ cp=cell->payload+OR_AUTH_CHALLENGE_LEN+2;
+ for (i=0; i < n_types; ++i, cp += 2) {
+ uint16_t authtype = ntohs(get_uint16(cp));
+ if (authtype == AUTHTYPE_RSA_SHA256_TLSSECRET)
+ use_type = authtype;
+ }
+
+ conn->handshake_state->received_auth_challenge = 1;
+
+ if (! public_server_mode(get_options())) {
+ /* If we're not a public server then we don't want to authenticate on a
+ connection we originated, and we already sent a NETINFO cell when we
+ got the CERTS cell. We have nothing more to do. */
+ return;
+ }
+
+ if (use_type >= 0) {
+ log_info(LD_OR, "Got an AUTH_CHALLENGE cell from %s:%d: Sending "
+ "authentication",
+ safe_str(conn->_base.address), conn->_base.port);
+
+ if (connection_or_send_authenticate_cell(conn, use_type) < 0) {
+ log_warn(LD_OR, "Couldn't send authenticate cell");
+ connection_mark_for_close(TO_CONN(conn));
+ return;
+ }
+ } else {
+ log_info(LD_OR, "Got an AUTH_CHALLENGE cell from %s:%d, but we don't "
+ "know any of its authentication types. Not authenticating.",
+ safe_str(conn->_base.address), conn->_base.port);
+ }
+
+ if (connection_or_send_netinfo(conn) < 0) {
+ log_warn(LD_OR, "Couldn't send netinfo cell");
+ connection_mark_for_close(TO_CONN(conn));
+ return;
+ }
+
+#undef ERR
+}
+
+/** Process an AUTHENTICATE cell from an OR connection.
+ *
+ * If it's ill-formed or we weren't supposed to get one or we're not doing a
+ * v3 handshake, then mark the connection. If it does not authenticate the
+ * other side of the connection successfully (because it isn't signed right,
+ * we didn't get a CERTS cell, etc) mark the connection. Otherwise, accept
+ * the identity of the router on the other side of the connection.
+ */
+static void
+command_process_authenticate_cell(var_cell_t *cell, or_connection_t *conn)
+{
+ uint8_t expected[V3_AUTH_FIXED_PART_LEN];
+ const uint8_t *auth;
+ int authlen;
+
+#define ERR(s) \
+ do { \
+ log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL, \
+ "Received a bad AUTHENTICATE cell from %s:%d: %s", \
+ safe_str(conn->_base.address), conn->_base.port, (s)); \
+ connection_mark_for_close(TO_CONN(conn)); \
+ return; \
+ } while (0)
+
+ if (conn->_base.state != OR_CONN_STATE_OR_HANDSHAKING_V3)
+ ERR("We're not doing a v3 handshake");
+ if (conn->link_proto < 3)
+ ERR("We're not using link protocol >= 3");
+ if (conn->handshake_state->started_here)
+ ERR("We originated this connection");
+ if (conn->handshake_state->received_authenticate)
+ ERR("We already got one!");
+ if (conn->handshake_state->authenticated) {
+ /* Should be impossible given other checks */
+ ERR("The peer is already authenticated");
+ }
+ if (! conn->handshake_state->received_certs_cell)
+ ERR("We never got a certs cell");
+ if (conn->handshake_state->auth_cert == NULL)
+ ERR("We never got an authentication certificate");
+ if (conn->handshake_state->id_cert == NULL)
+ ERR("We never got an identity certificate");
+ if (cell->payload_len < 4)
+ ERR("Cell was way too short");
+
+ auth = cell->payload;
+ {
+ uint16_t type = ntohs(get_uint16(auth));
+ uint16_t len = ntohs(get_uint16(auth+2));
+ if (4 + len > cell->payload_len)
+ ERR("Authenticator was truncated");
+
+ if (type != AUTHTYPE_RSA_SHA256_TLSSECRET)
+ ERR("Authenticator type was not recognized");
+
+ auth += 4;
+ authlen = len;
+ }
+
+ if (authlen < V3_AUTH_BODY_LEN + 1)
+ ERR("Authenticator was too short");
+
+ if (connection_or_compute_authenticate_cell_body(
+ conn, expected, sizeof(expected), NULL, 1) < 0)
+ ERR("Couldn't compute expected AUTHENTICATE cell body");
+
+ if (tor_memneq(expected, auth, sizeof(expected)))
+ ERR("Some field in the AUTHENTICATE cell body was not as expected");
+
+ {
+ crypto_pk_env_t *pk = tor_tls_cert_get_key(
+ conn->handshake_state->auth_cert);
+ char d[DIGEST256_LEN];
+ char *signed_data;
+ size_t keysize;
+ int signed_len;
+
+ if (!pk)
+ ERR("Internal error: couldn't get RSA key from AUTH cert.");
+ crypto_digest256(d, (char*)auth, V3_AUTH_BODY_LEN, DIGEST_SHA256);
+
+ keysize = crypto_pk_keysize(pk);
+ signed_data = tor_malloc(keysize);
+ signed_len = crypto_pk_public_checksig(pk, signed_data, keysize,
+ (char*)auth + V3_AUTH_BODY_LEN,
+ authlen - V3_AUTH_BODY_LEN);
+ crypto_free_pk_env(pk);
+ if (signed_len < 0) {
+ tor_free(signed_data);
+ ERR("Signature wasn't valid");
+ }
+ if (signed_len < DIGEST256_LEN) {
+ tor_free(signed_data);
+ ERR("Not enough data was signed");
+ }
+ /* Note that we deliberately allow *more* than DIGEST256_LEN bytes here,
+ * in case they're later used to hold a SHA3 digest or something. */
+ if (tor_memneq(signed_data, d, DIGEST256_LEN)) {
+ tor_free(signed_data);
+ ERR("Signature did not match data to be signed.");
+ }
+ tor_free(signed_data);
+ }
+
+ /* Okay, we are authenticated. */
+ conn->handshake_state->received_authenticate = 1;
+ conn->handshake_state->authenticated = 1;
+ conn->handshake_state->digest_received_data = 0;
+ {
+ crypto_pk_env_t *identity_rcvd =
+ tor_tls_cert_get_key(conn->handshake_state->id_cert);
+ const digests_t *id_digests =
+ tor_cert_get_id_digests(conn->handshake_state->id_cert);
+
+ /* This must exist; we checked key type when reading the cert. */
+ tor_assert(id_digests);
+
+ memcpy(conn->handshake_state->authenticated_peer_id,
+ id_digests->d[DIGEST_SHA1], DIGEST_LEN);
+
+ connection_or_set_circid_type(conn, identity_rcvd);
+ crypto_free_pk_env(identity_rcvd);
+
+ connection_or_init_conn_from_address(conn,
+ &conn->_base.addr,
+ conn->_base.port,
+ (const char*)conn->handshake_state->authenticated_peer_id,
+ 0);
+
+ log_info(LD_OR, "Got an AUTHENTICATE cell from %s:%d: Looks good.",
+ safe_str(conn->_base.address), conn->_base.port);
+ }
+
+#undef ERR
+}
+
diff --git a/src/or/config.c b/src/or/config.c
index f841f932c..9da33ba38 100644
--- a/src/or/config.c
+++ b/src/or/config.c
@@ -33,7 +33,9 @@
#include "rendservice.h"
#include "rephist.h"
#include "router.h"
+#include "util.h"
#include "routerlist.h"
+#include "transports.h"
#ifdef MS_WINDOWS
#include <shlobj.h>
#endif
@@ -182,6 +184,8 @@ static config_var_t _option_vars[] = {
V(AuthDirBadDir, LINELIST, NULL),
V(AuthDirBadExit, LINELIST, NULL),
V(AuthDirInvalid, LINELIST, NULL),
+ V(AuthDirFastGuarantee, MEMUNIT, "100 KB"),
+ V(AuthDirGuardBWGuarantee, MEMUNIT, "250 KB"),
V(AuthDirReject, LINELIST, NULL),
V(AuthDirRejectUnlisted, BOOL, "0"),
V(AuthDirListBadDirs, BOOL, "0"),
@@ -216,7 +220,7 @@ static config_var_t _option_vars[] = {
V(ConstrainedSockSize, MEMUNIT, "8192"),
V(ContactInfo, STRING, NULL),
V(ControlListenAddress, LINELIST, NULL),
- V(ControlPort, PORT, "0"),
+ V(ControlPort, LINELIST, NULL),
V(ControlPortFileGroupReadable,BOOL, "0"),
V(ControlPortWriteToFile, FILENAME, NULL),
V(ControlSocket, LINELIST, NULL),
@@ -227,12 +231,13 @@ static config_var_t _option_vars[] = {
V(CountPrivateBandwidth, BOOL, "0"),
V(DataDirectory, FILENAME, NULL),
OBSOLETE("DebugLogFile"),
+ V(DisableNetwork, BOOL, "0"),
V(DirAllowPrivateAddresses, BOOL, NULL),
V(TestingAuthDirTimeToLearnReachability, INTERVAL, "30 minutes"),
V(DirListenAddress, LINELIST, NULL),
OBSOLETE("DirFetchPeriod"),
V(DirPolicy, LINELIST, NULL),
- V(DirPort, PORT, "0"),
+ V(DirPort, LINELIST, NULL),
V(DirPortFrontPage, FILENAME, NULL),
OBSOLETE("DirPostPeriod"),
OBSOLETE("DirRecordUsageByCountry"),
@@ -242,7 +247,9 @@ static config_var_t _option_vars[] = {
V(DirReqStatistics, BOOL, "1"),
VAR("DirServer", LINELIST, DirServers, NULL),
V(DisableAllSwap, BOOL, "0"),
+ V(DisableDebuggerAttachment, BOOL, "1"),
V(DisableIOCP, BOOL, "1"),
+ V(DynamicDHGroups, BOOL, "1"),
V(DNSPort, LINELIST, NULL),
V(DNSListenAddress, LINELIST, NULL),
V(DownloadExtraInfo, BOOL, "0"),
@@ -280,6 +287,8 @@ static config_var_t _option_vars[] = {
V(GeoIPFile, FILENAME,
SHARE_DATADIR PATH_SEPARATOR "tor" PATH_SEPARATOR "geoip"),
#endif
+ V(GiveGuardFlagTo_CVE_2011_2768_VulnerableRelays,
+ BOOL, "0"),
OBSOLETE("Group"),
V(HardwareAccel, BOOL, "0"),
V(HeartbeatPeriod, INTERVAL, "6 hours"),
@@ -301,6 +310,7 @@ static config_var_t _option_vars[] = {
V(HTTPProxyAuthenticator, STRING, NULL),
V(HTTPSProxy, STRING, NULL),
V(HTTPSProxyAuthenticator, STRING, NULL),
+ VAR("ServerTransportPlugin", LINELIST, ServerTransportPlugin, NULL),
V(Socks4Proxy, STRING, NULL),
V(Socks5Proxy, STRING, NULL),
V(Socks5ProxyUsername, STRING, NULL),
@@ -333,7 +343,7 @@ static config_var_t _option_vars[] = {
V(NumCPUs, UINT, "0"),
V(NumEntryGuards, UINT, "3"),
V(ORListenAddress, LINELIST, NULL),
- V(ORPort, PORT, "0"),
+ V(ORPort, LINELIST, NULL),
V(OutboundBindAddress, STRING, NULL),
OBSOLETE("PathlenCoinWeight"),
V(PerConnBWBurst, MEMUNIT, "0"),
@@ -386,6 +396,7 @@ static config_var_t _option_vars[] = {
OBSOLETE("SysLog"),
V(TestSocks, BOOL, "0"),
OBSOLETE("TestVia"),
+ V(TokenBucketRefillInterval, MSEC_INTERVAL, "100 msec"),
V(TrackHostExits, CSV, NULL),
V(TrackHostExitsExpire, INTERVAL, "30 minutes"),
OBSOLETE("TrafficShaping"),
@@ -397,6 +408,7 @@ static config_var_t _option_vars[] = {
V(UseEntryGuards, BOOL, "1"),
V(UseMicrodescriptors, AUTOBOOL, "auto"),
V(User, STRING, NULL),
+ V(UserspaceIOCPBuffers, BOOL, "0"),
VAR("V1AuthoritativeDirectory",BOOL, V1AuthoritativeDir, "0"),
VAR("V2AuthoritativeDirectory",BOOL, V2AuthoritativeDir, "0"),
VAR("V3AuthoritativeDirectory",BOOL, V3AuthoritativeDir, "0"),
@@ -476,6 +488,9 @@ static config_var_t _state_vars[] = {
VAR("EntryGuardAddedBy", LINELIST_S, EntryGuards, NULL),
V(EntryGuards, LINELIST_V, NULL),
+ VAR("TransportProxy", LINELIST_S, TransportProxies, NULL),
+ V(TransportProxies, LINELIST_V, NULL),
+
V(BWHistoryReadEnds, ISOTIME, NULL),
V(BWHistoryReadInterval, UINT, "900"),
V(BWHistoryReadValues, CSV, ""),
@@ -502,7 +517,6 @@ static config_var_t _state_vars[] = {
V(CircuitBuildAbandonedCount, UINT, "0"),
VAR("CircuitBuildTimeBin", LINELIST_S, BuildtimeHistogram, NULL),
VAR("BuildtimeHistogram", LINELIST_V, BuildtimeHistogram, NULL),
-
{ NULL, CONFIG_TYPE_OBSOLETE, 0, NULL }
};
@@ -580,12 +594,17 @@ static int check_nickname_list(const char *lst, const char *name, char **msg);
static int parse_bridge_line(const char *line, int validate_only);
static int parse_client_transport_line(const char *line, int validate_only);
+
+static int parse_server_transport_line(const char *line, int validate_only);
static int parse_dir_server_line(const char *line,
dirinfo_type_t required_type,
int validate_only);
static void port_cfg_free(port_cfg_t *port);
-static int parse_client_ports(const or_options_t *options, int validate_only,
+static int parse_ports(const or_options_t *options, int validate_only,
char **msg_out, int *n_ports_out);
+static int check_server_ports(const smartlist_t *ports,
+ const or_options_t *options);
+
static int validate_data_directory(or_options_t *options);
static int write_configuration_file(const char *fname,
const or_options_t *options);
@@ -598,9 +617,6 @@ static int or_state_validate(or_state_t *old_options, or_state_t *options,
static int or_state_load(void);
static int options_init_logs(or_options_t *options, int validate_only);
-static int is_listening_on_low_port(int port_option,
- const config_line_t *listen_options);
-
static uint64_t config_parse_memunit(const char *s, int *ok);
static int config_parse_msec_interval(const char *s, int *ok);
static int config_parse_interval(const char *s, int *ok);
@@ -647,16 +663,20 @@ static const config_format_t state_format = {
/** Command-line and config-file options. */
static or_options_t *global_options = NULL;
+/** DOCDOC */
+static or_options_t *global_default_options = NULL;
/** Name of most recently read torrc file. */
static char *torrc_fname = NULL;
+/** DOCDOC */
+static char *torrc_defaults_fname;
/** Persistent serialized state. */
static or_state_t *global_state = NULL;
/** Configuration Options set by command line. */
static config_line_t *global_cmdline_options = NULL;
/** Contents of most recently read DirPortFrontPage file. */
static char *global_dirfrontpagecontents = NULL;
-/** List of port_cfg_t for client-level (SOCKS, DNS, Trans, NATD) ports. */
-static smartlist_t *configured_client_ports = NULL;
+/** List of port_cfg_t for all configured ports. */
+static smartlist_t *configured_ports = NULL;
/** Return the contents of our frontpage string, or NULL if not configured. */
const char *
@@ -792,6 +812,8 @@ config_free_all(void)
{
or_options_free(global_options);
global_options = NULL;
+ or_options_free(global_default_options);
+ global_default_options = NULL;
config_free(&state_format, global_state);
global_state = NULL;
@@ -799,14 +821,15 @@ config_free_all(void)
config_free_lines(global_cmdline_options);
global_cmdline_options = NULL;
- if (configured_client_ports) {
- SMARTLIST_FOREACH(configured_client_ports,
+ if (configured_ports) {
+ SMARTLIST_FOREACH(configured_ports,
port_cfg_t *, p, tor_free(p));
- smartlist_free(configured_client_ports);
- configured_client_ports = NULL;
+ smartlist_free(configured_ports);
+ configured_ports = NULL;
}
tor_free(torrc_fname);
+ tor_free(torrc_defaults_fname);
tor_free(_version);
tor_free(global_dirfrontpagecontents);
}
@@ -1052,7 +1075,7 @@ options_act_reversible(const or_options_t *old_options, char **msg)
#endif
if (running_tor) {
- int n_client_ports=0;
+ int n_ports=0;
/* We need to set the connection limit before we can open the listeners. */
if (set_max_file_descriptors((unsigned)options->ConnLimit,
&options->_ConnLimit) < 0) {
@@ -1068,18 +1091,33 @@ options_act_reversible(const or_options_t *old_options, char **msg)
libevent_initialized = 1;
}
- /* Adjust the client port configuration so we can launch listeners. */
- if (parse_client_ports(options, 0, msg, &n_client_ports))
- return -1;
+ /* Adjust the port configuration so we can launch listeners. */
+ if (parse_ports(options, 0, msg, &n_ports)) {
+ if (!*msg)
+ *msg = tor_strdup("Unexpected problem parsing port config");
+ goto rollback;
+ }
+
+ /* Set the hibernation state appropriately.*/
+ consider_hibernation(time(NULL));
/* Launch the listeners. (We do this before we setuid, so we can bind to
- * ports under 1024.) We don't want to rebind if we're hibernating. */
+ * ports under 1024.) We don't want to rebind if we're hibernating. If
+ * networking is disabled, this will close all but the control listeners,
+ * but disable those. */
if (!we_are_hibernating()) {
if (retry_all_listeners(replaced_listeners, new_listeners) < 0) {
*msg = tor_strdup("Failed to bind one of the listener ports.");
goto rollback;
}
}
+ if (options->DisableNetwork) {
+ /* Aggressively close non-controller stuff, NOW */
+ log_notice(LD_NET, "DisableNetwork is set. Tor will not make or accept "
+ "non-control network connections. Shutting down all existing "
+ "connections.");
+ connection_mark_all_noncontrol_connections();
+ }
}
#if defined(HAVE_NET_IF_H) && defined(HAVE_NET_PFVAR_H)
@@ -1248,6 +1286,24 @@ get_effective_bwburst(const or_options_t *options)
return (uint32_t)bw;
}
+/** Return True if any changes from <b>old_options</b> to
+ * <b>new_options</b> needs us to refresh our TLS context. */
+static int
+options_transition_requires_fresh_tls_context(const or_options_t *old_options,
+ const or_options_t *new_options)
+{
+ tor_assert(new_options);
+
+ if (!old_options)
+ return 0;
+
+ if ((old_options->DynamicDHGroups != new_options->DynamicDHGroups)) {
+ return 1;
+ }
+
+ return 0;
+}
+
/** Fetch the active option list, and take actions based on it. All of the
* things we do should survive being done repeatedly. If present,
* <b>old_options</b> contains the previous value of the options.
@@ -1267,6 +1323,14 @@ options_act(const or_options_t *old_options)
const int transition_affects_workers =
old_options && options_transition_affects_workers(old_options, options);
+ /* disable ptrace and later, other basic debugging techniques */
+ if (options->DisableDebuggerAttachment) {
+ tor_disable_debugger_attach();
+ } else {
+ log_notice(LD_CONFIG,"Debugger attachment enabled "
+ "for unprivileged users.");
+ }
+
if (running_tor && !have_lockfile()) {
if (try_locking(options, 1) < 0)
return -1;
@@ -1275,18 +1339,6 @@ options_act(const or_options_t *old_options)
if (consider_adding_dir_authorities(options, old_options) < 0)
return -1;
- clear_transport_list();
- if (options->ClientTransportPlugin) {
- for (cl = options->ClientTransportPlugin; cl; cl = cl->next) {
- if (parse_client_transport_line(cl->value, 0)<0) {
- log_warn(LD_BUG,
- "Previously validated ClientTransportPlugin line "
- "could not be added!");
- return -1;
- }
- }
- }
-
if (options->Bridges) {
mark_bridge_list();
for (cl = options->Bridges; cl; cl = cl->next) {
@@ -1299,11 +1351,6 @@ options_act(const or_options_t *old_options)
sweep_bridge_list();
}
- /* If we have pluggable transport related options enabled, see if we
- should warn the user about potential configuration problems. */
- if (options->Bridges || options->ClientTransportPlugin)
- validate_pluggable_transports_config();
-
if (running_tor && rend_config_services(options, 0)<0) {
log_warn(LD_BUG,
"Previously validated hidden services line could not be added!");
@@ -1323,6 +1370,32 @@ options_act(const or_options_t *old_options)
rep_hist_load_mtbf_data(time(NULL));
}
+ mark_transport_list();
+ pt_prepare_proxy_list_for_config_read();
+ if (options->ClientTransportPlugin) {
+ for (cl = options->ClientTransportPlugin; cl; cl = cl->next) {
+ if (parse_client_transport_line(cl->value, 0)<0) {
+ log_warn(LD_BUG,
+ "Previously validated ClientTransportPlugin line "
+ "could not be added!");
+ return -1;
+ }
+ }
+ }
+
+ if (options->ServerTransportPlugin) {
+ for (cl = options->ServerTransportPlugin; cl; cl = cl->next) {
+ if (parse_server_transport_line(cl->value, 0)<0) {
+ log_warn(LD_BUG,
+ "Previously validated ServerTransportPlugin line "
+ "could not be added!");
+ return -1;
+ }
+ }
+ }
+ sweep_transport_list();
+ sweep_proxy_list();
+
/* Bail out at this point if we're not going to be a client or server:
* we want to not fork, and to log stuff to stderr. */
if (!running_tor)
@@ -1334,6 +1407,29 @@ options_act(const or_options_t *old_options)
finish_daemon(options->DataDirectory);
}
+ /* If needed, generate a new TLS DH prime according to the current torrc. */
+ if (server_mode(options)) {
+ if (!old_options) {
+ if (options->DynamicDHGroups) {
+ char *fname = get_datadir_fname2("keys", "dynamic_dh_params");
+ crypto_set_tls_dh_prime(fname);
+ tor_free(fname);
+ } else {
+ crypto_set_tls_dh_prime(NULL);
+ }
+ } else {
+ if (options->DynamicDHGroups && !old_options->DynamicDHGroups) {
+ char *fname = get_datadir_fname2("keys", "dynamic_dh_params");
+ crypto_set_tls_dh_prime(fname);
+ tor_free(fname);
+ } else if (!options->DynamicDHGroups && old_options->DynamicDHGroups) {
+ crypto_set_tls_dh_prime(NULL);
+ }
+ }
+ } else { /* clients don't need a dynamic DH prime. */
+ crypto_set_tls_dh_prime(NULL);
+ }
+
/* We want to reinit keys as needed before we do much of anything else:
keys are important, and other things can depend on them. */
if (transition_affects_workers ||
@@ -1343,6 +1439,13 @@ options_act(const or_options_t *old_options)
log_warn(LD_BUG,"Error initializing keys; exiting");
return -1;
}
+ } else if (old_options &&
+ options_transition_requires_fresh_tls_context(old_options,
+ options)) {
+ if (router_initialize_tls_context() < 0) {
+ log_warn(LD_BUG,"Error initializing TLS context.");
+ return -1;
+ }
}
/* Write our PID to the PID file. If we do not have write permissions we
@@ -1452,7 +1555,7 @@ options_act(const or_options_t *old_options)
int was_relay = 0;
if (options->BridgeRelay) {
time_t int_start = time(NULL);
- if (old_options->ORPort == options->ORPort) {
+ if (config_lines_eq(old_options->ORPort, options->ORPort)) {
int_start += RELAY_BRIDGE_STATS_DELAY;
was_relay = 1;
}
@@ -1512,9 +1615,19 @@ options_act(const or_options_t *old_options)
if (options->CellStatistics || options->DirReqStatistics ||
options->EntryStatistics || options->ExitPortStatistics ||
- options->ConnDirectionStatistics) {
+ options->ConnDirectionStatistics ||
+ options->BridgeAuthoritativeDir) {
time_t now = time(NULL);
int print_notice = 0;
+
+ /* If we aren't acting as a server, we can't collect stats anyway. */
+ if (!server_mode(options)) {
+ options->CellStatistics = 0;
+ options->DirReqStatistics = 0;
+ options->EntryStatistics = 0;
+ options->ExitPortStatistics = 0;
+ }
+
if ((!old_options || !old_options->CellStatistics) &&
options->CellStatistics) {
rep_hist_buffer_stats_init(now);
@@ -1557,6 +1670,11 @@ options_act(const or_options_t *old_options)
options->ConnDirectionStatistics) {
rep_hist_conn_stats_init(now);
}
+ if ((!old_options || !old_options->BridgeAuthoritativeDir) &&
+ options->BridgeAuthoritativeDir) {
+ rep_hist_desc_stats_init(now);
+ print_notice = 1;
+ }
if (print_notice)
log_notice(LD_CONFIG, "Configured to measure statistics. Look for "
"the *-stats files that will first be written to the "
@@ -1578,6 +1696,9 @@ options_act(const or_options_t *old_options)
if (old_options && old_options->ConnDirectionStatistics &&
!options->ConnDirectionStatistics)
rep_hist_conn_stats_term();
+ if (old_options && old_options->BridgeAuthoritativeDir &&
+ !options->BridgeAuthoritativeDir)
+ rep_hist_desc_stats_term();
/* Check if we need to parse and add the EntryNodes config option. */
if (options->EntryNodes &&
@@ -1673,7 +1794,11 @@ config_get_commandlines(int argc, char **argv, config_line_t **result)
int i = 1;
while (i < argc) {
+ unsigned command = CONFIG_LINE_NORMAL;
+ int want_arg = 1;
+
if (!strcmp(argv[i],"-f") ||
+ !strcmp(argv[i],"--defaults-torrc") ||
!strcmp(argv[i],"--hash-password")) {
i += 2; /* command-line option with argument. ignore them. */
continue;
@@ -1690,13 +1815,6 @@ config_get_commandlines(int argc, char **argv, config_line_t **result)
continue;
}
- if (i == argc-1) {
- log_warn(LD_CONFIG,"Command-line option '%s' with no value. Failing.",
- argv[i]);
- config_free_lines(front);
- return -1;
- }
-
*new = tor_malloc_zero(sizeof(config_line_t));
s = argv[i];
@@ -1705,15 +1823,33 @@ config_get_commandlines(int argc, char **argv, config_line_t **result)
s++;
if (*s == '-')
s++;
+ /* Figure out the command, if any. */
+ if (*s == '+') {
+ s++;
+ command = CONFIG_LINE_APPEND;
+ } else if (*s == '/') {
+ s++;
+ command = CONFIG_LINE_CLEAR;
+ /* A 'clear' command has no argument. */
+ want_arg = 0;
+ }
+
+ if (want_arg && i == argc-1) {
+ log_warn(LD_CONFIG,"Command-line option '%s' with no value. Failing.",
+ argv[i]);
+ config_free_lines(front);
+ return -1;
+ }
(*new)->key = tor_strdup(expand_abbrev(&options_format, s, 1, 1));
- (*new)->value = tor_strdup(argv[i+1]);
+ (*new)->value = want_arg ? tor_strdup(argv[i+1]) : tor_strdup("");
+ (*new)->command = command;
(*new)->next = NULL;
log(LOG_DEBUG, LD_CONFIG, "command line: parsed keyword '%s', value '%s'",
(*new)->key, (*new)->value);
new = &((*new)->next);
- i += 2;
+ i += want_arg ? 2 : 1;
}
*result = front;
return 0;
@@ -1728,7 +1864,7 @@ config_line_append(config_line_t **lst,
{
config_line_t *newline;
- newline = tor_malloc(sizeof(config_line_t));
+ newline = tor_malloc_zero(sizeof(config_line_t));
newline->key = tor_strdup(key);
newline->value = tor_strdup(val);
newline->next = NULL;
@@ -1741,9 +1877,12 @@ config_line_append(config_line_t **lst,
/** Helper: parse the config string and strdup into key/value
* strings. Set *result to the list, or NULL if parsing the string
* failed. Return 0 on success, -1 on failure. Warn and ignore any
- * misformatted lines. */
+ * misformatted lines.
+ *
+ * If <b>extended</b> is set, then treat keys beginning with / and with + as
+ * indicating "clear" and "append" respectively. */
int
-config_get_lines(const char *string, config_line_t **result)
+config_get_lines(const char *string, config_line_t **result, int extended)
{
config_line_t *list = NULL, **next;
char *k, *v;
@@ -1759,13 +1898,30 @@ config_get_lines(const char *string, config_line_t **result)
return -1;
}
if (k && v) {
+ unsigned command = CONFIG_LINE_NORMAL;
+ if (extended) {
+ if (k[0] == '+') {
+ char *k_new = tor_strdup(k+1);
+ tor_free(k);
+ k = k_new;
+ command = CONFIG_LINE_APPEND;
+ } else if (k[0] == '/') {
+ char *k_new = tor_strdup(k+1);
+ tor_free(k);
+ k = k_new;
+ tor_free(v);
+ v = tor_strdup("");
+ command = CONFIG_LINE_CLEAR;
+ }
+ }
/* This list can get long, so we keep a pointer to the end of it
* rather than using config_line_append over and over and getting
* n^2 performance. */
- *next = tor_malloc(sizeof(config_line_t));
+ *next = tor_malloc_zero(sizeof(config_line_t));
(*next)->key = k;
(*next)->value = v;
(*next)->next = NULL;
+ (*next)->command = command;
next = &((*next)->next);
} else {
tor_free(k);
@@ -1993,7 +2149,19 @@ config_assign_value(const config_format_t *fmt, or_options_t *options,
case CONFIG_TYPE_LINELIST:
case CONFIG_TYPE_LINELIST_S:
- config_line_append((config_line_t**)lvalue, c->key, c->value);
+ {
+ config_line_t *lastval = *(config_line_t**)lvalue;
+ if (lastval && lastval->fragile) {
+ if (c->command != CONFIG_LINE_APPEND) {
+ config_free_lines(lastval);
+ *(config_line_t**)lvalue = NULL;
+ } else {
+ lastval->fragile = 0;
+ }
+ }
+
+ config_line_append((config_line_t**)lvalue, c->key, c->value);
+ }
break;
case CONFIG_TYPE_OBSOLETE:
log_warn(LD_CONFIG, "Skipping obsolete configuration option '%s'", c->key);
@@ -2009,6 +2177,28 @@ config_assign_value(const config_format_t *fmt, or_options_t *options,
return 0;
}
+/** Mark every linelist in <b>options<b> "fragile", so that fresh assignments
+ * to it will replace old ones. */
+static void
+config_mark_lists_fragile(const config_format_t *fmt, or_options_t *options)
+{
+ int i;
+ tor_assert(fmt);
+ tor_assert(options);
+
+ for (i = 0; fmt->vars[i].name; ++i) {
+ const config_var_t *var = &fmt->vars[i];
+ config_line_t *list;
+ if (var->type != CONFIG_TYPE_LINELIST &&
+ var->type != CONFIG_TYPE_LINELIST_V)
+ continue;
+
+ list = *(config_line_t **)STRUCT_VAR_P(options, var->var_offset);
+ if (list)
+ list->fragile = 1;
+ }
+}
+
/** If <b>c</b> is a syntactically valid configuration line, update
* <b>options</b> with its value and return 0. Otherwise return -1 for bad
* key, -2 for bad value.
@@ -2051,8 +2241,9 @@ config_assign_line(const config_format_t *fmt, or_options_t *options,
if (!strlen(c->value)) {
/* reset or clear it, then return */
if (!clear_first) {
- if (var->type == CONFIG_TYPE_LINELIST ||
- var->type == CONFIG_TYPE_LINELIST_S) {
+ if ((var->type == CONFIG_TYPE_LINELIST ||
+ var->type == CONFIG_TYPE_LINELIST_S) &&
+ c->command != CONFIG_LINE_CLEAR) {
/* We got an empty linelist from the torrc or command line.
As a special case, call this an error. Warn and ignore. */
log_warn(LD_CONFIG,
@@ -2062,6 +2253,8 @@ config_assign_line(const config_format_t *fmt, or_options_t *options,
}
}
return 0;
+ } else if (c->command == CONFIG_LINE_CLEAR && !clear_first) {
+ option_reset(fmt, options, var, use_defaults);
}
if (options_seen && (var->type != CONFIG_TYPE_LINELIST &&
@@ -2156,7 +2349,7 @@ config_lines_dup(const config_line_t *inp)
config_line_t *result = NULL;
config_line_t **next_out = &result;
while (inp) {
- *next_out = tor_malloc(sizeof(config_line_t));
+ *next_out = tor_malloc_zero(sizeof(config_line_t));
(*next_out)->key = tor_strdup(inp->key);
(*next_out)->value = tor_strdup(inp->value);
inp = inp->next;
@@ -2393,6 +2586,12 @@ config_assign(const config_format_t *fmt, void *options, config_line_t *list,
list = list->next;
}
bitarray_free(options_seen);
+
+ /** Now we're done assigning a group of options to the configuration.
+ * Subsequent group assignments should _replace_ linelists, not extend
+ * them. */
+ config_mark_lists_fragile(fmt, options);
+
return 0;
}
@@ -2835,37 +3034,6 @@ options_init(or_options_t *options)
config_init(&options_format, options);
}
-/* Check if the port number given in <b>port_option</b> in combination with
- * the specified port in <b>listen_options</b> will result in Tor actually
- * opening a low port (meaning a port lower than 1024). Return 1 if
- * it is, or 0 if it isn't or the concept of a low port isn't applicable for
- * the platform we're on. */
-static int
-is_listening_on_low_port(int port_option,
- const config_line_t *listen_options)
-{
-#ifdef MS_WINDOWS
- (void) port_option;
- (void) listen_options;
- return 0; /* No port is too low for windows. */
-#else
- const config_line_t *l;
- uint16_t p;
- if (port_option == 0)
- return 0; /* We're not listening */
- if (listen_options == NULL)
- return (port_option < 1024);
-
- for (l = listen_options; l; l = l->next) {
- parse_addr_port(LOG_WARN, l->value, NULL, NULL, &p);
- if (p<1024) {
- return 1;
- }
- }
- return 0;
-#endif
-}
-
/** Set all vars in the configuration object <b>options</b> to their default
* values. */
static void
@@ -2888,24 +3056,30 @@ config_init(const config_format_t *fmt, void *options)
* Else, if comment_defaults, write default values as comments.
*/
static char *
-config_dump(const config_format_t *fmt, const void *options, int minimal,
+config_dump(const config_format_t *fmt, const void *default_options,
+ const void *options, int minimal,
int comment_defaults)
{
smartlist_t *elements;
- or_options_t *defaults;
+ const or_options_t *defaults = default_options;
+ void *defaults_tmp = NULL;
config_line_t *line, *assigned;
char *result;
int i;
char *msg = NULL;
- defaults = config_alloc(fmt);
- config_init(fmt, defaults);
+ if (defaults == NULL) {
+ defaults = defaults_tmp = config_alloc(fmt);
+ config_init(fmt, defaults_tmp);
+ }
/* XXX use a 1 here so we don't add a new log line while dumping */
- if (fmt->validate_fn(NULL,defaults, 1, &msg) < 0) {
- log_err(LD_BUG, "Failed to validate default config.");
- tor_free(msg);
- tor_assert(0);
+ if (default_options == NULL) {
+ if (fmt->validate_fn(NULL, defaults_tmp, 1, &msg) < 0) {
+ log_err(LD_BUG, "Failed to validate default config.");
+ tor_free(msg);
+ tor_assert(0);
+ }
}
elements = smartlist_create();
@@ -2947,7 +3121,8 @@ config_dump(const config_format_t *fmt, const void *options, int minimal,
result = smartlist_join_strings(elements, "", 0, NULL);
SMARTLIST_FOREACH(elements, char *, cp, tor_free(cp));
smartlist_free(elements);
- config_free(fmt, defaults);
+ if (defaults_tmp)
+ config_free(fmt, defaults_tmp);
return result;
}
@@ -2958,7 +3133,8 @@ config_dump(const config_format_t *fmt, const void *options, int minimal,
char *
options_dump(const or_options_t *options, int minimal)
{
- return config_dump(&options_format, options, minimal, 0);
+ return config_dump(&options_format, global_default_options,
+ options, minimal, 0);
}
/** Return 0 if every element of sl is a string holding a decimal
@@ -3083,7 +3259,7 @@ options_validate(or_options_t *old_options, or_options_t *options,
int i;
config_line_t *cl;
const char *uname = get_uname();
- int n_client_ports=0;
+ 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
@@ -3101,13 +3277,7 @@ options_validate(or_options_t *old_options, or_options_t *options,
"for details.", uname);
}
- if (options->ORPort == 0 && options->ORListenAddress != NULL)
- REJECT("ORPort must be defined if ORListenAddress is defined.");
-
- if (options->DirPort == 0 && options->DirListenAddress != NULL)
- REJECT("DirPort must be defined if DirListenAddress is defined.");
-
- if (parse_client_ports(options, 1, msg, &n_client_ports) < 0)
+ if (parse_ports(options, 1, msg, &n_ports) < 0)
return -1;
if (validate_data_directory(options)<0)
@@ -3154,7 +3324,9 @@ options_validate(or_options_t *old_options, or_options_t *options,
REJECT("Can't use a relative path to torrc when RunAsDaemon is set.");
#endif
- if (n_client_ports == 0 && options->ORPort == 0 && !options->RendConfigLines)
+ /* 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,
"SocksPort, TransPort, NATDPort, DNSPort, and ORPort are all "
"undefined, and there aren't any hidden services configured. "
@@ -3165,17 +3337,9 @@ options_validate(or_options_t *old_options, or_options_t *options,
REJECT("TransPort and TransListenAddress are disabled in this build.");
#endif
- if (options->AccountingMax &&
- (is_listening_on_low_port(options->ORPort, options->ORListenAddress) ||
- is_listening_on_low_port(options->DirPort, options->DirListenAddress)))
- {
- log(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 "
- "hibernation. Please choose a different port or turn off "
- "hibernation unless you know this combination will work on your "
- "platform.");
+ if (options->TokenBucketRefillInterval <= 0
+ || options->TokenBucketRefillInterval > 1000) {
+ REJECT("TokenBucketRefillInterval must be between 1 and 1000 inclusive.");
}
if (options->ExcludeExitNodes || options->ExcludeNodes) {
@@ -3431,7 +3595,8 @@ options_validate(or_options_t *old_options, or_options_t *options,
if (options->BridgeRelay && options->DirPort) {
log_warn(LD_CONFIG, "Can't set a DirPort on a bridge relay; disabling "
"DirPort");
- options->DirPort = 0;
+ config_free_lines(options->DirPort);
+ options->DirPort = NULL;
}
if (options->MinUptimeHidServDirectoryV2 < 0) {
@@ -3496,6 +3661,12 @@ options_validate(or_options_t *old_options, or_options_t *options,
if (ensure_bandwidth_cap(&options->PerConnBWBurst,
"PerConnBWBurst", msg) < 0)
return -1;
+ if (ensure_bandwidth_cap(&options->AuthDirFastGuarantee,
+ "AuthDirFastGuarantee", msg) < 0)
+ return -1;
+ if (ensure_bandwidth_cap(&options->AuthDirGuardBWGuarantee,
+ "AuthDirGuardBWGuarantee", msg) < 0)
+ return -1;
if (options->RelayBandwidthRate && !options->RelayBandwidthBurst)
options->RelayBandwidthBurst = options->RelayBandwidthRate;
@@ -3548,7 +3719,7 @@ options_validate(or_options_t *old_options, or_options_t *options,
REJECT("Failed to parse accounting options. See logs for details.");
if (options->HTTPProxy) { /* parse it now */
- if (tor_addr_port_parse(options->HTTPProxy,
+ if (tor_addr_port_lookup(options->HTTPProxy,
&options->HTTPProxyAddr, &options->HTTPProxyPort) < 0)
REJECT("HTTPProxy failed to parse or resolve. Please fix.");
if (options->HTTPProxyPort == 0) { /* give it a default */
@@ -3562,7 +3733,7 @@ options_validate(or_options_t *old_options, or_options_t *options,
}
if (options->HTTPSProxy) { /* parse it now */
- if (tor_addr_port_parse(options->HTTPSProxy,
+ if (tor_addr_port_lookup(options->HTTPSProxy,
&options->HTTPSProxyAddr, &options->HTTPSProxyPort) <0)
REJECT("HTTPSProxy failed to parse or resolve. Please fix.");
if (options->HTTPSProxyPort == 0) { /* give it a default */
@@ -3576,7 +3747,7 @@ options_validate(or_options_t *old_options, or_options_t *options,
}
if (options->Socks4Proxy) { /* parse it now */
- if (tor_addr_port_parse(options->Socks4Proxy,
+ if (tor_addr_port_lookup(options->Socks4Proxy,
&options->Socks4ProxyAddr,
&options->Socks4ProxyPort) <0)
REJECT("Socks4Proxy failed to parse or resolve. Please fix.");
@@ -3586,7 +3757,7 @@ options_validate(or_options_t *old_options, or_options_t *options,
}
if (options->Socks5Proxy) { /* parse it now */
- if (tor_addr_port_parse(options->Socks5Proxy,
+ if (tor_addr_port_lookup(options->Socks5Proxy,
&options->Socks5ProxyAddr,
&options->Socks5ProxyPort) <0)
REJECT("Socks5Proxy failed to parse or resolve. Please fix.");
@@ -3648,39 +3819,6 @@ options_validate(or_options_t *old_options, or_options_t *options,
}
}
- if (options->ControlListenAddress) {
- int all_are_local = 1;
- config_line_t *ln;
- for (ln = options->ControlListenAddress; ln; ln = ln->next) {
- if (strcmpstart(ln->value, "127."))
- all_are_local = 0;
- }
- if (!all_are_local) {
- if (!options->HashedControlPassword &&
- !options->HashedControlSessionPassword &&
- !options->CookieAuthentication) {
- log_warn(LD_CONFIG,
- "You have a ControlListenAddress set to accept "
- "unauthenticated connections from a non-local address. "
- "This means that programs not running on your computer "
- "can reconfigure your Tor, without even having to guess a "
- "password. That's so bad that I'm closing your ControlPort "
- "for you. If you need to control your Tor remotely, try "
- "enabling authentication and using a tool like stunnel or "
- "ssh to encrypt remote access.");
- options->ControlPort = 0;
- } else {
- log_warn(LD_CONFIG, "You have a ControlListenAddress set to accept "
- "connections from a non-local address. This means that "
- "programs not running on your computer can reconfigure your "
- "Tor. That's pretty bad, since the controller "
- "protocol isn't encrypted! Maybe you should just listen on "
- "127.0.0.1 and use a tool like stunnel or ssh to encrypt "
- "remote connections to your control port.");
- }
- }
- }
-
if (options->ControlPort && !options->HashedControlPassword &&
!options->HashedControlSessionPassword &&
!options->CookieAuthentication) {
@@ -3721,14 +3859,19 @@ options_validate(or_options_t *old_options, or_options_t *options,
if (options->UseBridges && !options->TunnelDirConns)
REJECT("If you set UseBridges, you must set TunnelDirConns.");
+ for (cl = options->Bridges; cl; cl = cl->next) {
+ if (parse_bridge_line(cl->value, 1)<0)
+ REJECT("Bridge line did not parse. See logs for details.");
+ }
+
for (cl = options->ClientTransportPlugin; cl; cl = cl->next) {
if (parse_client_transport_line(cl->value, 1)<0)
REJECT("Transport line did not parse. See logs for details.");
}
- for (cl = options->Bridges; cl; cl = cl->next) {
- if (parse_bridge_line(cl->value, 1)<0)
- REJECT("Bridge line did not parse. See logs for details.");
+ for (cl = options->ServerTransportPlugin; cl; cl = cl->next) {
+ if (parse_server_transport_line(cl->value, 1)<0)
+ REJECT("Server transport line did not parse. See logs for details.");
}
if (options->ConstrainedSockets) {
@@ -3898,8 +4041,9 @@ options_validate(or_options_t *old_options, or_options_t *options,
}
});
- if (options->BridgeRelay == 1 && options->ORPort == 0)
- REJECT("BridgeRelay is 1, ORPort is 0. This is an invalid combination.");
+ if (options->BridgeRelay == 1 && ! options->ORPort)
+ REJECT("BridgeRelay is 1, ORPort is not set. This is an invalid "
+ "combination.");
return 0;
#undef REJECT
@@ -3967,6 +4111,12 @@ options_transition_allowed(const or_options_t *old,
return -1;
}
+ if (old->TokenBucketRefillInterval != new_val->TokenBucketRefillInterval) {
+ *msg = tor_strdup("While Tor is running, changing TokenBucketRefill"
+ "Interval is not allowed");
+ return -1;
+ }
+
if (old->DisableIOCP != new_val->DisableIOCP) {
*msg = tor_strdup("While Tor is running, changing DisableIOCP "
"is not allowed.");
@@ -3984,7 +4134,7 @@ options_transition_affects_workers(const or_options_t *old_options,
{
if (!opt_streq(old_options->DataDirectory, new_options->DataDirectory) ||
old_options->NumCPUs != new_options->NumCPUs ||
- old_options->ORPort != new_options->ORPort ||
+ !config_lines_eq(old_options->ORPort, new_options->ORPort) ||
old_options->ServerDNSSearchDomains !=
new_options->ServerDNSSearchDomains ||
old_options->_SafeLogging != new_options->_SafeLogging ||
@@ -4014,9 +4164,10 @@ options_transition_affects_descriptor(const or_options_t *old_options,
!config_lines_eq(old_options->ExitPolicy,new_options->ExitPolicy) ||
old_options->ExitPolicyRejectPrivate !=
new_options->ExitPolicyRejectPrivate ||
- old_options->ORPort != new_options->ORPort ||
- old_options->DirPort != new_options->DirPort ||
+ !config_lines_eq(old_options->ORPort, new_options->ORPort) ||
+ !config_lines_eq(old_options->DirPort, new_options->DirPort) ||
old_options->ClientOnly != new_options->ClientOnly ||
+ old_options->DisableNetwork != new_options->DisableNetwork ||
old_options->_PublishServerDescriptor !=
new_options->_PublishServerDescriptor ||
get_effective_bwrate(old_options) != get_effective_bwrate(new_options) ||
@@ -4090,17 +4241,25 @@ get_windows_conf_root(void)
}
#endif
-/** Return the default location for our torrc file. */
+/** Return the default location for our torrc file.
+ * DOCDOC defaults_file */
static const char *
-get_default_conf_file(void)
+get_default_conf_file(int defaults_file)
{
#ifdef MS_WINDOWS
- static char path[MAX_PATH+1];
- strlcpy(path, get_windows_conf_root(), MAX_PATH);
- strlcat(path,"\\torrc",MAX_PATH);
- return path;
+ if (defaults_file) {
+ static char defaults_path[MAX_PATH+1];
+ tor_snprintf(defaults_path, MAX_PATH, "%s\\torrc-defaults",
+ get_windows_conf_root());
+ return defaults_path;
+ } else {
+ static char path[MAX_PATH+1];
+ tor_snprintf(path, MAX_PATH, "%s\\torrc",
+ get_windows_conf_root());
+ return path;
+ }
#else
- return (CONFDIR "/torrc");
+ return defaults_file ? CONFDIR "/torrc-defaults" : CONFDIR "/torrc";
#endif
}
@@ -4133,37 +4292,46 @@ check_nickname_list(const char *lst, const char *name, char **msg)
return r;
}
-/** Learn config file name from command line arguments, or use the default */
+/** Learn config file name from command line arguments, or use the default,
+ * DOCDOC defaults_file */
static char *
find_torrc_filename(int argc, char **argv,
+ int defaults_file,
int *using_default_torrc, int *ignore_missing_torrc)
{
char *fname=NULL;
int i;
+ const char *fname_opt = defaults_file ? "--defaults-torrc" : "-f";
+ const char *ignore_opt = defaults_file ? NULL : "--ignore-missing-torrc";
+
+ if (defaults_file)
+ *ignore_missing_torrc = 1;
for (i = 1; i < argc; ++i) {
- if (i < argc-1 && !strcmp(argv[i],"-f")) {
+ if (i < argc-1 && !strcmp(argv[i],fname_opt)) {
if (fname) {
- log(LOG_WARN, LD_CONFIG, "Duplicate -f options on command line.");
+ log(LOG_WARN, LD_CONFIG, "Duplicate %s options on command line.",
+ fname_opt);
tor_free(fname);
}
fname = expand_filename(argv[i+1]);
*using_default_torrc = 0;
++i;
- } else if (!strcmp(argv[i],"--ignore-missing-torrc")) {
+ } else if (ignore_opt && !strcmp(argv[i],ignore_opt)) {
*ignore_missing_torrc = 1;
}
}
if (*using_default_torrc) {
/* didn't find one, try CONFDIR */
- const char *dflt = get_default_conf_file();
+ const char *dflt = get_default_conf_file(defaults_file);
if (dflt && file_status(dflt) == FN_FILE) {
fname = tor_strdup(dflt);
} else {
#ifndef MS_WINDOWS
- char *fn;
- fn = expand_filename("~/.torrc");
+ char *fn = NULL;
+ if (!defaults_file)
+ fn = expand_filename("~/.torrc");
if (fn && file_status(fn) == FN_FILE) {
fname = fn;
} else {
@@ -4178,31 +4346,34 @@ find_torrc_filename(int argc, char **argv,
return fname;
}
-/** Load torrc from disk, setting torrc_fname if successful */
+/** Load torrc from disk, setting torrc_fname if successful.
+ * DOCDOC defaults_file */
static char *
-load_torrc_from_disk(int argc, char **argv)
+load_torrc_from_disk(int argc, char **argv, int defaults_file)
{
char *fname=NULL;
char *cf = NULL;
int using_default_torrc = 1;
int ignore_missing_torrc = 0;
+ char **fname_var = defaults_file ? &torrc_defaults_fname : &torrc_fname;
- fname = find_torrc_filename(argc, argv,
+ 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);
- tor_free(torrc_fname);
- torrc_fname = fname;
+ tor_free(*fname_var);
+ *fname_var = fname;
/* Open config file */
if (file_status(fname) != FN_FILE ||
!(cf = read_file_to_str(fname,0,NULL))) {
- if (using_default_torrc == 1 || ignore_missing_torrc ) {
- log(LOG_NOTICE, LD_CONFIG, "Configuration file \"%s\" not present, "
- "using reasonable defaults.", fname);
+ if (using_default_torrc == 1 || ignore_missing_torrc) {
+ if (!defaults_file)
+ log(LOG_NOTICE, LD_CONFIG, "Configuration file \"%s\" not present, "
+ "using reasonable defaults.", fname);
tor_free(fname); /* sets fname to NULL */
- torrc_fname = NULL;
+ *fname_var = NULL;
cf = tor_strdup("");
} else {
log(LOG_WARN, LD_CONFIG,
@@ -4216,7 +4387,7 @@ load_torrc_from_disk(int argc, char **argv)
return cf;
err:
tor_free(fname);
- torrc_fname = NULL;
+ *fname_var = NULL;
return NULL;
}
@@ -4227,8 +4398,9 @@ load_torrc_from_disk(int argc, char **argv)
int
options_init_from_torrc(int argc, char **argv)
{
- char *cf=NULL;
- int i, retval, command;
+ char *cf=NULL, *cf_defaults=NULL;
+ int i, command;
+ int retval = -1;
static char **backup_argv;
static int backup_argc;
char *command_arg = NULL;
@@ -4287,24 +4459,24 @@ options_init_from_torrc(int argc, char **argv)
if (command == CMD_HASH_PASSWORD) {
cf = tor_strdup("");
} else {
- cf = load_torrc_from_disk(argc, argv);
+ cf_defaults = load_torrc_from_disk(argc, argv, 1);
+ cf = load_torrc_from_disk(argc, argv, 0);
if (!cf)
goto err;
}
- retval = options_init_from_string(cf, command, command_arg, &errmsg);
- tor_free(cf);
- if (retval < 0)
- goto err;
-
- return 0;
+ retval = options_init_from_string(cf_defaults, cf, command, command_arg,
+ &errmsg);
err:
+
+ tor_free(cf);
+ tor_free(cf_defaults);
if (errmsg) {
log(LOG_WARN,LD_CONFIG,"%s", errmsg);
tor_free(errmsg);
}
- return -1;
+ return retval < 0 ? -1 : 0;
}
/** Load the options from the configuration in <b>cf</b>, validate
@@ -4317,13 +4489,13 @@ options_init_from_torrc(int argc, char **argv)
* * -4 for error while setting the new options
*/
setopt_err_t
-options_init_from_string(const char *cf,
+options_init_from_string(const char *cf_defaults, const char *cf,
int command, const char *command_arg,
char **msg)
{
- or_options_t *oldoptions, *newoptions;
+ or_options_t *oldoptions, *newoptions, *newdefaultoptions=NULL;
config_line_t *cl;
- int retval;
+ int retval, i;
setopt_err_t err = SETOPT_ERR_MISC;
tor_assert(msg);
@@ -4336,17 +4508,24 @@ options_init_from_string(const char *cf,
newoptions->command = command;
newoptions->command_arg = command_arg;
- /* get config lines, assign them */
- retval = config_get_lines(cf, &cl);
- if (retval < 0) {
- err = SETOPT_ERR_PARSE;
- goto err;
- }
- retval = config_assign(&options_format, newoptions, cl, 0, 0, msg);
- config_free_lines(cl);
- if (retval < 0) {
- err = SETOPT_ERR_PARSE;
- goto err;
+ for (i = 0; i < 2; ++i) {
+ const char *body = i==0 ? cf_defaults : cf;
+ if (!body)
+ continue;
+ /* get config lines, assign them */
+ retval = config_get_lines(body, &cl, 1);
+ if (retval < 0) {
+ err = SETOPT_ERR_PARSE;
+ goto err;
+ }
+ retval = config_assign(&options_format, newoptions, cl, 0, 0, msg);
+ config_free_lines(cl);
+ if (retval < 0) {
+ err = SETOPT_ERR_PARSE;
+ goto err;
+ }
+ if (i==0)
+ newdefaultoptions = options_dup(&options_format, newoptions);
}
/* Go through command-line variables too */
@@ -4381,6 +4560,8 @@ options_init_from_string(const char *cf,
/* Clear newoptions and re-initialize them with new defaults. */
config_free(&options_format, newoptions);
+ config_free(&options_format, newdefaultoptions);
+ newdefaultoptions = NULL;
newoptions = tor_malloc_zero(sizeof(or_options_t));
newoptions->_magic = OR_OPTIONS_MAGIC;
options_init(newoptions);
@@ -4388,22 +4569,24 @@ options_init_from_string(const char *cf,
newoptions->command_arg = command_arg;
/* Assign all options a second time. */
- retval = config_get_lines(cf, &cl);
- if (retval < 0) {
- err = SETOPT_ERR_PARSE;
- goto err;
- }
- retval = config_assign(&options_format, newoptions, cl, 0, 0, msg);
- config_free_lines(cl);
- if (retval < 0) {
- err = SETOPT_ERR_PARSE;
- goto err;
- }
- retval = config_assign(&options_format, newoptions,
- global_cmdline_options, 0, 0, msg);
- if (retval < 0) {
- err = SETOPT_ERR_PARSE;
- goto err;
+ for (i = 0; i < 2; ++i) {
+ const char *body = i==0 ? cf_defaults : cf;
+ if (!body)
+ continue;
+ /* get config lines, assign them */
+ retval = config_get_lines(body, &cl, 1);
+ if (retval < 0) {
+ err = SETOPT_ERR_PARSE;
+ goto err;
+ }
+ retval = config_assign(&options_format, newoptions, cl, 0, 0, msg);
+ config_free_lines(cl);
+ if (retval < 0) {
+ err = SETOPT_ERR_PARSE;
+ goto err;
+ }
+ if (i==0)
+ newdefaultoptions = options_dup(&options_format, newoptions);
}
}
@@ -4422,11 +4605,14 @@ options_init_from_string(const char *cf,
err = SETOPT_ERR_SETTING;
goto err; /* frees and replaces old options */
}
+ config_free(&options_format, global_default_options);
+ global_default_options = newdefaultoptions;
return SETOPT_OK;
err:
config_free(&options_format, newoptions);
+ config_free(&options_format, newdefaultoptions);
if (*msg) {
char *old_msg = *msg;
tor_asprintf(msg, "Failed to parse/validate config: %s", old_msg);
@@ -4438,12 +4624,14 @@ options_init_from_string(const char *cf,
/** Return the location for our configuration file.
*/
const char *
-get_torrc_fname(void)
+get_torrc_fname(int defaults_fname)
{
- if (torrc_fname)
- return torrc_fname;
+ const char *fname = defaults_fname ? torrc_defaults_fname : torrc_fname;
+
+ if (fname)
+ return fname;
else
- return get_default_conf_file();
+ return get_default_conf_file(defaults_fname);
}
/** Adjust the address map based on the MapAddress elements in the
@@ -4684,7 +4872,7 @@ parse_bridge_line(const char *line, int validate_only)
addrport = field1;
}
- if (tor_addr_port_parse(addrport, &addr, &port)<0) {
+ if (tor_addr_port_lookup(addrport, &addr, &port)<0) {
log_warn(LD_CONFIG, "Error parsing Bridge address '%s'", addrport);
goto err;
}
@@ -4726,72 +4914,245 @@ parse_bridge_line(const char *line, int validate_only)
SMARTLIST_FOREACH(items, char*, s, tor_free(s));
smartlist_free(items);
tor_free(addrport);
- tor_free(fingerprint);
tor_free(transport_name);
+ tor_free(fingerprint);
return r;
}
/** Read the contents of a ClientTransportPlugin line from
* <b>line</b>. Return 0 if the line is well-formed, and -1 if it
- * isn't. If <b>validate_only</b> is 0, and the line is well-formed,
- * then add the transport described in the line to our internal
- * transport list.
-*/
+ * isn't.
+ *
+ * If <b>validate_only</b> is 0, and the line is well-formed:
+ * - If it's an external proxy line, add the transport described in the line to
+ * our internal transport list.
+ * - If it's a managed proxy line, launch the managed proxy. */
static int
parse_client_transport_line(const char *line, int validate_only)
{
smartlist_t *items = NULL;
int r;
- char *socks_ver_str=NULL;
- char *name=NULL;
+ char *field2=NULL;
+
+ const char *transports=NULL;
+ smartlist_t *transport_list=NULL;
char *addrport=NULL;
- int socks_ver;
tor_addr_t addr;
uint16_t port = 0;
+ int socks_ver=PROXY_NONE;
+
+ /* managed proxy options */
+ int is_managed=0;
+ char **proxy_argv=NULL;
+ char **tmp=NULL;
+ int proxy_argc,i;
+
+ int line_length;
items = smartlist_create();
smartlist_split_string(items, line, NULL,
SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, -1);
- if (smartlist_len(items) < 3) {
+ line_length = smartlist_len(items);
+ if (line_length < 3) {
log_warn(LD_CONFIG, "Too few arguments on ClientTransportPlugin line.");
goto err;
}
- name = smartlist_get(items, 0);
+ /* Get the first line element, split it to commas into
+ transport_list (in case it's multiple transports) and validate
+ the transport names. */
+ transports = smartlist_get(items, 0);
+ transport_list = smartlist_create();
+ smartlist_split_string(transport_list, transports, ",",
+ SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0);
+ SMARTLIST_FOREACH_BEGIN(transport_list, const char *, transport_name) {
+ if (!string_is_C_identifier(transport_name)) {
+ log_warn(LD_CONFIG, "Transport name is not a C identifier (%s).",
+ transport_name);
+ goto err;
+ }
+ } SMARTLIST_FOREACH_END(transport_name);
- socks_ver_str = smartlist_get(items, 1);
+ /* field2 is either a SOCKS version or "exec" */
+ field2 = smartlist_get(items, 1);
- if (!strcmp(socks_ver_str,"socks4"))
+ if (!strcmp(field2,"socks4")) {
socks_ver = PROXY_SOCKS4;
- else if (!strcmp(socks_ver_str,"socks5"))
+ } else if (!strcmp(field2,"socks5")) {
socks_ver = PROXY_SOCKS5;
- else {
- log_warn(LD_CONFIG, "Strange ClientTransportPlugin proxy type '%s'.",
- socks_ver_str);
+ } else if (!strcmp(field2,"exec")) {
+ is_managed=1;
+ } else {
+ log_warn(LD_CONFIG, "Strange ClientTransportPlugin field '%s'.",
+ field2);
goto err;
}
- addrport = smartlist_get(items, 2);
+ if (is_managed) { /* managed */
+ if (!validate_only) { /* if we are not just validating, use the
+ rest of the line as the argv of the proxy
+ to be launched */
+ proxy_argc = line_length-2;
+ tor_assert(proxy_argc > 0);
+ proxy_argv = tor_malloc_zero(sizeof(char*)*(proxy_argc+1));
+ tmp = proxy_argv;
+ for (i=0;i<proxy_argc;i++) { /* store arguments */
+ *tmp++ = smartlist_get(items, 2);
+ smartlist_del_keeporder(items, 2);
+ }
+ *tmp = NULL; /*terminated with NUL pointer, just like execve() likes it*/
+
+ /* kickstart the thing */
+ pt_kickstart_client_proxy(transport_list, proxy_argv);
+ }
+ } else { /* external */
+ if (smartlist_len(transport_list) != 1) {
+ log_warn(LD_CONFIG, "You can't have an external proxy with "
+ "more than one transports.");
+ goto err;
+ }
+
+ addrport = smartlist_get(items, 2);
+
+ if (tor_addr_port_lookup(addrport, &addr, &port)<0) {
+ log_warn(LD_CONFIG, "Error parsing transport "
+ "address '%s'", addrport);
+ goto err;
+ }
+ if (!port) {
+ log_warn(LD_CONFIG,
+ "Transport address '%s' has no port.", addrport);
+ goto err;
+ }
+
+ if (!validate_only) {
+ transport_add_from_config(&addr, port, smartlist_get(transport_list, 0),
+ socks_ver);
+
+ log_info(LD_DIR, "Transport '%s' found at %s:%d",
+ transports, fmt_addr(&addr), (int)port);
+ }
+ }
+
+ r = 0;
+ goto done;
+
+ err:
+ r = -1;
+
+ done:
+ SMARTLIST_FOREACH(items, char*, s, tor_free(s));
+ smartlist_free(items);
+ if (transport_list) {
+ SMARTLIST_FOREACH(transport_list, char*, s, tor_free(s));
+ smartlist_free(transport_list);
+ }
+
+ return r;
+}
+
+/** Read the contents of a ServerTransportPlugin line from
+ * <b>line</b>. Return 0 if the line is well-formed, and -1 if it
+ * isn't.
+ * If <b>validate_only</b> is 0, the line is well-formed, and it's a
+ * managed proxy line, launch the managed proxy. */
+static int
+parse_server_transport_line(const char *line, int validate_only)
+{
+ smartlist_t *items = NULL;
+ int r;
+ const char *transports=NULL;
+ smartlist_t *transport_list=NULL;
+ char *type=NULL;
+ char *addrport=NULL;
+ tor_addr_t addr;
+ uint16_t port = 0;
+
+ /* managed proxy options */
+ int is_managed=0;
+ char **proxy_argv=NULL;
+ char **tmp=NULL;
+ int proxy_argc,i;
+
+ int line_length;
+
+ items = smartlist_create();
+ smartlist_split_string(items, line, NULL,
+ SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, -1);
- if (tor_addr_port_parse(addrport, &addr, &port)<0) {
- log_warn(LD_CONFIG, "Error parsing transport "
- "address '%s'", addrport);
+ line_length = smartlist_len(items);
+ if (line_length < 3) {
+ log_warn(LD_CONFIG, "Too few arguments on ServerTransportPlugin line.");
goto err;
}
- if (!port) {
- log_warn(LD_CONFIG,
- "Transport address '%s' has no port.", addrport);
+ /* Get the first line element, split it to commas into
+ transport_list (in case it's multiple transports) and validate
+ the transport names. */
+ transports = smartlist_get(items, 0);
+ transport_list = smartlist_create();
+ smartlist_split_string(transport_list, transports, ",",
+ SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0);
+ SMARTLIST_FOREACH_BEGIN(transport_list, const char *, transport_name) {
+ if (!string_is_C_identifier(transport_name)) {
+ log_warn(LD_CONFIG, "Transport name is not a C identifier (%s).",
+ transport_name);
+ goto err;
+ }
+ } SMARTLIST_FOREACH_END(transport_name);
+
+ type = smartlist_get(items, 1);
+
+ if (!strcmp(type, "exec")) {
+ is_managed=1;
+ } else if (!strcmp(type, "proxy")) {
+ is_managed=0;
+ } else {
+ log_warn(LD_CONFIG, "Strange ServerTransportPlugin type '%s'", type);
goto err;
}
- if (!validate_only) {
- log_debug(LD_DIR, "Transport %s found at %s:%d", name,
- fmt_addr(&addr), (int)port);
+ if (is_managed) { /* managed */
+ if (!validate_only) {
+ proxy_argc = line_length-2;
+ tor_assert(proxy_argc > 0);
+ proxy_argv = tor_malloc_zero(sizeof(char*)*(proxy_argc+1));
+ tmp = proxy_argv;
- if (transport_add_from_config(&addr, port, name, socks_ver) < 0)
+ for (i=0;i<proxy_argc;i++) { /* store arguments */
+ *tmp++ = smartlist_get(items, 2);
+ smartlist_del_keeporder(items, 2);
+ }
+ *tmp = NULL; /*terminated with NUL pointer, just like execve() likes it*/
+
+ /* kickstart the thing */
+ pt_kickstart_server_proxy(transport_list, proxy_argv);
+ }
+ } else { /* external */
+ if (smartlist_len(transport_list) != 1) {
+ log_warn(LD_CONFIG, "You can't have an external proxy with "
+ "more than one transports.");
+ goto err;
+ }
+
+ addrport = smartlist_get(items, 2);
+
+ if (tor_addr_port_lookup(addrport, &addr, &port)<0) {
+ log_warn(LD_CONFIG, "Error parsing transport "
+ "address '%s'", addrport);
+ goto err;
+ }
+ if (!port) {
+ log_warn(LD_CONFIG,
+ "Transport address '%s' has no port.", addrport);
goto err;
+ }
+
+ if (!validate_only) {
+ log_info(LD_DIR, "Server transport '%s' at %s:%d.",
+ transports, fmt_addr(&addr), (int)port);
+ }
}
r = 0;
@@ -4803,6 +5164,11 @@ parse_client_transport_line(const char *line, int validate_only)
done:
SMARTLIST_FOREACH(items, char*, s, tor_free(s));
smartlist_free(items);
+ if (transport_list) {
+ SMARTLIST_FOREACH(transport_list, char*, s, tor_free(s));
+ smartlist_free(transport_list);
+ }
+
return r;
}
@@ -4886,7 +5252,7 @@ parse_dir_server_line(const char *line, dirinfo_type_t required_type,
}
addrport = smartlist_get(items, 0);
smartlist_del_keeporder(items, 0);
- if (parse_addr_port(LOG_WARN, addrport, &address, NULL, &dir_port)<0) {
+ if (addr_port_lookup(LOG_WARN, addrport, &address, NULL, &dir_port)<0) {
log_warn(LD_CONFIG, "Error parsing DirServer address '%s'", addrport);
goto err;
}
@@ -4906,7 +5272,7 @@ parse_dir_server_line(const char *line, dirinfo_type_t required_type,
* clause once Tor 0.1.2.17 is obsolete. */
log_warn(LD_CONFIG, "Dangerous dirserver line. To correct, erase your "
"torrc file (%s), or reinstall Tor and use the default torrc.",
- get_torrc_fname());
+ get_torrc_fname(0));
goto err;
}
if (base16_decode(digest, DIGEST_LEN, fingerprint, HEX_DIGEST_LEN)<0) {
@@ -4948,26 +5314,75 @@ port_cfg_free(port_cfg_t *port)
tor_free(port);
}
-/** Warn for every port in <b>ports</b> that is not on a loopback address. */
+/** Warn for every port in <b>ports</b> that is on a publicly routable
+ * address. */
static void
warn_nonlocal_client_ports(const smartlist_t *ports, const char *portname)
{
SMARTLIST_FOREACH_BEGIN(ports, const port_cfg_t *, port) {
- if (!tor_addr_is_loopback(&port->addr)) {
+ if (port->is_unix_addr) {
+ /* Unix sockets aren't accessible over a network. */
+ } else if (!tor_addr_is_internal(&port->addr, 1)) {
log_warn(LD_CONFIG, "You specified a public address for %sPort. "
"Other people on the Internet might find your computer and "
"use it as an open proxy. Please don't allow this unless you "
"have a good reason.", portname);
+ } else if (!tor_addr_is_loopback(&port->addr)) {
+ log_notice(LD_CONFIG, "You configured a non-loopback address for "
+ "%sPort. This allows everybody on your local network to use "
+ "your machine as a proxy. Make sure this is what you wanted.",
+ portname);
+ }
+ } SMARTLIST_FOREACH_END(port);
+}
+
+/** DOCDOC */
+static void
+warn_nonlocal_controller_ports(smartlist_t *ports, unsigned forbid)
+{
+ int warned = 0;
+ SMARTLIST_FOREACH_BEGIN(ports, port_cfg_t *, port) {
+ if (port->type != CONN_TYPE_CONTROL_LISTENER)
+ continue;
+ if (port->is_unix_addr)
+ continue;
+ if (!tor_addr_is_loopback(&port->addr)) {
+ if (forbid) {
+ if (!warned)
+ log_warn(LD_CONFIG,
+ "You have a ControlPort set to accept "
+ "unauthenticated connections from a non-local address. "
+ "This means that programs not running on your computer "
+ "can reconfigure your Tor, without even having to guess a "
+ "password. That's so bad that I'm closing your ControlPort "
+ "for you. If you need to control your Tor remotely, try "
+ "enabling authentication and using a tool like stunnel or "
+ "ssh to encrypt remote access.");
+ warned = 1;
+ port_cfg_free(port);
+ SMARTLIST_DEL_CURRENT(ports, port);
+ } else {
+ log_warn(LD_CONFIG, "You have a ControlPort set to accept "
+ "connections from a non-local address. This means that "
+ "programs not running on your computer can reconfigure your "
+ "Tor. That's pretty bad, since the controller "
+ "protocol isn't encrypted! Maybe you should just listen on "
+ "127.0.0.1 and use a tool like stunnel or ssh to encrypt "
+ "remote connections to your control port.");
+ return; /* No point in checking the rest */
+ }
}
} SMARTLIST_FOREACH_END(port);
}
-#define CL_PORT_NO_OPTIONS (1u<<0)
+#define CL_PORT_NO_OPTIONS (1u<<0)
#define CL_PORT_WARN_NONLOCAL (1u<<1)
#define CL_PORT_ALLOW_EXTRA_LISTENADDR (1u<<2)
+#define CL_PORT_SERVER_OPTIONS (1u<<3)
+#define CL_PORT_FORBID_NONLOCAL (1u<<4)
/**
- * Parse port configuration for a single client port type.
+ * Parse port configuration for a single port type.
*
* Read entries of the "FooPort" type from the list <b>ports</b>, and
* entries of the "FooListenAddress" type from the list
@@ -4987,17 +5402,22 @@ warn_nonlocal_client_ports(const smartlist_t *ports, const char *portname)
* isolation options in the FooPort entries.
*
* If CL_PORT_WARN_NONLOCAL is set in <b>flags</b>, warn if any of the
- * ports are not on a local address.
+ * ports are not on a local address. If CL_PORT_FORBID_NONLOCAL is set,
+ * this is a contrl port with no password set: don't even allow it.
*
* Unless CL_PORT_ALLOW_EXTRA_LISTENADDR is set in <b>flags</b>, warn
* if FooListenAddress is set but FooPort is 0.
*
+ * If CL_PORT_SERVER_OPTIONS is set in <b>flags</b>, do not allow stream
+ * isolation options in the FooPort entries; instead allow the
+ * server-port option set.
+ *
* On success, if <b>out</b> is given, add a new port_cfg_t entry to
* <b>out</b> for every port that the client should listen on. Return 0
* on success, -1 on failure.
*/
static int
-parse_client_port_config(smartlist_t *out,
+parse_port_config(smartlist_t *out,
const config_line_t *ports,
const config_line_t *listenaddrs,
const char *portname,
@@ -5008,8 +5428,11 @@ parse_client_port_config(smartlist_t *out,
{
smartlist_t *elts;
int retval = -1;
- const unsigned allow_client_options = !(flags & CL_PORT_NO_OPTIONS);
+ const unsigned is_control = (listener_type == CONN_TYPE_CONTROL_LISTENER);
+ const unsigned allow_no_options = flags & CL_PORT_NO_OPTIONS;
+ const unsigned use_server_options = flags & CL_PORT_SERVER_OPTIONS;
const unsigned warn_nonlocal = flags & CL_PORT_WARN_NONLOCAL;
+ const unsigned forbid_nonlocal = flags & CL_PORT_FORBID_NONLOCAL;
const unsigned allow_spurious_listenaddr =
flags & CL_PORT_ALLOW_EXTRA_LISTENADDR;
@@ -5018,54 +5441,71 @@ parse_client_port_config(smartlist_t *out,
if (listenaddrs) {
int mainport = defaultport;
- if (ports && ports->next) {
+ if (ports && ports->next) {
log_warn(LD_CONFIG, "%sListenAddress can't be used when there are "
"multiple %sPort lines", portname, portname);
return -1;
- } else if (ports) {
- if (!strcmp(ports->value, "auto")) {
- mainport = CFG_AUTO_PORT;
- } else {
- int ok;
- mainport = (int)tor_parse_long(ports->value, 10, 0, 65535, &ok, NULL);
- if (!ok) {
- log_warn(LD_CONFIG, "%sListenAddress can only be used with a single "
- "%sPort with value \"auto\" or 1-65535.", portname, portname);
- return -1;
- }
- }
- }
+ } else if (ports) {
+ if (!strcmp(ports->value, "auto")) {
+ mainport = CFG_AUTO_PORT;
+ } else {
+ int ok;
+ mainport = (int)tor_parse_long(ports->value, 10, 0, 65535, &ok, NULL);
+ if (!ok) {
+ log_warn(LD_CONFIG, "%sListenAddress can only be used with a single "
+ "%sPort with value \"auto\" or 1-65535.",
+ portname, portname);
+ return -1;
+ }
+ }
+ }
- if (mainport == 0) {
- if (allow_spurious_listenaddr)
- return 1;
- log_warn(LD_CONFIG, "%sPort must be defined if %sListenAddress is used",
- portname, portname);
- return -1;
- }
+ if (mainport == 0) {
+ if (allow_spurious_listenaddr)
+ return 1;
+ log_warn(LD_CONFIG, "%sPort must be defined if %sListenAddress is used",
+ portname, portname);
+ return -1;
+ }
- for (; listenaddrs; listenaddrs = listenaddrs->next) {
- tor_addr_t addr;
- uint16_t port = 0;
- if (tor_addr_port_parse(listenaddrs->value, &addr, &port) < 0) {
- log_warn(LD_CONFIG, "Unable to parse %sListenAddress '%s'",
- portname, listenaddrs->value);
- return -1;
- }
- if (out) {
- port_cfg_t *cfg = tor_malloc_zero(sizeof(port_cfg_t));
- cfg->type = listener_type;
- cfg->port = port ? port : defaultport;
- tor_addr_copy(&cfg->addr, &addr);
- cfg->session_group = SESSION_GROUP_UNSET;
- cfg->isolation_flags = ISO_DEFAULT;
- smartlist_add(out, cfg);
- }
- }
+ if (use_server_options && out) {
+ /* Add a no_listen port. */
+ port_cfg_t *cfg = tor_malloc_zero(sizeof(port_cfg_t));
+ cfg->type = listener_type;
+ cfg->port = mainport;
+ tor_addr_make_unspec(&cfg->addr); /* Server ports default to 0.0.0.0 */
+ cfg->no_listen = 1;
+ cfg->ipv4_only = 1;
+ smartlist_add(out, cfg);
+ }
- if (warn_nonlocal && out)
- warn_nonlocal_client_ports(out, portname);
- return 0;
+ for (; listenaddrs; listenaddrs = listenaddrs->next) {
+ tor_addr_t addr;
+ uint16_t port = 0;
+ if (tor_addr_port_lookup(listenaddrs->value, &addr, &port) < 0) {
+ log_warn(LD_CONFIG, "Unable to parse %sListenAddress '%s'",
+ portname, listenaddrs->value);
+ return -1;
+ }
+ if (out) {
+ port_cfg_t *cfg = tor_malloc_zero(sizeof(port_cfg_t));
+ cfg->type = listener_type;
+ cfg->port = port ? port : mainport;
+ tor_addr_copy(&cfg->addr, &addr);
+ cfg->session_group = SESSION_GROUP_UNSET;
+ cfg->isolation_flags = ISO_DEFAULT;
+ cfg->no_advertise = 1;
+ smartlist_add(out, cfg);
+ }
+ }
+
+ if (warn_nonlocal && out) {
+ if (is_control)
+ warn_nonlocal_controller_ports(out, forbid_nonlocal);
+ else
+ warn_nonlocal_client_ports(out, portname);
+ }
+ return 0;
} /* end if (listenaddrs) */
/* No ListenAddress lines. If there's no FooPort, then maybe make a default
@@ -5075,7 +5515,7 @@ parse_client_port_config(smartlist_t *out,
port_cfg_t *cfg = tor_malloc_zero(sizeof(port_cfg_t));
cfg->type = listener_type;
cfg->port = defaultport;
- tor_addr_from_str(&cfg->addr, defaultaddr);
+ tor_addr_parse(&cfg->addr, defaultaddr);
cfg->session_group = SESSION_GROUP_UNSET;
cfg->isolation_flags = ISO_DEFAULT;
smartlist_add(out, cfg);
@@ -5096,6 +5536,8 @@ parse_client_port_config(smartlist_t *out,
char *addrport;
uint16_t ptmp=0;
int ok;
+ int no_listen = 0, no_advertise = 0, all_addrs = 0,
+ ipv4_only = 0, ipv6_only = 0;
smartlist_split_string(elts, ports->value, NULL,
SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0);
@@ -5104,7 +5546,7 @@ parse_client_port_config(smartlist_t *out,
goto err;
}
- if (!allow_client_options && smartlist_len(elts) > 1) {
+ if (allow_no_options && smartlist_len(elts) > 1) {
log_warn(LD_CONFIG, "Too many options on %sPort line", portname);
goto err;
}
@@ -5113,11 +5555,11 @@ parse_client_port_config(smartlist_t *out,
addrport = smartlist_get(elts, 0);
if (!strcmp(addrport, "auto")) {
port = CFG_AUTO_PORT;
- tor_addr_from_str(&addr, defaultaddr);
+ tor_addr_parse(&addr, defaultaddr);
} else if (!strcasecmpend(addrport, ":auto")) {
char *addrtmp = tor_strndup(addrport, strlen(addrport)-5);
port = CFG_AUTO_PORT;
- if (tor_addr_port_parse(addrtmp, &addr, &ptmp)<0 || ptmp) {
+ if (tor_addr_port_lookup(addrtmp, &addr, &ptmp)<0 || ptmp) {
log_warn(LD_CONFIG, "Invalid address '%s' for %sPort",
escaped(addrport), portname);
tor_free(addrtmp);
@@ -5128,8 +5570,8 @@ parse_client_port_config(smartlist_t *out,
"9050" might be a valid address. */
port = (int) tor_parse_long(addrport, 10, 0, 65535, &ok, NULL);
if (ok) {
- tor_addr_from_str(&addr, defaultaddr);
- } else if (tor_addr_port_parse(addrport, &addr, &ptmp) == 0) {
+ tor_addr_parse(&addr, defaultaddr);
+ } else if (tor_addr_port_lookup(addrport, &addr, &ptmp) == 0) {
if (ptmp == 0) {
log_warn(LD_CONFIG, "%sPort line has address but no port", portname);
goto err;
@@ -5143,56 +5585,107 @@ parse_client_port_config(smartlist_t *out,
}
/* Now parse the rest of the options, if any. */
- SMARTLIST_FOREACH_BEGIN(elts, char *, elt) {
- int no = 0, isoflag = 0;
- const char *elt_orig = elt;
- if (elt_sl_idx == 0)
- continue; /* Skip addr:port */
- if (!strcasecmpstart(elt, "SessionGroup=")) {
- int group = (int)tor_parse_long(elt+strlen("SessionGroup="),
- 10, 0, INT_MAX, &ok, NULL);
- if (!ok) {
- log_warn(LD_CONFIG, "Invalid %sPort option '%s'",
+ if (use_server_options) {
+ /* This is a server port; parse advertising options */
+ SMARTLIST_FOREACH_BEGIN(elts, char *, elt) {
+ if (elt_sl_idx == 0)
+ continue; /* Skip addr:port */
+
+ if (!strcasecmp(elt, "NoAdvertise")) {
+ no_advertise = 1;
+ } else if (!strcasecmp(elt, "NoListen")) {
+ no_listen = 1;
+#if 0
+ /* not implemented yet. */
+ } else if (!strcasecmp(elt, "AllAddrs")) {
+
+ all_addrs = 1;
+#endif
+ } else if (!strcasecmp(elt, "IPv4Only")) {
+ ipv4_only = 1;
+ } else if (!strcasecmp(elt, "IPv6Only")) {
+ ipv6_only = 1;
+ } else {
+ log_warn(LD_CONFIG, "Unrecognized %sPort option '%s'",
portname, escaped(elt));
- goto err;
}
- if (sessiongroup >= 0) {
- log_warn(LD_CONFIG, "Multiple SessionGroup options on %sPort",
- portname);
- goto err;
- }
- sessiongroup = group;
- continue;
- }
+ } SMARTLIST_FOREACH_END(elt);
- if (!strcasecmpstart(elt, "No")) {
- no = 1;
- elt += 2;
+ if (no_advertise && no_listen) {
+ log_warn(LD_CONFIG, "Tried to set both NoListen and NoAdvertise "
+ "on %sPort line '%s'",
+ portname, escaped(ports->value));
+ goto err;
}
- if (!strcasecmpend(elt, "s"))
- elt[strlen(elt)-1] = '\0'; /* kill plurals. */
-
- if (!strcasecmp(elt, "IsolateDestPort")) {
- isoflag = ISO_DESTPORT;
- } else if (!strcasecmp(elt, "IsolateDestAddr")) {
- isoflag = ISO_DESTADDR;
- } else if (!strcasecmp(elt, "IsolateSOCKSAuth")) {
- isoflag = ISO_SOCKSAUTH;
- } else if (!strcasecmp(elt, "IsolateClientProtocol")) {
- isoflag = ISO_CLIENTPROTO;
- } else if (!strcasecmp(elt, "IsolateClientAddr")) {
- isoflag = ISO_CLIENTADDR;
- } else {
- log_warn(LD_CONFIG, "Unrecognized %sPort option '%s'",
- portname, escaped(elt_orig));
+ if (ipv4_only && ipv6_only) {
+ log_warn(LD_CONFIG, "Tried to set both IPv4Only and IPv6Only "
+ "on %sPort line '%s'",
+ portname, escaped(ports->value));
+ goto err;
}
-
- if (no) {
- isolation &= ~isoflag;
- } else {
- isolation |= isoflag;
+ if (ipv4_only && tor_addr_family(&addr) == AF_INET6) {
+ log_warn(LD_CONFIG, "Could not interpret %sPort address as IPv6",
+ portname);
+ goto err;
+ }
+ if (ipv6_only && tor_addr_family(&addr) == AF_INET) {
+ log_warn(LD_CONFIG, "Could not interpret %sPort address as IPv4",
+ portname);
+ goto err;
}
- } SMARTLIST_FOREACH_END(elt);
+ } else {
+ /* This is a client port; parse isolation options */
+ SMARTLIST_FOREACH_BEGIN(elts, char *, elt) {
+ int no = 0, isoflag = 0;
+ const char *elt_orig = elt;
+ if (elt_sl_idx == 0)
+ continue; /* Skip addr:port */
+ if (!strcasecmpstart(elt, "SessionGroup=")) {
+ int group = (int)tor_parse_long(elt+strlen("SessionGroup="),
+ 10, 0, INT_MAX, &ok, NULL);
+ if (!ok) {
+ log_warn(LD_CONFIG, "Invalid %sPort option '%s'",
+ portname, escaped(elt));
+ goto err;
+ }
+ if (sessiongroup >= 0) {
+ log_warn(LD_CONFIG, "Multiple SessionGroup options on %sPort",
+ portname);
+ goto err;
+ }
+ sessiongroup = group;
+ continue;
+ }
+
+ if (!strcasecmpstart(elt, "No")) {
+ no = 1;
+ elt += 2;
+ }
+ if (!strcasecmpend(elt, "s"))
+ elt[strlen(elt)-1] = '\0'; /* kill plurals. */
+
+ if (!strcasecmp(elt, "IsolateDestPort")) {
+ isoflag = ISO_DESTPORT;
+ } else if (!strcasecmp(elt, "IsolateDestAddr")) {
+ isoflag = ISO_DESTADDR;
+ } else if (!strcasecmp(elt, "IsolateSOCKSAuth")) {
+ isoflag = ISO_SOCKSAUTH;
+ } else if (!strcasecmp(elt, "IsolateClientProtocol")) {
+ isoflag = ISO_CLIENTPROTO;
+ } else if (!strcasecmp(elt, "IsolateClientAddr")) {
+ isoflag = ISO_CLIENTADDR;
+ } else {
+ log_warn(LD_CONFIG, "Unrecognized %sPort option '%s'",
+ portname, escaped(elt_orig));
+ }
+
+ if (no) {
+ isolation &= ~isoflag;
+ } else {
+ isolation |= isoflag;
+ }
+ } SMARTLIST_FOREACH_END(elt);
+ }
if (out && port) {
port_cfg_t *cfg = tor_malloc_zero(sizeof(port_cfg_t));
@@ -5201,14 +5694,24 @@ parse_client_port_config(smartlist_t *out,
tor_addr_copy(&cfg->addr, &addr);
cfg->session_group = sessiongroup;
cfg->isolation_flags = isolation;
+ cfg->no_listen = no_listen;
+ cfg->no_listen = no_advertise;
+ cfg->all_addrs = all_addrs;
+ cfg->ipv4_only = ipv4_only;
+ cfg->ipv6_only = ipv6_only;
+
smartlist_add(out, cfg);
}
SMARTLIST_FOREACH(elts, char *, cp, tor_free(cp));
smartlist_clear(elts);
}
- if (warn_nonlocal && out)
- warn_nonlocal_client_ports(out, portname);
+ if (warn_nonlocal && out) {
+ if (is_control)
+ warn_nonlocal_controller_ports(out, forbid_nonlocal);
+ else
+ warn_nonlocal_client_ports(out, portname);
+ }
retval = 0;
err:
@@ -5217,6 +5720,27 @@ parse_client_port_config(smartlist_t *out,
return retval;
}
+/** DOCDOC */
+static int
+parse_socket_config(smartlist_t *out, const config_line_t *cfg,
+ int listener_type)
+{
+
+ if (!out)
+ return 0;
+
+ for ( ; cfg; cfg = cfg->next) {
+ size_t len = strlen(cfg->value);
+ port_cfg_t *port = tor_malloc_zero(sizeof(port_cfg_t) + len + 1);
+ port->is_unix_addr = 1;
+ memcpy(port->unix_addr, cfg->value, len+1);
+ port->type = listener_type;
+ smartlist_add(out, port);
+ }
+
+ return 0;
+}
+
/** Parse all client port types (Socks, DNS, Trans, NATD) from
* <b>options</b>. On success, set *<b>n_ports_out</b> to the number of
* ports that are listed and return 0. On failure, set *<b>msg</b> to a
@@ -5226,8 +5750,8 @@ parse_client_port_config(smartlist_t *out,
* new list of ports parsed from <b>options</b>.
**/
static int
-parse_client_ports(const or_options_t *options, int validate_only,
- char **msg, int *n_ports_out)
+parse_ports(const or_options_t *options, int validate_only,
+ char **msg, int *n_ports_out)
{
smartlist_t *ports;
int retval = -1;
@@ -5236,7 +5760,7 @@ parse_client_ports(const or_options_t *options, int validate_only,
*n_ports_out = 0;
- if (parse_client_port_config(ports,
+ if (parse_port_config(ports,
options->SocksPort, options->SocksListenAddress,
"Socks", CONN_TYPE_AP_LISTENER,
"127.0.0.1", 9050,
@@ -5244,7 +5768,7 @@ parse_client_ports(const or_options_t *options, int validate_only,
*msg = tor_strdup("Invalid SocksPort/SocksListenAddress configuration");
goto err;
}
- if (parse_client_port_config(ports,
+ if (parse_port_config(ports,
options->DNSPort, options->DNSListenAddress,
"DNS", CONN_TYPE_AP_DNS_LISTENER,
"127.0.0.1", 0,
@@ -5252,7 +5776,7 @@ parse_client_ports(const or_options_t *options, int validate_only,
*msg = tor_strdup("Invalid DNSPort/DNSListenAddress configuration");
goto err;
}
- if (parse_client_port_config(ports,
+ if (parse_port_config(ports,
options->TransPort, options->TransListenAddress,
"Trans", CONN_TYPE_AP_TRANS_LISTENER,
"127.0.0.1", 0,
@@ -5260,7 +5784,7 @@ parse_client_ports(const or_options_t *options, int validate_only,
*msg = tor_strdup("Invalid TransPort/TransListenAddress configuration");
goto err;
}
- if (parse_client_port_config(ports,
+ if (parse_port_config(ports,
options->NATDPort, options->NATDListenAddress,
"NATD", CONN_TYPE_AP_NATD_LISTENER,
"127.0.0.1", 0,
@@ -5268,16 +5792,63 @@ parse_client_ports(const or_options_t *options, int validate_only,
*msg = tor_strdup("Invalid NatdPort/NatdListenAddress configuration");
goto err;
}
+ {
+ unsigned control_port_flags = CL_PORT_NO_OPTIONS | CL_PORT_WARN_NONLOCAL;
+ const int any_passwords = (options->HashedControlPassword ||
+ options->HashedControlSessionPassword ||
+ options->CookieAuthentication);
+ if (! any_passwords)
+ control_port_flags |= CL_PORT_FORBID_NONLOCAL;
+
+ if (parse_port_config(ports,
+ options->ControlPort, options->ControlListenAddress,
+ "Control", CONN_TYPE_CONTROL_LISTENER,
+ "127.0.0.1", 0,
+ control_port_flags) < 0) {
+ *msg = tor_strdup("Invalid ControlPort/ControlListenAddress "
+ "configuration");
+ goto err;
+ }
+ if (parse_socket_config(ports,
+ options->ControlSocket,
+ CONN_TYPE_CONTROL_LISTENER) < 0) {
+ *msg = tor_strdup("Invalid ControlSocket configuration");
+ goto err;
+ }
+ }
+ if (! options->ClientOnly) {
+ if (parse_port_config(ports,
+ options->ORPort, options->ORListenAddress,
+ "OR", CONN_TYPE_OR_LISTENER,
+ "0.0.0.0", 0,
+ CL_PORT_SERVER_OPTIONS) < 0) {
+ *msg = tor_strdup("Invalid ORPort/ORListenAddress configuration");
+ goto err;
+ }
+ if (parse_port_config(ports,
+ options->DirPort, options->DirListenAddress,
+ "Dir", CONN_TYPE_DIR_LISTENER,
+ "0.0.0.0", 0,
+ CL_PORT_SERVER_OPTIONS) < 0) {
+ *msg = tor_strdup("Invalid DirPort/DirListenAddress configuration");
+ goto err;
+ }
+ }
+
+ if (check_server_ports(ports, options) < 0) {
+ *msg = tor_strdup("Misconfigured server ports");
+ goto err;
+ }
*n_ports_out = smartlist_len(ports);
if (!validate_only) {
- if (configured_client_ports) {
- SMARTLIST_FOREACH(configured_client_ports,
+ if (configured_ports) {
+ SMARTLIST_FOREACH(configured_ports,
port_cfg_t *, p, port_cfg_free(p));
- smartlist_free(configured_client_ports);
+ smartlist_free(configured_ports);
}
- configured_client_ports = ports;
+ configured_ports = ports;
ports = NULL; /* prevent free below. */
}
@@ -5290,14 +5861,107 @@ parse_client_ports(const or_options_t *options, int validate_only,
return retval;
}
+/** DOCDOC */
+static int
+check_server_ports(const smartlist_t *ports,
+ const or_options_t *options)
+{
+ int n_orport_advertised = 0;
+ int n_orport_advertised_ipv4 = 0;
+ int n_orport_listeners = 0;
+ int n_dirport_advertised = 0;
+ int n_dirport_listeners = 0;
+ int n_low_port = 0;
+ int r = 0;
+
+ SMARTLIST_FOREACH_BEGIN(ports, const port_cfg_t *, port) {
+ if (port->type == CONN_TYPE_DIR_LISTENER) {
+ if (! port->no_advertise)
+ ++n_dirport_advertised;
+ if (! port->no_listen)
+ ++n_dirport_listeners;
+ } else if (port->type == CONN_TYPE_OR_LISTENER) {
+ if (! port->no_advertise) {
+ ++n_orport_advertised;
+ if (tor_addr_family(&port->addr) == AF_INET ||
+ (tor_addr_family(&port->addr) == AF_UNSPEC && !port->ipv6_only))
+ ++n_orport_advertised_ipv4;
+ }
+ if (! port->no_listen)
+ ++n_orport_listeners;
+ } else {
+ continue;
+ }
+#ifndef MS_WINDOWS
+ if (!port->no_advertise && port->port < 1024)
+ ++n_low_port;
+#endif
+ } SMARTLIST_FOREACH_END(port);
+
+ if (n_orport_advertised && !n_orport_listeners) {
+ log_warn(LD_CONFIG, "We are advertising an ORPort, but not actually "
+ "listening on one.");
+ r = -1;
+ }
+ if (n_dirport_advertised && !n_dirport_listeners) {
+ log_warn(LD_CONFIG, "We are advertising a DirPort, but not actually "
+ "listening on one.");
+ r = -1;
+ }
+ if (n_dirport_advertised > 1) {
+ log_warn(LD_CONFIG, "Can't advertise more than one DirPort.");
+ r = -1;
+ }
+ if (n_orport_advertised && !n_orport_advertised_ipv4 &&
+ !options->BridgeRelay) {
+ log_warn(LD_CONFIG, "Configured non-bridge only to listen on an IPv6 "
+ "address.");
+ r = -1;
+ }
+
+ if (n_low_port && options->AccountingMax) {
+ log(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 "
+ "hibernation. Please choose a different port or turn off "
+ "hibernation unless you know this combination will work on your "
+ "platform.");
+ }
+
+ return r;
+}
+
/** Return a list of port_cfg_t for client ports parsed from the
* options. */
const smartlist_t *
-get_configured_client_ports(void)
+get_configured_ports(void)
+{
+ if (!configured_ports)
+ configured_ports = smartlist_create();
+ return configured_ports;
+}
+
+/** Return the first advertised port of type <b>listener_type</b> in
+ <b>address_family</b>. */
+int
+get_first_advertised_port_by_type_af(int listener_type, int address_family)
{
- if (!configured_client_ports)
- configured_client_ports = smartlist_create();
- return configured_client_ports;
+ if (!configured_ports)
+ return 0;
+ SMARTLIST_FOREACH_BEGIN(configured_ports, const port_cfg_t *, cfg) {
+ if (cfg->type == listener_type &&
+ !cfg->no_advertise &&
+ (tor_addr_family(&cfg->addr) == address_family ||
+ tor_addr_family(&cfg->addr) == AF_UNSPEC)) {
+ if (tor_addr_family(&cfg->addr) != AF_UNSPEC ||
+ (address_family == AF_INET && !cfg->ipv6_only) ||
+ (address_family == AF_INET6 && !cfg->ipv4_only)) {
+ return cfg->port;
+ }
+ }
+ } SMARTLIST_FOREACH_END(cfg);
+ return 0;
}
/** Adjust the value of options->DataDirectory, or fill it in if it's
@@ -5456,7 +6120,7 @@ options_save_current(void)
* If we try falling back to datadirectory or something, we have a better
* chance of saving the configuration, but a better chance of doing
* something the user never expected. */
- return write_configuration_file(get_torrc_fname(), get_options());
+ return write_configuration_file(get_torrc_fname(0), get_options());
}
/** Mapping from a unit name to a multiplier for converting that unit into a
@@ -5668,13 +6332,14 @@ init_libevent(const or_options_t *options)
memset(&cfg, 0, sizeof(cfg));
cfg.disable_iocp = options->DisableIOCP;
cfg.num_cpus = get_num_cpus(options);
+ cfg.msec_per_tick = options->TokenBucketRefillInterval;
tor_libevent_initialize(&cfg);
suppress_libevent_log_msg(NULL);
tor_check_libevent_version(tor_libevent_get_method(),
- get_options()->ORPort != 0,
+ get_options()->ORPort != NULL,
&badness);
if (badness) {
const char *v = tor_libevent_get_version_str();
@@ -5743,6 +6408,69 @@ options_get_datadir_fname2_suffix(const or_options_t *options,
return fname;
}
+/** Return true if <b>line</b> is a valid state TransportProxy line.
+ * Return false otherwise. */
+static int
+state_transport_line_is_valid(const char *line)
+{
+ smartlist_t *items = NULL;
+ char *addrport=NULL;
+ tor_addr_t addr;
+ uint16_t port = 0;
+ int r;
+
+ items = smartlist_create();
+ smartlist_split_string(items, line, NULL,
+ SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, -1);
+
+ if (smartlist_len(items) != 2) {
+ log_warn(LD_CONFIG, "state: Not enough arguments in TransportProxy line.");
+ goto err;
+ }
+
+ addrport = smartlist_get(items, 1);
+ if (tor_addr_port_lookup(addrport, &addr, &port) < 0) {
+ log_warn(LD_CONFIG, "state: Could not parse addrport.");
+ goto err;
+ }
+
+ if (!port) {
+ log_warn(LD_CONFIG, "state: Transport line did not contain port.");
+ goto err;
+ }
+
+ r = 1;
+ goto done;
+
+ err:
+ r = 0;
+
+ done:
+ SMARTLIST_FOREACH(items, char*, s, tor_free(s));
+ smartlist_free(items);
+ return r;
+}
+
+/** Return 0 if all TransportProxy lines in <b>state</b> are well
+ * formed. Otherwise, return -1. */
+static int
+validate_transports_in_state(or_state_t *state)
+{
+ int broken = 0;
+ config_line_t *line;
+
+ for (line = state->TransportProxies ; line ; line = line->next) {
+ tor_assert(!strcmp(line->key, "TransportProxy"));
+ if (!state_transport_line_is_valid(line->value))
+ broken = 1;
+ }
+
+ if (broken)
+ log_warn(LD_CONFIG, "state: State file seems to be broken.");
+
+ return 0;
+}
+
/** Return 0 if every setting in <b>state</b> is reasonable, and a
* permissible transition from <b>old_state</b>. Else warn and return -1.
* Should have no side effects, except for normalizing the contents of
@@ -5761,6 +6489,9 @@ or_state_validate(or_state_t *old_state, or_state_t *state,
if (entry_guards_parse_state(state, 0, msg)<0)
return -1;
+ if (validate_transports_in_state(state)<0)
+ return -1;
+
return 0;
}
@@ -5855,7 +6586,7 @@ or_state_load(void)
if (contents) {
config_line_t *lines=NULL;
int assign_retval;
- if (config_get_lines(contents, &lines)<0)
+ if (config_get_lines(contents, &lines, 0)<0)
goto done;
assign_retval = config_assign(&state_format, new_state,
lines, 0, 0, &errmsg);
@@ -5959,7 +6690,7 @@ or_state_save(time_t now)
tor_free(global_state->TorVersion);
tor_asprintf(&global_state->TorVersion, "Tor %s", get_version());
- state = config_dump(&state_format, global_state, 1, 0);
+ state = config_dump(&state_format, NULL, global_state, 1, 0);
format_local_iso_time(tbuf, now);
tor_asprintf(&contents,
"# Tor state file last generated on %s local time\n"
@@ -5993,6 +6724,150 @@ or_state_save(time_t now)
return 0;
}
+/** Return the config line for transport <b>transport</b> in the current state.
+ * Return NULL if there is no config line for <b>transport</b>. */
+static config_line_t *
+get_transport_in_state_by_name(const char *transport)
+{
+ or_state_t *or_state = get_or_state();
+ config_line_t *line;
+ config_line_t *ret = NULL;
+ smartlist_t *items = NULL;
+
+ for (line = or_state->TransportProxies ; line ; line = line->next) {
+ tor_assert(!strcmp(line->key, "TransportProxy"));
+
+ items = smartlist_create();
+ smartlist_split_string(items, line->value, NULL,
+ SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, -1);
+ if (smartlist_len(items) != 2) /* broken state */
+ goto done;
+
+ if (!strcmp(smartlist_get(items, 0), transport)) {
+ ret = line;
+ goto done;
+ }
+
+ SMARTLIST_FOREACH(items, char*, s, tor_free(s));
+ smartlist_free(items);
+ items = NULL;
+ }
+
+ done:
+ if (items) {
+ SMARTLIST_FOREACH(items, char*, s, tor_free(s));
+ smartlist_free(items);
+ }
+ return ret;
+}
+
+/** Return string containing the address:port part of the
+ * TransportProxy <b>line</b> for transport <b>transport</b>.
+ * If the line is corrupted, return NULL. */
+static const char *
+get_transport_bindaddr(const char *line, const char *transport)
+{
+ char *line_tmp = NULL;
+
+ if (strlen(line) < strlen(transport) + 2) {
+ goto broken_state;
+ } else {
+ /* line should start with the name of the transport and a space.
+ (for example, "obfs2 127.0.0.1:47245") */
+ tor_asprintf(&line_tmp, "%s ", transport);
+ if (strcmpstart(line, line_tmp))
+ goto broken_state;
+
+ tor_free(line_tmp);
+ return (line+strlen(transport)+1);
+ }
+
+ broken_state:
+ tor_free(line_tmp);
+ return NULL;
+}
+
+/** Return a static string containing the address:port a proxy
+ * transport should bind on. */
+const char *
+get_bindaddr_for_transport(const char *transport)
+{
+ static const char default_addrport[] = "127.0.0.1:0";
+ const char *bindaddr = NULL;
+
+ config_line_t *line = get_transport_in_state_by_name(transport);
+ if (!line)
+ return default_addrport;
+
+ bindaddr = get_transport_bindaddr(line->value, transport);
+
+ return bindaddr ? bindaddr : default_addrport;
+}
+
+/** Save <b>transport</b> listening on <b>addr</b>:<b>port</b> to
+ state */
+void
+save_transport_to_state(const char *transport,
+ const tor_addr_t *addr, uint16_t port)
+{
+ or_state_t *state = get_or_state();
+
+ char *transport_addrport=NULL;
+
+ /** find where to write on the state */
+ config_line_t **next, *line;
+
+ /* see if this transport is already stored in state */
+ config_line_t *transport_line =
+ get_transport_in_state_by_name(transport);
+
+ if (transport_line) { /* if transport already exists in state... */
+ const char *prev_bindaddr = /* get its addrport... */
+ get_transport_bindaddr(transport_line->value, transport);
+ tor_asprintf(&transport_addrport, "%s:%d", fmt_addr(addr), (int)port);
+
+ /* if transport in state has the same address as this one, life is good */
+ if (!strcmp(prev_bindaddr, transport_addrport)) {
+ log_info(LD_CONFIG, "Transport seems to have spawned on its usual "
+ "address:port.");
+ goto done;
+ } else { /* if addrport in state is different than the one we got */
+ log_info(LD_CONFIG, "Transport seems to have spawned on different "
+ "address:port. Let's update the state file with the new "
+ "address:port");
+ tor_free(transport_line->value); /* free the old line */
+ tor_asprintf(&transport_line->value, "%s %s:%d", transport,
+ fmt_addr(addr),
+ (int) port); /* replace old addrport line with new line */
+ }
+ } else { /* never seen this one before; save it in state for next time */
+ log_info(LD_CONFIG, "It's the first time we see this transport. "
+ "Let's save its address:port");
+ next = &state->TransportProxies;
+ /* find the last TransportProxy line in the state and point 'next'
+ right after it */
+ line = state->TransportProxies;
+ while (line) {
+ next = &(line->next);
+ line = line->next;
+ }
+
+ /* allocate space for the new line and fill it in */
+ *next = line = tor_malloc_zero(sizeof(config_line_t));
+ line->key = tor_strdup("TransportProxy");
+ tor_asprintf(&line->value, "%s %s:%d", transport,
+ fmt_addr(addr), (int) port);
+
+ next = &(line->next);
+ }
+
+ if (!get_options()->AvoidDiskWrites)
+ or_state_mark_dirty(state, 0);
+
+ done:
+ tor_free(transport_addrport);
+}
+
/** Given a file name check to see whether the file exists but has not been
* modified for a very long time. If so, remove it. */
void
diff --git a/src/or/config.h b/src/or/config.h
index 4a5afdf17..2d94192d3 100644
--- a/src/or/config.h
+++ b/src/or/config.h
@@ -23,24 +23,24 @@ const char *escaped_safe_str_client(const char *address);
const char *escaped_safe_str(const char *address);
const char *get_version(void);
-int config_get_lines(const char *string, config_line_t **result);
+int config_get_lines(const char *string, config_line_t **result, int extended);
void config_free_lines(config_line_t *front);
setopt_err_t options_trial_assign(config_line_t *list, int use_defaults,
int clear_first, char **msg);
int resolve_my_address(int warn_severity, const or_options_t *options,
uint32_t *addr, char **hostname_out);
-int is_local_addr(const tor_addr_t *addr) ATTR_PURE;
+int is_local_addr(const tor_addr_t *addr);
void options_init(or_options_t *options);
char *options_dump(const or_options_t *options, int minimal);
int options_init_from_torrc(int argc, char **argv);
-setopt_err_t options_init_from_string(const char *cf,
+setopt_err_t options_init_from_string(const char *cf_defaults, const char *cf,
int command, const char *command_arg, char **msg);
int option_is_recognized(const char *key);
const char *option_get_canonical_name(const char *key);
config_line_t *option_get_assignment(const or_options_t *options,
const char *key);
int options_save_current(void);
-const char *get_torrc_fname(void);
+const char *get_torrc_fname(int defaults_fname);
char *options_get_datadir_fname2_suffix(const or_options_t *options,
const char *sub1, const char *sub2,
const char *suffix);
@@ -64,10 +64,21 @@ or_state_t *get_or_state(void);
int did_last_state_file_write_fail(void);
int or_state_save(time_t now);
-const smartlist_t *get_configured_client_ports(void);
+const smartlist_t *get_configured_ports(void);
+int get_first_advertised_port_by_type_af(int listener_type,
+ int address_family);
+#define get_primary_or_port() \
+ (get_first_advertised_port_by_type_af(CONN_TYPE_OR_LISTENER, AF_INET))
+#define get_primary_dir_port() \
+ (get_first_advertised_port_by_type_af(CONN_TYPE_DIR_LISTENER, AF_INET))
int options_need_geoip_info(const or_options_t *options,
const char **reason_out);
+
+void save_transport_to_state(const char *transport_name,
+ const tor_addr_t *addr, uint16_t port);
+const char *get_bindaddr_for_transport(const char *transport);
+
int getinfo_helper_config(control_connection_t *conn,
const char *question, char **answer,
const char **errmsg);
diff --git a/src/or/connection.c b/src/or/connection.c
index 790383b18..7b95acac6 100644
--- a/src/or/connection.c
+++ b/src/or/connection.c
@@ -140,10 +140,13 @@ conn_state_to_string(int type, int state)
case OR_CONN_STATE_PROXY_HANDSHAKING: return "handshaking (proxy)";
case OR_CONN_STATE_TLS_HANDSHAKING: return "handshaking (TLS)";
case OR_CONN_STATE_TLS_CLIENT_RENEGOTIATING:
- return "renegotiating (TLS)";
+ return "renegotiating (TLS, v2 handshake)";
case OR_CONN_STATE_TLS_SERVER_RENEGOTIATING:
- return "waiting for renegotiation (TLS)";
- case OR_CONN_STATE_OR_HANDSHAKING: return "handshaking (Tor)";
+ return "waiting for renegotiation or V3 handshake";
+ case OR_CONN_STATE_OR_HANDSHAKING_V2:
+ return "handshaking (Tor, v2 handshake)";
+ case OR_CONN_STATE_OR_HANDSHAKING_V3:
+ return "handshaking (Tor, v3 handshake)";
case OR_CONN_STATE_OPEN: return "open";
}
break;
@@ -877,7 +880,8 @@ connection_create_listener(const struct sockaddr *listensockaddr,
return NULL;
}
- if (listensockaddr->sa_family == AF_INET) {
+ if (listensockaddr->sa_family == AF_INET ||
+ listensockaddr->sa_family == AF_INET6) {
int is_tcp = (type != CONN_TYPE_AP_DNS_LISTENER);
if (is_tcp)
start_reading = 1;
@@ -887,11 +891,12 @@ connection_create_listener(const struct sockaddr *listensockaddr,
log_notice(LD_NET, "Opening %s on %s:%d",
conn_type_to_string(type), fmt_addr(&addr), usePort);
- s = tor_open_socket(PF_INET,
+ s = tor_open_socket(tor_addr_family(&addr),
is_tcp ? SOCK_STREAM : SOCK_DGRAM,
is_tcp ? IPPROTO_TCP: IPPROTO_UDP);
if (!SOCKET_OK(s)) {
- log_warn(LD_NET,"Socket creation failed.");
+ log_warn(LD_NET,"Socket creation failed: %s",
+ tor_socket_strerror(tor_socket_errno(-1)));
goto err;
}
@@ -992,6 +997,8 @@ connection_create_listener(const struct sockaddr *listensockaddr,
tor_close_socket(s);
goto err;
}
+#else
+ (void)options;
#endif /* HAVE_SYS_UN_H */
} else {
log_err(LD_BUG,"Got unexpected address family %d.",
@@ -1312,6 +1319,24 @@ connection_connect(connection_t *conn, const char *address,
else
protocol_family = PF_INET;
+ if (get_options()->DisableNetwork) {
+ /* We should never even try to connect anyplace if DisableNetwork is set.
+ * Warn if we do, and refuse to make the connection. */
+ static ratelim_t disablenet_violated = RATELIM_INIT(30*60);
+ char *m;
+#ifdef MS_WINDOWS
+ *socket_error = WSAENETUNREACH;
+#else
+ *socket_error = ENETUNREACH;
+#endif
+ if ((m = rate_limit_log(&disablenet_violated, approx_time()))) {
+ log_warn(LD_BUG, "Tried to open a socket with DisableNetwork set.%s", m);
+ tor_free(m);
+ }
+ tor_fragile_assert();
+ return -1;
+ }
+
s = tor_open_socket(protocol_family,SOCK_STREAM,IPPROTO_TCP);
if (s < 0) {
*socket_error = tor_socket_errno(-1);
@@ -1790,6 +1815,9 @@ retry_listener_ports(smartlist_t *old_conns,
(conn->socket_family == AF_UNIX && ! wanted->is_unix_addr))
continue;
+ if (wanted->no_listen)
+ continue; /* We don't want to open a listener for this one */
+
if (wanted->is_unix_addr) {
if (conn->socket_family == AF_UNIX &&
!strcmp(wanted->unix_addr, conn->address)) {
@@ -1828,6 +1856,8 @@ retry_listener_ports(smartlist_t *old_conns,
connection_t *conn;
int real_port = port->port == CFG_AUTO_PORT ? 0 : port->port;
tor_assert(real_port <= UINT16_MAX);
+ if (port->no_listen)
+ continue;
if (port->is_unix_addr) {
listensockaddr = (struct sockaddr *)
@@ -1864,82 +1894,6 @@ retry_listener_ports(smartlist_t *old_conns,
return r;
}
-/**
- * Launch any configured listener connections of type <b>type</b>. (A
- * listener is configured if <b>port_option</b> is non-zero. If any
- * ListenAddress configuration options are given in <b>cfg</b>, create a
- * connection binding to each one. Otherwise, create a single
- * connection binding to the address <b>default_addr</b>.)
- *
- * We assume that we're starting with a list of existing listener connection_t
- * pointers in <b>old_conns</b>: we do not launch listeners that are already
- * in that list. Instead, we just remove them from the list.
- *
- * All new connections we launch are added to <b>new_conns</b>.
- */
-static int
-retry_listeners(smartlist_t *old_conns,
- int type, const config_line_t *cfg,
- int port_option, const char *default_addr,
- smartlist_t *new_conns,
- int is_sockaddr_un)
-{
- smartlist_t *ports = smartlist_create();
- tor_addr_t dflt_addr;
- int retval = 0;
-
- if (default_addr) {
- tor_addr_from_str(&dflt_addr, default_addr);
- } else {
- tor_addr_make_unspec(&dflt_addr);
- }
-
- if (port_option) {
- if (!cfg) {
- port_cfg_t *port = tor_malloc_zero(sizeof(port_cfg_t));
- tor_addr_copy(&port->addr, &dflt_addr);
- port->port = port_option;
- port->type = type;
- smartlist_add(ports, port);
- } else {
- const config_line_t *c;
- for (c = cfg; c; c = c->next) {
- port_cfg_t *port;
- tor_addr_t addr;
- uint16_t portval = 0;
- if (is_sockaddr_un) {
- size_t len = strlen(c->value);
- port = tor_malloc_zero(sizeof(port_cfg_t) + len + 1);
- port->is_unix_addr = 1;
- memcpy(port->unix_addr, c->value, len+1);
- } else {
- if (tor_addr_port_parse(c->value, &addr, &portval) < 0) {
- log_warn(LD_CONFIG, "Can't parse/resolve %s %s",
- c->key, c->value);
- retval = -1;
- continue;
- }
- port = tor_malloc_zero(sizeof(port_cfg_t));
- tor_addr_copy(&port->addr, &addr);
- }
- port->type = type;
- port->port = portval ? portval : port_option;
- smartlist_add(ports, port);
- }
- }
- }
-
- if (retval == -1)
- goto cleanup;
-
- retval = retry_listener_ports(old_conns, ports, new_conns);
-
- cleanup:
- SMARTLIST_FOREACH(ports, port_cfg_t *, p, tor_free(p));
- smartlist_free(ports);
- return retval;
-}
-
/** Launch listeners for each port you should have open. Only launch
* listeners who are not already open, and only close listeners we no longer
* want.
@@ -1962,35 +1916,10 @@ retry_all_listeners(smartlist_t *replaced_conns,
smartlist_add(listeners, conn);
} SMARTLIST_FOREACH_END(conn);
- if (! options->ClientOnly) {
- if (retry_listeners(listeners,
- CONN_TYPE_OR_LISTENER, options->ORListenAddress,
- options->ORPort, "0.0.0.0",
- new_conns, 0) < 0)
- retval = -1;
- if (retry_listeners(listeners,
- CONN_TYPE_DIR_LISTENER, options->DirListenAddress,
- options->DirPort, "0.0.0.0",
- new_conns, 0) < 0)
- retval = -1;
- }
-
if (retry_listener_ports(listeners,
- get_configured_client_ports(),
+ get_configured_ports(),
new_conns) < 0)
retval = -1;
- if (retry_listeners(listeners,
- CONN_TYPE_CONTROL_LISTENER,
- options->ControlListenAddress,
- options->ControlPort, "127.0.0.1",
- new_conns, 0) < 0)
- return -1;
- if (retry_listeners(listeners,
- CONN_TYPE_CONTROL_LISTENER,
- options->ControlSocket,
- options->ControlSocket ? 1 : 0, NULL,
- new_conns, 1) < 0)
- return -1;
/* Any members that were still in 'listeners' don't correspond to
* any configured port. Kill 'em. */
@@ -2007,6 +1936,7 @@ retry_all_listeners(smartlist_t *replaced_conns,
smartlist_free(listeners);
+ /* XXXprop186 should take all advertised ports into account */
if (old_or_port != router_get_advertised_or_port(options) ||
old_dir_port != router_get_advertised_dir_port(options, 0)) {
/* Our chosen ORPort or DirPort is not what it used to be: the
@@ -2019,9 +1949,49 @@ retry_all_listeners(smartlist_t *replaced_conns,
return retval;
}
-/** Return 1 if we should apply rate limiting to <b>conn</b>,
- * and 0 otherwise. Right now this just checks if it's an internal
- * IP address or an internal connection. */
+/** Mark every listener of type other than CONTROL_LISTENER to be closed. */
+void
+connection_mark_all_noncontrol_listeners(void)
+{
+ SMARTLIST_FOREACH_BEGIN(get_connection_array(), connection_t *, conn) {
+ if (conn->marked_for_close)
+ continue;
+ if (conn->type == CONN_TYPE_CONTROL_LISTENER)
+ continue;
+ if (connection_is_listener(conn))
+ connection_mark_for_close(conn);
+ } SMARTLIST_FOREACH_END(conn);
+}
+
+/** Mark every external conection not used for controllers for close. */
+void
+connection_mark_all_noncontrol_connections(void)
+{
+ SMARTLIST_FOREACH_BEGIN(get_connection_array(), connection_t *, conn) {
+ if (conn->marked_for_close)
+ continue;
+ switch (conn->type) {
+ case CONN_TYPE_CPUWORKER:
+ case CONN_TYPE_CONTROL_LISTENER:
+ case CONN_TYPE_CONTROL:
+ break;
+ case CONN_TYPE_AP:
+ connection_mark_unattached_ap(TO_ENTRY_CONN(conn),
+ END_STREAM_REASON_HIBERNATING);
+ break;
+ default:
+ connection_mark_for_close(conn);
+ break;
+ }
+ } SMARTLIST_FOREACH_END(conn);
+}
+
+/** Return 1 if we should apply rate limiting to <b>conn</b>, and 0
+ * otherwise.
+ * Right now this just checks if it's an internal IP address or an
+ * internal connection. We also check if the connection uses pluggable
+ * transports, since we should then limit it even if it comes from an
+ * internal IP address. */
static int
connection_is_rate_limited(connection_t *conn)
{
@@ -2387,22 +2357,23 @@ connection_bucket_init(void)
}
}
-/** Refill a single <b>bucket</b> called <b>name</b> with bandwidth rate
- * <b>rate</b> and bandwidth burst <b>burst</b>, assuming that
- * <b>seconds_elapsed</b> seconds have passed since the last call.
- **/
+/** Refill a single <b>bucket</b> called <b>name</b> with bandwidth rate per
+ * second <b>rate</b> and bandwidth burst <b>burst</b>, assuming that
+ * <b>milliseconds_elapsed</b> milliseconds have passed since the last
+ * call. */
static void
connection_bucket_refill_helper(int *bucket, int rate, int burst,
- int seconds_elapsed, const char *name)
+ int milliseconds_elapsed,
+ const char *name)
{
int starting_bucket = *bucket;
- if (starting_bucket < burst && seconds_elapsed) {
- if (((burst - starting_bucket)/seconds_elapsed) < rate) {
+ if (starting_bucket < burst && milliseconds_elapsed > 0) {
+ int64_t incr = (((int64_t)rate) * milliseconds_elapsed) / 1000;
+ if ((burst - starting_bucket) < incr) {
*bucket = burst; /* We would overflow the bucket; just set it to
* the maximum. */
} else {
- int incr = rate*seconds_elapsed;
- *bucket += incr;
+ *bucket += (int)incr;
if (*bucket > burst || *bucket < starting_bucket) {
/* If we overflow the burst, or underflow our starting bucket,
* cap the bucket value to burst. */
@@ -2415,41 +2386,46 @@ connection_bucket_refill_helper(int *bucket, int rate, int burst,
}
}
-/** A second has rolled over; increment buckets appropriately. */
+/** Time has passed; increment buckets appropriately. */
void
-connection_bucket_refill(int seconds_elapsed, time_t now)
+connection_bucket_refill(int milliseconds_elapsed, time_t now)
{
const or_options_t *options = get_options();
smartlist_t *conns = get_connection_array();
- int relayrate, relayburst;
+ int bandwidthrate, bandwidthburst, relayrate, relayburst;
+
+ bandwidthrate = (int)options->BandwidthRate;
+ bandwidthburst = (int)options->BandwidthBurst;
if (options->RelayBandwidthRate) {
relayrate = (int)options->RelayBandwidthRate;
relayburst = (int)options->RelayBandwidthBurst;
} else {
- relayrate = (int)options->BandwidthRate;
- relayburst = (int)options->BandwidthBurst;
+ relayrate = bandwidthrate;
+ relayburst = bandwidthburst;
}
- tor_assert(seconds_elapsed >= 0);
+ tor_assert(milliseconds_elapsed >= 0);
write_buckets_empty_last_second =
global_relayed_write_bucket <= 0 || global_write_bucket <= 0;
/* refill the global buckets */
connection_bucket_refill_helper(&global_read_bucket,
- (int)options->BandwidthRate,
- (int)options->BandwidthBurst,
- seconds_elapsed, "global_read_bucket");
+ bandwidthrate, bandwidthburst,
+ milliseconds_elapsed,
+ "global_read_bucket");
connection_bucket_refill_helper(&global_write_bucket,
- (int)options->BandwidthRate,
- (int)options->BandwidthBurst,
- seconds_elapsed, "global_write_bucket");
+ bandwidthrate, bandwidthburst,
+ milliseconds_elapsed,
+ "global_write_bucket");
connection_bucket_refill_helper(&global_relayed_read_bucket,
- relayrate, relayburst, seconds_elapsed,
+ relayrate, relayburst,
+ milliseconds_elapsed,
"global_relayed_read_bucket");
connection_bucket_refill_helper(&global_relayed_write_bucket,
- relayrate, relayburst, seconds_elapsed,
+ relayrate, relayburst,
+ milliseconds_elapsed,
"global_relayed_write_bucket");
/* refill the per-connection buckets */
@@ -2457,18 +2433,20 @@ connection_bucket_refill(int seconds_elapsed, time_t now)
{
if (connection_speaks_cells(conn)) {
or_connection_t *or_conn = TO_OR_CONN(conn);
+ int orbandwidthrate = or_conn->bandwidthrate;
+ int orbandwidthburst = or_conn->bandwidthburst;
if (connection_bucket_should_increase(or_conn->read_bucket, or_conn)) {
connection_bucket_refill_helper(&or_conn->read_bucket,
- or_conn->bandwidthrate,
- or_conn->bandwidthburst,
- seconds_elapsed,
+ orbandwidthrate,
+ orbandwidthburst,
+ milliseconds_elapsed,
"or_conn->read_bucket");
}
if (connection_bucket_should_increase(or_conn->write_bucket, or_conn)) {
connection_bucket_refill_helper(&or_conn->write_bucket,
- or_conn->bandwidthrate,
- or_conn->bandwidthburst,
- seconds_elapsed,
+ orbandwidthrate,
+ orbandwidthburst,
+ milliseconds_elapsed,
"or_conn->write_bucket");
}
}
@@ -2552,7 +2530,10 @@ connection_bucket_init(void)
burst = options->BandwidthBurst;
}
- rate /= TOR_LIBEVENT_TICKS_PER_SECOND;
+ /* This can't overflow, since TokenBucketRefillInterval <= 1000,
+ * and rate started out less than INT32_MAX. */
+ rate = (rate * options->TokenBucketRefillInterval) / 1000;
+
bucket_cfg = ev_token_bucket_cfg_new((uint32_t)rate, (uint32_t)burst,
(uint32_t)rate, (uint32_t)burst,
tick);
diff --git a/src/or/connection.h b/src/or/connection.h
index 9f1148972..c4b8bf8ab 100644
--- a/src/or/connection.h
+++ b/src/or/connection.h
@@ -66,6 +66,9 @@ int get_proxy_addrport(tor_addr_t *addr, uint16_t *port, int *proxy_type,
int retry_all_listeners(smartlist_t *replaced_conns,
smartlist_t *new_conns);
+void connection_mark_all_noncontrol_listeners(void);
+void connection_mark_all_noncontrol_connections(void);
+
ssize_t connection_bucket_write_limit(connection_t *conn, time_t now);
int global_write_bucket_low(connection_t *conn, size_t attempt, int priority);
void connection_bucket_init(void);
diff --git a/src/or/connection_edge.c b/src/or/connection_edge.c
index 3b6231de8..4fb220642 100644
--- a/src/or/connection_edge.c
+++ b/src/or/connection_edge.c
@@ -68,9 +68,23 @@ _connection_mark_unattached_ap(entry_connection_t *conn, int endreason,
int line, const char *file)
{
connection_t *base_conn = ENTRY_TO_CONN(conn);
+ edge_connection_t *edge_conn = ENTRY_TO_EDGE_CONN(conn);
tor_assert(base_conn->type == CONN_TYPE_AP);
ENTRY_TO_EDGE_CONN(conn)->edge_has_sent_end = 1; /* no circ yet */
+ /* If this is a rendezvous stream and it is failing without ever
+ * being attached to a circuit, assume that an attempt to connect to
+ * the destination hidden service has just ended.
+ *
+ * XXX023 This condition doesn't limit to only streams failing
+ * without ever being attached. That sloppiness should be harmless,
+ * but we should fix it someday anyway. */
+ if ((edge_conn->on_circuit != NULL || edge_conn->edge_has_sent_end) &&
+ connection_edge_is_rendezvous_stream(edge_conn)) {
+ rend_client_note_connection_attempt_ended(
+ edge_conn->rend_data->onion_address);
+ }
+
if (base_conn->marked_for_close) {
/* This call will warn as appropriate. */
_connection_mark_for_close(base_conn, line, file);
@@ -677,7 +691,7 @@ connection_ap_fail_onehop(const char *failed_digest,
if (!build_state || !build_state->chosen_exit ||
!entry_conn->socks_request || !entry_conn->socks_request->address)
continue;
- if (tor_addr_from_str(&addr, entry_conn->socks_request->address)<0 ||
+ if (tor_addr_parse(&addr, entry_conn->socks_request->address)<0 ||
!tor_addr_eq(&build_state->chosen_exit->addr, &addr) ||
build_state->chosen_exit->port != entry_conn->socks_request->port)
continue;
@@ -937,7 +951,10 @@ addressmap_clear_excluded_trackexithosts(const or_options_t *options)
char *nodename;
const node_t *node;
- if (strcmpend(target, ".exit")) {
+ if (!target) {
+ /* DNS resolving in progress */
+ continue;
+ } else if (strcmpend(target, ".exit")) {
/* Not a .exit mapping */
continue;
} else if (ent->source != ADDRMAPSRC_TRACKEXIT) {
@@ -1833,7 +1850,7 @@ connection_ap_handshake_rewrite_and_attach(entry_connection_t *conn,
/* Don't let people try to do a reverse lookup on 10.0.0.1. */
tor_addr_t addr;
int ok;
- ok = tor_addr_parse_reverse_lookup_name(
+ ok = tor_addr_parse_PTR_name(
&addr, socks->address, AF_UNSPEC, 1);
if (ok == 1 && tor_addr_is_internal(&addr, 0)) {
connection_ap_handshake_socks_resolved(conn, RESOLVED_TYPE_ERROR,
@@ -1985,7 +2002,7 @@ connection_ap_handshake_rewrite_and_attach(entry_connection_t *conn,
if (options->ClientRejectInternalAddresses &&
!conn->use_begindir && !conn->chosen_exit_name && !circ) {
tor_addr_t addr;
- if (tor_addr_from_str(&addr, socks->address) >= 0 &&
+ if (tor_addr_parse(&addr, socks->address) >= 0 &&
tor_addr_is_internal(&addr, 0)) {
/* If this is an explicit private address with no chosen exit node,
* then we really don't want to try to connect to it. That's
@@ -2597,7 +2614,7 @@ connection_ap_handshake_send_resolve(entry_connection_t *ap_conn)
/* We're doing a reverse lookup. The input could be an IP address, or
* could be an .in-addr.arpa or .ip6.arpa address */
- r = tor_addr_parse_reverse_lookup_name(&addr, a, AF_INET, 1);
+ r = tor_addr_parse_PTR_name(&addr, a, AF_INET, 1);
if (r <= 0) {
log_warn(LD_APP, "Rejecting ill-formed reverse lookup of %s",
safe_str_client(a));
@@ -2605,7 +2622,7 @@ connection_ap_handshake_send_resolve(entry_connection_t *ap_conn)
return -1;
}
- r = tor_addr_to_reverse_lookup_name(inaddr_buf, sizeof(inaddr_buf), &addr);
+ r = tor_addr_to_PTR_name(inaddr_buf, sizeof(inaddr_buf), &addr);
if (r < 0) {
log_warn(LD_BUG, "Couldn't generate reverse lookup hostname of %s",
safe_str_client(a));
@@ -2657,7 +2674,7 @@ connection_ap_make_link(connection_t *partner,
want_onehop ? "direct" : "anonymized",
safe_str_client(address), port);
- conn = entry_connection_new(CONN_TYPE_AP, AF_INET);
+ conn = entry_connection_new(CONN_TYPE_AP, tor_addr_family(&partner->addr));
base_conn = ENTRY_TO_CONN(conn);
base_conn->linked = 1; /* so that we can add it safely below. */
@@ -2961,9 +2978,9 @@ connection_exit_begin_conn(cell_t *cell, circuit_t *circ)
END_STREAM_REASON_TORPROTOCOL, NULL);
return 0;
}
- if (parse_addr_port(LOG_PROTOCOL_WARN,
- (char*)(cell->payload+RELAY_HEADER_SIZE),
- &address,NULL,&port)<0) {
+ if (tor_addr_port_split(LOG_PROTOCOL_WARN,
+ (char*)(cell->payload+RELAY_HEADER_SIZE),
+ &address,&port)<0) {
log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
"Unable to parse addr:port in relay begin cell. Closing.");
relay_send_end_cell_from_edge(rh.stream_id, circ,
@@ -3263,7 +3280,7 @@ connection_exit_connect_dir(edge_connection_t *exitconn)
exitconn->_base.state = EXIT_CONN_STATE_OPEN;
- dirconn = dir_connection_new(AF_INET);
+ dirconn = dir_connection_new(tor_addr_family(&exitconn->_base.addr));
tor_addr_copy(&dirconn->_base.addr, &exitconn->_base.addr);
dirconn->_base.port = 0;
diff --git a/src/or/connection_or.c b/src/or/connection_or.c
index a75444e1e..470f6d2a3 100644
--- a/src/or/connection_or.c
+++ b/src/or/connection_or.c
@@ -35,15 +35,14 @@
#endif
static int connection_tls_finish_handshake(or_connection_t *conn);
+static int connection_or_launch_v3_or_handshake(or_connection_t *conn);
static int connection_or_process_cells_from_inbuf(or_connection_t *conn);
-static int connection_or_send_versions(or_connection_t *conn);
-static int connection_init_or_handshake_state(or_connection_t *conn,
- int started_here);
static int connection_or_check_valid_tls_handshake(or_connection_t *conn,
int started_here,
char *digest_rcvd_out);
static void connection_or_tls_renegotiated_cb(tor_tls_t *tls, void *_conn);
+static void connection_or_close_connection_cb(void *_conn);
#ifdef USE_BUFFEREVENTS
static void connection_or_handle_event_cb(struct bufferevent *bufev,
@@ -378,8 +377,8 @@ connection_or_process_inbuf(or_connection_t *conn)
}
return ret;
-#ifdef USE_BUFFEREVENTS
case OR_CONN_STATE_TLS_SERVER_RENEGOTIATING:
+#ifdef USE_BUFFEREVENTS
if (tor_tls_server_got_renegotiate(conn->tls))
connection_or_tls_renegotiated_cb(conn->tls, conn);
if (conn->_base.marked_for_close)
@@ -387,7 +386,8 @@ connection_or_process_inbuf(or_connection_t *conn)
/* fall through. */
#endif
case OR_CONN_STATE_OPEN:
- case OR_CONN_STATE_OR_HANDSHAKING:
+ case OR_CONN_STATE_OR_HANDSHAKING_V2:
+ case OR_CONN_STATE_OR_HANDSHAKING_V3:
return connection_or_process_cells_from_inbuf(conn);
default:
return 0; /* don't do anything */
@@ -439,7 +439,8 @@ connection_or_finished_flushing(or_connection_t *conn)
switch (conn->_base.state) {
case OR_CONN_STATE_PROXY_HANDSHAKING:
case OR_CONN_STATE_OPEN:
- case OR_CONN_STATE_OR_HANDSHAKING:
+ case OR_CONN_STATE_OR_HANDSHAKING_V2:
+ case OR_CONN_STATE_OR_HANDSHAKING_V3:
break;
default:
log_err(LD_BUG,"Called in unexpected state %d.", conn->_base.state);
@@ -492,6 +493,9 @@ connection_or_about_to_close(or_connection_t *or_conn)
time_t now = time(NULL);
connection_t *conn = TO_CONN(or_conn);
+ if (or_conn->pending_action)
+ tor_cancel_libevent_action(or_conn->pending_action);
+
/* Remember why we're closing this connection. */
if (conn->state != OR_CONN_STATE_OPEN) {
/* Inform any pending (not attached) circs that they should
@@ -580,7 +584,12 @@ connection_or_update_token_buckets_helper(or_connection_t *conn, int reset,
{
const struct timeval *tick = tor_libevent_get_one_tick_timeout();
struct ev_token_bucket_cfg *cfg, *old_cfg;
- int rate_per_tick = rate / TOR_LIBEVENT_TICKS_PER_SECOND;
+ int64_t rate64 = (((int64_t)rate) * options->TokenBucketRefillInterval)
+ / 1000;
+ /* This can't overflow, since TokenBucketRefillInterval <= 1000,
+ * and rate started out less than INT_MAX. */
+ int rate_per_tick = (int) rate64;
+
cfg = ev_token_bucket_cfg_new(rate_per_tick, burst, rate_per_tick,
burst, tick);
old_cfg = conn->bucket_cfg;
@@ -621,8 +630,10 @@ connection_or_update_token_buckets(smartlist_t *conns,
/** If we don't necessarily know the router we're connecting to, but we
* have an addr/port/id_digest, then fill in as much as we can. Start
- * by checking to see if this describes a router we know. */
-static void
+ * by checking to see if this describes a router we know.
+ * <b>started_here</b> is 1 if we are the initiator of <b>conn</b> and
+ * 0 if it's an incoming connection. */
+void
connection_or_init_conn_from_address(or_connection_t *conn,
const tor_addr_t *addr, uint16_t port,
const char *id_digest,
@@ -636,10 +647,11 @@ connection_or_init_conn_from_address(or_connection_t *conn,
tor_addr_copy(&conn->_base.addr, addr);
tor_addr_copy(&conn->real_addr, addr);
if (r) {
- tor_addr_t node_addr;
- node_get_addr(r, &node_addr);
- /* XXXX proposal 118 will make this more complex. */
- if (tor_addr_eq(&conn->_base.addr, &node_addr))
+ tor_addr_port_t node_ap;
+ node_get_pref_orport(r, &node_ap);
+ /* XXXX proposal 186 is making this more complex. For now, a conn
+ is canonical when it uses the _preferred_ address. */
+ if (tor_addr_eq(&conn->_base.addr, &node_ap.addr))
conn->is_canonical = 1;
if (!started_here) {
/* Override the addr/port, so our log messages will make sense.
@@ -652,12 +664,12 @@ connection_or_init_conn_from_address(or_connection_t *conn,
* right IP address and port 56244, that wouldn't be as helpful. now we
* log the "right" port too, so we know if it's moria1 or moria2.
*/
- tor_addr_copy(&conn->_base.addr, &node_addr);
- conn->_base.port = node_get_orport(r);
+ tor_addr_copy(&conn->_base.addr, &node_ap.addr);
+ conn->_base.port = node_ap.port;
}
conn->nickname = tor_strdup(node_get_nickname(r));
tor_free(conn->_base.address);
- conn->_base.address = tor_dup_addr(&node_addr);
+ conn->_base.address = tor_dup_addr(&node_ap.addr);
} else {
const char *n;
/* If we're an authoritative directory server, we may know a
@@ -762,6 +774,11 @@ connection_or_get_for_extend(const char *digest,
tor_assert(tor_memeq(conn->identity_digest, digest, DIGEST_LEN));
if (conn->_base.marked_for_close)
continue;
+ /* Never return a connection on which the other end appears to be
+ * a client. */
+ if (conn->is_connection_with_client) {
+ continue;
+ }
/* Never return a non-open connection. */
if (conn->_base.state != OR_CONN_STATE_OPEN) {
/* If the address matches, don't launch a new connection for this
@@ -1019,13 +1036,15 @@ connection_or_connect(const tor_addr_t *_addr, uint16_t port,
return NULL;
}
- conn = or_connection_new(AF_INET);
+ conn = or_connection_new(tor_addr_family(&addr));
/* set up conn so it's got all the data we need to remember */
connection_or_init_conn_from_address(conn, &addr, port, id_digest, 1);
conn->_base.state = OR_CONN_STATE_CONNECTING;
control_event_or_conn_status(conn, OR_CONN_EVENT_LAUNCHED, 0);
+ conn->is_outgoing = 1;
+
/* If we are using a proxy server, find it and use it. */
r = get_proxy_addrport(&proxy_addr, &proxy_port, &proxy_type, TO_CONN(conn));
if (r == 0) {
@@ -1084,12 +1103,16 @@ connection_tls_start_handshake(or_connection_t *conn, int receiving)
conn->_base.state = OR_CONN_STATE_TLS_HANDSHAKING;
tor_assert(!conn->tls);
conn->tls = tor_tls_new(conn->_base.s, receiving);
- tor_tls_set_logged_address(conn->tls, // XXX client and relay?
- escaped_safe_str(conn->_base.address));
if (!conn->tls) {
log_warn(LD_BUG,"tor_tls_new failed. Closing.");
return -1;
}
+ tor_tls_set_logged_address(conn->tls, // XXX client and relay?
+ escaped_safe_str(conn->_base.address));
+ tor_tls_set_renegotiate_callbacks(conn->tls,
+ connection_or_tls_renegotiated_cb,
+ connection_or_close_connection_cb,
+ conn);
#ifdef USE_BUFFEREVENTS
if (connection_type_uses_bufferevent(TO_CONN(conn))) {
const int filtering = get_options()->_UseFilteringSSLBufferevents;
@@ -1134,10 +1157,6 @@ connection_or_tls_renegotiated_cb(tor_tls_t *tls, void *_conn)
or_connection_t *conn = _conn;
(void)tls;
- /* Don't invoke this again. */
- tor_tls_set_renegotiate_callback(tls, NULL, NULL);
- tor_tls_block_renegotiation(tls);
-
if (connection_tls_finish_handshake(conn) < 0) {
/* XXXX_TLS double-check that it's ok to do this from inside read. */
/* XXXX_TLS double-check that this verifies certificates. */
@@ -1145,6 +1164,34 @@ connection_or_tls_renegotiated_cb(tor_tls_t *tls, void *_conn)
}
}
+/*DOCDOC*/
+static void
+close_connection_libevent_cb(void *_conn)
+{
+ or_connection_t *or_conn = _conn;
+ connection_t *conn = TO_CONN(or_conn);
+
+ or_conn->pending_action = NULL;
+
+ connection_stop_reading(conn);
+ if (!conn->marked_for_close)
+ connection_mark_for_close(conn);
+}
+
+/* DOCDOC */
+static void
+connection_or_close_connection_cb(void *_conn)
+{
+ /* We can't close their connection from in here since it's an OpenSSL
+ callback, so we set a libevent event that triggers in the next event
+ loop and closes the connection. */
+ or_connection_t *or_conn = _conn;
+ if (or_conn->_base.marked_for_close || or_conn->pending_action)
+ return;
+ or_conn->pending_action =
+ tor_run_in_libevent_loop(close_connection_libevent_cb, or_conn);
+}
+
/** Move forward with the tls handshake. If it finishes, hand
* <b>conn</b> to connection_tls_finish_handshake().
*
@@ -1175,19 +1222,22 @@ connection_tls_continue_handshake(or_connection_t *conn)
if (! tor_tls_used_v1_handshake(conn->tls)) {
if (!tor_tls_is_server(conn->tls)) {
if (conn->_base.state == OR_CONN_STATE_TLS_HANDSHAKING) {
- log_debug(LD_OR, "Done with initial SSL handshake (client-side). "
- "Requesting renegotiation.");
- conn->_base.state = OR_CONN_STATE_TLS_CLIENT_RENEGOTIATING;
- goto again;
+ if (tor_tls_received_v3_certificate(conn->tls)) {
+ log_info(LD_OR, "Client got a v3 cert! Moving on to v3 "
+ "handshake.");
+ return connection_or_launch_v3_or_handshake(conn);
+ } else {
+ log_debug(LD_OR, "Done with initial SSL handshake (client-side)."
+ " Requesting renegotiation.");
+ conn->_base.state = OR_CONN_STATE_TLS_CLIENT_RENEGOTIATING;
+ goto again;
+ }
}
// log_notice(LD_OR,"Done. state was %d.", conn->_base.state);
} else {
- /* improved handshake, but not a client. */
+ /* v2/v3 handshake, but not a client. */
log_debug(LD_OR, "Done with initial SSL handshake (server-side). "
- "Expecting renegotiation.");
- tor_tls_set_renegotiate_callback(conn->tls,
- connection_or_tls_renegotiated_cb,
- conn);
+ "Expecting renegotiation or VERSIONS cell");
conn->_base.state = OR_CONN_STATE_TLS_SERVER_RENEGOTIATING;
connection_stop_writing(TO_CONN(conn));
connection_start_reading(TO_CONN(conn));
@@ -1229,21 +1279,25 @@ connection_or_handle_event_cb(struct bufferevent *bufev, short event,
if (! tor_tls_used_v1_handshake(conn->tls)) {
if (!tor_tls_is_server(conn->tls)) {
if (conn->_base.state == OR_CONN_STATE_TLS_HANDSHAKING) {
- conn->_base.state = OR_CONN_STATE_TLS_CLIENT_RENEGOTIATING;
- tor_tls_unblock_renegotiation(conn->tls);
- if (bufferevent_ssl_renegotiate(conn->_base.bufev)<0) {
- log_warn(LD_OR, "Start_renegotiating went badly.");
- connection_mark_for_close(TO_CONN(conn));
+ if (tor_tls_received_v3_certificate(conn->tls)) {
+ log_info(LD_OR, "Client got a v3 cert!");
+ if (connection_or_launch_v3_or_handshake(conn) < 0)
+ connection_mark_for_close(TO_CONN(conn));
+ return;
+ } else {
+ conn->_base.state = OR_CONN_STATE_TLS_CLIENT_RENEGOTIATING;
+ tor_tls_unblock_renegotiation(conn->tls);
+ if (bufferevent_ssl_renegotiate(conn->_base.bufev)<0) {
+ log_warn(LD_OR, "Start_renegotiating went badly.");
+ connection_mark_for_close(TO_CONN(conn));
+ }
+ tor_tls_unblock_renegotiation(conn->tls);
+ return; /* ???? */
}
- tor_tls_unblock_renegotiation(conn->tls);
- return; /* ???? */
}
} else if (tor_tls_get_num_server_handshakes(conn->tls) == 1) {
- /* improved handshake, as a server. Only got one handshake, so
+ /* v2 or v3 handshake, as a server. Only got one handshake, so
* wait for the next one. */
- tor_tls_set_renegotiate_callback(conn->tls,
- connection_or_tls_renegotiated_cb,
- conn);
conn->_base.state = OR_CONN_STATE_TLS_SERVER_RENEGOTIATING;
/* return 0; */
return; /* ???? */
@@ -1251,7 +1305,7 @@ connection_or_handle_event_cb(struct bufferevent *bufev, short event,
const int handshakes = tor_tls_get_num_server_handshakes(conn->tls);
tor_assert(handshakes >= 2);
if (handshakes == 2) {
- /* improved handshake, as a server. Two handshakes happened already,
+ /* v2 handshake, as a server. Two handshakes happened already,
* so we treat renegotiation as done.
*/
connection_or_tls_renegotiated_cb(conn->tls, conn);
@@ -1295,6 +1349,29 @@ connection_or_nonopen_was_started_here(or_connection_t *conn)
return !tor_tls_is_server(conn->tls);
}
+/** Set the circid_type field of <b>conn</b> (which determines which part of
+ * the circuit ID space we're willing to use) based on comparing our ID to
+ * <b>identity_rcvd</b> */
+void
+connection_or_set_circid_type(or_connection_t *conn,
+ crypto_pk_env_t *identity_rcvd)
+{
+ const int started_here = connection_or_nonopen_was_started_here(conn);
+ crypto_pk_env_t *our_identity =
+ started_here ? get_tlsclient_identity_key() :
+ get_server_identity_key();
+
+ if (identity_rcvd) {
+ if (crypto_pk_cmp_keys(our_identity, identity_rcvd)<0) {
+ conn->circ_id_type = CIRC_ID_TYPE_LOWER;
+ } else {
+ conn->circ_id_type = CIRC_ID_TYPE_HIGHER;
+ }
+ } else {
+ conn->circ_id_type = CIRC_ID_TYPE_NEITHER;
+ }
+}
+
/** <b>Conn</b> just completed its handshake. Return 0 if all is well, and
* return -1 if he is lying, broken, or otherwise something is wrong.
*
@@ -1332,10 +1409,7 @@ connection_or_check_valid_tls_handshake(or_connection_t *conn,
started_here ? conn->_base.address :
safe_str_client(conn->_base.address);
const char *conn_type = started_here ? "outgoing" : "incoming";
- crypto_pk_env_t *our_identity =
- started_here ? get_tlsclient_identity_key() :
- get_server_identity_key();
- int has_cert = 0, has_identity=0;
+ int has_cert = 0;
check_no_tls_errors();
has_cert = tor_tls_peer_has_cert(conn->tls);
@@ -1370,21 +1444,46 @@ connection_or_check_valid_tls_handshake(or_connection_t *conn,
}
if (identity_rcvd) {
- has_identity = 1;
crypto_pk_get_digest(identity_rcvd, digest_rcvd_out);
- if (crypto_pk_cmp_keys(our_identity, identity_rcvd)<0) {
- conn->circ_id_type = CIRC_ID_TYPE_LOWER;
- } else {
- conn->circ_id_type = CIRC_ID_TYPE_HIGHER;
- }
- crypto_free_pk_env(identity_rcvd);
} else {
memset(digest_rcvd_out, 0, DIGEST_LEN);
- conn->circ_id_type = CIRC_ID_TYPE_NEITHER;
}
- if (started_here && tor_digest_is_zero(conn->identity_digest)) {
- connection_or_set_identity_digest(conn, digest_rcvd_out);
+ connection_or_set_circid_type(conn, identity_rcvd);
+ crypto_free_pk_env(identity_rcvd);
+
+ if (started_here)
+ return connection_or_client_learned_peer_id(conn,
+ (const uint8_t*)digest_rcvd_out);
+
+ return 0;
+}
+
+/** Called when we (as a connection initiator) have definitively,
+ * authenticatedly, learned that ID of the Tor instance on the other
+ * side of <b>conn</b> is <b>peer_id</b>. For v1 and v2 handshakes,
+ * this is right after we get a certificate chain in a TLS handshake
+ * or renegotiation. For v3 handshakes, this is right after we get a
+ * certificate chain in a CERTS cell.
+ *
+ * If we want any particular ID before, record the one we got.
+ *
+ * If we wanted an ID, but we didn't get it, log a warning and return -1.
+ *
+ * If we're testing reachability, remember what we learned.
+ *
+ * Return 0 on success, -1 on failure.
+ */
+int
+connection_or_client_learned_peer_id(or_connection_t *conn,
+ const uint8_t *peer_id)
+{
+ int as_expected = 1;
+ const or_options_t *options = get_options();
+ int severity = server_mode(options) ? LOG_PROTOCOL_WARN : LOG_WARN;
+
+ if (tor_digest_is_zero(conn->identity_digest)) {
+ connection_or_set_identity_digest(conn, (const char*)peer_id);
tor_free(conn->nickname);
conn->nickname = tor_malloc(HEX_DIGEST_LEN+2);
conn->nickname[0] = '$';
@@ -1396,43 +1495,39 @@ connection_or_check_valid_tls_handshake(or_connection_t *conn,
/* if it's a bridge and we didn't know its identity fingerprint, now
* we do -- remember it for future attempts. */
learned_router_identity(&conn->_base.addr, conn->_base.port,
- digest_rcvd_out);
+ (const char*)peer_id);
}
- if (started_here) {
- int as_advertised = 1;
- tor_assert(has_cert);
- tor_assert(has_identity);
- if (tor_memneq(digest_rcvd_out, conn->identity_digest, DIGEST_LEN)) {
- /* I was aiming for a particular digest. I didn't get it! */
- char seen[HEX_DIGEST_LEN+1];
- char expected[HEX_DIGEST_LEN+1];
- base16_encode(seen, sizeof(seen), digest_rcvd_out, DIGEST_LEN);
- base16_encode(expected, sizeof(expected), conn->identity_digest,
- DIGEST_LEN);
- log_fn(severity, LD_HANDSHAKE,
- "Tried connecting to router at %s:%d, but identity key was not "
- "as expected: wanted %s but got %s.",
- conn->_base.address, conn->_base.port, expected, seen);
- entry_guard_register_connect_status(conn->identity_digest, 0, 1,
- time(NULL));
- control_event_or_conn_status(conn, OR_CONN_EVENT_FAILED,
- END_OR_CONN_REASON_OR_IDENTITY);
- if (!authdir_mode_tests_reachability(options))
- control_event_bootstrap_problem("foo", END_OR_CONN_REASON_OR_IDENTITY);
- as_advertised = 0;
- }
- if (authdir_mode_tests_reachability(options)) {
- dirserv_orconn_tls_done(conn->_base.address, conn->_base.port,
- digest_rcvd_out, as_advertised);
- }
- if (!as_advertised)
- return -1;
+ if (tor_memneq(peer_id, conn->identity_digest, DIGEST_LEN)) {
+ /* I was aiming for a particular digest. I didn't get it! */
+ char seen[HEX_DIGEST_LEN+1];
+ char expected[HEX_DIGEST_LEN+1];
+ base16_encode(seen, sizeof(seen), (const char*)peer_id, DIGEST_LEN);
+ base16_encode(expected, sizeof(expected), conn->identity_digest,
+ DIGEST_LEN);
+ log_fn(severity, LD_HANDSHAKE,
+ "Tried connecting to router at %s:%d, but identity key was not "
+ "as expected: wanted %s but got %s.",
+ conn->_base.address, conn->_base.port, expected, seen);
+ entry_guard_register_connect_status(conn->identity_digest, 0, 1,
+ time(NULL));
+ control_event_or_conn_status(conn, OR_CONN_EVENT_FAILED,
+ END_OR_CONN_REASON_OR_IDENTITY);
+ if (!authdir_mode_tests_reachability(options))
+ control_event_bootstrap_problem("foo", END_OR_CONN_REASON_OR_IDENTITY);
+ as_expected = 0;
+ }
+ if (authdir_mode_tests_reachability(options)) {
+ dirserv_orconn_tls_done(conn->_base.address, conn->_base.port,
+ (const char*)peer_id, as_expected);
}
+ if (!as_expected)
+ return -1;
+
return 0;
}
-/** The tls handshake is finished.
+/** The v1/v2 TLS handshake is finished.
*
* Make sure we are happy with the person we just handshaked with.
*
@@ -1442,6 +1537,8 @@ connection_or_check_valid_tls_handshake(or_connection_t *conn,
* If all is successful, call circuit_n_conn_done() to handle events
* that have been pending on the <tls handshake completion. Also set the
* directory to be dirty (only matters if I'm an authdirserver).
+ *
+ * If this is a v2 TLS handshake, send a versions cell.
*/
static int
connection_tls_finish_handshake(or_connection_t *conn)
@@ -1468,28 +1565,50 @@ connection_tls_finish_handshake(or_connection_t *conn)
connection_or_init_conn_from_address(conn, &conn->_base.addr,
conn->_base.port, digest_rcvd, 0);
}
- tor_tls_block_renegotiation(conn->tls);
return connection_or_set_state_open(conn);
} else {
- conn->_base.state = OR_CONN_STATE_OR_HANDSHAKING;
+ conn->_base.state = OR_CONN_STATE_OR_HANDSHAKING_V2;
if (connection_init_or_handshake_state(conn, started_here) < 0)
return -1;
if (!started_here) {
connection_or_init_conn_from_address(conn, &conn->_base.addr,
conn->_base.port, digest_rcvd, 0);
}
- return connection_or_send_versions(conn);
+ return connection_or_send_versions(conn, 0);
}
}
+/**
+ * Called as client when initial TLS handshake is done, and we notice
+ * that we got a v3-handshake signalling certificate from the server.
+ * Set up structures, do bookkeeping, and send the versions cell.
+ * Return 0 on success and -1 on failure.
+ */
+static int
+connection_or_launch_v3_or_handshake(or_connection_t *conn)
+{
+ tor_assert(connection_or_nonopen_was_started_here(conn));
+ tor_assert(tor_tls_received_v3_certificate(conn->tls));
+
+ circuit_build_times_network_is_live(&circ_times);
+
+ conn->_base.state = OR_CONN_STATE_OR_HANDSHAKING_V3;
+ if (connection_init_or_handshake_state(conn, 1) < 0)
+ return -1;
+
+ return connection_or_send_versions(conn, 1);
+}
+
/** Allocate a new connection handshake state for the connection
* <b>conn</b>. Return 0 on success, -1 on failure. */
-static int
+int
connection_init_or_handshake_state(or_connection_t *conn, int started_here)
{
or_handshake_state_t *s;
s = conn->handshake_state = tor_malloc_zero(sizeof(or_handshake_state_t));
s->started_here = started_here ? 1 : 0;
+ s->digest_sent_data = 1;
+ s->digest_received_data = 1;
return 0;
}
@@ -1499,10 +1618,89 @@ or_handshake_state_free(or_handshake_state_t *state)
{
if (!state)
return;
+ crypto_free_digest_env(state->digest_sent);
+ crypto_free_digest_env(state->digest_received);
+ tor_cert_free(state->auth_cert);
+ tor_cert_free(state->id_cert);
memset(state, 0xBE, sizeof(or_handshake_state_t));
tor_free(state);
}
+/**
+ * Remember that <b>cell</b> has been transmitted (if <b>incoming</b> is
+ * false) or received (if <b>incoming is true) during a V3 handshake using
+ * <b>state</b>.
+ *
+ * (We don't record the cell, but we keep a digest of everything sent or
+ * received during the v3 handshake, and the client signs it in an
+ * authenticate cell.)
+ */
+void
+or_handshake_state_record_cell(or_handshake_state_t *state,
+ const cell_t *cell,
+ int incoming)
+{
+ crypto_digest_env_t *d, **dptr;
+ packed_cell_t packed;
+ if (incoming) {
+ if (!state->digest_received_data)
+ return;
+ } else {
+ if (!state->digest_sent_data)
+ return;
+ }
+ if (!incoming) {
+ log_warn(LD_BUG, "We shouldn't be sending any non-variable-length cells "
+ "while making a handshake digest. But we think we are sending "
+ "one with type %d.", (int)cell->command);
+ }
+ dptr = incoming ? &state->digest_received : &state->digest_sent;
+ if (! *dptr)
+ *dptr = crypto_new_digest256_env(DIGEST_SHA256);
+
+ d = *dptr;
+ /* Re-packing like this is a little inefficient, but we don't have to do
+ this very often at all. */
+ cell_pack(&packed, cell);
+ crypto_digest_add_bytes(d, packed.body, sizeof(packed.body));
+ memset(&packed, 0, sizeof(packed));
+}
+
+/** Remember that a variable-length <b>cell</b> has been transmitted (if
+ * <b>incoming</b> is false) or received (if <b>incoming is true) during a V3
+ * handshake using <b>state</b>.
+ *
+ * (We don't record the cell, but we keep a digest of everything sent or
+ * received during the v3 handshake, and the client signs it in an
+ * authenticate cell.)
+ */
+void
+or_handshake_state_record_var_cell(or_handshake_state_t *state,
+ const var_cell_t *cell,
+ int incoming)
+{
+ crypto_digest_env_t *d, **dptr;
+ char buf[VAR_CELL_HEADER_SIZE];
+ if (incoming) {
+ if (!state->digest_received_data)
+ return;
+ } else {
+ if (!state->digest_sent_data)
+ return;
+ }
+ dptr = incoming ? &state->digest_received : &state->digest_sent;
+ if (! *dptr)
+ *dptr = crypto_new_digest256_env(DIGEST_SHA256);
+
+ d = *dptr;
+
+ var_cell_pack_header(cell, buf);
+ crypto_digest_add_bytes(d, buf, sizeof(buf));
+ crypto_digest_add_bytes(d, (const char *)cell->payload, cell->payload_len);
+
+ memset(buf, 0, sizeof(buf));
+}
+
/** Set <b>conn</b>'s state to OR_CONN_STATE_OPEN, and tell other subsystems
* as appropriate. Called when we are done with all TLS and OR handshaking.
*/
@@ -1570,6 +1768,9 @@ connection_or_write_cell_to_buf(const cell_t *cell, or_connection_t *conn)
connection_write_to_buf(networkcell.body, CELL_NETWORK_SIZE, TO_CONN(conn));
+ if (conn->_base.state == OR_CONN_STATE_OR_HANDSHAKING_V3)
+ or_handshake_state_record_cell(conn->handshake_state, cell, 0);
+
if (cell->command != CELL_PADDING)
conn->timestamp_last_added_nonpadding = approx_time();
}
@@ -1589,6 +1790,8 @@ connection_or_write_var_cell_to_buf(const var_cell_t *cell,
connection_write_to_buf(hdr, sizeof(hdr), TO_CONN(conn));
connection_write_to_buf((char*)cell->payload,
cell->payload_len, TO_CONN(conn));
+ if (conn->_base.state == OR_CONN_STATE_OR_HANDSHAKING_V3)
+ or_handshake_state_record_var_cell(conn->handshake_state, cell, 0);
if (cell->command != CELL_PADDING)
conn->timestamp_last_added_nonpadding = approx_time();
}
@@ -1673,7 +1876,7 @@ connection_or_send_destroy(circid_t circ_id, or_connection_t *conn, int reason)
}
/** Array of recognized link protocol versions. */
-static const uint16_t or_protocol_versions[] = { 1, 2 };
+static const uint16_t or_protocol_versions[] = { 1, 2, 3 };
/** Number of versions in <b>or_protocol_versions</b>. */
static const int n_or_protocol_versions =
(int)( sizeof(or_protocol_versions)/sizeof(uint16_t) );
@@ -1692,20 +1895,33 @@ is_or_protocol_version_known(uint16_t v)
}
/** Send a VERSIONS cell on <b>conn</b>, telling the other host about the
- * link protocol versions that this Tor can support. */
-static int
-connection_or_send_versions(or_connection_t *conn)
+ * link protocol versions that this Tor can support.
+ *
+ * If <b>v3_plus</b>, this is part of a V3 protocol handshake, so only
+ * allow protocol version v3 or later. If not <b>v3_plus</b>, this is
+ * not part of a v3 protocol handshake, so don't allow protocol v3 or
+ * later.
+ **/
+int
+connection_or_send_versions(or_connection_t *conn, int v3_plus)
{
var_cell_t *cell;
int i;
+ int n_versions = 0;
+ const int min_version = v3_plus ? 3 : 0;
+ const int max_version = v3_plus ? UINT16_MAX : 2;
tor_assert(conn->handshake_state &&
!conn->handshake_state->sent_versions_at);
cell = var_cell_new(n_or_protocol_versions * 2);
cell->command = CELL_VERSIONS;
for (i = 0; i < n_or_protocol_versions; ++i) {
uint16_t v = or_protocol_versions[i];
- set_uint16(cell->payload+(2*i), htons(v));
+ if (v < min_version || v > max_version)
+ continue;
+ set_uint16(cell->payload+(2*n_versions), htons(v));
+ ++n_versions;
}
+ cell->payload_len = n_versions * 2;
connection_or_write_var_cell_to_buf(cell, conn);
conn->handshake_state->sent_versions_at = time(NULL);
@@ -1725,6 +1941,8 @@ connection_or_send_netinfo(or_connection_t *conn)
int len;
uint8_t *out;
+ tor_assert(conn->handshake_state);
+
memset(&cell, 0, sizeof(cell_t));
cell.command = CELL_NETINFO;
@@ -1733,13 +1951,20 @@ connection_or_send_netinfo(or_connection_t *conn)
/* Their address. */
out = cell.payload + 4;
- len = append_address_to_payload(out, &conn->_base.addr);
+ /* We use &conn->real_addr below, unless it hasn't yet been set. If it
+ * hasn't yet been set, we know that _base.addr hasn't been tampered with
+ * yet either. */
+ len = append_address_to_payload(out, !tor_addr_is_null(&conn->real_addr)
+ ? &conn->real_addr : &conn->_base.addr);
if (len<0)
return -1;
out += len;
- /* My address. */
- if ((me = router_get_my_routerinfo())) {
+ /* My address -- only include it if I'm a public relay, or if I'm a
+ * bridge and this is an incoming connection. If I'm a bridge and this
+ * is an outgoing connection, act like a normal client and omit it. */
+ if ((public_server_mode(get_options()) || !conn->is_outgoing) &&
+ (me = router_get_my_routerinfo())) {
tor_addr_t my_addr;
*out++ = 1; /* only one address is supported. */
@@ -1751,8 +1976,285 @@ connection_or_send_netinfo(or_connection_t *conn)
*out = 0;
}
+ conn->handshake_state->digest_sent_data = 0;
connection_or_write_cell_to_buf(&cell, conn);
return 0;
}
+/** Send a CERTS cell on the connection <b>conn</b>. Return 0 on success, -1
+ * on failure. */
+int
+connection_or_send_certs_cell(or_connection_t *conn)
+{
+ const tor_cert_t *link_cert = NULL, *id_cert = NULL;
+ const uint8_t *link_encoded = NULL, *id_encoded = NULL;
+ size_t link_len, id_len;
+ var_cell_t *cell;
+ size_t cell_len;
+ ssize_t pos;
+ int server_mode;
+
+ tor_assert(conn->_base.state == OR_CONN_STATE_OR_HANDSHAKING_V3);
+
+ if (! conn->handshake_state)
+ return -1;
+ server_mode = ! conn->handshake_state->started_here;
+ if (tor_tls_get_my_certs(server_mode, &link_cert, &id_cert) < 0)
+ return -1;
+ tor_cert_get_der(link_cert, &link_encoded, &link_len);
+ tor_cert_get_der(id_cert, &id_encoded, &id_len);
+
+ cell_len = 1 /* 1 byte: num certs in cell */ +
+ 2 * ( 1 + 2 ) /* For each cert: 1 byte for type, 2 for length */ +
+ link_len + id_len;
+ cell = var_cell_new(cell_len);
+ cell->command = CELL_CERTS;
+ cell->payload[0] = 2;
+ pos = 1;
+
+ if (server_mode)
+ cell->payload[pos] = OR_CERT_TYPE_TLS_LINK; /* Link cert */
+ else
+ cell->payload[pos] = OR_CERT_TYPE_AUTH_1024; /* client authentication */
+ set_uint16(&cell->payload[pos+1], htons(link_len));
+ memcpy(&cell->payload[pos+3], link_encoded, link_len);
+ pos += 3 + link_len;
+
+ cell->payload[pos] = OR_CERT_TYPE_ID_1024; /* ID cert */
+ set_uint16(&cell->payload[pos+1], htons(id_len));
+ memcpy(&cell->payload[pos+3], id_encoded, id_len);
+ pos += 3 + id_len;
+
+ tor_assert(pos == (int)cell_len); /* Otherwise we just smashed the heap */
+
+ connection_or_write_var_cell_to_buf(cell, conn);
+ var_cell_free(cell);
+
+ return 0;
+}
+
+/** Send an AUTH_CHALLENGE cell on the connection <b>conn</b>. Return 0
+ * on success, -1 on failure. */
+int
+connection_or_send_auth_challenge_cell(or_connection_t *conn)
+{
+ var_cell_t *cell;
+ uint8_t *cp;
+ uint8_t challenge[OR_AUTH_CHALLENGE_LEN];
+ tor_assert(conn->_base.state == OR_CONN_STATE_OR_HANDSHAKING_V3);
+
+ if (! conn->handshake_state)
+ return -1;
+
+ if (crypto_rand((char*)challenge, OR_AUTH_CHALLENGE_LEN) < 0)
+ return -1;
+ cell = var_cell_new(OR_AUTH_CHALLENGE_LEN + 4);
+ cell->command = CELL_AUTH_CHALLENGE;
+ memcpy(cell->payload, challenge, OR_AUTH_CHALLENGE_LEN);
+ cp = cell->payload + OR_AUTH_CHALLENGE_LEN;
+ set_uint16(cp, htons(1)); /* We recognize one authentication type. */
+ set_uint16(cp+2, htons(AUTHTYPE_RSA_SHA256_TLSSECRET));
+
+ connection_or_write_var_cell_to_buf(cell, conn);
+ var_cell_free(cell);
+ memset(challenge, 0, sizeof(challenge));
+
+ return 0;
+}
+
+/** Compute the main body of an AUTHENTICATE cell that a client can use
+ * to authenticate itself on a v3 handshake for <b>conn</b>. Write it to the
+ * <b>outlen</b>-byte buffer at <b>out</b>.
+ *
+ * If <b>server</b> is true, only calculate the first
+ * V3_AUTH_FIXED_PART_LEN bytes -- the part of the authenticator that's
+ * determined by the rest of the handshake, and which match the provided value
+ * exactly.
+ *
+ * If <b>server</b> is false and <b>signing_key</b> is NULL, calculate the
+ * first V3_AUTH_BODY_LEN bytes of the authenticator (that is, everything
+ * that should be signed), but don't actually sign it.
+ *
+ * If <b>server</b> is false and <b>signing_key</b> is provided, calculate the
+ * entire authenticator, signed with <b>signing_key</b>.
+ * DOCDOC return value
+ */
+int
+connection_or_compute_authenticate_cell_body(or_connection_t *conn,
+ uint8_t *out, size_t outlen,
+ crypto_pk_env_t *signing_key,
+ int server)
+{
+ uint8_t *ptr;
+
+ /* assert state is reasonable XXXX */
+
+ if (outlen < V3_AUTH_FIXED_PART_LEN ||
+ (!server && outlen < V3_AUTH_BODY_LEN))
+ return -1;
+
+ ptr = out;
+
+ /* Type: 8 bytes. */
+ memcpy(ptr, "AUTH0001", 8);
+ ptr += 8;
+
+ {
+ const tor_cert_t *id_cert=NULL, *link_cert=NULL;
+ const digests_t *my_digests, *their_digests;
+ const uint8_t *my_id, *their_id, *client_id, *server_id;
+ if (tor_tls_get_my_certs(0, &link_cert, &id_cert))
+ return -1;
+ my_digests = tor_cert_get_id_digests(id_cert);
+ their_digests = tor_cert_get_id_digests(conn->handshake_state->id_cert);
+ tor_assert(my_digests);
+ tor_assert(their_digests);
+ my_id = (uint8_t*)my_digests->d[DIGEST_SHA256];
+ their_id = (uint8_t*)their_digests->d[DIGEST_SHA256];
+
+ client_id = server ? their_id : my_id;
+ server_id = server ? my_id : their_id;
+
+ /* Client ID digest: 32 octets. */
+ memcpy(ptr, client_id, 32);
+ ptr += 32;
+
+ /* Server ID digest: 32 octets. */
+ memcpy(ptr, server_id, 32);
+ ptr += 32;
+ }
+
+ {
+ crypto_digest_env_t *server_d, *client_d;
+ if (server) {
+ server_d = conn->handshake_state->digest_sent;
+ client_d = conn->handshake_state->digest_received;
+ } else {
+ client_d = conn->handshake_state->digest_sent;
+ server_d = conn->handshake_state->digest_received;
+ }
+
+ /* Server log digest : 32 octets */
+ crypto_digest_get_digest(server_d, (char*)ptr, 32);
+ ptr += 32;
+
+ /* Client log digest : 32 octets */
+ crypto_digest_get_digest(client_d, (char*)ptr, 32);
+ ptr += 32;
+ }
+
+ {
+ /* Digest of cert used on TLS link : 32 octets. */
+ const tor_cert_t *cert = NULL;
+ tor_cert_t *freecert = NULL;
+ if (server) {
+ tor_tls_get_my_certs(1, &cert, NULL);
+ } else {
+ freecert = tor_tls_get_peer_cert(conn->tls);
+ cert = freecert;
+ }
+ if (!cert)
+ return -1;
+ memcpy(ptr, tor_cert_get_cert_digests(cert)->d[DIGEST_SHA256], 32);
+
+ if (freecert)
+ tor_cert_free(freecert);
+ ptr += 32;
+ }
+
+ /* HMAC of clientrandom and serverrandom using master key : 32 octets */
+ tor_tls_get_tlssecrets(conn->tls, ptr);
+ ptr += 32;
+
+ tor_assert(ptr - out == V3_AUTH_FIXED_PART_LEN);
+
+ if (server)
+ return V3_AUTH_FIXED_PART_LEN; // ptr-out
+
+ /* Time: 8 octets. */
+ {
+ uint64_t now = time(NULL);
+ if ((time_t)now < 0)
+ return -1;
+ set_uint32(ptr, htonl((uint32_t)(now>>32)));
+ set_uint32(ptr+4, htonl((uint32_t)now));
+ ptr += 8;
+ }
+
+ /* Nonce: 16 octets. */
+ crypto_rand((char*)ptr, 16);
+ ptr += 16;
+
+ tor_assert(ptr - out == V3_AUTH_BODY_LEN);
+
+ if (!signing_key)
+ return V3_AUTH_BODY_LEN; // ptr - out
+
+ {
+ int siglen;
+ char d[32];
+ crypto_digest256(d, (char*)out, ptr-out, DIGEST_SHA256);
+ siglen = crypto_pk_private_sign(signing_key,
+ (char*)ptr, outlen - (ptr-out),
+ d, 32);
+ if (siglen < 0)
+ return -1;
+
+ ptr += siglen;
+ tor_assert(ptr <= out+outlen);
+ return (int)(ptr - out);
+ }
+}
+
+/** Send an AUTHENTICATE cell on the connection <b>conn</b>. Return 0 on
+ * success, -1 on failure */
+int
+connection_or_send_authenticate_cell(or_connection_t *conn, int authtype)
+{
+ var_cell_t *cell;
+ crypto_pk_env_t *pk = tor_tls_get_my_client_auth_key();
+ int authlen;
+ size_t cell_maxlen;
+ /* XXXX make sure we're actually supposed to send this! */
+
+ if (!pk) {
+ log_warn(LD_BUG, "Can't compute authenticate cell: no client auth key");
+ return -1;
+ }
+ if (authtype != AUTHTYPE_RSA_SHA256_TLSSECRET) {
+ log_warn(LD_BUG, "Tried to send authenticate cell with unknown "
+ "authentication type %d", authtype);
+ return -1;
+ }
+
+ cell_maxlen = 4 + /* overhead */
+ V3_AUTH_BODY_LEN + /* Authentication body */
+ crypto_pk_keysize(pk) + /* Max signature length */
+ 16 /* add a few extra bytes just in case. */;
+
+ cell = var_cell_new(cell_maxlen);
+ cell->command = CELL_AUTHENTICATE;
+ set_uint16(cell->payload, htons(AUTHTYPE_RSA_SHA256_TLSSECRET));
+ /* skip over length ; we don't know that yet. */
+
+ authlen = connection_or_compute_authenticate_cell_body(conn,
+ cell->payload+4,
+ cell_maxlen-4,
+ pk,
+ 0 /* not server */);
+ if (authlen < 0) {
+ log_warn(LD_BUG, "Unable to compute authenticate cell!");
+ var_cell_free(cell);
+ return -1;
+ }
+ tor_assert(authlen + 4 <= cell->payload_len);
+ set_uint16(cell->payload+2, htons(authlen));
+ cell->payload_len = authlen + 4;
+
+ connection_or_write_var_cell_to_buf(cell, conn);
+ var_cell_free(cell);
+
+ return 0;
+}
+
diff --git a/src/or/connection_or.h b/src/or/connection_or.h
index 072edbd8c..62a15b1cf 100644
--- a/src/or/connection_or.h
+++ b/src/or/connection_or.h
@@ -41,7 +41,25 @@ void connection_or_report_broken_states(int severity, int domain);
int connection_tls_start_handshake(or_connection_t *conn, int receiving);
int connection_tls_continue_handshake(or_connection_t *conn);
+int connection_init_or_handshake_state(or_connection_t *conn,
+ int started_here);
+void connection_or_init_conn_from_address(or_connection_t *conn,
+ const tor_addr_t *addr,
+ uint16_t port,
+ const char *id_digest,
+ int started_here);
+int connection_or_client_learned_peer_id(or_connection_t *conn,
+ const uint8_t *peer_id);
+void connection_or_set_circid_type(or_connection_t *conn,
+ crypto_pk_env_t *identity_rcvd);
void or_handshake_state_free(or_handshake_state_t *state);
+void or_handshake_state_record_cell(or_handshake_state_t *state,
+ const cell_t *cell,
+ int incoming);
+void or_handshake_state_record_var_cell(or_handshake_state_t *state,
+ const var_cell_t *cell,
+ int incoming);
+
int connection_or_set_state_open(or_connection_t *conn);
void connection_or_write_cell_to_buf(const cell_t *cell,
or_connection_t *conn);
@@ -49,7 +67,16 @@ void connection_or_write_var_cell_to_buf(const var_cell_t *cell,
or_connection_t *conn);
int connection_or_send_destroy(circid_t circ_id, or_connection_t *conn,
int reason);
+int connection_or_send_versions(or_connection_t *conn, int v3_plus);
int connection_or_send_netinfo(or_connection_t *conn);
+int connection_or_send_certs_cell(or_connection_t *conn);
+int connection_or_send_auth_challenge_cell(or_connection_t *conn);
+int connection_or_compute_authenticate_cell_body(or_connection_t *conn,
+ uint8_t *out, size_t outlen,
+ crypto_pk_env_t *signing_key,
+ int server);
+int connection_or_send_authenticate_cell(or_connection_t *conn, int type);
+
int is_or_protocol_version_known(uint16_t version);
void cell_pack(packed_cell_t *dest, const cell_t *src);
diff --git a/src/or/control.c b/src/or/control.c
index d570ef97c..20caabf0c 100644
--- a/src/or/control.c
+++ b/src/or/control.c
@@ -737,7 +737,7 @@ control_setconf_helper(control_connection_t *conn, uint32_t len, char *body,
SMARTLIST_FOREACH(entries, char *, cp, tor_free(cp));
smartlist_free(entries);
- if (config_get_lines(config, &lines) < 0) {
+ if (config_get_lines(config, &lines, 0) < 0) {
log_warn(LD_CONTROL,"Controller gave us config lines we can't parse.");
connection_write_str_to_buf("551 Couldn't parse configuration\r\n",
conn);
@@ -883,7 +883,7 @@ handle_control_loadconf(control_connection_t *conn, uint32_t len,
const char *msg = NULL;
(void) len;
- retval = options_init_from_string(body, CMD_RUN_TOR, NULL, &errstring);
+ retval = options_init_from_string(NULL, body, CMD_RUN_TOR, NULL, &errstring);
if (retval != SETOPT_OK)
log_warn(LD_CONTROL,
@@ -1055,7 +1055,10 @@ handle_control_authenticate(control_connection_t *conn, uint32_t len,
int bad_cookie=0, bad_password=0;
smartlist_t *sl = NULL;
- if (TOR_ISXDIGIT(body[0])) {
+ if (!len) {
+ password = tor_strdup("");
+ password_len = 0;
+ } else if (TOR_ISXDIGIT(body[0])) {
cp = body;
while (TOR_ISXDIGIT(*cp))
++cp;
@@ -1072,9 +1075,6 @@ handle_control_authenticate(control_connection_t *conn, uint32_t len,
tor_free(password);
return 0;
}
- } else if (TOR_ISSPACE(body[0])) {
- password = tor_strdup("");
- password_len = 0;
} else {
if (!decode_escaped_string(body, len, &password, &password_len)) {
connection_write_str_to_buf("551 Invalid quoted string. You need "
@@ -1379,7 +1379,9 @@ getinfo_helper_misc(control_connection_t *conn, const char *question,
if (!strcmp(question, "version")) {
*answer = tor_strdup(get_version());
} else if (!strcmp(question, "config-file")) {
- *answer = tor_strdup(get_torrc_fname());
+ *answer = tor_strdup(get_torrc_fname(0));
+ } else if (!strcmp(question, "config-defaults-file")) {
+ *answer = tor_strdup(get_torrc_fname(1));
} else if (!strcmp(question, "config-text")) {
*answer = options_dump(get_options(), 1);
} else if (!strcmp(question, "info/names")) {
@@ -1598,6 +1600,8 @@ getinfo_helper_dir(control_connection_t *control_conn,
*answer = tor_strndup(body, ri->cache_info.signed_descriptor_len);
}
} else if (!strcmpstart(question, "desc/name/")) {
+ /* XXX023 Setting 'warn_if_unnamed' here is a bit silly -- the
+ * warning goes to the user, not to the controller. */
ri = router_get_by_nickname(question+strlen("desc/name/"),1);
if (ri) {
const char *body = signed_descriptor_get_body(&ri->cache_info);
@@ -1641,6 +1645,25 @@ getinfo_helper_dir(control_connection_t *control_conn,
*answer = smartlist_join_strings(sl, "", 0, NULL);
SMARTLIST_FOREACH(sl, char *, c, tor_free(c));
smartlist_free(sl);
+ } else if (!strcmpstart(question, "md/id/")) {
+ const node_t *node = node_get_by_hex_id(question+strlen("md/id/"));
+ const microdesc_t *md = NULL;
+ if (node) md = node->md;
+ if (md) {
+ tor_assert(md->body);
+ *answer = tor_strndup(md->body, md->bodylen);
+ }
+ } else if (!strcmpstart(question, "md/name/")) {
+ /* XXX023 Setting 'warn_if_unnamed' here is a bit silly -- the
+ * warning goes to the user, not to the controller. */
+ const node_t *node = node_get_by_nickname(question+strlen("md/name/"), 1);
+ /* XXXX duplicated code */
+ const microdesc_t *md = NULL;
+ if (node) md = node->md;
+ if (md) {
+ tor_assert(md->body);
+ *answer = tor_strndup(md->body, md->bodylen);
+ }
} else if (!strcmpstart(question, "desc-annotations/id/")) {
ri = router_get_by_hexdigest(question+
strlen("desc-annotations/id/"));
@@ -2004,6 +2027,7 @@ typedef struct getinfo_item_t {
static const getinfo_item_t getinfo_items[] = {
ITEM("version", misc, "The current version of Tor."),
ITEM("config-file", misc, "Current location of the \"torrc\" file."),
+ ITEM("config-defaults-file", misc, "Current location of the defaults file."),
ITEM("config-text", misc,
"Return the string that would be written by a saveconf command."),
ITEM("accounting/bytes", accounting,
@@ -2035,6 +2059,8 @@ static const getinfo_item_t getinfo_items[] = {
ITEM("desc/all-recent", dir,
"All non-expired, non-superseded router descriptors."),
ITEM("desc/all-recent-extrainfo-hack", dir, NULL), /* Hack. */
+ PREFIX("md/id/", dir, "Microdescriptors by ID"),
+ PREFIX("md/name/", dir, "Microdescriptors by name"),
PREFIX("extra-info/digest/", dir, "Extra-info documents by digest."),
PREFIX("net/listeners/", listeners, "Bound addresses by type"),
ITEM("ns/all", networkstatus,
@@ -2377,7 +2403,7 @@ handle_control_extendcircuit(control_connection_t *conn, uint32_t len,
/* now circ refers to something that is ready to be extended */
SMARTLIST_FOREACH(nodes, const node_t *, node,
{
- extend_info_t *info = extend_info_from_node(node);
+ extend_info_t *info = extend_info_from_node(node, 0);
tor_assert(info); /* True, since node_has_descriptor(node) == true */
circuit_append_new_exit(circ, info);
extend_info_free(info);
@@ -3096,7 +3122,7 @@ connection_control_process_inbuf(control_connection_t *conn)
args = conn->incoming_cmd+cmd_len+1;
tor_assert(data_len>(size_t)cmd_len);
data_len -= (cmd_len+1); /* skip the command and NUL we added after it */
- while (*args == ' ' || *args == '\t') {
+ while (TOR_ISSPACE(*args)) {
++args;
--data_len;
}
@@ -3804,8 +3830,8 @@ control_event_buildtimeout_set(const circuit_build_times_t *cbt,
send_control_event(EVENT_BUILDTIMEOUT_SET, ALL_FORMATS,
"650 BUILDTIMEOUT_SET %s TOTAL_TIMES=%lu "
- "TIMEOUT_MS=%lu XM=%lu ALPHA=%lf CUTOFF_QUANTILE=%lf "
- "TIMEOUT_RATE=%lf CLOSE_MS=%lu CLOSE_RATE=%lf\r\n",
+ "TIMEOUT_MS=%lu XM=%lu ALPHA=%f CUTOFF_QUANTILE=%f "
+ "TIMEOUT_RATE=%f CLOSE_MS=%lu CLOSE_RATE=%f\r\n",
type_string, (unsigned long)cbt->total_build_times,
(unsigned long)cbt->timeout_ms,
(unsigned long)cbt->Xm, cbt->alpha, qnt,
diff --git a/src/or/cpuworker.c b/src/or/cpuworker.c
index bf8964c29..914003790 100644
--- a/src/or/cpuworker.c
+++ b/src/or/cpuworker.c
@@ -445,9 +445,19 @@ assign_onionskin_to_cpuworker(connection_t *cpuworker,
{
char qbuf[1];
char tag[TAG_LEN];
+ time_t now = approx_time();
+ static time_t last_culled_cpuworkers = 0;
- cull_wedged_cpuworkers();
- spawn_enough_cpuworkers();
+ /* Checking for wedged cpuworkers requires a linear search over all
+ * connections, so let's do it only once a minute.
+ */
+#define CULL_CPUWORKERS_INTERVAL 60
+
+ if (last_culled_cpuworkers + CULL_CPUWORKERS_INTERVAL <= now) {
+ cull_wedged_cpuworkers();
+ spawn_enough_cpuworkers();
+ last_culled_cpuworkers = now;
+ }
if (1) {
if (num_cpuworkers_busy == num_cpuworkers) {
diff --git a/src/or/directory.c b/src/or/directory.c
index f56a63c08..65d8d953a 100644
--- a/src/or/directory.c
+++ b/src/or/directory.c
@@ -828,8 +828,7 @@ directory_command_should_use_begindir(const or_options_t *options,
return 0; /* We don't know an ORPort -- no chance. */
if (!anonymized_connection)
if (!fascist_firewall_allows_address_or(addr, or_port) ||
- directory_fetches_from_authorities(options) ||
- (server_mode(options) && !options->Address))
+ directory_fetches_from_authorities(options))
return 0; /* We're firewalled or are acting like a relay -- also no. */
if (!options->TunnelDirConns &&
router_purpose != ROUTER_PURPOSE_BRIDGE)
@@ -920,7 +919,7 @@ directory_initiate_command_rend(const char *address, const tor_addr_t *_addr,
return;
}
- conn = dir_connection_new(AF_INET);
+ conn = dir_connection_new(tor_addr_family(&addr));
/* set up conn so it's got all the data we need to remember */
tor_addr_copy(&conn->_base.addr, &addr);
@@ -1620,9 +1619,11 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
if (!reason) reason = tor_strdup("[no reason given]");
log_debug(LD_DIR,
- "Received response from directory server '%s:%d': %d %s",
+ "Received response from directory server '%s:%d': %d %s "
+ "(purpose: %d)",
conn->_base.address, conn->_base.port, status_code,
- escaped(reason));
+ escaped(reason),
+ conn->_base.purpose);
/* now check if it's got any hints for us about our IP address. */
if (conn->dirconn_direct) {
@@ -3730,7 +3731,7 @@ download_status_reset(download_status_t *dls)
const int *schedule;
size_t schedule_len;
- find_dl_schedule_and_len(dls, get_options()->DirPort,
+ find_dl_schedule_and_len(dls, get_options()->DirPort != NULL,
&schedule, &schedule_len);
dls->n_download_failures = 0;
diff --git a/src/or/directory.h b/src/or/directory.h
index 8c63bb5df..5050f700d 100644
--- a/src/or/directory.h
+++ b/src/or/directory.h
@@ -80,7 +80,7 @@ time_t download_status_increment_failure(download_status_t *dls,
* the optional status code <b>sc</b>. */
#define download_status_failed(dls, sc) \
download_status_increment_failure((dls), (sc), NULL, \
- get_options()->DirPort, time(NULL))
+ get_options()->DirPort!=NULL, time(NULL))
void download_status_reset(download_status_t *dls);
static int download_status_is_ready(download_status_t *dls, time_t now,
diff --git a/src/or/dirserv.c b/src/or/dirserv.c
index d22a0538d..f4bbca850 100644
--- a/src/or/dirserv.c
+++ b/src/or/dirserv.c
@@ -232,7 +232,7 @@ dirserv_load_fingerprint_file(void)
}
tor_free(fname);
- result = config_get_lines(cf, &front);
+ result = config_get_lines(cf, &front, 0);
tor_free(cf);
if (result < 0) {
log_warn(LD_CONFIG, "Error reading from fingerprint file");
@@ -1212,7 +1212,7 @@ directory_fetches_from_authorities(const or_options_t *options)
return 1; /* we don't know our IP address; ask an authority. */
refuseunknown = ! router_my_exit_policy_is_reject_star() &&
should_refuse_unknown_exits(options);
- if (options->DirPort == 0 && !refuseunknown)
+ if (options->DirPort == NULL && !refuseunknown)
return 0;
if (!server_mode(options) || !advertised_server_mode())
return 0;
@@ -1248,7 +1248,7 @@ directory_fetches_dir_info_later(const or_options_t *options)
int
directory_caches_v2_dir_info(const or_options_t *options)
{
- return options->DirPort != 0;
+ return options->DirPort != NULL;
}
/** Return 1 if we want to keep descriptors, networkstatuses, etc around
@@ -1273,7 +1273,7 @@ directory_caches_dir_info(const or_options_t *options)
int
directory_permits_begindir_requests(const or_options_t *options)
{
- return options->BridgeRelay != 0 || options->DirPort != 0;
+ return options->BridgeRelay != 0 || options->DirPort != NULL;
}
/** Return 1 if we want to allow controllers to ask us directory
@@ -1282,7 +1282,7 @@ directory_permits_begindir_requests(const or_options_t *options)
int
directory_permits_controller_requests(const or_options_t *options)
{
- return options->DirPort != 0;
+ return options->DirPort != NULL;
}
/** Return 1 if we have no need to fetch new descriptors. This generally
@@ -1720,12 +1720,6 @@ should_generate_v2_networkstatus(void)
/** If a router's MTBF is at least this value, then it is always stable.
* See above. (Corresponds to about 7 days for current decay rates.) */
#define MTBF_TO_GUARANTEE_STABLE (60*60*24*5)
-/** Similarly, we protect sufficiently fast nodes from being pushed
- * out of the set of Fast nodes. */
-#define BANDWIDTH_TO_GUARANTEE_FAST ROUTER_REQUIRED_MIN_BANDWIDTH
-/** Similarly, every node with sufficient bandwidth can be considered
- * for Guard status. */
-#define BANDWIDTH_TO_GUARANTEE_GUARD (250*1024)
/** Similarly, every node with at least this much weighted time known can be
* considered familiar enough to be a guard. Corresponds to about 20 days for
* current decay rates.
@@ -1870,6 +1864,7 @@ dirserv_compute_performance_thresholds(routerlist_t *rl)
long *tks;
double *mtbfs, *wfus;
time_t now = time(NULL);
+ const or_options_t *options = get_options();
/* initialize these all here, in case there are no routers */
stable_uptime = 0;
@@ -1942,8 +1937,11 @@ dirserv_compute_performance_thresholds(routerlist_t *rl)
if (guard_tk > TIME_KNOWN_TO_GUARANTEE_FAMILIAR)
guard_tk = TIME_KNOWN_TO_GUARANTEE_FAMILIAR;
- if (fast_bandwidth > BANDWIDTH_TO_GUARANTEE_FAST)
- fast_bandwidth = BANDWIDTH_TO_GUARANTEE_FAST;
+ /* Protect sufficiently fast nodes from being pushed out of the set
+ * of Fast nodes. */
+ if (options->AuthDirFastGuarantee &&
+ fast_bandwidth > options->AuthDirFastGuarantee)
+ fast_bandwidth = (uint32_t)options->AuthDirFastGuarantee;
/* Now that we have a time-known that 7/8 routers are known longer than,
* fill wfus with the wfu of every such "familiar" router. */
@@ -2288,6 +2286,75 @@ get_possible_sybil_list(const smartlist_t *routers)
return omit_as_sybil;
}
+/** Return non-zero iff a relay running the Tor version specified in
+ * <b>platform</b> is suitable for use as a potential entry guard. */
+static int
+is_router_version_good_for_possible_guard(const char *platform)
+{
+ static int parsed_versions_initialized = 0;
+ static tor_version_t first_good_0_2_1_guard_version;
+ static tor_version_t first_good_0_2_2_guard_version;
+ static tor_version_t first_good_later_guard_version;
+
+ tor_version_t router_version;
+
+ /* XXX023 This block should be extracted into its own function. */
+ /* XXXX Begin code copied from tor_version_as_new_as (in routerparse.c) */
+ {
+ char *s, *s2, *start;
+ char tmp[128];
+
+ tor_assert(platform);
+
+ /* nonstandard Tor; be safe and say yes */
+ if (strcmpstart(platform,"Tor "))
+ return 1;
+
+ start = (char *)eat_whitespace(platform+3);
+ if (!*start) return 0;
+ s = (char *)find_whitespace(start); /* also finds '\0', which is fine */
+ s2 = (char*)eat_whitespace(s);
+ if (!strcmpstart(s2, "(r") || !strcmpstart(s2, "(git-"))
+ s = (char*)find_whitespace(s2);
+
+ if ((size_t)(s-start+1) >= sizeof(tmp)) /* too big, no */
+ return 0;
+ strlcpy(tmp, start, s-start+1);
+
+ if (tor_version_parse(tmp, &router_version)<0) {
+ log_info(LD_DIR,"Router version '%s' unparseable.",tmp);
+ return 1; /* be safe and say yes */
+ }
+ }
+ /* XXXX End code copied from tor_version_as_new_as (in routerparse.c) */
+
+ if (!parsed_versions_initialized) {
+ /* CVE-2011-2769 was fixed on the relay side in Tor versions
+ * 0.2.1.31, 0.2.2.34, and 0.2.3.6-alpha. */
+ tor_assert(tor_version_parse("0.2.1.31",
+ &first_good_0_2_1_guard_version)>=0);
+ tor_assert(tor_version_parse("0.2.2.34",
+ &first_good_0_2_2_guard_version)>=0);
+ tor_assert(tor_version_parse("0.2.3.6-alpha",
+ &first_good_later_guard_version)>=0);
+
+ /* Don't parse these constant version strings once for every relay
+ * for every vote. */
+ parsed_versions_initialized = 1;
+ }
+
+ return ((tor_version_same_series(&first_good_0_2_1_guard_version,
+ &router_version) &&
+ tor_version_compare(&first_good_0_2_1_guard_version,
+ &router_version) <= 0) ||
+ (tor_version_same_series(&first_good_0_2_2_guard_version,
+ &router_version) &&
+ tor_version_compare(&first_good_0_2_2_guard_version,
+ &router_version) <= 0) ||
+ (tor_version_compare(&first_good_later_guard_version,
+ &router_version) <= 0));
+}
+
/** Extract status information from <b>ri</b> and from other authority
* functions and store it in <b>rs</b>>. If <b>naming</b>, consider setting
* the named flag in <b>rs</b>.
@@ -2303,8 +2370,11 @@ set_routerstatus_from_routerinfo(routerstatus_t *rs,
int naming, int listbadexits,
int listbaddirs, int vote_on_hsdirs)
{
+ const or_options_t *options = get_options();
int unstable_version =
!tor_version_as_new_as(ri->platform,"0.1.1.16-rc-cvs");
+ uint32_t routerbw = router_get_advertised_bandwidth(ri);
+
memset(rs, 0, sizeof(routerstatus_t));
rs->is_authority =
@@ -2330,12 +2400,16 @@ set_routerstatus_from_routerinfo(routerstatus_t *rs,
rs->is_valid = node->is_valid;
if (node->is_fast &&
- (router_get_advertised_bandwidth(ri) >= BANDWIDTH_TO_GUARANTEE_GUARD ||
- router_get_advertised_bandwidth(ri) >=
- MIN(guard_bandwidth_including_exits,
- guard_bandwidth_excluding_exits))) {
- long tk = rep_hist_get_weighted_time_known(node->identity, now);
- double wfu = rep_hist_get_weighted_fractional_uptime(node->identity, now);
+ ((options->AuthDirGuardBWGuarantee &&
+ routerbw >= options->AuthDirGuardBWGuarantee) ||
+ routerbw >= MIN(guard_bandwidth_including_exits,
+ guard_bandwidth_excluding_exits)) &&
+ (options->GiveGuardFlagTo_CVE_2011_2768_VulnerableRelays ||
+ is_router_version_good_for_possible_guard(ri->platform))) {
+ long tk = rep_hist_get_weighted_time_known(
+ node->identity, now);
+ double wfu = rep_hist_get_weighted_fractional_uptime(
+ node->identity, now);
rs->is_possible_guard = (wfu >= guard_wfu && tk >= guard_tk) ? 1 : 0;
} else {
rs->is_possible_guard = 0;
@@ -2814,7 +2888,7 @@ generate_v2_networkstatus_opinion(void)
goto done;
}
- contact = get_options()->ContactInfo;
+ contact = options->ContactInfo;
if (!contact)
contact = "(none)";
@@ -2897,7 +2971,7 @@ generate_v2_networkstatus_opinion(void)
});
if (tor_snprintf(outp, endp-outp, "directory-signature %s\n",
- get_options()->Nickname)<0) {
+ options->Nickname)<0) {
log_warn(LD_BUG, "Unable to write signature line.");
goto done;
}
@@ -3207,7 +3281,7 @@ dirserv_orconn_tls_done(const char *address,
log_info(LD_DIRSERV, "Found router %s to be reachable at %s:%d. Yay.",
router_describe(ri),
address, ri->or_port);
- if (tor_addr_from_str(&addr, ri->address) != -1)
+ if (tor_addr_parse(&addr, ri->address) != -1)
addrp = &addr;
else
log_warn(LD_BUG, "Couldn't parse IP address \"%s\"", ri->address);
@@ -3482,15 +3556,14 @@ connection_dirserv_finish_spooling(dir_connection_t *conn)
static int
connection_dirserv_add_servers_to_outbuf(dir_connection_t *conn)
{
-#ifdef TRACK_SERVED_TIME
- time_t now = time(NULL);
-#endif
int by_fp = (conn->dir_spool_src == DIR_SPOOL_SERVER_BY_FP ||
conn->dir_spool_src == DIR_SPOOL_EXTRA_BY_FP);
int extra = (conn->dir_spool_src == DIR_SPOOL_EXTRA_BY_FP ||
conn->dir_spool_src == DIR_SPOOL_EXTRA_BY_DIGEST);
time_t publish_cutoff = time(NULL)-ROUTER_MAX_AGE_TO_PUBLISH;
+ const or_options_t *options = get_options();
+
while (smartlist_len(conn->fingerprint_stack) &&
connection_get_outbuf_len(TO_CONN(conn)) < DIRSERV_BUFFER_MIN) {
const char *body;
@@ -3512,9 +3585,17 @@ connection_dirserv_add_servers_to_outbuf(dir_connection_t *conn)
* unknown bridge descriptor has shown up between then and now. */
continue;
}
-#ifdef TRACK_SERVED_TIME
- sd->last_served_at = now;
-#endif
+
+ /** If we are the bridge authority and the descriptor is a bridge
+ * descriptor, remember that we served this descriptor for desc stats. */
+ if (options->BridgeAuthoritativeDir && by_fp) {
+ const routerinfo_t *router =
+ router_get_by_id_digest(sd->identity_digest);
+ /* router can be NULL here when the bridge auth is asked for its own
+ * descriptor. */
+ if (router && router->purpose == ROUTER_PURPOSE_BRIDGE)
+ rep_hist_note_desc_served(sd->identity_digest);
+ }
body = signed_descriptor_get_body(sd);
if (conn->zlib_state) {
/* XXXX022 This 'last' business should actually happen on the last
diff --git a/src/or/dirvote.c b/src/or/dirvote.c
index bf34c62af..01e2358c4 100644
--- a/src/or/dirvote.c
+++ b/src/or/dirvote.c
@@ -50,7 +50,7 @@ static int dirvote_publish_consensus(void);
static char *make_consensus_method_list(int low, int high, const char *sep);
/** The highest consensus method that we currently support. */
-#define MAX_SUPPORTED_CONSENSUS_METHOD 11
+#define MAX_SUPPORTED_CONSENSUS_METHOD 12
/** Lowest consensus method that contains a 'directory-footer' marker */
#define MIN_METHOD_FOR_FOOTER 9
@@ -64,6 +64,10 @@ static char *make_consensus_method_list(int low, int high, const char *sep);
/** Lowest consensus method that generates microdescriptors */
#define MIN_METHOD_FOR_MICRODESC 8
+/** Lowest consensus method that ensures a majority of authorities voted
+ * for a param. */
+#define MIN_METHOD_FOR_MAJORITY_PARAMS 12
+
/* =====
* Voting
* =====*/
@@ -608,11 +612,16 @@ compute_consensus_versions_list(smartlist_t *lst, int n_versioning)
return result;
}
+/** Minimum number of directory authorities voting for a parameter to
+ * include it in the consensus, if consensus method 12 or later is to be
+ * used. See proposal 178 for details. */
+#define MIN_VOTES_FOR_PARAM 3
+
/** Helper: given a list of valid networkstatus_t, return a new string
* containing the contents of the consensus network parameter set.
*/
/* private */ char *
-dirvote_compute_params(smartlist_t *votes)
+dirvote_compute_params(smartlist_t *votes, int method, int total_authorities)
{
int i;
int32_t *vals;
@@ -669,11 +678,17 @@ dirvote_compute_params(smartlist_t *votes)
next_param = smartlist_get(param_list, param_sl_idx+1);
if (!next_param || strncmp(next_param, param, cur_param_len)) {
/* We've reached the end of a series. */
- int32_t median = median_int32(vals, i);
- char *out_string = tor_malloc(64+cur_param_len);
- memcpy(out_string, param, cur_param_len);
- tor_snprintf(out_string+cur_param_len,64, "%ld", (long)median);
- smartlist_add(output, out_string);
+ /* Make sure enough authorities voted on this param, unless the
+ * the consensus method we use is too old for that. */
+ if (method < MIN_METHOD_FOR_MAJORITY_PARAMS ||
+ i > total_authorities/2 ||
+ i >= MIN_VOTES_FOR_PARAM) {
+ int32_t median = median_int32(vals, i);
+ char *out_string = tor_malloc(64+cur_param_len);
+ memcpy(out_string, param, cur_param_len);
+ tor_snprintf(out_string+cur_param_len,64, "%ld", (long)median);
+ smartlist_add(output, out_string);
+ }
i = 0;
if (next_param) {
@@ -1496,7 +1511,8 @@ networkstatus_compute_consensus(smartlist_t *votes,
}
if (consensus_method >= MIN_METHOD_FOR_PARAMS) {
- params = dirvote_compute_params(votes);
+ params = dirvote_compute_params(votes, consensus_method,
+ total_authorities);
if (params) {
smartlist_add(chunks, tor_strdup("params "));
smartlist_add(chunks, params);
diff --git a/src/or/dirvote.h b/src/or/dirvote.h
index d19635173..1f4dc362b 100644
--- a/src/or/dirvote.h
+++ b/src/or/dirvote.h
@@ -84,7 +84,8 @@ document_signature_t *voter_get_sig_by_algorithm(
#ifdef DIRVOTE_PRIVATE
char *format_networkstatus_vote(crypto_pk_env_t *private_key,
networkstatus_t *v3_ns);
-char *dirvote_compute_params(smartlist_t *votes);
+char *dirvote_compute_params(smartlist_t *votes, int method,
+ int total_authorities);
#endif
#endif
diff --git a/src/or/dns.c b/src/or/dns.c
index 5d86e81fa..beb110acb 100644
--- a/src/or/dns.c
+++ b/src/or/dns.c
@@ -687,7 +687,7 @@ dns_resolve_impl(edge_connection_t *exitconn, int is_resolve,
/* first check if exitconn->_base.address is an IP. If so, we already
* know the answer. */
- if (tor_addr_from_str(&addr, exitconn->_base.address) >= 0) {
+ if (tor_addr_parse(&addr, exitconn->_base.address) >= 0) {
if (tor_addr_family(&addr) == AF_INET) {
tor_addr_copy(&exitconn->_base.addr, &addr);
exitconn->address_ttl = DEFAULT_DNS_TTL;
@@ -721,7 +721,7 @@ dns_resolve_impl(edge_connection_t *exitconn, int is_resolve,
* .in-addr.arpa address but this isn't a resolve request, kill the
* connection.
*/
- if ((r = tor_addr_parse_reverse_lookup_name(&addr, exitconn->_base.address,
+ if ((r = tor_addr_parse_PTR_name(&addr, exitconn->_base.address,
AF_UNSPEC, 0)) != 0) {
if (r == 1) {
is_reverse = 1;
@@ -1198,7 +1198,7 @@ configure_nameservers(int force)
#ifdef HAVE_EVDNS_SET_DEFAULT_OUTGOING_BIND_ADDRESS
if (options->OutboundBindAddress) {
tor_addr_t addr;
- if (tor_addr_from_str(&addr, options->OutboundBindAddress) < 0) {
+ if (tor_addr_parse(&addr, options->OutboundBindAddress) < 0) {
log_warn(LD_CONFIG,"Outbound bind address '%s' didn't parse. Ignoring.",
options->OutboundBindAddress);
} else {
@@ -1395,6 +1395,10 @@ launch_resolve(edge_connection_t *exitconn)
int r;
int options = get_options()->ServerDNSSearchDomains ? 0
: DNS_QUERY_NO_SEARCH;
+
+ if (get_options()->DisableNetwork)
+ return -1;
+
/* What? Nameservers not configured? Sounds like a bug. */
if (!nameservers_configured) {
log_warn(LD_EXIT, "(Harmless.) Nameservers not configured, but resolve "
@@ -1404,7 +1408,7 @@ launch_resolve(edge_connection_t *exitconn)
}
}
- r = tor_addr_parse_reverse_lookup_name(
+ r = tor_addr_parse_PTR_name(
&a, exitconn->_base.address, AF_UNSPEC, 0);
tor_assert(the_evdns_base);
@@ -1601,6 +1605,9 @@ launch_test_addresses(int fd, short event, void *args)
(void)event;
(void)args;
+ if (options->DisableNetwork)
+ return;
+
log_info(LD_EXIT, "Launching checks to see whether our nameservers like to "
"hijack *everything*.");
/* This situation is worse than the failure-hijacking situation. When this
diff --git a/src/or/eventdns.c b/src/or/eventdns.c
index 7fe376baf..7cd5d80af 100644
--- a/src/or/eventdns.c
+++ b/src/or/eventdns.c
@@ -1,12 +1,18 @@
-/* The original version of this module was written by Adam Langley; for
- * a history of modifications, check out the subversion logs.
+/* READ THIS COMMENT BEFORE HACKING THIS FILE.
*
- * When editing this module, try to keep it re-mergeable by Adam. Don't
- * reformat the whitespace, add Tor dependencies, or so on.
+ * This eventdns.c copy has diverged a bit from Libevent's version, and it's
+ * no longer easy to resynchronize them. Once Tor requires Libevent 2.0, we
+ * will just dump this file and use Libevent's evdns code.
*
- * TODO:
- * - Replace all externally visible magic numbers with #defined constants.
- * - Write documentation for APIs of all external functions.
+ * Therefore, you probably shouldn't make any change here without making it to
+ * Libevent as well: it's not good for the implementation to diverge even
+ * more. Also, we can't shouldn't wantonly the API here (since Libevent APIs
+ * can't change in ways that break user behavior). Also, we shouldn't bother
+ * with cosmetic changes: the whole module is slated for demolition, so
+ * there's no point dusting the linebreaks or re-painting the parser.
+ *
+ * (We can't just drop the Libevent 2.0 evdns implementation in here instead,
+ * since it depends pretty heavily on parts of Libevent 2.0.)
*/
/* Async DNS Library
@@ -75,7 +81,6 @@
#include <stdint.h>
#endif
#include <stdlib.h>
-#include <string.h>
#include <errno.h>
#include <assert.h>
#ifdef HAVE_UNISTD_H
diff --git a/src/or/geoip.c b/src/or/geoip.c
index 67dea965f..73194ae9c 100644
--- a/src/or/geoip.c
+++ b/src/or/geoip.c
@@ -976,7 +976,8 @@ geoip_dirreq_stats_term(void)
}
/** Return a newly allocated string containing the dirreq statistics
- * until <b>now</b>, or NULL if we're not collecting dirreq stats. */
+ * until <b>now</b>, or NULL if we're not collecting dirreq stats. Caller
+ * must ensure start_of_dirreq_stats_interval is in the past. */
char *
geoip_format_dirreq_stats(time_t now)
{
@@ -992,6 +993,8 @@ geoip_format_dirreq_stats(time_t now)
if (!start_of_dirreq_stats_interval)
return NULL; /* Not initialized. */
+ tor_assert(now >= start_of_dirreq_stats_interval);
+
format_iso_time(t, now);
v2_ips_string = geoip_get_client_history(GEOIP_CLIENT_NETWORKSTATUS_V2);
v3_ips_string = geoip_get_client_history(GEOIP_CLIENT_NETWORKSTATUS);
@@ -1351,7 +1354,8 @@ geoip_entry_stats_term(void)
}
/** Return a newly allocated string containing the entry statistics
- * until <b>now</b>, or NULL if we're not collecting entry stats. */
+ * until <b>now</b>, or NULL if we're not collecting entry stats. Caller
+ * must ensure start_of_entry_stats_interval lies in the past. */
char *
geoip_format_entry_stats(time_t now)
{
@@ -1362,6 +1366,8 @@ geoip_format_entry_stats(time_t now)
if (!start_of_entry_stats_interval)
return NULL; /* Not initialized. */
+ tor_assert(now >= start_of_entry_stats_interval);
+
data = geoip_get_client_history(GEOIP_CLIENT_CONNECT);
format_iso_time(t, now);
tor_asprintf(&result, "entry-stats-end %s (%u s)\nentry-ips %s\n",
diff --git a/src/or/hibernate.c b/src/or/hibernate.c
index defb7029e..ce64581d1 100644
--- a/src/or/hibernate.c
+++ b/src/or/hibernate.c
@@ -21,6 +21,7 @@ hibernating, phase 2:
- close all OR/AP/exit conns)
*/
+#define HIBERNATE_PRIVATE
#include "or.h"
#include "config.h"
#include "connection.h"
@@ -29,26 +30,11 @@ hibernating, phase 2:
#include "main.h"
#include "router.h"
-/** Possible values of hibernate_state */
-typedef enum {
- /** We are running normally. */
- HIBERNATE_STATE_LIVE=1,
- /** We're trying to shut down cleanly, and we'll kill all active connections
- * at shutdown_time. */
- HIBERNATE_STATE_EXITING=2,
- /** We're running low on allocated bandwidth for this period, so we won't
- * accept any new connections. */
- HIBERNATE_STATE_LOWBANDWIDTH=3,
- /** We are hibernating, and we won't wake up till there's more bandwidth to
- * use. */
- HIBERNATE_STATE_DORMANT=4
-} hibernate_state_t;
-
extern long stats_n_seconds_working; /* published uptime */
/** Are we currently awake, asleep, running out of bandwidth, or shutting
* down? */
-static hibernate_state_t hibernate_state = HIBERNATE_STATE_LIVE;
+static hibernate_state_t hibernate_state = HIBERNATE_STATE_INITIAL;
/** If are hibernating, when do we plan to wake up? Set to 0 if we
* aren't hibernating. */
static time_t hibernate_end_time = 0;
@@ -749,7 +735,6 @@ hibernate_soft_limit_reached(void)
static void
hibernate_begin(hibernate_state_t new_state, time_t now)
{
- connection_t *conn;
const or_options_t *options = get_options();
if (new_state == HIBERNATE_STATE_EXITING &&
@@ -770,15 +755,7 @@ hibernate_begin(hibernate_state_t new_state, time_t now)
}
/* close listeners. leave control listener(s). */
- while ((conn = connection_get_by_type(CONN_TYPE_OR_LISTENER)) ||
- (conn = connection_get_by_type(CONN_TYPE_AP_LISTENER)) ||
- (conn = connection_get_by_type(CONN_TYPE_AP_TRANS_LISTENER)) ||
- (conn = connection_get_by_type(CONN_TYPE_AP_DNS_LISTENER)) ||
- (conn = connection_get_by_type(CONN_TYPE_AP_NATD_LISTENER)) ||
- (conn = connection_get_by_type(CONN_TYPE_DIR_LISTENER))) {
- log_info(LD_NET,"Closing listener type %d", conn->type);
- connection_mark_for_close(conn);
- }
+ connection_mark_all_noncontrol_listeners();
/* XXX kill intro point circs */
/* XXX upload rendezvous service descriptors with no intro points */
@@ -804,10 +781,12 @@ static void
hibernate_end(hibernate_state_t new_state)
{
tor_assert(hibernate_state == HIBERNATE_STATE_LOWBANDWIDTH ||
- hibernate_state == HIBERNATE_STATE_DORMANT);
+ hibernate_state == HIBERNATE_STATE_DORMANT ||
+ hibernate_state == HIBERNATE_STATE_INITIAL);
/* listeners will be relaunched in run_scheduled_events() in main.c */
- log_notice(LD_ACCT,"Hibernation period ended. Resuming normal activity.");
+ if (hibernate_state != HIBERNATE_STATE_INITIAL)
+ log_notice(LD_ACCT,"Hibernation period ended. Resuming normal activity.");
hibernate_state = new_state;
hibernate_end_time = 0; /* no longer hibernating */
@@ -939,11 +918,12 @@ consider_hibernation(time_t now)
/* Else, we aren't hibernating. See if it's time to start hibernating, or to
* go dormant. */
- if (hibernate_state == HIBERNATE_STATE_LIVE) {
+ if (hibernate_state == HIBERNATE_STATE_LIVE ||
+ hibernate_state == HIBERNATE_STATE_INITIAL) {
if (hibernate_soft_limit_reached()) {
log_notice(LD_ACCT,
"Bandwidth soft limit reached; commencing hibernation. "
- "No new conncetions will be accepted");
+ "No new connections will be accepted");
hibernate_begin(HIBERNATE_STATE_LOWBANDWIDTH, now);
} else if (accounting_enabled && now < interval_wakeup_time) {
format_local_iso_time(buf,interval_wakeup_time);
@@ -951,6 +931,8 @@ consider_hibernation(time_t now)
"Commencing hibernation. We will wake up at %s local time.",
buf);
hibernate_go_dormant(now);
+ } else if (hibernate_state == HIBERNATE_STATE_INITIAL) {
+ hibernate_end(HIBERNATE_STATE_LIVE);
}
}
@@ -1017,3 +999,13 @@ getinfo_helper_accounting(control_connection_t *conn,
return 0;
}
+/**
+ * Manually change the hibernation state. Private; used only by the unit
+ * tests.
+ */
+void
+hibernate_set_state_for_testing_(hibernate_state_t newstate)
+{
+ hibernate_state = newstate;
+}
+
diff --git a/src/or/hibernate.h b/src/or/hibernate.h
index b5826bced..78e7bb75e 100644
--- a/src/or/hibernate.h
+++ b/src/or/hibernate.h
@@ -25,5 +25,27 @@ int getinfo_helper_accounting(control_connection_t *conn,
const char *question, char **answer,
const char **errmsg);
+#ifdef HIBERNATE_PRIVATE
+/** Possible values of hibernate_state */
+typedef enum {
+ /** We are running normally. */
+ HIBERNATE_STATE_LIVE=1,
+ /** We're trying to shut down cleanly, and we'll kill all active connections
+ * at shutdown_time. */
+ HIBERNATE_STATE_EXITING=2,
+ /** We're running low on allocated bandwidth for this period, so we won't
+ * accept any new connections. */
+ HIBERNATE_STATE_LOWBANDWIDTH=3,
+ /** We are hibernating, and we won't wake up till there's more bandwidth to
+ * use. */
+ HIBERNATE_STATE_DORMANT=4,
+ /** We start out in state default, which means we havent decided which state
+ * we're in. */
+ HIBERNATE_STATE_INITIAL=5
+} hibernate_state_t;
+
+void hibernate_set_state_for_testing_(hibernate_state_t newstate);
+#endif
+
#endif
diff --git a/src/or/main.c b/src/or/main.c
index af769c412..1b5a56f04 100644
--- a/src/or/main.c
+++ b/src/or/main.c
@@ -37,6 +37,7 @@
#include "ntmain.h"
#include "onion.h"
#include "policies.h"
+#include "transports.h"
#include "relay.h"
#include "rendclient.h"
#include "rendcommon.h"
@@ -91,10 +92,10 @@ static int stats_prev_global_read_bucket;
/** What was the write bucket before the last second_elapsed_callback() call?
* (used to determine how many bytes we've written). */
static int stats_prev_global_write_bucket;
-#else
+#endif
+
static uint64_t stats_prev_n_read = 0;
static uint64_t stats_prev_n_written = 0;
-#endif
/* XXX we might want to keep stats about global_relayed_*_bucket too. Or not.*/
/** How many bytes have we read since we started the process? */
@@ -195,6 +196,26 @@ free_old_inbuf(connection_t *conn)
}
#endif
+#ifdef MS_WINDOWS
+/** Remove the kernel-space send and receive buffers for <b>s</b>. For use
+ * with IOCP only. */
+static int
+set_buffer_lengths_to_zero(tor_socket_t s)
+{
+ int zero = 0;
+ int r = 0;
+ if (setsockopt(s, SOL_SOCKET, SO_SNDBUF, (void*)&zero, sizeof(zero))) {
+ log_warn(LD_NET, "Unable to clear SO_SNDBUF");
+ r = -1;
+ }
+ if (setsockopt(s, SOL_SOCKET, SO_RCVBUF, (void*)&zero, sizeof(zero))) {
+ log_warn(LD_NET, "Unable to clear SO_RCVBUF");
+ r = -1;
+ }
+ return r;
+}
+#endif
+
/** Add <b>conn</b> to the array of connections that we can poll on. The
* connection's socket must be set; the connection starts out
* non-reading and non-writing.
@@ -215,6 +236,14 @@ connection_add_impl(connection_t *conn, int is_connecting)
#ifdef USE_BUFFEREVENTS
if (connection_type_uses_bufferevent(conn)) {
if (SOCKET_OK(conn->s) && !conn->linked) {
+
+#ifdef MS_WINDOWS
+ if (tor_libevent_using_iocp_bufferevents() &&
+ get_options()->UserspaceIOCPBuffers) {
+ set_buffer_lengths_to_zero(conn->s);
+ }
+#endif
+
conn->bufev = bufferevent_socket_new(
tor_libevent_get_base(),
conn->s,
@@ -905,7 +934,7 @@ directory_info_has_arrived(time_t now, int from_cache)
update_extrainfo_downloads(now);
}
- if (server_mode(options) && !we_are_hibernating() && !from_cache &&
+ if (server_mode(options) && !net_is_disabled() && !from_cache &&
(can_complete_circuit || !any_predicted_circuits(now)))
consider_testing_reachability(1, 1);
}
@@ -1086,7 +1115,9 @@ run_scheduled_events(time_t now)
static int should_init_bridge_stats = 1;
static time_t time_to_retry_dns_init = 0;
static time_t time_to_next_heartbeat = 0;
+ static int has_validated_pt = 0;
const or_options_t *options = get_options();
+
int is_server = server_mode(options);
int i;
int have_dir_info;
@@ -1130,11 +1161,11 @@ run_scheduled_events(time_t now)
if (router_rebuild_descriptor(1)<0) {
log_info(LD_CONFIG, "Couldn't rebuild router descriptor");
}
- if (advertised_server_mode())
+ if (advertised_server_mode() & !options->DisableNetwork)
router_upload_dir_desc_to_dirservers(0);
}
- if (time_to_try_getting_descriptors < now) {
+ if (!options->DisableNetwork && time_to_try_getting_descriptors < now) {
update_all_descriptor_downloads(now);
update_extrainfo_downloads(now);
if (router_have_minimum_dir_info())
@@ -1152,15 +1183,13 @@ run_scheduled_events(time_t now)
if (options->UseBridges)
fetch_bridge_descriptors(options, now);
- /** 1b. Every MAX_SSL_KEY_LIFETIME seconds, we change our TLS context. */
+ /** 1b. Every MAX_SSL_KEY_LIFETIME_INTERNAL seconds, we change our
+ * TLS context. */
if (!last_rotated_x509_certificate)
last_rotated_x509_certificate = now;
- if (last_rotated_x509_certificate+MAX_SSL_KEY_LIFETIME < now) {
+ if (last_rotated_x509_certificate+MAX_SSL_KEY_LIFETIME_INTERNAL < now) {
log_info(LD_GENERAL,"Rotating tls context.");
- if (tor_tls_context_init(public_server_mode(options),
- get_tlsclient_identity_key(),
- is_server ? get_server_identity_key() : NULL,
- MAX_SSL_KEY_LIFETIME) < 0) {
+ if (router_initialize_tls_context() < 0) {
log_warn(LD_BUG, "Error reinitializing TLS context");
/* XXX is it a bug here, that we just keep going? -RD */
}
@@ -1187,7 +1216,7 @@ run_scheduled_events(time_t now)
if (time_to_launch_reachability_tests < now &&
(authdir_mode_tests_reachability(options)) &&
- !we_are_hibernating()) {
+ !net_is_disabled()) {
time_to_launch_reachability_tests = now + REACHABILITY_TEST_INTERVAL;
/* try to determine reachability of the other Tor relays */
dirserv_test_reachability(now);
@@ -1264,6 +1293,11 @@ run_scheduled_events(time_t now)
if (next_write && next_write < next_time_to_write_stats_files)
next_time_to_write_stats_files = next_write;
}
+ if (options->BridgeAuthoritativeDir) {
+ time_t next_write = rep_hist_desc_stats_write(time_to_write_stats_files);
+ if (next_write && next_write < next_time_to_write_stats_files)
+ next_time_to_write_stats_files = next_write;
+ }
time_to_write_stats_files = next_time_to_write_stats_files;
}
@@ -1318,7 +1352,7 @@ run_scheduled_events(time_t now)
/* 2b. Once per minute, regenerate and upload the descriptor if the old
* one is inaccurate. */
- if (time_to_check_descriptor < now) {
+ if (time_to_check_descriptor < now && !options->DisableNetwork) {
static int dirport_reachability_count = 0;
time_to_check_descriptor = now + CHECK_DESCRIPTOR_INTERVAL;
check_descriptor_bandwidth_changed(now);
@@ -1393,7 +1427,7 @@ run_scheduled_events(time_t now)
connection_expire_held_open();
/** 3d. And every 60 seconds, we relaunch listeners if any died. */
- if (!we_are_hibernating() && time_to_check_listeners < now) {
+ if (!net_is_disabled() && time_to_check_listeners < now) {
retry_all_listeners(NULL, NULL);
time_to_check_listeners = now+60;
}
@@ -1404,7 +1438,7 @@ run_scheduled_events(time_t now)
* and we make a new circ if there are no clean circuits.
*/
have_dir_info = router_have_minimum_dir_info();
- if (have_dir_info && !we_are_hibernating())
+ if (have_dir_info && !net_is_disabled())
circuit_build_needed_circs(now);
/* every 10 seconds, but not at the same second as other such events */
@@ -1435,7 +1469,7 @@ run_scheduled_events(time_t now)
circuit_close_all_marked();
/** 7. And upload service descriptors if necessary. */
- if (can_complete_circuit && !we_are_hibernating()) {
+ if (can_complete_circuit && !net_is_disabled()) {
rend_consider_services_upload(now);
rend_consider_descriptor_republication();
}
@@ -1452,7 +1486,8 @@ run_scheduled_events(time_t now)
/** 9. and if we're a server, check whether our DNS is telling stories to
* us. */
- if (is_server && time_to_check_for_correct_dns < now) {
+ if (!net_is_disabled() &&
+ public_server_mode(options) && time_to_check_for_correct_dns < now) {
if (!time_to_check_for_correct_dns) {
time_to_check_for_correct_dns = now + 60 + crypto_rand_int(120);
} else {
@@ -1462,7 +1497,7 @@ run_scheduled_events(time_t now)
}
}
- /** 10b. write bridge networkstatus file to disk */
+ /** 10. write bridge networkstatus file to disk */
if (options->BridgeAuthoritativeDir &&
time_to_write_bridge_status_file < now) {
networkstatus_dump_bridge_status_to_file(now);
@@ -1470,18 +1505,33 @@ run_scheduled_events(time_t now)
time_to_write_bridge_status_file = now+BRIDGE_STATUSFILE_INTERVAL;
}
- if (time_to_check_port_forwarding < now &&
+ /** 11. check the port forwarding app */
+ if (!net_is_disabled() &&
+ time_to_check_port_forwarding < now &&
options->PortForwarding &&
is_server) {
#define PORT_FORWARDING_CHECK_INTERVAL 5
+ /* XXXXX this should take a list of ports, not just two! */
tor_check_port_forwarding(options->PortForwardingHelper,
- options->DirPort,
- options->ORPort,
+ get_primary_dir_port(),
+ get_primary_or_port(),
now);
time_to_check_port_forwarding = now+PORT_FORWARDING_CHECK_INTERVAL;
}
- /** 11. write the heartbeat message */
+ /** 11b. check pending unconfigured managed proxies */
+ if (!net_is_disabled() && pt_proxies_configuration_pending())
+ pt_configure_remaining_proxies();
+
+ /** 11c. validate pluggable transports configuration if we need to */
+ if (!has_validated_pt &&
+ (options->Bridges || options->ClientTransportPlugin)) {
+ if (validate_pluggable_transports_config() == 0) {
+ has_validated_pt = 1;
+ }
+ }
+
+ /** 12. write the heartbeat message */
if (options->HeartbeatPeriod &&
time_to_next_heartbeat < now) {
log_heartbeat(now);
@@ -1506,9 +1556,6 @@ second_elapsed_callback(periodic_timer_t *timer, void *arg)
size_t bytes_written;
size_t bytes_read;
int seconds_elapsed;
-#ifdef USE_BUFFEREVENTS
- uint64_t cur_read,cur_written;
-#endif
const or_options_t *options = get_options();
(void)timer;
(void)arg;
@@ -1522,32 +1569,30 @@ second_elapsed_callback(periodic_timer_t *timer, void *arg)
/* the second has rolled over. check more stuff. */
seconds_elapsed = current_second ? (int)(now - current_second) : 0;
#ifdef USE_BUFFEREVENTS
- connection_get_rate_limit_totals(&cur_read, &cur_written);
- bytes_written = (size_t)(cur_written - stats_prev_n_written);
- bytes_read = (size_t)(cur_read - stats_prev_n_read);
+ {
+ uint64_t cur_read,cur_written;
+ connection_get_rate_limit_totals(&cur_read, &cur_written);
+ bytes_written = (size_t)(cur_written - stats_prev_n_written);
+ bytes_read = (size_t)(cur_read - stats_prev_n_read);
+ stats_n_bytes_read += bytes_read;
+ stats_n_bytes_written += bytes_written;
+ if (accounting_is_enabled(options) && seconds_elapsed >= 0)
+ accounting_add_bytes(bytes_read, bytes_written, seconds_elapsed);
+ stats_prev_n_written = cur_written;
+ stats_prev_n_read = cur_read;
+ }
#else
- bytes_written = stats_prev_global_write_bucket - global_write_bucket;
- bytes_read = stats_prev_global_read_bucket - global_read_bucket;
+ bytes_read = (size_t)(stats_n_bytes_read - stats_prev_n_read);
+ bytes_written = (size_t)(stats_n_bytes_written - stats_prev_n_written);
+ stats_prev_n_read = stats_n_bytes_read;
+ stats_prev_n_written = stats_n_bytes_written;
#endif
- stats_n_bytes_read += bytes_read;
- stats_n_bytes_written += bytes_written;
- if (accounting_is_enabled(options) && seconds_elapsed >= 0)
- accounting_add_bytes(bytes_read, bytes_written, seconds_elapsed);
+
control_event_bandwidth_used((uint32_t)bytes_read,(uint32_t)bytes_written);
control_event_stream_bandwidth_used();
- if (seconds_elapsed > 0)
- connection_bucket_refill(seconds_elapsed, now);
-#ifdef USE_BUFFEREVENTS
- stats_prev_n_written = cur_written;
- stats_prev_n_read = cur_read;
-#else
- stats_prev_global_read_bucket = global_read_bucket;
- stats_prev_global_write_bucket = global_write_bucket;
-#endif
-
if (server_mode(options) &&
- !we_are_hibernating() &&
+ !net_is_disabled() &&
seconds_elapsed > 0 &&
can_complete_circuit &&
stats_n_seconds_working / TIMEOUT_UNTIL_UNREACHABILITY_COMPLAINT !=
@@ -1593,6 +1638,57 @@ second_elapsed_callback(periodic_timer_t *timer, void *arg)
current_second = now; /* remember which second it is, for next time */
}
+#ifndef USE_BUFFEREVENTS
+/** Timer: used to invoke refill_callback(). */
+static periodic_timer_t *refill_timer = NULL;
+
+/** Libevent callback: invoked periodically to refill token buckets
+ * and count r/w bytes. It is only used when bufferevents are disabled. */
+static void
+refill_callback(periodic_timer_t *timer, void *arg)
+{
+ static struct timeval current_millisecond;
+ struct timeval now;
+
+ size_t bytes_written;
+ size_t bytes_read;
+ int milliseconds_elapsed = 0;
+ int seconds_rolled_over = 0;
+
+ const or_options_t *options = get_options();
+
+ (void)timer;
+ (void)arg;
+
+ tor_gettimeofday(&now);
+
+ /* If this is our first time, no time has passed. */
+ if (current_millisecond.tv_sec) {
+ long mdiff = tv_mdiff(&current_millisecond, &now);
+ if (mdiff > INT_MAX)
+ mdiff = INT_MAX;
+ milliseconds_elapsed = (int)mdiff;
+ seconds_rolled_over = (int)(now.tv_sec - current_millisecond.tv_sec);
+ }
+
+ bytes_written = stats_prev_global_write_bucket - global_write_bucket;
+ bytes_read = stats_prev_global_read_bucket - global_read_bucket;
+
+ stats_n_bytes_read += bytes_read;
+ stats_n_bytes_written += bytes_written;
+ if (accounting_is_enabled(options) && milliseconds_elapsed >= 0)
+ accounting_add_bytes(bytes_read, bytes_written, seconds_rolled_over);
+
+ if (milliseconds_elapsed > 0)
+ connection_bucket_refill(milliseconds_elapsed, now.tv_sec);
+
+ stats_prev_global_read_bucket = global_read_bucket;
+ stats_prev_global_write_bucket = global_write_bucket;
+
+ current_millisecond = now; /* remember what time it is, for next time */
+}
+#endif
+
#ifndef MS_WINDOWS
/** Called when a possibly ignorable libevent error occurs; ensures that we
* don't get into an infinite loop by ignoring too many errors from
@@ -1621,7 +1717,8 @@ ip_address_changed(int at_interface)
if (at_interface) {
if (! server) {
/* Okay, change our keys. */
- init_keys();
+ if (init_keys()<0)
+ log_warn(LD_GENERAL, "Unable to rotate keys after IP change!");
}
} else {
if (server) {
@@ -1696,7 +1793,8 @@ do_hup(void)
/* retry appropriate downloads */
router_reset_status_download_failures();
router_reset_descriptor_download_failures();
- update_networkstatus_downloads(time(NULL));
+ if (!options->DisableNetwork)
+ update_networkstatus_downloads(time(NULL));
/* We'll retry routerstatus downloads in about 10 seconds; no need to
* force a retry there. */
@@ -1790,6 +1888,22 @@ do_main_loop(void)
tor_assert(second_timer);
}
+#ifndef USE_BUFFEREVENTS
+ if (!refill_timer) {
+ struct timeval refill_interval;
+ int msecs = get_options()->TokenBucketRefillInterval;
+
+ refill_interval.tv_sec = msecs/1000;
+ refill_interval.tv_usec = (msecs%1000)*1000;
+
+ refill_timer = periodic_timer_new(tor_libevent_get_base(),
+ &refill_interval,
+ refill_callback,
+ NULL);
+ tor_assert(refill_timer);
+ }
+#endif
+
for (;;) {
if (nt_service_is_stopping())
return 0;
@@ -2152,14 +2266,24 @@ tor_init(int argc, char *argv[])
}
quiet_level = quiet;
- log(LOG_NOTICE, LD_GENERAL, "Tor v%s%s. This is experimental software. "
- "Do not rely on it for strong anonymity. (Running on %s)", get_version(),
+ {
+ const char *version = get_version();
+ log_notice(LD_GENERAL, "Tor v%s%s running on %s.", version,
#ifdef USE_BUFFEREVENTS
- " (with bufferevents)",
+ " (with bufferevents)",
#else
- "",
+ "",
#endif
- get_uname());
+ get_uname());
+
+ log_notice(LD_GENERAL, "WARNING: Tor can't help you if you use it wrong. "
+ "Learn how to be safe at "
+ "https://www.torproject.org/download/download#warning");
+
+ if (strstr(version, "alpha") || strstr(version, "beta"))
+ log_notice(LD_GENERAL, "This version is not a stable Tor release. "
+ "Expect more bugs than usual.");
+ }
if (network_init()<0) {
log_err(LD_BUG,"Error initializing network; exiting.");
@@ -2278,6 +2402,7 @@ tor_free_all(int postfork)
clear_pending_onions();
circuit_free_all();
entry_guards_free_all();
+ pt_free_all();
connection_free_all();
buf_shrink_freelists(1);
memarea_clear_freelist();
diff --git a/src/or/microdesc.c b/src/or/microdesc.c
index 510b2f40f..92f5c0358 100644
--- a/src/or/microdesc.c
+++ b/src/or/microdesc.c
@@ -499,6 +499,28 @@ microdesc_cache_rebuild(microdesc_cache_t *cache, int force)
return 0;
}
+/** Make sure that the reference count of every microdescriptor in cache is
+ * accurate. */
+void
+microdesc_check_counts(void)
+{
+ microdesc_t **mdp;
+ if (!the_microdesc_cache)
+ return;
+
+ HT_FOREACH(mdp, microdesc_map, &the_microdesc_cache->map) {
+ microdesc_t *md = *mdp;
+ unsigned int found=0;
+ const smartlist_t *nodes = nodelist_get_list();
+ SMARTLIST_FOREACH(nodes, node_t *, node, {
+ if (node->md == md) {
+ ++found;
+ }
+ });
+ tor_assert(found == md->held_by_nodes);
+ }
+}
+
/** Deallocate a single microdescriptor. Note: the microdescriptor MUST have
* previously been removed from the cache if it had ever been inserted. */
void
@@ -522,7 +544,7 @@ microdesc_free(microdesc_t *md)
}
tor_fragile_assert();
}
- if (md->held_by_node) {
+ if (md->held_by_nodes) {
int found=0;
const smartlist_t *nodes = nodelist_get_list();
SMARTLIST_FOREACH(nodes, node_t *, node, {
@@ -533,15 +555,15 @@ microdesc_free(microdesc_t *md)
});
if (found) {
log_warn(LD_BUG, "microdesc_free() called, but md was still referenced "
- "%d node(s)", found);
+ "%d node(s); held_by_nodes == %u", found, md->held_by_nodes);
} else {
- log_warn(LD_BUG, "microdesc_free() called with held_by_node set, but "
- "md was not refrenced by any nodes");
+ log_warn(LD_BUG, "microdesc_free() called with held_by_nodes set to %u, "
+ "but md was not referenced by any nodes", md->held_by_nodes);
}
tor_fragile_assert();
}
//tor_assert(md->held_in_map == 0);
- //tor_assert(md->held_by_node == 0);
+ //tor_assert(md->held_by_nodes == 0);
if (md->onion_pkey)
crypto_free_pk_env(md->onion_pkey);
diff --git a/src/or/microdesc.h b/src/or/microdesc.h
index 72e4572f9..456413281 100644
--- a/src/or/microdesc.h
+++ b/src/or/microdesc.h
@@ -14,6 +14,8 @@
microdesc_cache_t *get_microdesc_cache(void);
+void microdesc_check_counts(void);
+
smartlist_t *microdescs_add_to_cache(microdesc_cache_t *cache,
const char *s, const char *eos, saved_location_t where,
int no_save, time_t listed_at,
diff --git a/src/or/nodelist.c b/src/or/nodelist.c
index 308aaa865..eafc9b8b7 100644
--- a/src/or/nodelist.c
+++ b/src/or/nodelist.c
@@ -160,9 +160,9 @@ nodelist_add_microdesc(microdesc_t *md)
node = node_get_mutable_by_id(rs->identity_digest);
if (node) {
if (node->md)
- node->md->held_by_node = 0;
+ node->md->held_by_nodes--;
node->md = md;
- md->held_by_node = 1;
+ md->held_by_nodes++;
}
return node;
}
@@ -177,7 +177,10 @@ nodelist_set_consensus(networkstatus_t *ns)
{
const or_options_t *options = get_options();
int authdir = authdir_mode_v2(options) || authdir_mode_v3(options);
+
init_nodelist();
+ if (ns->flavor == FLAV_MICRODESC)
+ (void) get_microdesc_cache(); /* Make sure it exists first. */
SMARTLIST_FOREACH(the_nodelist->nodes, node_t *, node,
node->rs = NULL);
@@ -189,11 +192,11 @@ nodelist_set_consensus(networkstatus_t *ns)
if (node->md == NULL ||
tor_memneq(node->md->digest,rs->descriptor_digest,DIGEST256_LEN)) {
if (node->md)
- node->md->held_by_node = 0;
+ node->md->held_by_nodes--;
node->md = microdesc_cache_lookup_by_digest256(NULL,
rs->descriptor_digest);
if (node->md)
- node->md->held_by_node = 1;
+ node->md->held_by_nodes++;
}
}
@@ -250,7 +253,7 @@ nodelist_remove_microdesc(const char *identity_digest, microdesc_t *md)
node_t *node = node_get_mutable_by_id(identity_digest);
if (node && node->md == md) {
node->md = NULL;
- md->held_by_node = 0;
+ md->held_by_nodes--;
}
}
@@ -299,7 +302,7 @@ node_free(node_t *node)
if (!node)
return;
if (node->md)
- node->md->held_by_node = 0;
+ node->md->held_by_nodes--;
tor_assert(node->nodelist_idx == -1);
tor_free(node);
}
@@ -319,7 +322,7 @@ nodelist_purge(void)
if (node->md && !node->rs) {
/* An md is only useful if there is an rs. */
- node->md->held_by_node = 0;
+ node->md->held_by_nodes--;
node->md = NULL;
}
@@ -394,7 +397,7 @@ nodelist_assert_ok(void)
microdesc_cache_lookup_by_digest256(NULL, rs->descriptor_digest);
tor_assert(md == node->md);
if (md)
- tor_assert(md->held_by_node == 1);
+ tor_assert(md->held_by_nodes >= 1);
}
} SMARTLIST_FOREACH_END(rs);
}
@@ -643,24 +646,70 @@ node_exit_policy_rejects_all(const node_t *node)
return 1;
}
-/** Copy the address for <b>node</b> into *<b>addr_out</b>. */
-int
-node_get_addr(const node_t *node, tor_addr_t *addr_out)
+/** Return list of tor_addr_port_t with all OR ports (in the sense IP
+ * addr + TCP port) for <b>node</b>. Caller must free all elements
+ * using tor_free() and free the list using smartlist_free().
+ *
+ * XXX this is potentially a memory fragmentation hog -- if on
+ * critical path consider the option of having the caller allocate the
+ * memory
+ */
+smartlist_t *
+node_get_all_orports(const node_t *node)
+{
+ smartlist_t *sl = smartlist_create();
+
+ if (node->ri != NULL) {
+ if (node->ri->addr != 0) {
+ tor_addr_port_t *ap = tor_malloc(sizeof(tor_addr_port_t));
+ tor_addr_from_ipv4h(&ap->addr, node->ri->addr);
+ ap->port = node->ri->or_port;
+ smartlist_add(sl, ap);
+ }
+ if (!tor_addr_is_null(&node->ri->ipv6_addr)) {
+ tor_addr_port_t *ap = tor_malloc(sizeof(tor_addr_port_t));
+ tor_addr_copy(&ap->addr, &node->ri->ipv6_addr);
+ ap->port = node->ri->or_port;
+ smartlist_add(sl, ap);
+ }
+ } else if (node->rs != NULL) {
+ tor_addr_port_t *ap = tor_malloc(sizeof(tor_addr_port_t));
+ tor_addr_from_ipv4h(&ap->addr, node->rs->addr);
+ ap->port = node->rs->or_port;
+ smartlist_add(sl, ap);
+ }
+
+ return sl;
+}
+
+/** Copy the primary (IPv4) OR port (IP address and TCP port) for
+ * <b>node</b> into *<b>ap_out</b>. */
+void
+node_get_prim_orport(const node_t *node, tor_addr_port_t *ap_out)
{
if (node->ri) {
- tor_addr_from_ipv4h(addr_out, node->ri->addr);
- return 0;
- } else if (node->rs) {
- tor_addr_from_ipv4h(addr_out, node->rs->addr);
- return 0;
+ router_get_prim_orport(node->ri, ap_out);
+ }
+ else if (node->rs) {
+ tor_addr_from_ipv4h(&ap_out->addr, node->rs->addr);
+ ap_out->port = node->rs->or_port;
}
- return -1;
+}
+
+/** Wrapper around node_get_prim_orport for backward
+ compatibility. */
+void
+node_get_addr(const node_t *node, tor_addr_t *addr_out)
+{
+ tor_addr_port_t ap;
+ node_get_prim_orport(node, &ap);
+ tor_addr_copy(addr_out, &ap.addr);
}
/** Return the host-order IPv4 address for <b>node</b>, or 0 if it doesn't
* seem to have one. */
uint32_t
-node_get_addr_ipv4h(const node_t *node)
+node_get_prim_addr_ipv4h(const node_t *node)
{
if (node->ri) {
return node->ri->addr;
@@ -670,9 +719,38 @@ node_get_addr_ipv4h(const node_t *node)
return 0;
}
-/** Copy a string representation of the IP address for <b>node</b> into the
- * <b>len</b>-byte buffer at <b>buf</b>.
- */
+/** Copy the preferred OR port (IP address and TCP port) for
+ * <b>node</b> into <b>ap_out</b>. */
+void
+node_get_pref_orport(const node_t *node, tor_addr_port_t *ap_out)
+{
+ if (node->ri) {
+ router_get_pref_orport(node->ri, ap_out);
+ } else if (node->rs) {
+ /* No IPv6 in routerstatus_t yet. XXXprop186 ok for private
+ bridges but needs fixing */
+ tor_addr_from_ipv4h(&ap_out->addr, node->rs->addr);
+ ap_out->port = node->rs->or_port;
+ }
+}
+
+/** Copy the preferred IPv6 OR port (address and TCP port) for
+ * <b>node</b> into *<b>ap_out</b>. */
+void
+node_get_pref_ipv6_orport(const node_t *node, tor_addr_port_t *ap_out)
+{
+ if (node->ri) {
+ router_get_pref_ipv6_orport(node->ri, ap_out);
+ } else if (node->rs) {
+ /* No IPv6 in routerstatus_t yet. XXXprop186 ok for private
+ bridges but needs fixing */
+ tor_addr_make_unspec(&ap_out->addr);
+ ap_out->port = 0;
+ }
+}
+
+/** Copy a string representation of an IP address for <b>node</b> into
+ * the <b>len</b>-byte buffer at <b>buf</b>. */
void
node_get_address_string(const node_t *node, char *buf, size_t len)
{
@@ -698,18 +776,6 @@ node_get_declared_uptime(const node_t *node)
return -1;
}
-/** Return <b>node</b>'s declared or_port */
-uint16_t
-node_get_orport(const node_t *node)
-{
- if (node->ri)
- return node->ri->or_port;
- else if (node->rs)
- return node->rs->or_port;
- else
- return 0;
-}
-
/** Return <b>node</b>'s platform string, or NULL if we don't know it. */
const char *
node_get_platform(const node_t *node)
diff --git a/src/or/nodelist.h b/src/or/nodelist.h
index bd2e63953..1b7549dad 100644
--- a/src/or/nodelist.h
+++ b/src/or/nodelist.h
@@ -37,10 +37,13 @@ int node_get_purpose(const node_t *node);
(node_get_purpose((node)) == ROUTER_PURPOSE_BRIDGE)
int node_is_me(const node_t *node);
int node_exit_policy_rejects_all(const node_t *node);
-int node_get_addr(const node_t *node, tor_addr_t *addr_out);
-uint32_t node_get_addr_ipv4h(const node_t *node);
+smartlist_t *node_get_all_orports(const node_t *node);
+void node_get_prim_orport(const node_t *node, tor_addr_port_t *addr_port_out);
+void node_get_pref_orport(const node_t *node, tor_addr_port_t *addr_port_out);
+void node_get_pref_ipv6_orport(const node_t *node,
+ tor_addr_port_t *addr_port_out);
+uint32_t node_get_prim_addr_ipv4h(const node_t *node);
int node_allows_single_hop_exits(const node_t *node);
-uint16_t node_get_orport(const node_t *node);
const char *node_get_nickname(const node_t *node);
const char *node_get_platform(const node_t *node);
void node_get_address_string(const node_t *node, char *cp, size_t len);
@@ -50,6 +53,10 @@ const smartlist_t *node_get_declared_family(const node_t *node);
smartlist_t *nodelist_get_list(void);
+/* Temporary during transition to multiple addresses. */
+void node_get_addr(const node_t *node, tor_addr_t *addr_out);
+#define node_get_addr_ipv4h(n) node_get_prim_addr_ipv4h((n))
+
/* XXXX These need to move out of routerlist.c */
void nodelist_refresh_countries(void);
void node_set_country(node_t *node);
diff --git a/src/or/ntmain.c b/src/or/ntmain.c
index 4eb487e97..8d03ea808 100644
--- a/src/or/ntmain.c
+++ b/src/or/ntmain.c
@@ -727,6 +727,7 @@ nt_service_parse_options(int argc, char **argv, int *should_exit)
if ((argc >= 3) &&
(!strcmp(argv[1], "-service") || !strcmp(argv[1], "--service"))) {
nt_service_loadlibrary();
+ *should_exit = 1;
if (!strcmp(argv[2], "install"))
return nt_service_install(argc, argv);
if (!strcmp(argv[2], "remove"))
@@ -736,7 +737,6 @@ nt_service_parse_options(int argc, char **argv, int *should_exit)
if (!strcmp(argv[2], "stop"))
return nt_service_cmd_stop();
printf("Unrecognized service command '%s'\n", argv[2]);
- *should_exit = 1;
return 1;
}
if (argc >= 2) {
diff --git a/src/or/or.h b/src/or/or.h
index bf404df7e..46fead405 100644
--- a/src/or/or.h
+++ b/src/or/or.h
@@ -174,7 +174,9 @@
/** How often do we rotate onion keys? */
#define MIN_ONION_KEY_LIFETIME (7*24*60*60)
/** How often do we rotate TLS contexts? */
-#define MAX_SSL_KEY_LIFETIME (2*60*60)
+#define MAX_SSL_KEY_LIFETIME_INTERNAL (2*60*60)
+/** What expiry time shall we place on our SSL certs? */
+#define MAX_SSL_KEY_LIFETIME_ADVERTISED (365*24*60*60)
/** How old do we allow a router to get before removing it
* from the router list? In seconds. */
@@ -281,22 +283,27 @@ typedef enum {
#define OR_CONN_STATE_CONNECTING 1
/** State for a connection to an OR: waiting for proxy handshake to complete */
#define OR_CONN_STATE_PROXY_HANDSHAKING 2
-/** State for a connection to an OR or client: SSL is handshaking, not done
+/** State for an OR connection client: SSL is handshaking, not done
* yet. */
#define OR_CONN_STATE_TLS_HANDSHAKING 3
/** State for a connection to an OR: We're doing a second SSL handshake for
- * renegotiation purposes. */
+ * renegotiation purposes. (V2 handshake only.) */
#define OR_CONN_STATE_TLS_CLIENT_RENEGOTIATING 4
/** State for a connection at an OR: We're waiting for the client to
- * renegotiate. */
+ * renegotiate (to indicate a v2 handshake) or send a versions cell (to
+ * indicate a v3 handshake) */
#define OR_CONN_STATE_TLS_SERVER_RENEGOTIATING 5
-/** State for a connection to an OR: We're done with our SSL handshake, but we
- * haven't yet negotiated link protocol versions and sent a netinfo cell.
- */
-#define OR_CONN_STATE_OR_HANDSHAKING 6
-/** State for a connection to an OR: Ready to send/receive cells. */
-#define OR_CONN_STATE_OPEN 7
-#define _OR_CONN_STATE_MAX 7
+/** State for an OR connection: We're done with our SSL handshake, we've done
+ * renegotiation, but we haven't yet negotiated link protocol versions and
+ * sent a netinfo cell. */
+#define OR_CONN_STATE_OR_HANDSHAKING_V2 6
+/** State for an OR connection: We're done with our SSL handshake, but we
+ * haven't yet negotiated link protocol versions, done a V3 handshake, and
+ * sent a netinfo cell. */
+#define OR_CONN_STATE_OR_HANDSHAKING_V3 7
+/** State for an OR connection: Ready to send/receive cells. */
+#define OR_CONN_STATE_OPEN 8
+#define _OR_CONN_STATE_MAX 8
#define _EXIT_CONN_STATE_MIN 1
/** State for an exit connection: waiting for response from DNS farm. */
@@ -782,10 +789,10 @@ typedef struct rend_data_t {
char rend_cookie[REND_COOKIE_LEN];
} rend_data_t;
-/** Time interval for tracking possible replays of INTRODUCE2 cells.
- * Incoming cells with timestamps half of this interval in the past or
- * future are dropped immediately. */
-#define REND_REPLAY_TIME_INTERVAL (60 * 60)
+/** Time interval for tracking replays of DH public keys received in
+ * INTRODUCE2 cells. Used only to avoid launching multiple
+ * simultaneous attempts to connect to the same rendezvous point. */
+#define REND_REPLAY_TIME_INTERVAL (5 * 60)
/** Used to indicate which way a cell is going on a circuit. */
typedef enum {
@@ -818,9 +825,10 @@ typedef enum {
#define CELL_NETINFO 8
#define CELL_RELAY_EARLY 9
-/** True iff the cell command <b>x</b> is one that implies a variable-length
- * cell. */
-#define CELL_COMMAND_IS_VAR_LENGTH(x) ((x) == CELL_VERSIONS)
+#define CELL_VPADDING 128
+#define CELL_CERTS 129
+#define CELL_AUTH_CHALLENGE 130
+#define CELL_AUTHENTICATE 131
/** How long to test reachability before complaining to the user. */
#define TIMEOUT_UNTIL_UNREACHABILITY_COMPLAINT (20*60)
@@ -1076,7 +1084,47 @@ typedef struct listener_connection_t {
} listener_connection_t;
-/** Stores flags and information related to the portion of a v2 Tor OR
+/** Minimum length of the random part of an AUTH_CHALLENGE cell. */
+#define OR_AUTH_CHALLENGE_LEN 32
+
+/**
+ * @name Certificate types for CERTS cells.
+ *
+ * These values are defined by the protocol, and affect how an X509
+ * certificate in a CERTS cell is interpreted and used.
+ *
+ * @{ */
+/** A certificate that authenticates a TLS link key. The subject key
+ * must match the key used in the TLS handshake; it must be signed by
+ * the identity key. */
+#define OR_CERT_TYPE_TLS_LINK 1
+/** A self-signed identity certificate. The subject key must be a
+ * 1024-bit RSA key. */
+#define OR_CERT_TYPE_ID_1024 2
+/** A certificate that authenticates a key used in an AUTHENTICATE cell
+ * in the v3 handshake. The subject key must be a 1024-bit RSA key; it
+ * must be signed by the identity key */
+#define OR_CERT_TYPE_AUTH_1024 3
+/**@}*/
+
+/** The one currently supported type of AUTHENTICATE cell. It contains
+ * a bunch of structures signed with an RSA1024 key. The signed
+ * structures include a HMAC using negotiated TLS secrets, and a digest
+ * of all cells sent or received before the AUTHENTICATE cell (including
+ * the random server-generated AUTH_CHALLENGE cell).
+ */
+#define AUTHTYPE_RSA_SHA256_TLSSECRET 1
+
+/** The length of the part of the AUTHENTICATE cell body that the client and
+ * server can generate independently (when using RSA_SHA256_TLSSECRET). It
+ * contains everything except the client's timestamp, the client's randomly
+ * generated nonce, and the signature. */
+#define V3_AUTH_FIXED_PART_LEN (8+(32*6))
+/** The length of the part of the AUTHENTICATE cell body that the client
+ * signs. */
+#define V3_AUTH_BODY_LEN (V3_AUTH_FIXED_PART_LEN + 8 + 16)
+
+/** Stores flags and information related to the portion of a v2/v3 Tor OR
* connection handshake that happens after the TLS handshake is finished.
*/
typedef struct or_handshake_state_t {
@@ -1087,6 +1135,52 @@ typedef struct or_handshake_state_t {
unsigned int started_here : 1;
/** True iff we have received and processed a VERSIONS cell. */
unsigned int received_versions : 1;
+ /** True iff we have received and processed an AUTH_CHALLENGE cell */
+ unsigned int received_auth_challenge : 1;
+ /** True iff we have received and processed a CERTS cell. */
+ unsigned int received_certs_cell : 1;
+ /** True iff we have received and processed an AUTHENTICATE cell */
+ unsigned int received_authenticate : 1;
+
+ /* True iff we've received valid authentication to some identity. */
+ unsigned int authenticated : 1;
+
+ /** True iff we should feed outgoing cells into digest_sent and
+ * digest_received respectively.
+ *
+ * From the server's side of the v3 handshake, we want to capture everything
+ * from the VERSIONS cell through and including the AUTH_CHALLENGE cell.
+ * From the client's, we want to capture everything from the VERSIONS cell
+ * through but *not* including the AUTHENTICATE cell.
+ *
+ * @{ */
+ unsigned int digest_sent_data : 1;
+ unsigned int digest_received_data : 1;
+ /**@}*/
+
+ /** Identity digest that we have received and authenticated for our peer
+ * on this connection. */
+ uint8_t authenticated_peer_id[DIGEST_LEN];
+
+ /** Digests of the cells that we have sent or received as part of a V3
+ * handshake. Used for making and checking AUTHENTICATE cells.
+ *
+ * @{
+ */
+ crypto_digest_env_t *digest_sent;
+ crypto_digest_env_t *digest_received;
+ /** @} */
+
+ /** Certificates that a connection initiator sent us in a CERTS cell; we're
+ * holding on to them until we get an AUTHENTICATE cell.
+ *
+ * @{
+ */
+ /** The cert for the key that's supposed to sign the AUTHENTICATE cell */
+ tor_cert_t *auth_cert;
+ /** A self-signed identity certificate */
+ tor_cert_t *id_cert;
+ /**@}*/
} or_handshake_state_t;
/** Subtype of connection_t for an "OR connection" -- that is, one that speaks
@@ -1126,6 +1220,12 @@ typedef struct or_connection_t {
* router itself has a problem.
*/
unsigned int is_bad_for_new_circs:1;
+ /** True iff we have decided that the other end of this connection
+ * is a client. Connections with this flag set should never be used
+ * to satisfy an EXTEND request. */
+ unsigned int is_connection_with_client:1;
+ /** True iff this is an outgoing connection. */
+ unsigned int is_outgoing:1;
unsigned int proxy_type:2; /**< One of PROXY_NONE...PROXY_SOCKS5 */
uint8_t link_proto; /**< What protocol version are we using? 0 for
* "none negotiated yet." */
@@ -1172,6 +1272,8 @@ typedef struct or_connection_t {
unsigned active_circuit_pqueue_last_recalibrated;
struct or_connection_t *next_with_same_id; /**< Next connection with same
* identity digest as this one. */
+
+ tor_libevent_action_t *pending_action;
} or_connection_t;
/** Subtype of connection_t for an "edge connection" -- that is, an entry (ap)
@@ -1596,11 +1698,6 @@ typedef struct signed_descriptor_t {
* networkstatus that listed it. 0 for "never listed in a consensus or
* status, so far as we know." */
time_t last_listed_as_valid_until;
-#ifdef TRACK_SERVED_TIME
- /** The last time we served anybody this descriptor. Used for internal
- * testing to see whether we're holding on to descriptors too long. */
- time_t last_served_at; /*XXXX remove if not useful. */
-#endif
/* If true, we do not ever try to save this object in the cache. */
unsigned int do_not_cache : 1;
/* If true, this item is meant to represent an extrainfo. */
@@ -1625,6 +1722,13 @@ typedef struct {
uint16_t or_port; /**< Port for TLS connections. */
uint16_t dir_port; /**< Port for HTTP directory connections. */
+ /* DOCDOC */
+ /* XXXXX187 Actually these should probably be part of a list of addresses,
+ * not just a special case. Use abstractions to access these; don't do it
+ * directly. */
+ tor_addr_t ipv6_addr;
+ uint16_t ipv6_orport;
+
crypto_pk_env_t *onion_pkey; /**< Public RSA key for onions. */
crypto_pk_env_t *identity_pkey; /**< Public RSA key for signing. */
@@ -1656,6 +1760,8 @@ typedef struct {
/** True if, after we have added this router, we should re-launch
* tests for it. */
unsigned int needs_retest_if_added:1;
+ /** True if ipv6_addr:ipv6_orport is preferred. */
+ unsigned int ipv6_preferred:1;
/** Tor can use this router for general positions in circuits; we got it
* from a directory server as usual, or we're an authority and a server
@@ -1828,10 +1934,10 @@ typedef struct microdesc_t {
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 is attached to a node_t. */
- unsigned int held_by_node : 1;
/** If true, this microdesc has an entry in the microdesc_map */
unsigned int held_in_map : 1;
+ /** Reference count: how many node_ts have a reference to this microdesc? */
+ unsigned int held_by_nodes;
/** If saved_location == SAVED_IN_CACHE, this field holds the offset of the
* microdescriptor in the cache. */
@@ -2736,16 +2842,37 @@ typedef struct port_cfg_t {
int session_group; /**< A session group, or -1 if this port is not in a
* session group. */
+ /* Server port types (or, dir) only: */
+ unsigned int no_advertise : 1;
+ unsigned int no_listen : 1;
+ unsigned int all_addrs : 1;
+ unsigned int ipv4_only : 1;
+ unsigned int ipv6_only : 1;
+
/* Unix sockets only: */
/** Path for an AF_UNIX address */
char unix_addr[FLEXIBLE_ARRAY_MEMBER];
} port_cfg_t;
+/** Ordinary configuration line. */
+#define CONFIG_LINE_NORMAL 0
+/** Appends to previous configuration for the same option, even if we
+ * would ordinary replace it. */
+#define CONFIG_LINE_APPEND 1
+/* Removes all previous configuration for an option. */
+#define CONFIG_LINE_CLEAR 2
+
/** A linked list of lines in a config file. */
typedef struct config_line_t {
char *key;
char *value;
struct config_line_t *next;
+ /** What special treatment (if any) does this line require? */
+ unsigned int command:2;
+ /** If true, subsequent assignments to this linelist should replace
+ * it, not extend it. Set only on the first item in a linelist in an
+ * or_options_t. */
+ unsigned int fragile:1;
} config_line_t;
typedef struct routerset_t routerset_t;
@@ -2778,6 +2905,8 @@ typedef struct {
char *Address; /**< OR only: configured address for this onion router. */
char *PidFile; /**< Where to store PID of Tor process. */
+ int DynamicDHGroups; /**< Dynamic generation of prime moduli for use in DH.*/
+
routerset_t *ExitNodes; /**< Structure containing nicknames, digests,
* country codes and IP address patterns of ORs to
* consider as exits. */
@@ -2835,17 +2964,18 @@ typedef struct {
int DirAllowPrivateAddresses;
char *User; /**< Name of user to run Tor as. */
char *Group; /**< Name of group to run Tor as. */
- int ORPort; /**< Port to listen on for OR connections. */
+ config_line_t *ORPort; /**< Ports to listen on for OR connections. */
config_line_t *SocksPort; /**< Ports to listen on for SOCKS connections. */
/** Ports to listen on for transparent pf/netfilter connections. */
config_line_t *TransPort;
config_line_t *NATDPort; /**< Ports to listen on for transparent natd
* connections. */
- int ControlPort; /**< Port to listen on for control connections. */
+ config_line_t *ControlPort; /**< Port to listen on for control
+ * connections. */
config_line_t *ControlSocket; /**< List of Unix Domain Sockets to listen on
* for control connections. */
int ControlSocketsGroupWritable; /**< Boolean: Are control sockets g+rw? */
- int DirPort; /**< Port to listen on for directory connections. */
+ config_line_t *DirPort; /**< Port to listen on for directory connections. */
config_line_t *DNSPort; /**< Port to listen on for DNS requests. */
int AssumeReachable; /**< Whether to publish our descriptor regardless. */
int AuthoritativeDir; /**< Boolean: is this an authoritative directory? */
@@ -2877,6 +3007,9 @@ typedef struct {
config_line_t *ClientTransportPlugin; /**< List of client
transport plugins. */
+ config_line_t *ServerTransportPlugin; /**< List of client
+ transport plugins. */
+
int BridgeRelay; /**< Boolean: are we acting as a bridge relay? We make
* this explicit so we can change how we behave in the
* future. */
@@ -3060,6 +3193,18 @@ typedef struct {
* number of servers per IP address shared
* with an authority. */
+ /** Should we assign the Guard flag to relays which would allow
+ * exploitation of CVE-2011-2768 against their clients? */
+ int GiveGuardFlagTo_CVE_2011_2768_VulnerableRelays;
+
+ /** If non-zero, always vote the Fast flag for any relay advertising
+ * this amount of capacity or more. */
+ uint64_t AuthDirFastGuarantee;
+
+ /** If non-zero, this advertised capacity or more is always sufficient
+ * to satisfy the bandwidth requirement for the Guard flag. */
+ uint64_t AuthDirGuardBWGuarantee;
+
char *AccountingStart; /**< How long is the accounting interval, and when
* does it start? */
uint64_t AccountingMax; /**< How many bytes do we allow per accounting
@@ -3105,6 +3250,8 @@ typedef struct {
* log whether it was DNS-leaking or not? */
int HardwareAccel; /**< Boolean: Should we enable OpenSSL hardware
* acceleration where available? */
+ /** Token Bucket Refill resolution in milliseconds. */
+ int TokenBucketRefillInterval;
char *AccelName; /**< Optional hardware acceleration engine name. */
char *AccelDir; /**< Optional hardware acceleration engine search dir. */
int UseEntryGuards; /**< Boolean: Do we try to enter from a smallish number
@@ -3136,6 +3283,8 @@ typedef struct {
disclaimer. This allows a server administrator to show
that they're running Tor and anyone visiting their server
will know this without any specialized knowledge. */
+ int DisableDebuggerAttachment; /**< Currently Linux only specific attempt to
+ disable ptrace; needs BSD testing. */
/** Boolean: if set, we start even if our resolv.conf file is missing
* or broken. */
int ServerDNSAllowBrokenConfig;
@@ -3320,6 +3469,15 @@ typedef struct {
* never use it. If -1, we do what the consensus says. */
int OptimisticData;
+ /** If 1, and we are using IOCP, we set the kernel socket SNDBUF and RCVBUF
+ * to 0 to try to save kernel memory and avoid the dread "Out of buffers"
+ * issue. */
+ int UserspaceIOCPBuffers;
+
+ /** If 1, we accept and launch no external network connections, except on
+ * control ports. */
+ int DisableNetwork;
+
} or_options_t;
/** Persistent state for an onion router, as saved to disk. */
@@ -3346,6 +3504,8 @@ typedef struct {
/** A list of Entry Guard-related configuration lines. */
config_line_t *EntryGuards;
+ config_line_t *TransportProxies;
+
/** These fields hold information on the history of bandwidth usage for
* servers. The "Ends" fields hold the time when we last updated the
* bandwidth usage. The "Interval" fields hold the granularity, in seconds,
@@ -3898,14 +4058,85 @@ typedef struct rend_encoded_v2_service_descriptor_t {
char *desc_str; /**< Descriptor string. */
} rend_encoded_v2_service_descriptor_t;
-/** Introduction point information. */
+/** The maximum number of non-circuit-build-timeout failures a hidden
+ * service client will tolerate while trying to build a circuit to an
+ * introduction point. See also rend_intro_point_t.unreachable_count. */
+#define MAX_INTRO_POINT_REACHABILITY_FAILURES 5
+
+/** The maximum number of distinct INTRODUCE2 cells which a hidden
+ * service's introduction point will receive before it begins to
+ * expire.
+ *
+ * XXX023 Is this number at all sane? */
+#define INTRO_POINT_LIFETIME_INTRODUCTIONS 16384
+
+/** The minimum number of seconds that an introduction point will last
+ * before expiring due to old age. (If it receives
+ * INTRO_POINT_LIFETIME_INTRODUCTIONS INTRODUCE2 cells, it may expire
+ * sooner.)
+ *
+ * XXX023 Should this be configurable? */
+#define INTRO_POINT_LIFETIME_MIN_SECONDS 18*60*60
+/** The maximum number of seconds that an introduction point will last
+ * before expiring due to old age.
+ *
+ * XXX023 Should this be configurable? */
+#define INTRO_POINT_LIFETIME_MAX_SECONDS 24*60*60
+
+/** Introduction point information. Used both in rend_service_t (on
+ * the service side) and in rend_service_descriptor_t (on both the
+ * client and service side). */
typedef struct rend_intro_point_t {
extend_info_t *extend_info; /**< Extend info of this introduction point. */
crypto_pk_env_t *intro_key; /**< Introduction key that replaces the service
* key, if this descriptor is V2. */
+
+ /** (Client side only) Flag indicating that a timeout has occurred
+ * after sending an INTRODUCE cell to this intro point. After a
+ * timeout, an intro point should not be tried again during the same
+ * hidden service connection attempt, but it may be tried again
+ * during a future connection attempt. */
+ unsigned int timed_out : 1;
+
+ /** (Client side only) The number of times we have failed to build a
+ * circuit to this intro point for some reason other than our
+ * circuit-build timeout. See also MAX_INTRO_POINT_REACHABILITY_FAILURES. */
+ unsigned int unreachable_count : 3;
+
+ /** (Service side only) Flag indicating that this intro point was
+ * included in the last HS descriptor we generated. */
+ unsigned int listed_in_last_desc : 1;
+
+ /** (Service side only) A digestmap recording the INTRODUCE2 cells
+ * this intro point's circuit has received. Each key is the digest
+ * of the RSA-encrypted part of a received INTRODUCE2 cell; each
+ * value is a pointer to the time_t at which the cell was received.
+ * This digestmap is used to prevent replay attacks. */
+ digestmap_t *accepted_intro_rsa_parts;
+
+ /** (Service side only) The time at which this intro point was first
+ * published, or -1 if this intro point has not yet been
+ * published. */
+ time_t time_published;
+
+ /** (Service side only) The time at which this intro point should
+ * (start to) expire, or -1 if we haven't decided when this intro
+ * point should expire. */
+ time_t time_to_expire;
+
+ /** (Service side only) The time at which we decided that this intro
+ * point should start expiring, or -1 if this intro point is not yet
+ * expiring.
+ *
+ * This field also serves as a flag to indicate that we have decided
+ * to expire this intro point, in case intro_point_should_expire_now
+ * flaps (perhaps due to a clock jump; perhaps due to other
+ * weirdness, or even a (present or future) bug). */
+ time_t time_expiring;
} rend_intro_point_t;
-/** Information used to connect to a hidden service. */
+/** Information used to connect to a hidden service. Used on both the
+ * service side and the client side. */
typedef struct rend_service_descriptor_t {
crypto_pk_env_t *pk; /**< This service's public key. */
int version; /**< Version of the descriptor format: 0 or 2. */
diff --git a/src/or/relay.c b/src/or/relay.c
index 318c6c74b..6cf4b73a5 100644
--- a/src/or/relay.c
+++ b/src/or/relay.c
@@ -11,6 +11,7 @@
**/
#include <math.h>
+#define RELAY_PRIVATE
#include "or.h"
#include "buffers.h"
#include "circuitbuild.h"
@@ -33,9 +34,6 @@
#include "routerlist.h"
#include "routerparse.h"
-static int relay_crypt(circuit_t *circ, cell_t *cell,
- cell_direction_t cell_direction,
- crypt_path_t **layer_hint, char *recognized);
static edge_connection_t *relay_lookup_conn(circuit_t *circ, cell_t *cell,
cell_direction_t cell_direction,
crypt_path_t *layer_hint);
@@ -297,7 +295,7 @@ circuit_receive_relay_cell(cell_t *cell, circuit_t *circ,
* Return -1 to indicate that we should mark the circuit for close,
* else return 0.
*/
-static int
+int
relay_crypt(circuit_t *circ, cell_t *cell, cell_direction_t cell_direction,
crypt_path_t **layer_hint, char *recognized)
{
@@ -926,6 +924,7 @@ connection_edge_process_relay_cell_not_open(
}
circuit_log_path(LOG_INFO,LD_APP,TO_ORIGIN_CIRCUIT(circ));
/* don't send a socks reply to transparent conns */
+ tor_assert(entry_conn->socks_request != NULL);
if (!entry_conn->socks_request->has_finished)
connection_ap_handshake_socks_reply(entry_conn, NULL, 0, 0);
@@ -2101,7 +2100,7 @@ cell_ewma_set_scale_factor(const or_options_t *options,
ewma_enabled = 1;
log_info(LD_OR,
"Enabled cell_ewma algorithm because of value in %s; "
- "scale factor is %lf per %d seconds",
+ "scale factor is %f per %d seconds",
source, ewma_scale_factor, EWMA_TICK_LEN);
}
}
diff --git a/src/or/relay.h b/src/or/relay.h
index 7fce8edca..1cd4008bb 100644
--- a/src/or/relay.h
+++ b/src/or/relay.h
@@ -66,5 +66,10 @@ void circuit_clear_cell_queue(circuit_t *circ, or_connection_t *orconn);
void tor_gettimeofday_cache_clear(void);
+#ifdef RELAY_PRIVATE
+int relay_crypt(circuit_t *circ, cell_t *cell, cell_direction_t cell_direction,
+ crypt_path_t **layer_hint, char *recognized);
+#endif
+
#endif
diff --git a/src/or/rendclient.c b/src/or/rendclient.c
index 6fe9ba237..cda03c21e 100644
--- a/src/or/rendclient.c
+++ b/src/or/rendclient.c
@@ -81,8 +81,8 @@ rend_client_send_establish_rendezvous(origin_circuit_t *circ)
/** Extend the introduction circuit <b>circ</b> to another valid
* introduction point for the hidden service it is trying to connect
* to, or mark it and launch a new circuit if we can't extend it.
- * Return 0 on success. Return -1 and mark the introduction
- * circuit on failure.
+ * Return 0 on success or possible success. Return -1 and mark the
+ * introduction circuit for close on permanent failure.
*
* On failure, the caller is responsible for marking the associated
* rendezvous circuit for close. */
@@ -107,17 +107,11 @@ rend_client_reextend_intro_circuit(origin_circuit_t *circ)
result = circuit_extend_to_new_exit(circ, extend_info);
} else {
log_info(LD_REND,
- "Building a new introduction circuit, this time to %s.",
- safe_str_client(extend_info_describe(extend_info)));
+ "Closing intro circ %d (out of RELAY_EARLY cells).",
+ circ->_base.n_circ_id);
circuit_mark_for_close(TO_CIRCUIT(circ), END_CIRC_REASON_FINISHED);
- if (!circuit_launch_by_extend_info(CIRCUIT_PURPOSE_C_INTRODUCING,
- extend_info,
- CIRCLAUNCH_IS_INTERNAL)) {
- log_warn(LD_REND, "Building introduction circuit failed.");
- result = -1;
- } else {
- result = 0;
- }
+ /* connection_ap_handshake_attach_circuit will launch a new intro circ. */
+ result = 0;
}
extend_info_free(extend_info);
return result;
@@ -371,8 +365,9 @@ rend_client_introduction_acked(origin_circuit_t *circ,
log_info(LD_REND, "Got nack for %s from %s...",
safe_str_client(circ->rend_data->onion_address),
safe_str_client(extend_info_describe(circ->build_state->chosen_exit)));
- if (rend_client_remove_intro_point(circ->build_state->chosen_exit,
- circ->rend_data) > 0) {
+ if (rend_client_report_intro_point_failure(circ->build_state->chosen_exit,
+ circ->rend_data,
+ INTRO_POINT_FAILURE_GENERIC)>0) {
/* There are introduction points left. Re-extend the circuit to
* another intro point and try again. */
int result = rend_client_reextend_intro_circuit(circ);
@@ -389,9 +384,12 @@ rend_client_introduction_acked(origin_circuit_t *circ,
#define REND_HID_SERV_DIR_REQUERY_PERIOD (15 * 60)
/** Contains the last request times to hidden service directories for
- * certain queries; keys are strings consisting of base32-encoded
- * hidden service directory identities and base32-encoded descriptor IDs;
- * values are pointers to timestamps of the last requests. */
+ * certain queries; each key is a string consisting of the
+ * concatenation of a base32-encoded HS directory identity digest, a
+ * base32-encoded HS descriptor ID, and a hidden service address
+ * (without the ".onion" part); each value is a pointer to a time_t
+ * holding the time of the last request for that descriptor ID to that
+ * HS directory. */
static strmap_t *last_hid_serv_requests_ = NULL;
/** Returns last_hid_serv_requests_, initializing it to a new strmap if
@@ -404,23 +402,34 @@ get_last_hid_serv_requests(void)
return last_hid_serv_requests_;
}
+#define LAST_HID_SERV_REQUEST_KEY_LEN (REND_DESC_ID_V2_LEN_BASE32 + \
+ REND_DESC_ID_V2_LEN_BASE32 + \
+ REND_SERVICE_ID_LEN_BASE32)
+
/** Look up the last request time to hidden service directory <b>hs_dir</b>
- * for descriptor ID <b>desc_id_base32</b>. If <b>set</b> is non-zero,
+ * for descriptor ID <b>desc_id_base32</b> for the service specified in
+ * <b>rend_query</b>. If <b>set</b> is non-zero,
* assign the current time <b>now</b> and return that. Otherwise, return
* the most recent request time, or 0 if no such request has been sent
* before. */
static time_t
lookup_last_hid_serv_request(routerstatus_t *hs_dir,
- const char *desc_id_base32, time_t now, int set)
+ const char *desc_id_base32,
+ const rend_data_t *rend_query,
+ time_t now, int set)
{
char hsdir_id_base32[REND_DESC_ID_V2_LEN_BASE32 + 1];
- char hsdir_desc_comb_id[2 * REND_DESC_ID_V2_LEN_BASE32 + 1];
+ char hsdir_desc_comb_id[LAST_HID_SERV_REQUEST_KEY_LEN + 1];
time_t *last_request_ptr;
strmap_t *last_hid_serv_requests = get_last_hid_serv_requests();
base32_encode(hsdir_id_base32, sizeof(hsdir_id_base32),
hs_dir->identity_digest, DIGEST_LEN);
- tor_snprintf(hsdir_desc_comb_id, sizeof(hsdir_desc_comb_id), "%s%s",
- hsdir_id_base32, desc_id_base32);
+ tor_snprintf(hsdir_desc_comb_id, sizeof(hsdir_desc_comb_id), "%s%s%s",
+ hsdir_id_base32,
+ desc_id_base32,
+ rend_query->onion_address);
+ /* XXX023 tor_assert(strlen(hsdir_desc_comb_id) ==
+ LAST_HID_SERV_REQUEST_KEY_LEN); */
if (set) {
time_t *oldptr;
last_request_ptr = tor_malloc_zero(sizeof(time_t));
@@ -459,6 +468,33 @@ directory_clean_last_hid_serv_requests(time_t now)
}
}
+/** Remove all requests related to the hidden service named
+ * <b>onion_address</b> from the history of times of requests to
+ * hidden service directories. */
+static void
+purge_hid_serv_from_last_hid_serv_requests(const char *onion_address)
+{
+ strmap_iter_t *iter;
+ strmap_t *last_hid_serv_requests = get_last_hid_serv_requests();
+ /* XXX023 tor_assert(strlen(onion_address) == REND_SERVICE_ID_LEN_BASE32); */
+ for (iter = strmap_iter_init(last_hid_serv_requests);
+ !strmap_iter_done(iter); ) {
+ const char *key;
+ void *val;
+ strmap_iter_get(iter, &key, &val);
+ /* XXX023 tor_assert(strlen(key) == LAST_HID_SERV_REQUEST_KEY_LEN); */
+ if (tor_memeq(key + LAST_HID_SERV_REQUEST_KEY_LEN -
+ REND_SERVICE_ID_LEN_BASE32,
+ onion_address,
+ REND_SERVICE_ID_LEN_BASE32)) {
+ iter = strmap_iter_next_rmv(last_hid_serv_requests, iter);
+ tor_free(val);
+ } else {
+ iter = strmap_iter_next(last_hid_serv_requests, iter);
+ }
+ }
+}
+
/** Purge the history of request times to hidden service directories,
* so that future lookups of an HS descriptor will not fail because we
* accessed all of the HSDir relays responsible for the descriptor
@@ -480,12 +516,11 @@ rend_client_purge_last_hid_serv_requests(void)
}
/** Determine the responsible hidden service directories for <b>desc_id</b>
- * and fetch the descriptor belonging to that ID from one of them. Only
- * send a request to hidden service directories that we did not try within
- * the last REND_HID_SERV_DIR_REQUERY_PERIOD seconds; on success, return 1,
+ * and fetch the descriptor with that ID from one of them. Only
+ * send a request to a hidden service directory that we have not yet tried
+ * during this attempt to connect to this hidden service; on success, return 1,
* in the case that no hidden service directory is left to ask for the
- * descriptor, return 0, and in case of a failure -1. <b>query</b> is only
- * passed for pretty log statements. */
+ * descriptor, return 0, and in case of a failure -1. */
static int
directory_get_from_hs_dir(const char *desc_id, const rend_data_t *rend_query)
{
@@ -510,11 +545,12 @@ directory_get_from_hs_dir(const char *desc_id, const rend_data_t *rend_query)
directory_clean_last_hid_serv_requests(now);
SMARTLIST_FOREACH(responsible_dirs, routerstatus_t *, dir, {
- time_t last = lookup_last_hid_serv_request(dir, desc_id_base32, 0, 0);
+ time_t last = lookup_last_hid_serv_request(
+ dir, desc_id_base32, rend_query, 0, 0);
const node_t *node = node_get_by_id(dir->identity_digest);
if (last + REND_HID_SERV_DIR_REQUERY_PERIOD >= now ||
!node || !node_has_descriptor(node))
- SMARTLIST_DEL_CURRENT(responsible_dirs, dir);
+ SMARTLIST_DEL_CURRENT(responsible_dirs, dir);
});
hs_dir = smartlist_choose(responsible_dirs);
@@ -526,9 +562,9 @@ directory_get_from_hs_dir(const char *desc_id, const rend_data_t *rend_query)
return 0;
}
- /* Remember, that we are requesting a descriptor from this hidden service
+ /* Remember that we are requesting a descriptor from this hidden service
* directory now. */
- lookup_last_hid_serv_request(hs_dir, desc_id_base32, now, 1);
+ lookup_last_hid_serv_request(hs_dir, desc_id_base32, rend_query, now, 1);
/* Encode descriptor cookie for logging purposes. */
if (rend_query->auth_type != REND_NO_AUTH) {
@@ -582,10 +618,11 @@ rend_client_refetch_v2_renddesc(const rend_data_t *rend_query)
"service descriptor, but are not fetching service descriptors.");
return;
}
- /* Before fetching, check if we already have the descriptor here. */
- if (rend_cache_lookup_entry(rend_query->onion_address, -1, &e) > 0) {
+ /* Before fetching, check if we already have a usable descriptor here. */
+ if (rend_cache_lookup_entry(rend_query->onion_address, -1, &e) > 0 &&
+ rend_client_any_intro_points_usable(e)) {
log_info(LD_REND, "We would fetch a v2 rendezvous descriptor, but we "
- "already have that descriptor here. Not fetching.");
+ "already have a usable descriptor here. Not fetching.");
return;
}
log_debug(LD_REND, "Fetching v2 rendezvous descriptor for service %s",
@@ -655,16 +692,31 @@ rend_client_cancel_descriptor_fetches(void)
} SMARTLIST_FOREACH_END(conn);
}
-/** Remove failed_intro from ent. If ent now has no intro points, or
- * service is unrecognized, then launch a new renddesc fetch.
-
+/** Mark <b>failed_intro</b> as a failed introduction point for the
+ * hidden service specified by <b>rend_query</b>. If the HS now has no
+ * usable intro points, or we do not have an HS descriptor for it,
+ * then launch a new renddesc fetch.
+ *
+ * If <b>failure_type</b> is INTRO_POINT_FAILURE_GENERIC, remove the
+ * intro point from (our parsed copy of) the HS descriptor.
+ *
+ * If <b>failure_type</b> is INTRO_POINT_FAILURE_TIMEOUT, mark the
+ * intro point as 'timed out'; it will not be retried until the
+ * current hidden service connection attempt has ended or it has
+ * appeared in a newly fetched rendezvous descriptor.
+ *
+ * If <b>failure_type</b> is INTRO_POINT_FAILURE_UNREACHABLE,
+ * increment the intro point's reachability-failure count; if it has
+ * now failed MAX_INTRO_POINT_REACHABILITY_FAILURES or more times,
+ * remove the intro point from (our parsed copy of) the HS descriptor.
*
- * Return -1 if error, 0 if no intro points remain or service
+ * Return -1 if error, 0 if no usable intro points remain or service
* unrecognized, 1 if recognized and some intro points remain.
*/
int
-rend_client_remove_intro_point(extend_info_t *failed_intro,
- const rend_data_t *rend_query)
+rend_client_report_intro_point_failure(extend_info_t *failed_intro,
+ const rend_data_t *rend_query,
+ unsigned int failure_type)
{
int i, r;
rend_cache_entry_t *ent;
@@ -687,8 +739,34 @@ rend_client_remove_intro_point(extend_info_t *failed_intro,
rend_intro_point_t *intro = smartlist_get(ent->parsed->intro_nodes, i);
if (tor_memeq(failed_intro->identity_digest,
intro->extend_info->identity_digest, DIGEST_LEN)) {
- rend_intro_point_free(intro);
- smartlist_del(ent->parsed->intro_nodes, i);
+ switch (failure_type) {
+ default:
+ log_warn(LD_BUG, "Unknown failure type %u. Removing intro point.",
+ failure_type);
+ tor_fragile_assert();
+ /* fall through */
+ case INTRO_POINT_FAILURE_GENERIC:
+ rend_intro_point_free(intro);
+ smartlist_del(ent->parsed->intro_nodes, i);
+ break;
+ case INTRO_POINT_FAILURE_TIMEOUT:
+ intro->timed_out = 1;
+ break;
+ case INTRO_POINT_FAILURE_UNREACHABLE:
+ ++(intro->unreachable_count);
+ {
+ int zap_intro_point =
+ intro->unreachable_count >= MAX_INTRO_POINT_REACHABILITY_FAILURES;
+ log_info(LD_REND, "Failed to reach this intro point %u times.%s",
+ intro->unreachable_count,
+ zap_intro_point ? " Removing from descriptor.": "");
+ if (zap_intro_point) {
+ rend_intro_point_free(intro);
+ smartlist_del(ent->parsed->intro_nodes, i);
+ }
+ }
+ break;
+ }
break;
}
}
@@ -867,10 +945,36 @@ rend_client_desc_trynow(const char *query)
"unavailable (try again later).",
safe_str_client(query));
connection_mark_unattached_ap(conn, END_STREAM_REASON_RESOLVEFAILED);
+ rend_client_note_connection_attempt_ended(query);
}
} SMARTLIST_FOREACH_END(base_conn);
}
+/** Clear temporary state used only during an attempt to connect to
+ * the hidden service named <b>onion_address</b>. Called when a
+ * connection attempt has ended; may be called occasionally at other
+ * times, and should be reasonably harmless. */
+void
+rend_client_note_connection_attempt_ended(const char *onion_address)
+{
+ rend_cache_entry_t *cache_entry = NULL;
+ rend_cache_lookup_entry(onion_address, -1, &cache_entry);
+
+ log_info(LD_REND, "Connection attempt for %s has ended; "
+ "cleaning up temporary state.",
+ safe_str_client(onion_address));
+
+ /* Clear the timed_out flag on all remaining intro points for this HS. */
+ if (cache_entry != NULL) {
+ SMARTLIST_FOREACH(cache_entry->parsed->intro_nodes,
+ rend_intro_point_t *, ip,
+ ip->timed_out = 0; );
+ }
+
+ /* Remove the HS's entries in last_hid_serv_requests. */
+ purge_hid_serv_from_last_hid_serv_requests(onion_address);
+}
+
/** Return a newly allocated extend_info_t* for a randomly chosen introduction
* point for the named hidden service. Return NULL if all introduction points
* have been tried and failed.
@@ -919,6 +1023,13 @@ rend_client_get_random_intro_impl(const rend_cache_entry_t *entry,
usable_nodes = smartlist_create();
smartlist_add_all(usable_nodes, entry->parsed->intro_nodes);
+ /* Remove the intro points that have timed out during this HS
+ * connection attempt from our list of usable nodes. */
+ SMARTLIST_FOREACH(usable_nodes, rend_intro_point_t *, ip,
+ if (ip->timed_out) {
+ SMARTLIST_DEL_CURRENT(usable_nodes, ip);
+ });
+
again:
if (smartlist_len(usable_nodes) == 0) {
if (n_excluded && get_options()->StrictNodes && warnings) {
@@ -937,6 +1048,7 @@ rend_client_get_random_intro_impl(const rend_cache_entry_t *entry,
/* Do we need to look up the router or is the extend info complete? */
if (!intro->extend_info->onion_key) {
const node_t *node;
+ extend_info_t *new_extend_info;
if (tor_digest_is_zero(intro->extend_info->identity_digest))
node = node_get_by_hex_id(intro->extend_info->nickname);
else
@@ -947,8 +1059,18 @@ rend_client_get_random_intro_impl(const rend_cache_entry_t *entry,
smartlist_del(usable_nodes, i);
goto again;
}
- extend_info_free(intro->extend_info);
- intro->extend_info = extend_info_from_node(node);
+ new_extend_info = extend_info_from_node(node, 0);
+ if (!new_extend_info) {
+ log_info(LD_REND, "We don't have a descriptor for the intro-point relay "
+ "'%s'; trying another.",
+ extend_info_describe(intro->extend_info));
+ smartlist_del(usable_nodes, i);
+ goto again;
+ } else {
+ extend_info_free(intro->extend_info);
+ intro->extend_info = new_extend_info;
+ }
+ tor_assert(intro->extend_info != NULL);
}
/* Check if we should refuse to talk to this router. */
if (strict &&
@@ -968,8 +1090,13 @@ rend_client_get_random_intro_impl(const rend_cache_entry_t *entry,
int
rend_client_any_intro_points_usable(const rend_cache_entry_t *entry)
{
- return rend_client_get_random_intro_impl(
- entry, get_options()->StrictNodes, 0) != NULL;
+ extend_info_t *extend_info =
+ rend_client_get_random_intro_impl(entry, get_options()->StrictNodes, 0);
+
+ int rv = (extend_info != NULL);
+
+ extend_info_free(extend_info);
+ return rv;
}
/** Client-side authorizations for hidden services; map of onion address to
diff --git a/src/or/rendclient.h b/src/or/rendclient.h
index 1893fd952..89da47789 100644
--- a/src/or/rendclient.h
+++ b/src/or/rendclient.h
@@ -22,8 +22,15 @@ int rend_client_introduction_acked(origin_circuit_t *circ,
void rend_client_refetch_v2_renddesc(const rend_data_t *rend_query);
void rend_client_cancel_descriptor_fetches(void);
void rend_client_purge_last_hid_serv_requests(void);
-int rend_client_remove_intro_point(extend_info_t *failed_intro,
- const rend_data_t *rend_query);
+
+#define INTRO_POINT_FAILURE_GENERIC 0
+#define INTRO_POINT_FAILURE_TIMEOUT 1
+#define INTRO_POINT_FAILURE_UNREACHABLE 2
+
+int rend_client_report_intro_point_failure(extend_info_t *failed_intro,
+ const rend_data_t *rend_query,
+ unsigned int failure_type);
+
int rend_client_rendezvous_acked(origin_circuit_t *circ,
const uint8_t *request,
size_t request_len);
@@ -32,6 +39,8 @@ int rend_client_receive_rendezvous(origin_circuit_t *circ,
size_t request_len);
void rend_client_desc_trynow(const char *query);
+void rend_client_note_connection_attempt_ended(const char *onion_address);
+
extend_info_t *rend_client_get_random_intro(const rend_data_t *rend_query);
int rend_client_any_intro_points_usable(const rend_cache_entry_t *entry);
diff --git a/src/or/rendcommon.c b/src/or/rendcommon.c
index 94bb00221..d09e6566c 100644
--- a/src/or/rendcommon.c
+++ b/src/or/rendcommon.c
@@ -440,6 +440,11 @@ rend_intro_point_free(rend_intro_point_t *intro)
extend_info_free(intro->extend_info);
crypto_free_pk_env(intro->intro_key);
+
+ if (intro->accepted_intro_rsa_parts != NULL) {
+ digestmap_free(intro->accepted_intro_rsa_parts, _tor_free);
+ }
+
tor_free(intro);
}
diff --git a/src/or/rendservice.c b/src/or/rendservice.c
index a93524116..1d0773e1c 100644
--- a/src/or/rendservice.c
+++ b/src/or/rendservice.c
@@ -26,6 +26,10 @@
static origin_circuit_t *find_intro_circuit(rend_intro_point_t *intro,
const char *pk_digest);
+static rend_intro_point_t *find_intro_point(origin_circuit_t *circ);
+
+static int intro_point_should_expire_now(rend_intro_point_t *intro,
+ time_t now);
/** Represents the mapping from a virtual port of a rendezvous service to
* a real port on some IP.
@@ -36,8 +40,10 @@ typedef struct rend_service_port_config_t {
tor_addr_t real_addr;
} rend_service_port_config_t;
-/** Try to maintain this many intro points per service if possible. */
-#define NUM_INTRO_POINTS 3
+/** Try to maintain this many intro points per service by default. */
+#define NUM_INTRO_POINTS_DEFAULT 3
+/** Maintain no more than this many intro points per hidden service. */
+#define NUM_INTRO_POINTS_MAX 10
/** If we can't build our intro circuits, don't retry for this long. */
#define INTRO_CIRC_RETRY_PERIOD (60*5)
@@ -51,6 +57,10 @@ typedef struct rend_service_port_config_t {
* rendezvous point before giving up? */
#define MAX_REND_TIMEOUT 30
+/** How many seconds should we wait for new HS descriptors to reach
+ * our clients before we close an expiring intro point? */
+#define INTRO_POINT_EXPIRATION_GRACE_PERIOD 5*60
+
/** Represents a single hidden service running at this OP. */
typedef struct rend_service_t {
/* Fields specified in config file */
@@ -72,17 +82,24 @@ typedef struct rend_service_t {
* introduction points. */
int n_intro_circuits_launched; /**< Count of intro circuits we have
* established in this period. */
+ unsigned int n_intro_points_wanted; /**< Number of intro points this
+ * service wants to have open. */
rend_service_descriptor_t *desc; /**< Current hidden service descriptor. */
time_t desc_is_dirty; /**< Time at which changes to the hidden service
* descriptor content occurred, or 0 if it's
* up-to-date. */
time_t next_upload_time; /**< Scheduled next hidden service descriptor
* upload time. */
- /** Map from digests of Diffie-Hellman values INTRODUCE2 to time_t of when
- * they were received; used to prevent replays. */
- digestmap_t *accepted_intros;
- /** Time at which we last removed expired values from accepted_intros. */
- time_t last_cleaned_accepted_intros;
+ /** Map from digests of Diffie-Hellman values INTRODUCE2 to time_t
+ * of when they were received. Clients may send INTRODUCE1 cells
+ * for the same rendezvous point through two or more different
+ * introduction points; when they do, this digestmap keeps us from
+ * launching multiple simultaneous attempts to connect to the same
+ * rend point. */
+ digestmap_t *accepted_intro_dh_parts;
+ /** Time at which we last removed expired values from
+ * accepted_intro_dh_parts. */
+ time_t last_cleaned_accepted_intro_dh_parts;
} rend_service_t;
/** A list of rend_service_t's for services run on this OP.
@@ -142,7 +159,7 @@ rend_service_free(rend_service_t *service)
rend_authorized_client_free(c););
smartlist_free(service->clients);
}
- digestmap_free(service->accepted_intros, _tor_free);
+ digestmap_free(service->accepted_intro_dh_parts, _tor_free);
tor_free(service);
}
@@ -172,14 +189,17 @@ rend_add_service(rend_service_t *service)
if (service->auth_type != REND_NO_AUTH &&
smartlist_len(service->clients) == 0) {
- log_warn(LD_CONFIG, "Hidden service with client authorization but no "
- "clients; ignoring.");
+ log_warn(LD_CONFIG, "Hidden service (%s) with client authorization but no "
+ "clients; ignoring.",
+ escaped(service->directory));
rend_service_free(service);
return;
}
if (!smartlist_len(service->ports)) {
- log_warn(LD_CONFIG, "Hidden service with no ports configured; ignoring.");
+ log_warn(LD_CONFIG, "Hidden service (%s) with no ports configured; "
+ "ignoring.",
+ escaped(service->directory));
rend_service_free(service);
} else {
int dupe = 0;
@@ -258,7 +278,7 @@ parse_port_config(const char *string)
} else {
addrport = smartlist_get(sl,1);
if (strchr(addrport, ':') || strchr(addrport, '.')) {
- if (tor_addr_port_parse(addrport, &addr, &p)<0) {
+ if (tor_addr_port_lookup(addrport, &addr, &p)<0) {
log_warn(LD_CONFIG,"Unparseable address in hidden service port "
"configuration.");
goto err;
@@ -316,6 +336,7 @@ rend_config_services(const or_options_t *options, int validate_only)
service->directory = tor_strdup(line->value);
service->ports = smartlist_create();
service->intro_period_started = time(NULL);
+ service->n_intro_points_wanted = NUM_INTRO_POINTS_DEFAULT;
continue;
}
if (!service) {
@@ -410,7 +431,7 @@ rend_config_services(const or_options_t *options, int validate_only)
if (strspn(client_name, REND_LEGAL_CLIENTNAME_CHARACTERS) != len) {
log_warn(LD_CONFIG, "HiddenServiceAuthorizeClient contains an "
"illegal client name: '%s'. Valid "
- "characters are [A-Za-z0-9+-_].",
+ "characters are [A-Za-z0-9+_-].",
client_name);
SMARTLIST_FOREACH(clients, char *, cp, tor_free(cp));
smartlist_free(clients);
@@ -539,16 +560,38 @@ rend_service_update_descriptor(rend_service_t *service)
for (i = 0; i < smartlist_len(service->intro_nodes); ++i) {
rend_intro_point_t *intro_svc = smartlist_get(service->intro_nodes, i);
rend_intro_point_t *intro_desc;
+
+ /* This intro point won't be listed in the descriptor... */
+ intro_svc->listed_in_last_desc = 0;
+
+ if (intro_svc->time_expiring != -1) {
+ /* This intro point is expiring. Don't list it. */
+ continue;
+ }
+
circ = find_intro_circuit(intro_svc, service->pk_digest);
- if (!circ || circ->_base.purpose != CIRCUIT_PURPOSE_S_INTRO)
+ if (!circ || circ->_base.purpose != CIRCUIT_PURPOSE_S_INTRO) {
+ /* This intro point's circuit isn't finished yet. Don't list it. */
continue;
+ }
+
+ /* ...unless this intro point is listed in the descriptor. */
+ intro_svc->listed_in_last_desc = 1;
- /* We have an entirely established intro circuit. */
+ /* We have an entirely established intro circuit. Publish it in
+ * our descriptor. */
intro_desc = tor_malloc_zero(sizeof(rend_intro_point_t));
intro_desc->extend_info = extend_info_dup(intro_svc->extend_info);
if (intro_svc->intro_key)
intro_desc->intro_key = crypto_pk_dup_key(intro_svc->intro_key);
smartlist_add(d->intro_nodes, intro_desc);
+
+ if (intro_svc->time_published == -1) {
+ /* We are publishing this intro point in a descriptor for the
+ * first time -- note the current time in the service's copy of
+ * the intro point. */
+ intro_svc->time_published = time(NULL);
+ }
}
}
@@ -854,15 +897,16 @@ rend_check_authorization(rend_service_t *service,
/** Remove elements from <b>service</b>'s replay cache that are old enough to
* be noticed by timestamp checking. */
static void
-clean_accepted_intros(rend_service_t *service, time_t now)
+clean_accepted_intro_dh_parts(rend_service_t *service, time_t now)
{
const time_t cutoff = now - REND_REPLAY_TIME_INTERVAL;
- service->last_cleaned_accepted_intros = now;
- if (!service->accepted_intros)
+ service->last_cleaned_accepted_intro_dh_parts = now;
+ if (!service->accepted_intro_dh_parts)
return;
- DIGESTMAP_FOREACH_MODIFY(service->accepted_intros, digest, time_t *, t) {
+ DIGESTMAP_FOREACH_MODIFY(service->accepted_intro_dh_parts, digest,
+ time_t *, t) {
if (*t < cutoff) {
tor_free(t);
MAP_DEL_CURRENT(digest);
@@ -887,6 +931,7 @@ rend_service_introduce(origin_circuit_t *circuit, const uint8_t *request,
char buf[RELAY_PAYLOAD_SIZE];
char keys[DIGEST_LEN+CPATH_KEY_MATERIAL_LEN]; /* Holds KH, Df, Db, Kf, Kb */
rend_service_t *service;
+ rend_intro_point_t *intro_point;
int r, i, v3_shift = 0;
size_t len, keylen;
crypto_dh_env_t *dh = NULL;
@@ -934,7 +979,8 @@ rend_service_introduce(origin_circuit_t *circuit, const uint8_t *request,
service = rend_service_get_by_pk_digest(
circuit->rend_data->rend_pk_digest);
if (!service) {
- log_warn(LD_REND, "Got an INTRODUCE2 cell for an unrecognized service %s.",
+ log_warn(LD_BUG, "Internal error: Got an INTRODUCE2 cell on an intro "
+ "circ for an unrecognized service %s.",
escaped(serviceid));
return -1;
}
@@ -958,6 +1004,39 @@ rend_service_introduce(origin_circuit_t *circuit, const uint8_t *request,
"PK-encrypted portion of INTRODUCE2 cell was truncated.");
return -1;
}
+
+ intro_point = find_intro_point(circuit);
+ if (intro_point == NULL) {
+ log_warn(LD_BUG, "Internal error: Got an INTRODUCE2 cell on an intro circ "
+ "(for service %s) with no corresponding rend_intro_point_t.",
+ escaped(serviceid));
+ return -1;
+ }
+
+ if (!service->accepted_intro_dh_parts)
+ service->accepted_intro_dh_parts = digestmap_new();
+
+ if (!intro_point->accepted_intro_rsa_parts)
+ intro_point->accepted_intro_rsa_parts = digestmap_new();
+
+ {
+ char pkpart_digest[DIGEST_LEN];
+ /* Check for replay of PK-encrypted portion. */
+ crypto_digest(pkpart_digest, (char*)request+DIGEST_LEN, keylen);
+ access_time = digestmap_get(intro_point->accepted_intro_rsa_parts,
+ pkpart_digest);
+ if (access_time != NULL) {
+ log_warn(LD_REND, "Possible replay detected! We received an "
+ "INTRODUCE2 cell with same PK-encrypted part %d seconds ago. "
+ "Dropping cell.", (int)(now-*access_time));
+ return -1;
+ }
+ access_time = tor_malloc(sizeof(time_t));
+ *access_time = now;
+ digestmap_set(intro_point->accepted_intro_rsa_parts,
+ pkpart_digest, access_time);
+ }
+
/* Next N bytes is encrypted with service key */
note_crypto_pk_op(REND_SERVER);
r = crypto_pk_private_hybrid_decrypt(
@@ -971,7 +1050,6 @@ rend_service_introduce(origin_circuit_t *circuit, const uint8_t *request,
len = r;
if (*buf == 3) {
/* Version 3 INTRODUCE2 cell. */
- time_t ts = 0;
v3_shift = 1;
auth_type = buf[1];
switch (auth_type) {
@@ -993,15 +1071,8 @@ rend_service_introduce(origin_circuit_t *circuit, const uint8_t *request,
log_info(LD_REND, "Unknown authorization type '%d'", auth_type);
}
- /* Check timestamp. */
- ts = ntohl(get_uint32(buf+1+v3_shift));
+ /* Skip the timestamp field. We no longer use it. */
v3_shift += 4;
- if ((now - ts) < -1 * REND_REPLAY_TIME_INTERVAL / 2 ||
- (now - ts) > REND_REPLAY_TIME_INTERVAL / 2) {
- log_warn(LD_REND, "INTRODUCE2 cell is too %s. Discarding.",
- (now - ts) < 0 ? "old" : "new");
- return -1;
- }
}
if (*buf == 2 || *buf == 3) {
/* Version 2 INTRODUCE2 cell. */
@@ -1071,7 +1142,7 @@ rend_service_introduce(origin_circuit_t *circuit, const uint8_t *request,
goto err;
}
- extend_info = extend_info_from_node(node);
+ extend_info = extend_info_from_node(node, 0);
}
if (len != REND_COOKIE_LEN+DH_KEY_LEN) {
@@ -1100,12 +1171,17 @@ rend_service_introduce(origin_circuit_t *circuit, const uint8_t *request,
/* Check whether there is a past request with the same Diffie-Hellman,
* part 1. */
- if (!service->accepted_intros)
- service->accepted_intros = digestmap_new();
-
- access_time = digestmap_get(service->accepted_intros, diffie_hellman_hash);
+ access_time = digestmap_get(service->accepted_intro_dh_parts,
+ diffie_hellman_hash);
if (access_time != NULL) {
- log_warn(LD_REND, "Possible replay detected! We received an "
+ /* A Tor client will send a new INTRODUCE1 cell with the same rend
+ * cookie and DH public key as its previous one if its intro circ
+ * times out while in state CIRCUIT_PURPOSE_C_INTRODUCE_ACK_WAIT .
+ * If we received the first INTRODUCE1 cell (the intro-point relay
+ * converts it into an INTRODUCE2 cell), we are already trying to
+ * connect to that rend point (and may have already succeeded);
+ * drop this cell. */
+ log_info(LD_REND, "We received an "
"INTRODUCE2 cell with same first part of "
"Diffie-Hellman handshake %d seconds ago. Dropping "
"cell.",
@@ -1118,9 +1194,11 @@ rend_service_introduce(origin_circuit_t *circuit, const uint8_t *request,
* one hour. */
access_time = tor_malloc(sizeof(time_t));
*access_time = now;
- digestmap_set(service->accepted_intros, diffie_hellman_hash, access_time);
- if (service->last_cleaned_accepted_intros + REND_REPLAY_TIME_INTERVAL < now)
- clean_accepted_intros(service, now);
+ digestmap_set(service->accepted_intro_dh_parts,
+ diffie_hellman_hash, access_time);
+ if (service->last_cleaned_accepted_intro_dh_parts + REND_REPLAY_TIME_INTERVAL
+ < now)
+ clean_accepted_intro_dh_parts(service, now);
/* If the service performs client authorization, check included auth data. */
if (service->clients) {
@@ -1380,7 +1458,8 @@ rend_service_intro_has_opened(origin_circuit_t *circuit)
/* If we already have enough introduction circuits for this service,
* redefine this one as a general circuit or close it, depending. */
- if (count_established_intro_points(serviceid) > NUM_INTRO_POINTS) {
+ if (count_established_intro_points(serviceid) >
+ (int)service->n_intro_points_wanted) { /* XXX023 remove cast */
const or_options_t *options = get_options();
if (options->ExcludeNodes) {
/* XXXX in some future version, we can test whether the transition is
@@ -1395,7 +1474,20 @@ rend_service_intro_has_opened(origin_circuit_t *circuit)
log_info(LD_CIRC|LD_REND, "We have just finished an introduction "
"circuit, but we already have enough. Redefining purpose to "
"general; leaving as internal.");
+
TO_CIRCUIT(circuit)->purpose = CIRCUIT_PURPOSE_C_GENERAL;
+
+ {
+ rend_data_t *rend_data = circuit->rend_data;
+ circuit->rend_data = NULL;
+ rend_data_free(rend_data);
+ }
+ {
+ crypto_pk_env_t *intro_key = circuit->intro_key;
+ circuit->intro_key = NULL;
+ crypto_free_pk_env(intro_key);
+ }
+
circuit_has_opened(circuit);
return;
}
@@ -1607,6 +1699,35 @@ find_intro_circuit(rend_intro_point_t *intro, const char *pk_digest)
return NULL;
}
+/** Return a pointer to the rend_intro_point_t corresponding to the
+ * service-side introduction circuit <b>circ</b>. */
+static rend_intro_point_t *
+find_intro_point(origin_circuit_t *circ)
+{
+ const char *serviceid;
+ rend_service_t *service = NULL;
+
+ tor_assert(TO_CIRCUIT(circ)->purpose == CIRCUIT_PURPOSE_S_ESTABLISH_INTRO ||
+ TO_CIRCUIT(circ)->purpose == CIRCUIT_PURPOSE_S_INTRO);
+ tor_assert(circ->rend_data);
+ serviceid = circ->rend_data->onion_address;
+
+ SMARTLIST_FOREACH(rend_service_list, rend_service_t *, s,
+ if (tor_memeq(s->service_id, serviceid, REND_SERVICE_ID_LEN_BASE32)) {
+ service = s;
+ break;
+ });
+
+ if (service == NULL) return NULL;
+
+ SMARTLIST_FOREACH(service->intro_nodes, rend_intro_point_t *, intro_point,
+ if (crypto_pk_cmp_keys(intro_point->intro_key, circ->intro_key) == 0) {
+ return intro_point;
+ });
+
+ return NULL;
+}
+
/** Determine the responsible hidden service directories for the
* rend_encoded_v2_service_descriptor_t's in <b>descs</b> and upload them;
* <b>service_id</b> and <b>seconds_valid</b> are only passed for logging
@@ -1810,6 +1931,52 @@ upload_service_descriptor(rend_service_t *service)
service->desc_is_dirty = 0;
}
+/** Return non-zero iff <b>intro</b> should 'expire' now (i.e. we
+ * should stop publishing it in new descriptors and eventually close
+ * it). */
+static int
+intro_point_should_expire_now(rend_intro_point_t *intro,
+ time_t now)
+{
+ tor_assert(intro != NULL);
+
+ if (intro->time_published == -1) {
+ /* Don't expire an intro point if we haven't even published it yet. */
+ return 0;
+ }
+
+ if (intro->time_expiring != -1) {
+ /* We've already started expiring this intro point. *Don't* let
+ * this function's result 'flap'. */
+ return 1;
+ }
+
+ if (digestmap_size(intro->accepted_intro_rsa_parts) >=
+ INTRO_POINT_LIFETIME_INTRODUCTIONS) {
+ /* This intro point has been used too many times. Expire it now. */
+ return 1;
+ }
+
+ if (intro->time_to_expire == -1) {
+ /* This intro point has been published, but we haven't picked an
+ * expiration time for it. Pick one now. */
+ int intro_point_lifetime_seconds =
+ INTRO_POINT_LIFETIME_MIN_SECONDS +
+ crypto_rand_int(INTRO_POINT_LIFETIME_MAX_SECONDS -
+ INTRO_POINT_LIFETIME_MIN_SECONDS);
+
+ /* Start the expiration timer now, rather than when the intro
+ * point was first published. There shouldn't be much of a time
+ * difference. */
+ intro->time_to_expire = now + intro_point_lifetime_seconds;
+
+ return 0;
+ }
+
+ /* This intro point has a time to expire set already. Use it. */
+ return (now >= intro->time_to_expire);
+}
+
/** For every service, check how many intro points it currently has, and:
* - Pick new intro points as necessary.
* - Launch circuits to any new intro points.
@@ -1821,7 +1988,9 @@ rend_services_introduce(void)
const node_t *node;
rend_service_t *service;
rend_intro_point_t *intro;
- int changed, prev_intro_nodes;
+ int intro_point_set_changed, prev_intro_nodes;
+ unsigned int n_intro_points_unexpired;
+ unsigned int n_intro_points_to_open;
smartlist_t *intro_nodes;
time_t now;
const or_options_t *options = get_options();
@@ -1834,7 +2003,16 @@ rend_services_introduce(void)
service = smartlist_get(rend_service_list, i);
tor_assert(service);
- changed = 0;
+
+ /* intro_point_set_changed becomes non-zero iff the set of intro
+ * points to be published in service's descriptor has changed. */
+ intro_point_set_changed = 0;
+
+ /* n_intro_points_unexpired collects the number of non-expiring
+ * intro points we have, so that we know how many new intro
+ * circuits we need to launch for this service. */
+ n_intro_points_unexpired = 0;
+
if (now > service->intro_period_started+INTRO_CIRC_RETRY_PERIOD) {
/* One period has elapsed; we can try building circuits again. */
service->intro_period_started = now;
@@ -1848,59 +2026,116 @@ rend_services_introduce(void)
/* Find out which introduction points we have in progress for this
service. */
- for (j=0; j < smartlist_len(service->intro_nodes); ++j) {
- intro = smartlist_get(service->intro_nodes, j);
+ SMARTLIST_FOREACH_BEGIN(service->intro_nodes, rend_intro_point_t *,
+ intro) {
+ origin_circuit_t *intro_circ =
+ find_intro_circuit(intro, service->pk_digest);
+
+ 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) {
+ circuit_mark_for_close(TO_CIRCUIT(intro_circ),
+ END_CIRC_REASON_FINISHED);
+ }
+ rend_intro_point_free(intro);
+ intro = NULL; /* SMARTLIST_DEL_CURRENT takes a name, not a value. */
+ SMARTLIST_DEL_CURRENT(service->intro_nodes, intro);
+ /* We don't need to set intro_point_set_changed here, because
+ * this intro point wouldn't have been published in a current
+ * descriptor anyway. */
+ continue;
+ }
+
node = node_get_by_id(intro->extend_info->identity_digest);
- if (!node || !find_intro_circuit(intro, service->pk_digest)) {
- log_info(LD_REND,"Giving up on %s as intro point for %s.",
+ if (!node || !intro_circ) {
+ int removing_this_intro_point_changes_the_intro_point_set = 1;
+ log_info(LD_REND, "Giving up on %s as intro point for %s"
+ " (circuit disappeared).",
safe_str_client(extend_info_describe(intro->extend_info)),
safe_str_client(service->service_id));
- if (service->desc) {
- SMARTLIST_FOREACH(service->desc->intro_nodes, rend_intro_point_t *,
- dintro, {
- if (tor_memeq(dintro->extend_info->identity_digest,
- intro->extend_info->identity_digest, DIGEST_LEN)) {
- log_info(LD_REND, "The intro point we are giving up on was "
- "included in the last published descriptor. "
- "Marking current descriptor as dirty.");
- service->desc_is_dirty = now;
- }
- });
+ if (intro->time_expiring != -1) {
+ log_info(LD_REND, "We were already expiring the intro point; "
+ "no need to mark the HS descriptor as dirty over this.");
+ removing_this_intro_point_changes_the_intro_point_set = 0;
+ } else if (intro->listed_in_last_desc) {
+ log_info(LD_REND, "The intro point we are giving up on was "
+ "included in the last published descriptor. "
+ "Marking current descriptor as dirty.");
+ service->desc_is_dirty = now;
}
rend_intro_point_free(intro);
- smartlist_del(service->intro_nodes,j--);
- changed = 1;
+ intro = NULL; /* SMARTLIST_DEL_CURRENT takes a name, not a value. */
+ SMARTLIST_DEL_CURRENT(service->intro_nodes, intro);
+ if (removing_this_intro_point_changes_the_intro_point_set)
+ intro_point_set_changed = 1;
}
+
+ if (intro != NULL && intro_point_should_expire_now(intro, now)) {
+ log_info(LD_REND, "Expiring %s as intro point for %s.",
+ safe_str_client(extend_info_describe(intro->extend_info)),
+ safe_str_client(service->service_id));
+
+ /* The polite (and generally Right) way to expire an intro
+ * point is to establish a new one to replace it, publish a
+ * new descriptor that doesn't list any expiring intro points,
+ * and *then*, once our upload attempts for the new descriptor
+ * have ended (whether in success or failure), close the
+ * expiring intro points.
+ *
+ * Unfortunately, we can't find out when the new descriptor
+ * has actually been uploaded, so we'll have to settle for a
+ * five-minute timer. Start it. XXX023 This sucks. */
+ intro->time_expiring = now;
+
+ intro_point_set_changed = 1;
+ }
+
+ if (intro != NULL && intro->time_expiring == -1)
+ ++n_intro_points_unexpired;
+
if (node)
smartlist_add(intro_nodes, (void*)node);
- }
-
- /* We have enough intro points, and the intro points we thought we had were
- * all connected.
- */
- if (!changed && smartlist_len(service->intro_nodes) >= NUM_INTRO_POINTS) {
- /* We have all our intro points! Start a fresh period and reset the
- * circuit count. */
+ } SMARTLIST_FOREACH_END(intro);
+
+ if (!intro_point_set_changed &&
+ (n_intro_points_unexpired >= service->n_intro_points_wanted)) {
+ /* We have enough intro circuits in progress, and none of our
+ * intro circuits have died since the last call to
+ * rend_services_introduce! Start a fresh period and reset the
+ * circuit count.
+ *
+ * XXXX WTF? */
service->intro_period_started = now;
service->n_intro_circuits_launched = 0;
continue;
}
- /* Remember how many introduction circuits we started with. */
+ /* Remember how many introduction circuits we started with.
+ *
+ * prev_intro_nodes serves a different purpose than
+ * n_intro_points_unexpired -- this variable tells us where our
+ * previously-created intro points end and our new ones begin in
+ * the intro-point list, so we don't have to launch the circuits
+ * at the same time as we create the intro points they correspond
+ * to. XXXX This is daft. */
prev_intro_nodes = smartlist_len(service->intro_nodes);
+
/* We have enough directory information to start establishing our
- * intro points. We want to end up with three intro points, but if
- * we're just starting, we launch five and pick the first three that
- * complete.
+ * intro points. We want to end up with n_intro_points_wanted
+ * intro points, but if we're just starting, we launch two extra
+ * circuits and use the first n_intro_points_wanted that complete.
*
* The ones after the first three will be converted to 'general'
* internal circuits in rend_service_intro_has_opened(), and then
* we'll drop them from the list of intro points next time we
* go through the above "find out which introduction points we have
* in progress" loop. */
-#define NUM_INTRO_POINTS_INIT (NUM_INTRO_POINTS + 2)
- for (j=prev_intro_nodes; j < (prev_intro_nodes == 0 ?
- NUM_INTRO_POINTS_INIT : NUM_INTRO_POINTS); ++j) {
+ n_intro_points_to_open = (service->n_intro_points_wanted +
+ (prev_intro_nodes == 0 ? 2 : 0));
+ for (j = (int)n_intro_points_unexpired;
+ j < (int)n_intro_points_to_open;
+ ++j) { /* XXXX remove casts */
router_crn_flags_t flags = CRN_NEED_UPTIME|CRN_NEED_DESC;
if (get_options()->_AllowInvalid & ALLOW_INVALID_INTRODUCTION)
flags |= CRN_ALLOW_INVALID;
@@ -1908,16 +2143,21 @@ rend_services_introduce(void)
options->ExcludeNodes, flags);
if (!node) {
log_warn(LD_REND,
- "Could only establish %d introduction points for %s.",
- smartlist_len(service->intro_nodes), service->service_id);
+ "Could only establish %d introduction points for %s; "
+ "wanted %u.",
+ smartlist_len(service->intro_nodes), service->service_id,
+ n_intro_points_to_open);
break;
}
- changed = 1;
+ intro_point_set_changed = 1;
smartlist_add(intro_nodes, (void*)node);
intro = tor_malloc_zero(sizeof(rend_intro_point_t));
- intro->extend_info = extend_info_from_node(node);
+ intro->extend_info = extend_info_from_node(node, 0);
intro->intro_key = crypto_new_pk_env();
tor_assert(!crypto_pk_generate_key(intro->intro_key));
+ intro->time_published = -1;
+ intro->time_to_expire = -1;
+ intro->time_expiring = -1;
smartlist_add(service->intro_nodes, intro);
log_info(LD_REND, "Picked router %s as an intro point for %s.",
safe_str_client(node_describe(node)),
@@ -1925,7 +2165,7 @@ rend_services_introduce(void)
}
/* If there's no need to launch new circuits, stop here. */
- if (!changed)
+ if (!intro_point_set_changed)
continue;
/* Establish new introduction points. */
diff --git a/src/or/rephist.c b/src/or/rephist.c
index 25aece3d5..6bbb93b82 100644
--- a/src/or/rephist.c
+++ b/src/or/rephist.c
@@ -446,7 +446,7 @@ rep_hist_downrate_old_runs(time_t now)
alpha *= STABILITY_ALPHA;
}
- log_info(LD_HIST, "Discounting all old stability info by a factor of %lf",
+ log_info(LD_HIST, "Discounting all old stability info by a factor of %f",
alpha);
/* Multiply every w_r_l, t_r_w pair by alpha. */
@@ -894,7 +894,7 @@ rep_hist_format_router_status(or_history_t *hist, time_t now)
" weighted-uptime %lu\n"
"mtbf %0.1lf\n"
" weighted-run-length %lu\n"
- " total-run-weights %lf\n",
+ " total-run-weights %f\n",
up?"uptime-started ":"", up?sor_buf:"", up?" UTC\n":"",
down?"downtime-started ":"", down?sod_buf:"", down?" UTC\n":"",
wfu,
@@ -2114,7 +2114,8 @@ _compare_int(const void *x, const void *y)
}
/** Return a newly allocated string containing the exit port statistics
- * until <b>now</b>, or NULL if we're not collecting exit stats. */
+ * until <b>now</b>, or NULL if we're not collecting exit stats. Caller
+ * must ensure start_of_exit_stats_interval is in the past. */
char *
rep_hist_format_exit_stats(time_t now)
{
@@ -2133,6 +2134,8 @@ rep_hist_format_exit_stats(time_t now)
if (!start_of_exit_stats_interval)
return NULL; /* Not initialized. */
+ tor_assert(now >= start_of_exit_stats_interval);
+
/* Go through all ports to find the n ports that saw most written and
* read bytes.
*
@@ -2456,7 +2459,8 @@ rep_hist_reset_buffer_stats(time_t now)
}
/** Return a newly allocated string containing the buffer statistics until
- * <b>now</b>, or NULL if we're not collecting buffer stats. */
+ * <b>now</b>, or NULL if we're not collecting buffer stats. Caller must
+ * ensure start_of_buffer_stats_interval is in the past. */
char *
rep_hist_format_buffer_stats(time_t now)
{
@@ -2475,6 +2479,8 @@ rep_hist_format_buffer_stats(time_t now)
if (!start_of_buffer_stats_interval)
return NULL; /* Not initialized. */
+ tor_assert(now >= start_of_buffer_stats_interval);
+
/* Calculate deciles if we saw at least one circuit. */
memset(processed_cells, 0, SHARES * sizeof(int));
memset(circs_in_share, 0, SHARES * sizeof(int));
@@ -2596,6 +2602,154 @@ rep_hist_buffer_stats_write(time_t now)
return start_of_buffer_stats_interval + WRITE_STATS_INTERVAL;
}
+/*** Descriptor serving statistics ***/
+
+/** Digestmap to track which descriptors were downloaded this stats
+ * collection interval. It maps descriptor digest to pointers to 1,
+ * effectively turning this into a list. */
+static digestmap_t *served_descs = NULL;
+
+/** Number of how many descriptors were downloaded in total during this
+ * interval. */
+static unsigned long total_descriptor_downloads;
+
+/** Start time of served descs stats or 0 if we're not collecting those. */
+static time_t start_of_served_descs_stats_interval;
+
+/** Initialize descriptor stats. */
+void
+rep_hist_desc_stats_init(time_t now)
+{
+ if (served_descs) {
+ log_warn(LD_BUG, "Called rep_hist_desc_stats_init() when desc stats were "
+ "already initialized. This is probably harmless.");
+ return; // Already initialized
+ }
+ served_descs = digestmap_new();
+ total_descriptor_downloads = 0;
+ start_of_served_descs_stats_interval = now;
+}
+
+/** Reset served descs stats to empty, starting a new interval <b>now</b>. */
+static void
+rep_hist_reset_desc_stats(time_t now)
+{
+ rep_hist_desc_stats_term();
+ rep_hist_desc_stats_init(now);
+}
+
+/** Stop collecting served descs stats, so that rep_hist_desc_stats_init() is
+ * safe to be called again. */
+void
+rep_hist_desc_stats_term(void)
+{
+ digestmap_free(served_descs, NULL);
+ served_descs = NULL;
+ start_of_served_descs_stats_interval = 0;
+ total_descriptor_downloads = 0;
+}
+
+/** Helper for rep_hist_desc_stats_write(). Return a newly allocated string
+ * containing the served desc statistics until now, or NULL if we're not
+ * collecting served desc stats. Caller must ensure that now is not before
+ * start_of_served_descs_stats_interval. */
+static char *
+rep_hist_format_desc_stats(time_t now)
+{
+ char t[ISO_TIME_LEN+1];
+ char *result;
+
+ digestmap_iter_t *iter;
+ const char *key;
+ void *val;
+ unsigned size;
+ int *vals;
+ int n = 0;
+
+ if (!start_of_served_descs_stats_interval)
+ return NULL;
+
+ size = digestmap_size(served_descs);
+ vals = tor_malloc(size * sizeof(int));
+
+ for (iter = digestmap_iter_init(served_descs); !digestmap_iter_done(iter);
+ iter = digestmap_iter_next(served_descs, iter) ) {
+ uintptr_t count;
+ digestmap_iter_get(iter, &key, &val);
+ count = (uintptr_t)val;
+ vals[n++] = (int)count;
+ (void)key;
+ }
+
+ format_iso_time(t, now);
+
+ tor_asprintf(&result,
+ "served-descs-stats-end %s (%d s) total=%lu unique=%u "
+ "max=%d q3=%d md=%d q1=%d min=%d\n",
+ t,
+ (unsigned) (now - start_of_served_descs_stats_interval),
+ total_descriptor_downloads,
+ size,
+ find_nth_int(vals, size, size-1),
+ find_nth_int(vals, size, (3*size-1)/4),
+ find_nth_int(vals, size, (size-1)/2),
+ find_nth_int(vals, size, (size-1)/4),
+ find_nth_int(vals, size, 0));
+
+ tor_free(vals);
+ return result;
+}
+
+/** If WRITE_STATS_INTERVAL seconds have passed since the beginning of
+ * the current served desc stats interval, write the stats to
+ * $DATADIR/stats/served-desc-stats (possibly appending to an existing file)
+ * and reset the state for the next interval. Return when we would next want
+ * to write served desc stats or 0 if we won't want to write. */
+time_t
+rep_hist_desc_stats_write(time_t now)
+{
+ char *statsdir = NULL, *filename = NULL, *str = NULL;
+
+ if (!start_of_served_descs_stats_interval)
+ return 0; /* We're not collecting stats. */
+ if (start_of_served_descs_stats_interval + WRITE_STATS_INTERVAL > now)
+ return start_of_served_descs_stats_interval + WRITE_STATS_INTERVAL;
+
+ str = rep_hist_format_desc_stats(now);
+
+ statsdir = get_datadir_fname("stats");
+ if (check_private_dir(statsdir, CPD_CREATE, get_options()->User) < 0) {
+ log_warn(LD_HIST, "Unable to create stats/ directory!");
+ goto done;
+ }
+ filename = get_datadir_fname2("stats", "served-desc-stats");
+ if (append_bytes_to_file(filename, str, strlen(str), 0) < 0)
+ log_warn(LD_HIST, "Unable to write served descs statistics to disk!");
+
+ rep_hist_reset_desc_stats(now);
+
+ done:
+ tor_free(statsdir);
+ tor_free(filename);
+ tor_free(str);
+ return start_of_served_descs_stats_interval + WRITE_STATS_INTERVAL;
+}
+
+void
+rep_hist_note_desc_served(const char * desc)
+{
+ void *val;
+ uintptr_t count;
+ if (!served_descs)
+ return; // We're not collecting stats
+ val = digestmap_get(served_descs, desc);
+ count = (uintptr_t)val;
+ if (count != INT_MAX)
+ ++count;
+ digestmap_set(served_descs, desc, (void*)count);
+ total_descriptor_downloads++;
+}
+
/*** Connection statistics ***/
/** Start of the current connection stats interval or 0 if we're not
@@ -2760,7 +2914,8 @@ rep_hist_note_or_conn_bytes(uint64_t conn_id, size_t num_read,
}
/** Return a newly allocated string containing the connection statistics
- * until <b>now</b>, or NULL if we're not collecting conn stats. */
+ * until <b>now</b>, or NULL if we're not collecting conn stats. Caller must
+ * ensure start_of_conn_stats_interval is in the past. */
char *
rep_hist_format_conn_stats(time_t now)
{
@@ -2769,6 +2924,8 @@ rep_hist_format_conn_stats(time_t now)
if (!start_of_conn_stats_interval)
return NULL; /* Not initialized. */
+ tor_assert(now >= start_of_conn_stats_interval);
+
format_iso_time(written, now);
tor_asprintf(&result, "conn-bi-direct %s (%d s) %d,%d,%d,%d\n",
written,
@@ -2839,5 +2996,7 @@ rep_hist_free_all(void)
smartlist_free(circuits_for_buffer_stats);
circuits_for_buffer_stats = NULL;
}
+ rep_hist_desc_stats_term();
+ total_descriptor_downloads = 0;
}
diff --git a/src/or/rephist.h b/src/or/rephist.h
index e59065944..0a3e46ae1 100644
--- a/src/or/rephist.h
+++ b/src/or/rephist.h
@@ -82,6 +82,11 @@ void rep_hist_add_buffer_stats(double mean_num_cells_in_queue,
char *rep_hist_format_buffer_stats(time_t now);
void rep_hist_reset_buffer_stats(time_t now);
+void rep_hist_desc_stats_init(time_t now);
+void rep_hist_note_desc_served(const char * desc);
+void rep_hist_desc_stats_term(void);
+time_t rep_hist_desc_stats_write(time_t now);
+
void rep_hist_conn_stats_init(time_t now);
void rep_hist_note_or_conn_bytes(uint64_t conn_id, size_t num_read,
size_t num_written, time_t when);
diff --git a/src/or/router.c b/src/or/router.c
index ba6648ba6..a08a2009a 100644
--- a/src/or/router.c
+++ b/src/or/router.c
@@ -484,6 +484,16 @@ v3_authority_check_key_expiry(void)
last_warned = now;
}
+int
+router_initialize_tls_context(void)
+{
+ return tor_tls_context_init(public_server_mode(get_options()),
+ get_tlsclient_identity_key(),
+ server_mode(get_options()) ?
+ get_server_identity_key() : NULL,
+ MAX_SSL_KEY_LIFETIME_ADVERTISED);
+}
+
/** Initialize all OR private keys, and the TLS context, as necessary.
* On OPs, this only initializes the tls context. Return 0 on success,
* or -1 if Tor should die.
@@ -530,10 +540,7 @@ init_keys(void)
}
set_client_identity_key(prkey);
/* Create a TLS context. */
- if (tor_tls_context_init(0,
- get_tlsclient_identity_key(),
- NULL,
- MAX_SSL_KEY_LIFETIME) < 0) {
+ if (router_initialize_tls_context() < 0) {
log_err(LD_GENERAL,"Error creating TLS context for Tor client.");
return -1;
}
@@ -626,13 +633,11 @@ init_keys(void)
tor_free(keydir);
/* 3. Initialize link key and TLS context. */
- if (tor_tls_context_init(public_server_mode(options),
- get_tlsclient_identity_key(),
- get_server_identity_key(),
- MAX_SSL_KEY_LIFETIME) < 0) {
+ if (router_initialize_tls_context() < 0) {
log_err(LD_GENERAL,"Error initializing TLS context");
return -1;
}
+
/* 4. Build our router descriptor. */
/* Must be called after keys are initialized. */
mydesc = router_get_my_descriptor();
@@ -780,7 +785,7 @@ check_whether_dirport_reachable(void)
const or_options_t *options = get_options();
return !options->DirPort ||
options->AssumeReachable ||
- we_are_hibernating() ||
+ net_is_disabled() ||
can_reach_dir_port;
}
@@ -806,7 +811,7 @@ decide_to_advertise_dirport(const or_options_t *options, uint16_t dir_port)
return 0;
if (authdir_mode(options)) /* always publish */
return dir_port;
- if (we_are_hibernating())
+ if (net_is_disabled())
return 0;
if (!check_whether_dirport_reachable())
return 0;
@@ -888,7 +893,8 @@ consider_testing_reachability(int test_or, int test_dir)
log_info(LD_CIRC, "Testing %s of my ORPort: %s:%d.",
!orport_reachable ? "reachability" : "bandwidth",
me->address, me->or_port);
- ei = extend_info_from_router(me);
+ /* XXX IPv6 self testing IPv6 orports will need pref_addr */
+ ei = extend_info_from_router(me, 0);
circuit_launch_by_extend_info(CIRCUIT_PURPOSE_TESTING, ei,
CIRCLAUNCH_NEED_CAPACITY|CIRCLAUNCH_IS_INTERNAL);
extend_info_free(ei);
@@ -974,6 +980,14 @@ router_perform_bandwidth_test(int num_circs, time_t now)
}
}
+/** Return true iff our network is in some sense disabled: either we're
+ * hibernating, entering hibernation, or */
+int
+net_is_disabled(void)
+{
+ return get_options()->DisableNetwork || we_are_hibernating();
+}
+
/** Return true iff we believe ourselves to be an authoritative
* directory server.
*/
@@ -1024,7 +1038,7 @@ authdir_mode_any_nonhidserv(const or_options_t *options)
}
/** Return true iff we are an authoritative directory server that is
* authoritative about receiving and serving descriptors of type
- * <b>purpose</b> its dirport. Use -1 for "any purpose". */
+ * <b>purpose</b> on its dirport. Use -1 for "any purpose". */
int
authdir_mode_handles_descs(const or_options_t *options, int purpose)
{
@@ -1070,7 +1084,7 @@ int
server_mode(const or_options_t *options)
{
if (options->ClientOnly) return 0;
- return (options->ORPort != 0 || options->ORListenAddress);
+ return (options->ORPort || options->ORListenAddress);
}
/** Return true iff we are trying to be a non-bridge server.
@@ -1121,7 +1135,14 @@ int
proxy_mode(const or_options_t *options)
{
(void)options;
- return smartlist_len(get_configured_client_ports()) > 0;
+ SMARTLIST_FOREACH_BEGIN(get_configured_ports(), const port_cfg_t *, p) {
+ if (p->type == CONN_TYPE_AP_LISTENER ||
+ p->type == CONN_TYPE_AP_TRANS_LISTENER ||
+ p->type == CONN_TYPE_AP_DNS_LISTENER ||
+ p->type == CONN_TYPE_AP_NATD_LISTENER)
+ return 1;
+ } SMARTLIST_FOREACH_END(p);
+ return 0;
}
/** Decide if we're a publishable server. We are a publishable server if:
@@ -1180,17 +1201,21 @@ consider_publishable_server(int force)
/** Return the port that we should advertise as our ORPort; this is either
* the one configured in the ORPort option, or the one we actually bound to
- * if ORPort is "auto". */
+ * if ORPort is "auto".
+ */
uint16_t
router_get_advertised_or_port(const or_options_t *options)
{
- if (options->ORPort == CFG_AUTO_PORT) {
+ int port = get_primary_or_port();
+ (void)options;
+
+ if (port == CFG_AUTO_PORT) {
connection_t *c = connection_get_by_type(CONN_TYPE_OR_LISTENER);
if (c)
return c->port;
return 0;
}
- return options->ORPort;
+ return port;
}
/** Return the port that we should advertise as our DirPort;
@@ -1201,15 +1226,18 @@ router_get_advertised_or_port(const or_options_t *options)
uint16_t
router_get_advertised_dir_port(const or_options_t *options, uint16_t dirport)
{
- if (!options->DirPort)
+ int dirport_configured = get_primary_dir_port();
+ (void)options;
+
+ if (!dirport_configured)
return dirport;
- if (options->DirPort == CFG_AUTO_PORT) {
+ if (dirport_configured == CFG_AUTO_PORT) {
connection_t *c = connection_get_by_type(CONN_TYPE_DIR_LISTENER);
if (c)
return c->port;
return 0;
}
- return options->DirPort;
+ return dirport_configured;
}
/*
@@ -1466,6 +1494,24 @@ router_rebuild_descriptor(int force)
ri->cache_info.published_on = time(NULL);
ri->onion_pkey = crypto_pk_dup_key(get_onion_key()); /* must invoke from
* main thread */
+ if (options->BridgeRelay) {
+ /* For now, only bridges advertise an ipv6 or-address. And only one. */
+ const port_cfg_t *ipv6_orport = NULL;
+ SMARTLIST_FOREACH_BEGIN(get_configured_ports(), const port_cfg_t *, p) {
+ if (p->type == CONN_TYPE_OR_LISTENER &&
+ ! p->no_advertise &&
+ ! p->ipv4_only &&
+ tor_addr_family(&p->addr) == AF_INET6 &&
+ ! tor_addr_is_internal(&p->addr, 1)) {
+ ipv6_orport = p;
+ break;
+ }
+ } SMARTLIST_FOREACH_END(p);
+ if (ipv6_orport) {
+ tor_addr_copy(&ri->ipv6_addr, &ipv6_orport->addr);
+ ri->ipv6_orport = ipv6_orport->port;
+ }
+ }
ri->identity_pkey = crypto_pk_dup_key(get_server_identity_key());
if (crypto_pk_get_digest(ri->identity_pkey,
ri->cache_info.identity_digest)<0) {
@@ -1875,6 +1921,7 @@ router_dump_router_to_string(char *s, size_t maxlen, routerinfo_t *router,
int result=0;
addr_policy_t *tmpe;
char *family_line;
+ char *extra_or_address = NULL;
const or_options_t *options = get_options();
/* Make sure the identity key matches the one in the routerinfo. */
@@ -1927,9 +1974,22 @@ router_dump_router_to_string(char *s, size_t maxlen, routerinfo_t *router,
router->cache_info.extra_info_digest, DIGEST_LEN);
}
+ if (router->ipv6_orport &&
+ tor_addr_family(&router->ipv6_addr) == AF_INET6) {
+ char addr[TOR_ADDR_BUF_LEN];
+ const char *a;
+ a = tor_addr_to_str(addr, &router->ipv6_addr, sizeof(addr), 1);
+ if (a) {
+ tor_asprintf(&extra_or_address,
+ "or-address %s:%d\n", a, router->ipv6_orport);
+ log_notice(LD_OR, "My line is <%s>", extra_or_address);
+ }
+ }
+
/* Generate the easy portion of the router descriptor. */
result = tor_snprintf(s, maxlen,
"router %s %s %d 0 %d\n"
+ "%s"
"platform %s\n"
"opt protocols Link 1 2 Circuit 1\n"
"published %s\n"
@@ -1944,6 +2004,7 @@ router_dump_router_to_string(char *s, size_t maxlen, routerinfo_t *router,
router->address,
router->or_port,
decide_to_advertise_dirport(options, router->dir_port),
+ extra_or_address ? extra_or_address : "",
router->platform,
published,
fingerprint,
@@ -1964,6 +2025,7 @@ router_dump_router_to_string(char *s, size_t maxlen, routerinfo_t *router,
tor_free(family_line);
tor_free(onion_pkey);
tor_free(identity_pkey);
+ tor_free(extra_or_address);
if (result < 0) {
log_warn(LD_BUG,"descriptor snprintf #1 ran out of room!");
@@ -2059,6 +2121,52 @@ router_dump_router_to_string(char *s, size_t maxlen, routerinfo_t *router,
return (int)written+1;
}
+/** Copy the primary (IPv4) OR port (IP address and TCP port) for
+ * <b>router</b> into *<b>ap_out</b>. */
+void
+router_get_prim_orport(const routerinfo_t *router, tor_addr_port_t *ap_out)
+{
+ tor_assert(ap_out != NULL);
+ tor_addr_from_ipv4h(&ap_out->addr, router->addr);
+ ap_out->port = router->or_port;
+}
+
+/** Return 1 if we prefer the IPv6 address and OR TCP port of
+ * <b>router</b>, else 0.
+ *
+ * We prefer the IPv6 address if the router has one and
+ * i) the routerinfo_t says so
+ * or
+ * ii) the router has no IPv4 address. */
+int
+router_ipv6_preferred(const routerinfo_t *router)
+{
+ return (!tor_addr_is_null(&router->ipv6_addr)
+ && (router->ipv6_preferred || router->addr == 0));
+}
+
+/** Copy the preferred OR port (IP address and TCP port) for
+ * <b>router</b> into *<b>addr_out</b>. */
+void
+router_get_pref_orport(const routerinfo_t *router, tor_addr_port_t *ap_out)
+{
+ if (router_ipv6_preferred(router))
+ router_get_pref_ipv6_orport(router, ap_out);
+ else
+ router_get_prim_orport(router, ap_out);
+}
+
+/** Copy the preferred IPv6 OR port (IP address and TCP port) for
+ * <b>router</b> into *<b>ap_out</b>. */
+void
+router_get_pref_ipv6_orport(const routerinfo_t *router,
+ tor_addr_port_t *ap_out)
+{
+ tor_assert(ap_out != NULL);
+ tor_addr_copy(&ap_out->addr, &router->ipv6_addr);
+ ap_out->port = router->ipv6_orport;
+}
+
/** Load the contents of <b>filename</b>, find the last line starting with
* <b>end_line</b>, ensure that its timestamp is not more than 25 hours in
* the past or more than 1 hour in the future with respect to <b>now</b>,
diff --git a/src/or/router.h b/src/or/router.h
index f9d156cb0..d426b25da 100644
--- a/src/or/router.h
+++ b/src/or/router.h
@@ -30,6 +30,7 @@ crypto_pk_env_t *init_key_from_file(const char *fname, int generate,
int severity);
void v3_authority_check_key_expiry(void);
+int router_initialize_tls_context(void);
int init_keys(void);
int check_whether_orport_reachable(void);
@@ -39,6 +40,8 @@ void router_orport_found_reachable(void);
void router_dirport_found_reachable(void);
void router_perform_bandwidth_test(int num_circs, time_t now);
+int net_is_disabled(void);
+
int authdir_mode(const or_options_t *options);
int authdir_mode_v1(const or_options_t *options);
int authdir_mode_v2(const or_options_t *options);
@@ -82,6 +85,13 @@ int router_pick_published_address(const or_options_t *options, uint32_t *addr);
int router_rebuild_descriptor(int force);
int router_dump_router_to_string(char *s, size_t maxlen, routerinfo_t *router,
crypto_pk_env_t *ident_key);
+void router_get_prim_orport(const routerinfo_t *router,
+ tor_addr_port_t *addr_port_out);
+void router_get_pref_orport(const routerinfo_t *router,
+ tor_addr_port_t *addr_port_out);
+void router_get_pref_ipv6_orport(const routerinfo_t *router,
+ tor_addr_port_t *addr_port_out);
+int router_ipv6_preferred(const routerinfo_t *router);
int extrainfo_dump_to_string(char **s, extrainfo_t *extrainfo,
crypto_pk_env_t *ident_key);
int is_legal_nickname(const char *s);
diff --git a/src/or/routerlist.c b/src/or/routerlist.c
index 8b09813c5..689df99c5 100644
--- a/src/or/routerlist.c
+++ b/src/or/routerlist.c
@@ -1831,7 +1831,7 @@ smartlist_choose_node_by_bandwidth_weights(smartlist_t *sl,
sl_last_total_weighted_bw = weighted_bw;
log_debug(LD_CIRC, "Choosing node for rule %s based on weights "
- "Wg=%lf Wm=%lf We=%lf Wd=%lf with total bw %lf",
+ "Wg=%f Wm=%f We=%f Wd=%f with total bw %f",
bandwidth_weight_rule_to_string(rule),
Wg, Wm, We, Wd, weighted_bw);
@@ -1840,7 +1840,7 @@ smartlist_choose_node_by_bandwidth_weights(smartlist_t *sl,
/* Don't warn when using bridges/relays not in the consensus */
if (!have_unknown)
log_warn(LD_CIRC,
- "Weighted bandwidth is %lf in node selection for rule %s",
+ "Weighted bandwidth is %f in node selection for rule %s",
weighted_bw, bandwidth_weight_rule_to_string(rule));
tor_free(bandwidths);
return smartlist_choose(sl);
@@ -1865,7 +1865,7 @@ smartlist_choose_node_by_bandwidth_weights(smartlist_t *sl,
--i;
log_warn(LD_BUG, "Round-off error in computing bandwidth had an effect on "
" which router we chose. Please tell the developers. "
- "%lf " U64_FORMAT " %lf", tmp, U64_PRINTF_ARG(rand_bw),
+ "%f " U64_FORMAT " %f", tmp, U64_PRINTF_ARG(rand_bw),
weighted_bw);
}
tor_free(bandwidths);
@@ -2070,10 +2070,10 @@ smartlist_choose_node_by_bandwidth(smartlist_t *sl,
log_debug(LD_CIRC, "Total weighted bw = "U64_FORMAT
", exit bw = "U64_FORMAT
- ", nonexit bw = "U64_FORMAT", exit weight = %lf "
+ ", nonexit bw = "U64_FORMAT", exit weight = %f "
"(for exit == %d)"
", guard bw = "U64_FORMAT
- ", nonguard bw = "U64_FORMAT", guard weight = %lf "
+ ", nonguard bw = "U64_FORMAT", guard weight = %f "
"(for guard == %d)",
U64_PRINTF_ARG(total_bw),
U64_PRINTF_ARG(total_exit_bw), U64_PRINTF_ARG(total_nonexit_bw),
@@ -3244,7 +3244,7 @@ router_set_status(const char *digest, int up)
log_debug(LD_DIR,"Marking router %s as %s.",
node_describe(node), up ? "up" : "down");
#endif
- if (!up && node_is_me(node) && !we_are_hibernating())
+ if (!up && node_is_me(node) && !net_is_disabled())
log_warn(LD_NET, "We just marked ourself as down. Are your external "
"addresses reachable?");
node->is_running = up;
@@ -4009,6 +4009,8 @@ signed_desc_digest_is_recognized(signed_descriptor_t *desc)
void
update_all_descriptor_downloads(time_t now)
{
+ if (get_options()->DisableNetwork)
+ return;
update_router_descriptor_downloads(now);
update_microdesc_downloads(now);
launch_dummy_descriptor_download_as_needed(now, get_options());
@@ -4021,6 +4023,8 @@ routerlist_retry_directory_downloads(time_t now)
{
router_reset_status_download_failures();
router_reset_descriptor_download_failures();
+ if (get_options()->DisableNetwork)
+ return;
update_networkstatus_downloads(now);
update_all_descriptor_downloads(now);
}
diff --git a/src/or/routerparse.c b/src/or/routerparse.c
index 5f160d054..678b11971 100644
--- a/src/or/routerparse.c
+++ b/src/or/routerparse.c
@@ -64,6 +64,7 @@ typedef enum {
K_DIR_OPTIONS,
K_CLIENT_VERSIONS,
K_SERVER_VERSIONS,
+ K_OR_ADDRESS,
K_P,
K_R,
K_S,
@@ -286,6 +287,7 @@ static token_rule_t routerdesc_token_table[] = {
T01("family", K_FAMILY, ARGS, NO_OBJ ),
T01("caches-extra-info", K_CACHES_EXTRA_INFO, NO_ARGS, NO_OBJ ),
+ T0N("or-address", K_OR_ADDRESS, GE(1), NO_OBJ ),
T0N("opt", K_OPT, CONCAT_ARGS, OBJ_OK ),
T1( "bandwidth", K_BANDWIDTH, GE(3), NO_OBJ ),
@@ -541,6 +543,7 @@ static int router_get_hashes_impl(const char *s, size_t s_len,
const char *start_str, const char *end_str,
char end_char);
static void token_clear(directory_token_t *tok);
+static smartlist_t *find_all_by_keyword(smartlist_t *s, directory_keyword k);
static smartlist_t *find_all_exitpolicy(smartlist_t *s);
static directory_token_t *_find_by_keyword(smartlist_t *s,
directory_keyword keyword,
@@ -570,7 +573,6 @@ static int check_signature_token(const char *digest,
int flags,
const char *doctype);
static crypto_pk_env_t *find_dir_signing_key(const char *str, const char *eos);
-static int tor_version_same_series(tor_version_t *a, tor_version_t *b);
#undef DEBUG_AREA_ALLOC
@@ -1507,6 +1509,27 @@ router_parse_entry_from_string(const char *s, const char *end,
"older Tors.");
goto err;
}
+ {
+ smartlist_t *or_addresses = find_all_by_keyword(tokens, K_OR_ADDRESS);
+ if (or_addresses) {
+ SMARTLIST_FOREACH_BEGIN(or_addresses, directory_token_t *, t) {
+ tor_addr_t a;
+ maskbits_t bits;
+ uint16_t port_min, port_max;
+ /* XXXX Prop186 the full spec allows much more than this. */
+ if (tor_addr_parse_mask_ports(t->args[0], &a, &bits, &port_min,
+ &port_max) == AF_INET6 &&
+ bits == 128 &&
+ port_min == port_max) {
+ /* Okay, this is one we can understand. */
+ tor_addr_copy(&router->ipv6_addr, &a);
+ router->ipv6_orport = port_min;
+ break;
+ }
+ } SMARTLIST_FOREACH_END(t);
+ smartlist_free(or_addresses);
+ }
+ }
exit_policy_tokens = find_all_exitpolicy(tokens);
if (!smartlist_len(exit_policy_tokens)) {
log_warn(LD_DIR, "No exit policy tokens in descriptor.");
@@ -1812,9 +1835,9 @@ authority_cert_parse_from_string(const char *s, const char **end_of_string)
struct in_addr in;
char *address = NULL;
tor_assert(tok->n_args);
- /* XXX023 use tor_addr_port_parse() below instead. -RD */
- if (parse_addr_port(LOG_WARN, tok->args[0], &address, NULL,
- &cert->dir_port)<0 ||
+ /* XXX023 use some tor_addr parse function below instead. -RD */
+ if (tor_addr_port_split(LOG_WARN, tok->args[0], &address,
+ &cert->dir_port) < 0 ||
tor_inet_aton(address, &in) == 0) {
log_warn(LD_DIR, "Couldn't parse dir-address in certificate");
tor_free(address);
@@ -2431,40 +2454,40 @@ networkstatus_verify_bw_weights(networkstatus_t *ns)
// We use > 1 as the check for these because they are computed as integers.
// Sometimes there are rounding errors.
if (fabs(Wmm - weight_scale) > 1) {
- log_warn(LD_BUG, "Wmm=%lf != "I64_FORMAT,
+ log_warn(LD_BUG, "Wmm=%f != "I64_FORMAT,
Wmm, I64_PRINTF_ARG(weight_scale));
valid = 0;
}
if (fabs(Wem - Wee) > 1) {
- log_warn(LD_BUG, "Wem=%lf != Wee=%lf", Wem, Wee);
+ log_warn(LD_BUG, "Wem=%f != Wee=%f", Wem, Wee);
valid = 0;
}
if (fabs(Wgm - Wgg) > 1) {
- log_warn(LD_BUG, "Wgm=%lf != Wgg=%lf", Wgm, Wgg);
+ log_warn(LD_BUG, "Wgm=%f != Wgg=%f", Wgm, Wgg);
valid = 0;
}
if (fabs(Weg - Wed) > 1) {
- log_warn(LD_BUG, "Wed=%lf != Weg=%lf", Wed, Weg);
+ log_warn(LD_BUG, "Wed=%f != Weg=%f", Wed, Weg);
valid = 0;
}
if (fabs(Wgg + Wmg - weight_scale) > 0.001*weight_scale) {
- log_warn(LD_BUG, "Wgg=%lf != "I64_FORMAT" - Wmg=%lf", Wgg,
+ log_warn(LD_BUG, "Wgg=%f != "I64_FORMAT" - Wmg=%f", Wgg,
I64_PRINTF_ARG(weight_scale), Wmg);
valid = 0;
}
if (fabs(Wee + Wme - weight_scale) > 0.001*weight_scale) {
- log_warn(LD_BUG, "Wee=%lf != "I64_FORMAT" - Wme=%lf", Wee,
+ log_warn(LD_BUG, "Wee=%f != "I64_FORMAT" - Wme=%f", Wee,
I64_PRINTF_ARG(weight_scale), Wme);
valid = 0;
}
if (fabs(Wgd + Wmd + Wed - weight_scale) > 0.001*weight_scale) {
- log_warn(LD_BUG, "Wgd=%lf + Wmd=%lf + Wed=%lf != "I64_FORMAT,
+ log_warn(LD_BUG, "Wgd=%f + Wmd=%f + Wed=%f != "I64_FORMAT,
Wgd, Wmd, Wed, I64_PRINTF_ARG(weight_scale));
valid = 0;
}
@@ -2519,10 +2542,10 @@ networkstatus_verify_bw_weights(networkstatus_t *ns)
casename = "Case 1";
if (fabs(Etotal-Mtotal) > 0.01*MAX(Etotal,Mtotal)) {
log_warn(LD_DIR,
- "Bw Weight Failure for %s: Etotal %lf != Mtotal %lf. "
+ "Bw Weight Failure for %s: Etotal %f != Mtotal %f. "
"G="I64_FORMAT" M="I64_FORMAT" E="I64_FORMAT" D="I64_FORMAT
" T="I64_FORMAT". "
- "Wgg=%lf Wgd=%lf Wmg=%lf Wme=%lf Wmd=%lf Wee=%lf Wed=%lf",
+ "Wgg=%f Wgd=%f Wmg=%f Wme=%f Wmd=%f Wee=%f Wed=%f",
casename, Etotal, Mtotal,
I64_PRINTF_ARG(G), I64_PRINTF_ARG(M), I64_PRINTF_ARG(E),
I64_PRINTF_ARG(D), I64_PRINTF_ARG(T),
@@ -2531,10 +2554,10 @@ networkstatus_verify_bw_weights(networkstatus_t *ns)
}
if (fabs(Etotal-Gtotal) > 0.01*MAX(Etotal,Gtotal)) {
log_warn(LD_DIR,
- "Bw Weight Failure for %s: Etotal %lf != Gtotal %lf. "
+ "Bw Weight Failure for %s: Etotal %f != Gtotal %f. "
"G="I64_FORMAT" M="I64_FORMAT" E="I64_FORMAT" D="I64_FORMAT
" T="I64_FORMAT". "
- "Wgg=%lf Wgd=%lf Wmg=%lf Wme=%lf Wmd=%lf Wee=%lf Wed=%lf",
+ "Wgg=%f Wgd=%f Wmg=%f Wme=%f Wmd=%f Wee=%f Wed=%f",
casename, Etotal, Gtotal,
I64_PRINTF_ARG(G), I64_PRINTF_ARG(M), I64_PRINTF_ARG(E),
I64_PRINTF_ARG(D), I64_PRINTF_ARG(T),
@@ -2543,10 +2566,10 @@ networkstatus_verify_bw_weights(networkstatus_t *ns)
}
if (fabs(Gtotal-Mtotal) > 0.01*MAX(Gtotal,Mtotal)) {
log_warn(LD_DIR,
- "Bw Weight Failure for %s: Mtotal %lf != Gtotal %lf. "
+ "Bw Weight Failure for %s: Mtotal %f != Gtotal %f. "
"G="I64_FORMAT" M="I64_FORMAT" E="I64_FORMAT" D="I64_FORMAT
" T="I64_FORMAT". "
- "Wgg=%lf Wgd=%lf Wmg=%lf Wme=%lf Wmd=%lf Wee=%lf Wed=%lf",
+ "Wgg=%f Wgd=%f Wmg=%f Wme=%f Wmd=%f Wee=%f Wed=%f",
casename, Mtotal, Gtotal,
I64_PRINTF_ARG(G), I64_PRINTF_ARG(M), I64_PRINTF_ARG(E),
I64_PRINTF_ARG(D), I64_PRINTF_ARG(T),
@@ -2575,10 +2598,10 @@ networkstatus_verify_bw_weights(networkstatus_t *ns)
// Rtotal < Stotal
if (Rtotal > Stotal) {
log_warn(LD_DIR,
- "Bw Weight Failure for %s: Rtotal %lf > Stotal %lf. "
+ "Bw Weight Failure for %s: Rtotal %f > Stotal %f. "
"G="I64_FORMAT" M="I64_FORMAT" E="I64_FORMAT" D="I64_FORMAT
" T="I64_FORMAT". "
- "Wgg=%lf Wgd=%lf Wmg=%lf Wme=%lf Wmd=%lf Wee=%lf Wed=%lf",
+ "Wgg=%f Wgd=%f Wmg=%f Wme=%f Wmd=%f Wee=%f Wed=%f",
casename, Rtotal, Stotal,
I64_PRINTF_ARG(G), I64_PRINTF_ARG(M), I64_PRINTF_ARG(E),
I64_PRINTF_ARG(D), I64_PRINTF_ARG(T),
@@ -2588,10 +2611,10 @@ networkstatus_verify_bw_weights(networkstatus_t *ns)
// Rtotal < T/3
if (3*Rtotal > T) {
log_warn(LD_DIR,
- "Bw Weight Failure for %s: 3*Rtotal %lf > T "
+ "Bw Weight Failure for %s: 3*Rtotal %f > T "
I64_FORMAT". G="I64_FORMAT" M="I64_FORMAT" E="I64_FORMAT
" D="I64_FORMAT" T="I64_FORMAT". "
- "Wgg=%lf Wgd=%lf Wmg=%lf Wme=%lf Wmd=%lf Wee=%lf Wed=%lf",
+ "Wgg=%f Wgd=%f Wmg=%f Wme=%f Wmd=%f Wee=%f Wed=%f",
casename, Rtotal*3, I64_PRINTF_ARG(T),
I64_PRINTF_ARG(G), I64_PRINTF_ARG(M), I64_PRINTF_ARG(E),
I64_PRINTF_ARG(D), I64_PRINTF_ARG(T),
@@ -2601,10 +2624,10 @@ networkstatus_verify_bw_weights(networkstatus_t *ns)
// Stotal < T/3
if (3*Stotal > T) {
log_warn(LD_DIR,
- "Bw Weight Failure for %s: 3*Stotal %lf > T "
+ "Bw Weight Failure for %s: 3*Stotal %f > T "
I64_FORMAT". G="I64_FORMAT" M="I64_FORMAT" E="I64_FORMAT
" D="I64_FORMAT" T="I64_FORMAT". "
- "Wgg=%lf Wgd=%lf Wmg=%lf Wme=%lf Wmd=%lf Wee=%lf Wed=%lf",
+ "Wgg=%f Wgd=%f Wmg=%f Wme=%f Wmd=%f Wee=%f Wed=%f",
casename, Stotal*3, I64_PRINTF_ARG(T),
I64_PRINTF_ARG(G), I64_PRINTF_ARG(M), I64_PRINTF_ARG(E),
I64_PRINTF_ARG(D), I64_PRINTF_ARG(T),
@@ -2614,11 +2637,11 @@ networkstatus_verify_bw_weights(networkstatus_t *ns)
// Mtotal > T/3
if (3*Mtotal < T) {
log_warn(LD_DIR,
- "Bw Weight Failure for %s: 3*Mtotal %lf < T "
+ "Bw Weight Failure for %s: 3*Mtotal %f < T "
I64_FORMAT". "
"G="I64_FORMAT" M="I64_FORMAT" E="I64_FORMAT" D="I64_FORMAT
" T="I64_FORMAT". "
- "Wgg=%lf Wgd=%lf Wmg=%lf Wme=%lf Wmd=%lf Wee=%lf Wed=%lf",
+ "Wgg=%f Wgd=%f Wmg=%f Wme=%f Wmd=%f Wee=%f Wed=%f",
casename, Mtotal*3, I64_PRINTF_ARG(T),
I64_PRINTF_ARG(G), I64_PRINTF_ARG(M), I64_PRINTF_ARG(E),
I64_PRINTF_ARG(D), I64_PRINTF_ARG(T),
@@ -2633,10 +2656,10 @@ networkstatus_verify_bw_weights(networkstatus_t *ns)
casename = "Case 2b (balanced)";
if (fabs(Etotal-Mtotal) > 0.01*MAX(Etotal,Mtotal)) {
log_warn(LD_DIR,
- "Bw Weight Failure for %s: Etotal %lf != Mtotal %lf. "
+ "Bw Weight Failure for %s: Etotal %f != Mtotal %f. "
"G="I64_FORMAT" M="I64_FORMAT" E="I64_FORMAT" D="I64_FORMAT
" T="I64_FORMAT". "
- "Wgg=%lf Wgd=%lf Wmg=%lf Wme=%lf Wmd=%lf Wee=%lf Wed=%lf",
+ "Wgg=%f Wgd=%f Wmg=%f Wme=%f Wmd=%f Wee=%f Wed=%f",
casename, Etotal, Mtotal,
I64_PRINTF_ARG(G), I64_PRINTF_ARG(M), I64_PRINTF_ARG(E),
I64_PRINTF_ARG(D), I64_PRINTF_ARG(T),
@@ -2645,10 +2668,10 @@ networkstatus_verify_bw_weights(networkstatus_t *ns)
}
if (fabs(Etotal-Gtotal) > 0.01*MAX(Etotal,Gtotal)) {
log_warn(LD_DIR,
- "Bw Weight Failure for %s: Etotal %lf != Gtotal %lf. "
+ "Bw Weight Failure for %s: Etotal %f != Gtotal %f. "
"G="I64_FORMAT" M="I64_FORMAT" E="I64_FORMAT" D="I64_FORMAT
" T="I64_FORMAT". "
- "Wgg=%lf Wgd=%lf Wmg=%lf Wme=%lf Wmd=%lf Wee=%lf Wed=%lf",
+ "Wgg=%f Wgd=%f Wmg=%f Wme=%f Wmd=%f Wee=%f Wed=%f",
casename, Etotal, Gtotal,
I64_PRINTF_ARG(G), I64_PRINTF_ARG(M), I64_PRINTF_ARG(E),
I64_PRINTF_ARG(D), I64_PRINTF_ARG(T),
@@ -2657,10 +2680,10 @@ networkstatus_verify_bw_weights(networkstatus_t *ns)
}
if (fabs(Gtotal-Mtotal) > 0.01*MAX(Gtotal,Mtotal)) {
log_warn(LD_DIR,
- "Bw Weight Failure for %s: Mtotal %lf != Gtotal %lf. "
+ "Bw Weight Failure for %s: Mtotal %f != Gtotal %f. "
"G="I64_FORMAT" M="I64_FORMAT" E="I64_FORMAT" D="I64_FORMAT
" T="I64_FORMAT". "
- "Wgg=%lf Wgd=%lf Wmg=%lf Wme=%lf Wmd=%lf Wee=%lf Wed=%lf",
+ "Wgg=%f Wgd=%f Wmg=%f Wme=%f Wmd=%f Wee=%f Wed=%f",
casename, Mtotal, Gtotal,
I64_PRINTF_ARG(G), I64_PRINTF_ARG(M), I64_PRINTF_ARG(E),
I64_PRINTF_ARG(D), I64_PRINTF_ARG(T),
@@ -2670,10 +2693,10 @@ networkstatus_verify_bw_weights(networkstatus_t *ns)
} else {
if (fabs(Etotal-Gtotal) > 0.01*MAX(Etotal,Gtotal)) {
log_warn(LD_DIR,
- "Bw Weight Failure for %s: Etotal %lf != Gtotal %lf. "
+ "Bw Weight Failure for %s: Etotal %f != Gtotal %f. "
"G="I64_FORMAT" M="I64_FORMAT" E="I64_FORMAT" D="I64_FORMAT
" T="I64_FORMAT". "
- "Wgg=%lf Wgd=%lf Wmg=%lf Wme=%lf Wmd=%lf Wee=%lf Wed=%lf",
+ "Wgg=%f Wgd=%f Wmg=%f Wme=%f Wmd=%f Wee=%f Wed=%f",
casename, Etotal, Gtotal,
I64_PRINTF_ARG(G), I64_PRINTF_ARG(M), I64_PRINTF_ARG(E),
I64_PRINTF_ARG(D), I64_PRINTF_ARG(T),
@@ -2700,10 +2723,10 @@ networkstatus_verify_bw_weights(networkstatus_t *ns)
// Stotal < T/3
if (3*Stotal > T) {
log_warn(LD_DIR,
- "Bw Weight Failure for %s: 3*Stotal %lf > T "
+ "Bw Weight Failure for %s: 3*Stotal %f > T "
I64_FORMAT". G="I64_FORMAT" M="I64_FORMAT" E="I64_FORMAT
" D="I64_FORMAT" T="I64_FORMAT". "
- "Wgg=%lf Wgd=%lf Wmg=%lf Wme=%lf Wmd=%lf Wee=%lf Wed=%lf",
+ "Wgg=%f Wgd=%f Wmg=%f Wme=%f Wmd=%f Wee=%f Wed=%f",
casename, Stotal*3, I64_PRINTF_ARG(T),
I64_PRINTF_ARG(G), I64_PRINTF_ARG(M), I64_PRINTF_ARG(E),
I64_PRINTF_ARG(D), I64_PRINTF_ARG(T),
@@ -2713,10 +2736,10 @@ networkstatus_verify_bw_weights(networkstatus_t *ns)
if (NS >= M) {
if (fabs(NStotal-Mtotal) > 0.01*MAX(NStotal,Mtotal)) {
log_warn(LD_DIR,
- "Bw Weight Failure for %s: NStotal %lf != Mtotal %lf. "
+ "Bw Weight Failure for %s: NStotal %f != Mtotal %f. "
"G="I64_FORMAT" M="I64_FORMAT" E="I64_FORMAT" D="I64_FORMAT
" T="I64_FORMAT". "
- "Wgg=%lf Wgd=%lf Wmg=%lf Wme=%lf Wmd=%lf Wee=%lf Wed=%lf",
+ "Wgg=%f Wgd=%f Wmg=%f Wme=%f Wmd=%f Wee=%f Wed=%f",
casename, NStotal, Mtotal,
I64_PRINTF_ARG(G), I64_PRINTF_ARG(M), I64_PRINTF_ARG(E),
I64_PRINTF_ARG(D), I64_PRINTF_ARG(T),
@@ -2727,10 +2750,10 @@ networkstatus_verify_bw_weights(networkstatus_t *ns)
// if NS < M, NStotal > T/3 because only one of G or E is scarce
if (3*NStotal < T) {
log_warn(LD_DIR,
- "Bw Weight Failure for %s: 3*NStotal %lf < T "
+ "Bw Weight Failure for %s: 3*NStotal %f < T "
I64_FORMAT". G="I64_FORMAT" M="I64_FORMAT
" E="I64_FORMAT" D="I64_FORMAT" T="I64_FORMAT". "
- "Wgg=%lf Wgd=%lf Wmg=%lf Wme=%lf Wmd=%lf Wee=%lf Wed=%lf",
+ "Wgg=%f Wgd=%f Wmg=%f Wme=%f Wmd=%f Wee=%f Wed=%f",
casename, NStotal*3, I64_PRINTF_ARG(T),
I64_PRINTF_ARG(G), I64_PRINTF_ARG(M), I64_PRINTF_ARG(E),
I64_PRINTF_ARG(D), I64_PRINTF_ARG(T),
@@ -2742,10 +2765,10 @@ networkstatus_verify_bw_weights(networkstatus_t *ns)
casename = "Case 3b";
if (fabs(Etotal-Mtotal) > 0.01*MAX(Etotal,Mtotal)) {
log_warn(LD_DIR,
- "Bw Weight Failure for %s: Etotal %lf != Mtotal %lf. "
+ "Bw Weight Failure for %s: Etotal %f != Mtotal %f. "
"G="I64_FORMAT" M="I64_FORMAT" E="I64_FORMAT" D="I64_FORMAT
" T="I64_FORMAT". "
- "Wgg=%lf Wgd=%lf Wmg=%lf Wme=%lf Wmd=%lf Wee=%lf Wed=%lf",
+ "Wgg=%f Wgd=%f Wmg=%f Wme=%f Wmd=%f Wee=%f Wed=%f",
casename, Etotal, Mtotal,
I64_PRINTF_ARG(G), I64_PRINTF_ARG(M), I64_PRINTF_ARG(E),
I64_PRINTF_ARG(D), I64_PRINTF_ARG(T),
@@ -2754,10 +2777,10 @@ networkstatus_verify_bw_weights(networkstatus_t *ns)
}
if (fabs(Etotal-Gtotal) > 0.01*MAX(Etotal,Gtotal)) {
log_warn(LD_DIR,
- "Bw Weight Failure for %s: Etotal %lf != Gtotal %lf. "
+ "Bw Weight Failure for %s: Etotal %f != Gtotal %f. "
"G="I64_FORMAT" M="I64_FORMAT" E="I64_FORMAT" D="I64_FORMAT
" T="I64_FORMAT". "
- "Wgg=%lf Wgd=%lf Wmg=%lf Wme=%lf Wmd=%lf Wee=%lf Wed=%lf",
+ "Wgg=%f Wgd=%f Wmg=%f Wme=%f Wmd=%f Wee=%f Wed=%f",
casename, Etotal, Gtotal,
I64_PRINTF_ARG(G), I64_PRINTF_ARG(M), I64_PRINTF_ARG(E),
I64_PRINTF_ARG(D), I64_PRINTF_ARG(T),
@@ -2766,10 +2789,10 @@ networkstatus_verify_bw_weights(networkstatus_t *ns)
}
if (fabs(Gtotal-Mtotal) > 0.01*MAX(Gtotal,Mtotal)) {
log_warn(LD_DIR,
- "Bw Weight Failure for %s: Mtotal %lf != Gtotal %lf. "
+ "Bw Weight Failure for %s: Mtotal %f != Gtotal %f. "
"G="I64_FORMAT" M="I64_FORMAT" E="I64_FORMAT" D="I64_FORMAT
" T="I64_FORMAT". "
- "Wgg=%lf Wgd=%lf Wmg=%lf Wme=%lf Wmd=%lf Wee=%lf Wed=%lf",
+ "Wgg=%f Wgd=%f Wmg=%f Wme=%f Wmd=%f Wee=%f Wed=%f",
casename, Mtotal, Gtotal,
I64_PRINTF_ARG(G), I64_PRINTF_ARG(M), I64_PRINTF_ARG(E),
I64_PRINTF_ARG(D), I64_PRINTF_ARG(T),
@@ -4135,6 +4158,20 @@ _find_by_keyword(smartlist_t *s, directory_keyword keyword,
return tok;
}
+/** DOCDOC */
+static smartlist_t *
+find_all_by_keyword(smartlist_t *s, directory_keyword k)
+{
+ smartlist_t *out = NULL;
+ SMARTLIST_FOREACH(s, directory_token_t *, t,
+ if (t->tp == k) {
+ if (!out)
+ out = smartlist_create();
+ smartlist_add(out, t);
+ });
+ return out;
+}
+
/** Return a newly allocated smartlist of all accept or reject tokens in
* <b>s</b>.
*/
@@ -4568,7 +4605,7 @@ tor_version_compare(tor_version_t *a, tor_version_t *b)
/** Return true iff versions <b>a</b> and <b>b</b> belong to the same series.
*/
-static int
+int
tor_version_same_series(tor_version_t *a, tor_version_t *b)
{
tor_assert(a);
@@ -4887,6 +4924,11 @@ rend_decrypt_introduction_points(char **ipos_decrypted,
crypto_cipher_env_t *cipher;
char *dec;
int declen;
+ if (ipos_encrypted_size < CIPHER_IV_LEN + 2) {
+ log_warn(LD_REND, "Size of encrypted introduction points is too "
+ "small.");
+ return -1;
+ }
dec = tor_malloc_zero(ipos_encrypted_size - CIPHER_IV_LEN - 1);
cipher = crypto_create_init_cipher(descriptor_cookie, 0);
declen = crypto_cipher_decrypt_with_iv(cipher, dec,
@@ -4982,7 +5024,7 @@ rend_parse_introduction_points(rend_service_descriptor_t *parsed,
info->identity_digest, DIGEST_LEN);
/* Parse IP address. */
tok = find_by_keyword(tokens, R_IPO_IP_ADDRESS);
- if (tor_addr_from_str(&info->addr, tok->args[0])<0) {
+ if (tor_addr_parse(&info->addr, tok->args[0])<0) {
log_warn(LD_REND, "Could not parse introduction point address.");
rend_intro_point_free(intro);
goto err;
diff --git a/src/or/routerparse.h b/src/or/routerparse.h
index 8b8cde25f..527de5dc8 100644
--- a/src/or/routerparse.h
+++ b/src/or/routerparse.h
@@ -47,6 +47,7 @@ version_status_t tor_version_is_obsolete(const char *myversion,
int tor_version_parse(const char *s, tor_version_t *out);
int tor_version_as_new_as(const char *platform, const char *cutoff);
int tor_version_compare(tor_version_t *a, tor_version_t *b);
+int tor_version_same_series(tor_version_t *a, tor_version_t *b);
void sort_version_list(smartlist_t *lst, int remove_duplicates);
void assert_addr_policy_ok(smartlist_t *t);
void dump_distinct_digest_count(int severity);
diff --git a/src/or/transports.c b/src/or/transports.c
new file mode 100644
index 000000000..eaaf1a3bf
--- /dev/null
+++ b/src/or/transports.c
@@ -0,0 +1,1250 @@
+/* Copyright (c) 2011, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * \file transports.c
+ * \brief Pluggable Transports related code.
+ **/
+
+#define PT_PRIVATE
+#include "or.h"
+#include "config.h"
+#include "circuitbuild.h"
+#include "transports.h"
+#include "util.h"
+#include "router.h"
+
+#ifdef MS_WINDOWS
+static void set_managed_proxy_environment(LPVOID *envp,
+ const managed_proxy_t *mp);
+#else
+static int set_managed_proxy_environment(char ***envp,
+ const managed_proxy_t *mp);
+#endif
+
+static INLINE int proxy_configuration_finished(const managed_proxy_t *mp);
+
+static void managed_proxy_destroy(managed_proxy_t *mp,
+ int also_terminate_process);
+
+static void handle_finished_proxy(managed_proxy_t *mp);
+static void configure_proxy(managed_proxy_t *mp);
+
+static void parse_method_error(const char *line, int is_server_method);
+#define parse_server_method_error(l) parse_method_error(l, 1)
+#define parse_client_method_error(l) parse_method_error(l, 0)
+
+static INLINE void free_execve_args(char **arg);
+
+/** Managed proxy protocol strings */
+#define PROTO_ENV_ERROR "ENV-ERROR"
+#define PROTO_NEG_SUCCESS "VERSION"
+#define PROTO_NEG_FAIL "VERSION-ERROR no-version"
+#define PROTO_CMETHOD "CMETHOD"
+#define PROTO_SMETHOD "SMETHOD"
+#define PROTO_CMETHOD_ERROR "CMETHOD-ERROR"
+#define PROTO_SMETHOD_ERROR "SMETHOD-ERROR"
+#define PROTO_CMETHODS_DONE "CMETHODS DONE"
+#define PROTO_SMETHODS_DONE "SMETHODS DONE"
+
+/* The smallest valid managed proxy protocol line that can
+ appear. It's the size of "VERSION 1" */
+#define SMALLEST_MANAGED_LINE_SIZE 9
+
+/** Number of environment variables for managed proxy clients/servers. */
+#define ENVIRON_SIZE_CLIENT 5
+#define ENVIRON_SIZE_SERVER 8
+
+/** The first and only supported - at the moment - configuration
+ protocol version. */
+#define PROTO_VERSION_ONE 1
+
+/** List of unconfigured managed proxies. */
+static smartlist_t *managed_proxy_list = NULL;
+/** Number of still unconfigured proxies. */
+static int unconfigured_proxies_n = 0;
+
+/** "The main idea is:"
+
+ Each managed proxy is represented by a 'managed_proxy_t'.
+ Each managed proxy can support multiple transports.
+ Each managed proxy gets configured through a multistep process.
+
+ 'managed_proxy_list' contains all the managed proxies this tor
+ instance is supporting.
+ In the 'managed_proxy_list' there are 'unconfigured_proxies_n'
+ managed proxies that are still unconfigured.
+
+ In every run_scheduled_event() tick, we attempt to launch and then
+ configure the unconfiged managed proxies, using the configuration
+ protocol defined in the 180_pluggable_transport.txt proposal. A
+ managed proxy might need several ticks to get fully configured.
+
+ When a managed proxy is fully configured, we register all its
+ transports to the circuitbuild.c subsystem. At that point the
+ transports are owned by the circuitbuild.c subsystem.
+
+ When a managed proxy fails to follow the 180 configuration
+ protocol, it gets marked as broken and gets destroyed.
+
+ "In a little more technical detail:"
+
+ While we are serially parsing torrc, we store all the transports
+ that a proxy should spawn in its 'transports_to_launch' element.
+
+ When we finish reading the torrc, we spawn the managed proxy and
+ expect {S,C}METHOD lines from its output. We add transports
+ described by METHOD lines to its 'transports' element, as
+ 'transport_t' structs.
+
+ When the managed proxy stops spitting METHOD lines (signified by a
+ '{S,C}METHODS DONE' message) we register all the transports
+ collected to the circuitbuild.c subsystem. At this point, the
+ 'transport_t's can be transformed into dangling pointers at any
+ point by the circuitbuild.c subsystem, and so we replace all
+ 'transport_t's with strings describing the transport names. We
+ can still go from a transport name to a 'transport_t' using the
+ fact that transport names uniquely identify 'transport_t's.
+
+ "In even more technical detail I shall describe what happens when
+ the SIGHUP bell tolls:"
+
+ We immediately destroy all unconfigured proxies (We shouldn't have
+ unconfigured proxies in the first place, except when SIGHUP rings
+ immediately after tor is launched.).
+
+ We mark all managed proxies and transports to signify that they
+ must be removed if they don't contribute by the new torrc
+ (marked_for_removal).
+ We also mark all managed proxies to signify that they might need
+ to be restarted so that they end up supporting all the transports
+ the new torrc wants them to support (got_hup).
+ We also clear their 'transports_to_launch' list so that we can put
+ there the transports we need to launch according to the new torrc.
+
+ We then start parsing torrc again.
+
+ Everytime we encounter a transport line using a known pre-SIGHUP
+ managed proxy, we cleanse that proxy from the removal mark.
+
+ We also mark it as unconfigured so that on the next scheduled
+ events tick, we investigate whether we need to restart the proxy
+ so that it also spawns the new transports.
+ If the post-SIGHUP 'transports_to_launch' list is identical to the
+ pre-SIGHUP one, it means that no changes were introduced to this
+ proxy during the SIGHUP and no restart has to take place.
+
+ During the post-SIGHUP torrc parsing, we unmark all transports
+ spawned by managed proxies that we find in our torrc.
+ We do that so that if we don't need to restart a managed proxy, we
+ can continue using its old transports normally.
+ If we end up restarting the proxy, we destroy and unregister all
+ old transports from the circuitbuild.c subsystem.
+*/
+
+/** Return true if there are still unconfigured managed proxies. */
+int
+pt_proxies_configuration_pending(void)
+{
+ return !! unconfigured_proxies_n;
+}
+
+/** Return true if <b>mp</b> has the same argv as <b>proxy_argv</b> */
+static int
+managed_proxy_has_argv(const managed_proxy_t *mp, char **proxy_argv)
+{
+ char **tmp1=proxy_argv;
+ char **tmp2=mp->argv;
+
+ tor_assert(tmp1);
+ tor_assert(tmp2);
+
+ while (*tmp1 && *tmp2) {
+ if (strcmp(*tmp1++, *tmp2++))
+ return 0;
+ }
+
+ if (!*tmp1 && !*tmp2)
+ return 1;
+
+ return 0;
+}
+
+/** Return a managed proxy with the same argv as <b>proxy_argv</b>.
+ * If no such managed proxy exists, return NULL. */
+static managed_proxy_t *
+get_managed_proxy_by_argv_and_type(char **proxy_argv, int is_server)
+{
+ if (!managed_proxy_list)
+ return NULL;
+
+ SMARTLIST_FOREACH_BEGIN(managed_proxy_list, managed_proxy_t *, mp) {
+ if (managed_proxy_has_argv(mp, proxy_argv) &&
+ mp->is_server == is_server)
+ return mp;
+ } SMARTLIST_FOREACH_END(mp);
+
+ return NULL;
+}
+
+/** Add <b>transport</b> to managed proxy <b>mp</b>. */
+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))
+ smartlist_add(mp->transports_to_launch, tor_strdup(transport));
+}
+
+/** Called when a SIGHUP occurs. Returns true if managed proxy
+ * <b>mp</b> needs to be restarted after the SIGHUP, based on the new
+ * torrc. */
+static int
+proxy_needs_restart(const managed_proxy_t *mp)
+{
+ /* mp->transport_to_launch is populated with the names of the
+ transports that must be launched *after* the SIGHUP.
+ mp->transports is populated with the names of the transports that
+ were launched *before* the SIGHUP.
+
+ If the two lists contain the same strings, we don't need to
+ restart the proxy, since it already does what we want. */
+
+ tor_assert(smartlist_len(mp->transports_to_launch) > 0);
+ tor_assert(mp->conf_state == PT_PROTO_COMPLETED);
+
+ if (smartlist_len(mp->transports_to_launch) != smartlist_len(mp->transports))
+ goto needs_restart;
+
+ SMARTLIST_FOREACH_BEGIN(mp->transports_to_launch, char *, t_t_l) {
+ if (!smartlist_string_isin(mp->transports, t_t_l))
+ goto needs_restart;
+
+ } SMARTLIST_FOREACH_END(t_t_l);
+
+ return 0;
+
+ needs_restart:
+ return 1;
+}
+
+/** Managed proxy <b>mp</b> must be restarted. Do all the necessary
+ * preparations and then flag its state so that it will be relaunched
+ * in the next tick. */
+static void
+proxy_prepare_for_restart(managed_proxy_t *mp)
+{
+ transport_t *t_tmp = NULL;
+
+ tor_assert(mp->conf_state == PT_PROTO_COMPLETED);
+
+ /* destroy the process handle and terminate the process. */
+ tor_process_handle_destroy(mp->process_handle, 1);
+ mp->process_handle = NULL;
+
+ /* destroy all its old transports. we no longer use them. */
+ SMARTLIST_FOREACH_BEGIN(mp->transports, const char *, t_name) {
+ t_tmp = transport_get_by_name(t_name);
+ if (t_tmp)
+ t_tmp->marked_for_removal = 1;
+ } SMARTLIST_FOREACH_END(t_name);
+ sweep_transport_list();
+
+ /* free the transport names in mp->transports */
+ SMARTLIST_FOREACH(mp->transports, char *, t_name, tor_free(t_name));
+ smartlist_clear(mp->transports);
+
+ /* flag it as an infant proxy so that it gets launched on next tick */
+ mp->conf_state = PT_PROTO_INFANT;
+}
+
+/** Launch managed proxy <b>mp</b>. */
+static int
+launch_managed_proxy(managed_proxy_t *mp)
+{
+ int retval;
+
+#ifdef MS_WINDOWS
+
+ LPVOID envp=NULL;
+
+ set_managed_proxy_environment(&envp, mp);
+ tor_assert(envp);
+
+ /* Passing NULL as lpApplicationName makes Windows search for the .exe */
+ retval = tor_spawn_background(NULL, (const char **)mp->argv, envp,
+ &mp->process_handle);
+
+ tor_free(envp);
+
+#else
+
+ char **envp=NULL;
+
+ /* prepare the environment variables for the managed proxy */
+ if (set_managed_proxy_environment(&envp, mp) < 0) {
+ log_warn(LD_GENERAL, "Could not setup the environment of "
+ "the managed proxy at '%s'.", mp->argv[0]);
+ free_execve_args(envp);
+ return -1;
+ }
+
+ retval = tor_spawn_background(mp->argv[0], (const char **)mp->argv,
+ (const char **)envp, &mp->process_handle);
+
+ /* free the memory allocated by set_managed_proxy_environment(). */
+ free_execve_args(envp);
+
+#endif
+
+ if (retval == PROCESS_STATUS_ERROR) {
+ log_warn(LD_GENERAL, "Managed proxy at '%s' failed at launch.",
+ mp->argv[0]);
+ return -1;
+ }
+
+ log_info(LD_CONFIG, "Managed proxy at '%s' has spawned with PID '%d'.",
+ mp->argv[0], tor_process_get_pid(mp->process_handle));
+
+ mp->conf_state = PT_PROTO_LAUNCHED;
+
+ return 0;
+}
+
+/** Check if any of the managed proxies we are currently trying to
+ * configure have anything new to say. This is called from
+ * run_scheduled_events(). */
+void
+pt_configure_remaining_proxies(void)
+{
+ log_debug(LD_CONFIG, "Configuring remaining managed proxies (%d)!",
+ unconfigured_proxies_n);
+ SMARTLIST_FOREACH_BEGIN(managed_proxy_list, managed_proxy_t *, mp) {
+ tor_assert(mp->conf_state != PT_PROTO_BROKEN ||
+ mp->conf_state != PT_PROTO_FAILED_LAUNCH);
+
+ if (mp->got_hup) {
+ mp->got_hup = 0;
+
+ /* This proxy is marked by a SIGHUP. Check whether we need to
+ restart it. */
+ if (proxy_needs_restart(mp)) {
+ log_info(LD_GENERAL, "Preparing managed proxy for restart.");
+ proxy_prepare_for_restart(mp);
+ continue;
+ } else { /* it doesn't need to be restarted. */
+ log_info(LD_GENERAL, "Nothing changed for managed proxy after HUP: "
+ "not restarting.");
+ unconfigured_proxies_n--;
+ tor_assert(unconfigured_proxies_n >= 0);
+ }
+
+ continue;
+ }
+
+ /* If the proxy is not fully configured, try to configure it
+ futher. */
+ if (!proxy_configuration_finished(mp))
+ configure_proxy(mp);
+
+ } SMARTLIST_FOREACH_END(mp);
+}
+
+#ifdef MS_WINDOWS
+
+/** Attempt to continue configuring managed proxy <b>mp</b>. */
+static void
+configure_proxy(managed_proxy_t *mp)
+{
+ int pos;
+ char stdout_buf[200];
+ smartlist_t *lines = NULL;
+
+ /* if we haven't launched the proxy yet, do it now */
+ if (mp->conf_state == PT_PROTO_INFANT) {
+ if (launch_managed_proxy(mp) < 0) { /* launch fail */
+ mp->conf_state = PT_PROTO_FAILED_LAUNCH;
+ handle_finished_proxy(mp);
+ }
+ return;
+ }
+
+ tor_assert(mp->conf_state != PT_PROTO_INFANT);
+ tor_assert(mp->process_handle);
+
+ pos = tor_read_all_handle(tor_process_get_stdout_pipe(mp->process_handle),
+ stdout_buf, sizeof(stdout_buf) - 1, NULL);
+ if (pos < 0) {
+ log_notice(LD_GENERAL, "Failed to read data from managed proxy");
+ mp->conf_state = PT_PROTO_BROKEN;
+ goto done;
+ }
+
+ if (pos == 0) /* proxy has nothing interesting to say. */
+ return;
+
+ /* End with a null even if there isn't a \r\n at the end */
+ /* TODO: What if this is a partial line? */
+ stdout_buf[pos] = '\0';
+
+ /* Split up the buffer */
+ lines = smartlist_create();
+ tor_split_lines(lines, stdout_buf, pos);
+
+ /* Handle lines. */
+ SMARTLIST_FOREACH_BEGIN(lines, const char *, line) {
+ handle_proxy_line(line, mp);
+ if (proxy_configuration_finished(mp))
+ goto done;
+ } SMARTLIST_FOREACH_END(line);
+
+ done:
+ /* if the proxy finished configuring, exit the loop. */
+ if (proxy_configuration_finished(mp))
+ handle_finished_proxy(mp);
+
+ if (lines)
+ smartlist_free(lines);
+}
+
+#else /* MS_WINDOWS */
+
+/** Attempt to continue configuring managed proxy <b>mp</b>. */
+static void
+configure_proxy(managed_proxy_t *mp)
+{
+ enum stream_status r;
+ char stdout_buf[200];
+
+ /* if we haven't launched the proxy yet, do it now */
+ if (mp->conf_state == PT_PROTO_INFANT) {
+ if (launch_managed_proxy(mp) < 0) { /* launch fail */
+ mp->conf_state = PT_PROTO_FAILED_LAUNCH;
+ handle_finished_proxy(mp);
+ }
+ return;
+ }
+
+ tor_assert(mp->conf_state != PT_PROTO_INFANT);
+ tor_assert(mp->process_handle);
+
+ while (1) {
+ r = get_string_from_pipe(tor_process_get_stdout_pipe(mp->process_handle),
+ stdout_buf, sizeof(stdout_buf) - 1);
+
+ if (r == IO_STREAM_OKAY) { /* got a line; handle it! */
+ handle_proxy_line((const char *)stdout_buf, mp);
+ } else if (r == IO_STREAM_EAGAIN) { /* check back later */
+ return;
+ } else if (r == IO_STREAM_CLOSED || r == IO_STREAM_TERM) { /* snap! */
+ log_notice(LD_GENERAL, "Managed proxy stream closed. "
+ "Most probably application stopped running");
+ mp->conf_state = PT_PROTO_BROKEN;
+ } else { /* unknown stream status */
+ log_notice(LD_GENERAL, "Unknown stream status while configuring proxy.");
+ }
+
+ /* if the proxy finished configuring, exit the loop. */
+ if (proxy_configuration_finished(mp)) {
+ handle_finished_proxy(mp);
+ return;
+ }
+ }
+}
+
+#endif /* MS_WINDOWS */
+
+/** Register server managed proxy <b>mp</b> transports to state */
+static void
+register_server_proxy(managed_proxy_t *mp)
+{
+ /* After we register this proxy's transports, we switch its
+ mp->transports to a list containing strings of its transport
+ names. (See transports.h) */
+ smartlist_t *sm_tmp = smartlist_create();
+
+ tor_assert(mp->conf_state != PT_PROTO_COMPLETED);
+ SMARTLIST_FOREACH_BEGIN(mp->transports, transport_t *, t) {
+ save_transport_to_state(t->name, &t->addr, t->port);
+ /* LOG_WARN so that the bridge operator can easily find the
+ transport's port in the log file and send it to the users. */
+ log_warn(LD_GENERAL, "Registered server transport '%s' at '%s:%d'",
+ t->name, fmt_addr(&t->addr), (int)t->port);
+ smartlist_add(sm_tmp, tor_strdup(t->name));
+ } SMARTLIST_FOREACH_END(t);
+
+ /* Since server proxies don't register their transports in the
+ circuitbuild.c subsystem, it's our duty to free them when we
+ switch mp->transports to strings. */
+ SMARTLIST_FOREACH(mp->transports, transport_t *, t, transport_free(t));
+ smartlist_free(mp->transports);
+
+ mp->transports = sm_tmp;
+}
+
+/** Register all the transports supported by client managed proxy
+ * <b>mp</b> to the bridge subsystem. */
+static void
+register_client_proxy(managed_proxy_t *mp)
+{
+ int r;
+ /* After we register this proxy's transports, we switch its
+ mp->transports to a list containing strings of its transport
+ names. (See transports.h) */
+ smartlist_t *sm_tmp = smartlist_create();
+
+ tor_assert(mp->conf_state != PT_PROTO_COMPLETED);
+ SMARTLIST_FOREACH_BEGIN(mp->transports, transport_t *, t) {
+ r = transport_add(t);
+ switch (r) {
+ case -1:
+ log_notice(LD_GENERAL, "Could not add transport %s. Skipping.", t->name);
+ transport_free(t);
+ break;
+ case 0:
+ log_info(LD_GENERAL, "Succesfully registered transport %s", t->name);
+ smartlist_add(sm_tmp, tor_strdup(t->name));
+ break;
+ case 1:
+ log_info(LD_GENERAL, "Succesfully registered transport %s", t->name);
+ smartlist_add(sm_tmp, tor_strdup(t->name));
+ transport_free(t);
+ break;
+ }
+ } SMARTLIST_FOREACH_END(t);
+
+ smartlist_free(mp->transports);
+ mp->transports = sm_tmp;
+}
+
+/** Register the transports of managed proxy <b>mp</b>. */
+static INLINE void
+register_proxy(managed_proxy_t *mp)
+{
+ if (mp->is_server)
+ register_server_proxy(mp);
+ else
+ register_client_proxy(mp);
+}
+
+/** Free memory allocated by managed proxy <b>mp</b>. */
+static void
+managed_proxy_destroy(managed_proxy_t *mp,
+ int also_terminate_process)
+{
+ if (mp->conf_state != PT_PROTO_COMPLETED)
+ SMARTLIST_FOREACH(mp->transports, transport_t *, t, transport_free(t));
+ else
+ SMARTLIST_FOREACH(mp->transports, char *, t_name, tor_free(t_name));
+
+ /* free the transports smartlist */
+ smartlist_free(mp->transports);
+
+ /* free the transports_to_launch smartlist */
+ SMARTLIST_FOREACH(mp->transports_to_launch, char *, t, tor_free(t));
+ smartlist_free(mp->transports_to_launch);
+
+ /* remove it from the list of managed proxies */
+ smartlist_remove(managed_proxy_list, mp);
+
+ /* free the argv */
+ free_execve_args(mp->argv);
+
+ tor_process_handle_destroy(mp->process_handle, also_terminate_process);
+ mp->process_handle = NULL;
+
+ tor_free(mp);
+}
+
+/** Handle a configured or broken managed proxy <b>mp</b>. */
+static void
+handle_finished_proxy(managed_proxy_t *mp)
+{
+ switch (mp->conf_state) {
+ case PT_PROTO_BROKEN: /* if broken: */
+ managed_proxy_destroy(mp, 1); /* annihilate it. */
+ break;
+ case PT_PROTO_FAILED_LAUNCH: /* if it failed before launching: */
+ managed_proxy_destroy(mp, 0); /* destroy it but don't terminate */
+ break;
+ case PT_PROTO_CONFIGURED: /* if configured correctly: */
+ register_proxy(mp); /* register its transports */
+ mp->conf_state = PT_PROTO_COMPLETED; /* and mark it as completed. */
+ break;
+ case PT_PROTO_INFANT:
+ case PT_PROTO_LAUNCHED:
+ case PT_PROTO_ACCEPTING_METHODS:
+ case PT_PROTO_COMPLETED:
+ default:
+ log_warn(LD_CONFIG, "Unexpected managed proxy state in "
+ "handle_finished_proxy().");
+ tor_assert(0);
+ }
+
+ unconfigured_proxies_n--;
+ tor_assert(unconfigured_proxies_n >= 0);
+}
+
+/** Return true if the configuration of the managed proxy <b>mp</b> is
+ finished. */
+static INLINE int
+proxy_configuration_finished(const managed_proxy_t *mp)
+{
+ return (mp->conf_state == PT_PROTO_CONFIGURED ||
+ mp->conf_state == PT_PROTO_BROKEN ||
+ mp->conf_state == PT_PROTO_FAILED_LAUNCH);
+}
+
+/** This function is called when a proxy sends an {S,C}METHODS DONE message. */
+static void
+handle_methods_done(const managed_proxy_t *mp)
+{
+ tor_assert(mp->transports);
+
+ if (smartlist_len(mp->transports) == 0)
+ log_notice(LD_GENERAL, "Proxy was spawned successfully, "
+ "but it didn't laucn any pluggable transport listeners!");
+
+ log_info(LD_CONFIG, "%s managed proxy configuration completed!",
+ mp->is_server ? "Server" : "Client");
+}
+
+/** Handle a configuration protocol <b>line</b> received from a
+ * managed proxy <b>mp</b>. */
+void
+handle_proxy_line(const char *line, managed_proxy_t *mp)
+{
+ log_debug(LD_GENERAL, "Got a line from managed proxy: %s", line);
+
+ if (strlen(line) < SMALLEST_MANAGED_LINE_SIZE) {
+ log_warn(LD_GENERAL, "Managed proxy configuration line is too small. "
+ "Discarding");
+ goto err;
+ }
+
+ if (!strcmpstart(line, PROTO_ENV_ERROR)) {
+ if (mp->conf_state != PT_PROTO_LAUNCHED)
+ goto err;
+
+ parse_env_error(line);
+ goto err;
+ } else if (!strcmpstart(line, PROTO_NEG_FAIL)) {
+ if (mp->conf_state != PT_PROTO_LAUNCHED)
+ goto err;
+
+ log_warn(LD_CONFIG, "Managed proxy could not pick a "
+ "configuration protocol version.");
+ goto err;
+ } else if (!strcmpstart(line, PROTO_NEG_SUCCESS)) {
+ if (mp->conf_state != PT_PROTO_LAUNCHED)
+ goto err;
+
+ if (parse_version(line,mp) < 0)
+ goto err;
+
+ tor_assert(mp->conf_protocol != 0);
+ mp->conf_state = PT_PROTO_ACCEPTING_METHODS;
+ return;
+ } else if (!strcmpstart(line, PROTO_CMETHODS_DONE)) {
+ if (mp->conf_state != PT_PROTO_ACCEPTING_METHODS)
+ goto err;
+
+ handle_methods_done(mp);
+
+ mp->conf_state = PT_PROTO_CONFIGURED;
+ return;
+ } else if (!strcmpstart(line, PROTO_SMETHODS_DONE)) {
+ if (mp->conf_state != PT_PROTO_ACCEPTING_METHODS)
+ goto err;
+
+ handle_methods_done(mp);
+
+ mp->conf_state = PT_PROTO_CONFIGURED;
+ return;
+ } else if (!strcmpstart(line, PROTO_CMETHOD_ERROR)) {
+ if (mp->conf_state != PT_PROTO_ACCEPTING_METHODS)
+ goto err;
+
+ parse_client_method_error(line);
+ goto err;
+ } else if (!strcmpstart(line, PROTO_SMETHOD_ERROR)) {
+ if (mp->conf_state != PT_PROTO_ACCEPTING_METHODS)
+ goto err;
+
+ parse_server_method_error(line);
+ goto err;
+ } else if (!strcmpstart(line, PROTO_CMETHOD)) {
+ if (mp->conf_state != PT_PROTO_ACCEPTING_METHODS)
+ goto err;
+
+ if (parse_cmethod_line(line, mp) < 0)
+ goto err;
+
+ return;
+ } else if (!strcmpstart(line, PROTO_SMETHOD)) {
+ if (mp->conf_state != PT_PROTO_ACCEPTING_METHODS)
+ goto err;
+
+ if (parse_smethod_line(line, mp) < 0)
+ goto err;
+
+ return;
+ } else if (!strcmpstart(line, SPAWN_ERROR_MESSAGE)) {
+ log_warn(LD_GENERAL, "Could not launch managed proxy executable!");
+ mp->conf_state = PT_PROTO_FAILED_LAUNCH;
+ return;
+ }
+
+ log_warn(LD_CONFIG, "Unknown line received by managed proxy. (%s)", line);
+
+ err:
+ mp->conf_state = PT_PROTO_BROKEN;
+ log_warn(LD_CONFIG, "Managed proxy at '%s' failed the configuration protocol"
+ " and will be destroyed.", mp->argv ? mp->argv[0] : "");
+}
+
+/** Parses an ENV-ERROR <b>line</b> and warns the user accordingly. */
+void
+parse_env_error(const char *line)
+{
+ /* (Length of the protocol string) plus (a space) and (the first char of
+ the error message) */
+ if (strlen(line) < (strlen(PROTO_ENV_ERROR) + 2))
+ log_notice(LD_CONFIG, "Managed proxy sent us an %s without an error "
+ "message.", PROTO_ENV_ERROR);
+
+ log_warn(LD_CONFIG, "Managed proxy couldn't understand the "
+ "pluggable transport environment variables. (%s)",
+ line+strlen(PROTO_ENV_ERROR)+1);
+}
+
+/** Handles a VERSION <b>line</b>. Updates the configuration protocol
+ * version in <b>mp</b>. */
+int
+parse_version(const char *line, managed_proxy_t *mp)
+{
+ if (strlen(line) < (strlen(PROTO_NEG_SUCCESS) + 2)) {
+ log_warn(LD_CONFIG, "Managed proxy sent us malformed %s line.",
+ PROTO_NEG_SUCCESS);
+ return -1;
+ }
+
+ if (strcmp("1", line+strlen(PROTO_NEG_SUCCESS)+1)) { /* hardcoded temp */
+ log_warn(LD_CONFIG, "Managed proxy tried to negotiate on version '%s'. "
+ "We only support version '1'", line+strlen(PROTO_NEG_SUCCESS)+1);
+ return -1;
+ }
+
+ mp->conf_protocol = PROTO_VERSION_ONE; /* temp. till more versions appear */
+ return 0;
+}
+
+/** Parses {C,S}METHOD-ERROR <b>line</b> and warns the user
+ * accordingly. If <b>is_server</b> it is an SMETHOD-ERROR,
+ * otherwise it is a CMETHOD-ERROR. */
+static void
+parse_method_error(const char *line, int is_server)
+{
+ const char* error = is_server ?
+ PROTO_SMETHOD_ERROR : PROTO_CMETHOD_ERROR;
+
+ /* (Length of the protocol string) plus (a space) and (the first char of
+ the error message) */
+ if (strlen(line) < (strlen(error) + 2))
+ log_warn(LD_CONFIG, "Managed proxy sent us an %s without an error "
+ "message.", error);
+
+ log_warn(LD_CONFIG, "%s managed proxy encountered a method error. (%s)",
+ is_server ? "Server" : "Client",
+ line+strlen(error)+1);
+}
+
+/** Parses an SMETHOD <b>line</b> and if well-formed it registers the
+ * new transport in <b>mp</b>. */
+int
+parse_smethod_line(const char *line, managed_proxy_t *mp)
+{
+ int r;
+ smartlist_t *items = NULL;
+
+ char *method_name=NULL;
+
+ char *addrport=NULL;
+ tor_addr_t addr;
+ uint16_t port = 0;
+
+ transport_t *transport=NULL;
+
+ items = smartlist_create();
+ smartlist_split_string(items, line, NULL,
+ SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, -1);
+ if (smartlist_len(items) < 3) {
+ log_warn(LD_CONFIG, "Server managed proxy sent us a SMETHOD line "
+ "with too few arguments.");
+ goto err;
+ }
+
+ tor_assert(!strcmp(smartlist_get(items,0),PROTO_SMETHOD));
+
+ method_name = smartlist_get(items,1);
+ if (!string_is_C_identifier(method_name)) {
+ log_warn(LD_CONFIG, "Transport name is not a C identifier (%s).",
+ method_name);
+ goto err;
+ }
+
+ addrport = smartlist_get(items, 2);
+ if (tor_addr_port_lookup(addrport, &addr, &port)<0) {
+ log_warn(LD_CONFIG, "Error parsing transport "
+ "address '%s'", addrport);
+ goto err;
+ }
+
+ if (!port) {
+ log_warn(LD_CONFIG,
+ "Transport address '%s' has no port.", addrport);
+ goto err;
+ }
+
+ transport = transport_create(&addr, port, method_name, PROXY_NONE);
+ if (!transport)
+ goto err;
+
+ smartlist_add(mp->transports, transport);
+
+ /* For now, notify the user so that he knows where the server
+ transport is listening. */
+ log_info(LD_CONFIG, "Server transport %s at %s:%d.",
+ method_name, fmt_addr(&addr), (int)port);
+
+ r=0;
+ goto done;
+
+ err:
+ r = -1;
+
+ done:
+ SMARTLIST_FOREACH(items, char*, s, tor_free(s));
+ smartlist_free(items);
+ return r;
+}
+
+/** Parses a CMETHOD <b>line</b>, and if well-formed it registers
+ * the new transport in <b>mp</b>. */
+int
+parse_cmethod_line(const char *line, managed_proxy_t *mp)
+{
+ int r;
+ smartlist_t *items = NULL;
+
+ char *method_name=NULL;
+
+ char *socks_ver_str=NULL;
+ int socks_ver=PROXY_NONE;
+
+ char *addrport=NULL;
+ tor_addr_t addr;
+ uint16_t port = 0;
+
+ transport_t *transport=NULL;
+
+ items = smartlist_create();
+ smartlist_split_string(items, line, NULL,
+ SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, -1);
+ if (smartlist_len(items) < 4) {
+ log_warn(LD_CONFIG, "Client managed proxy sent us a CMETHOD line "
+ "with too few arguments.");
+ goto err;
+ }
+
+ tor_assert(!strcmp(smartlist_get(items,0),PROTO_CMETHOD));
+
+ method_name = smartlist_get(items,1);
+ if (!string_is_C_identifier(method_name)) {
+ log_warn(LD_CONFIG, "Transport name is not a C identifier (%s).",
+ method_name);
+ goto err;
+ }
+
+ socks_ver_str = smartlist_get(items,2);
+
+ if (!strcmp(socks_ver_str,"socks4")) {
+ socks_ver = PROXY_SOCKS4;
+ } else if (!strcmp(socks_ver_str,"socks5")) {
+ socks_ver = PROXY_SOCKS5;
+ } else {
+ log_warn(LD_CONFIG, "Client managed proxy sent us a proxy protocol "
+ "we don't recognize. (%s)", socks_ver_str);
+ goto err;
+ }
+
+ addrport = smartlist_get(items, 3);
+ if (tor_addr_port_lookup(addrport, &addr, &port)<0) {
+ log_warn(LD_CONFIG, "Error parsing transport "
+ "address '%s'", addrport);
+ goto err;
+ }
+
+ if (!port) {
+ log_warn(LD_CONFIG,
+ "Transport address '%s' has no port.", addrport);
+ goto err;
+ }
+
+ transport = transport_create(&addr, port, method_name, socks_ver);
+ if (!transport)
+ goto err;
+
+ smartlist_add(mp->transports, transport);
+
+ log_info(LD_CONFIG, "Transport %s at %s:%d with SOCKS %d. "
+ "Attached to managed proxy.",
+ method_name, fmt_addr(&addr), (int)port, socks_ver);
+
+ r=0;
+ goto done;
+
+ err:
+ r = -1;
+
+ done:
+ SMARTLIST_FOREACH(items, char*, s, tor_free(s));
+ smartlist_free(items);
+ return r;
+}
+
+/** Return a string containing the address:port that <b>transport</b>
+ * should use. It's the responsibility of the caller to free() the
+ * received string. */
+static char *
+get_bindaddr_for_proxy(const managed_proxy_t *mp)
+{
+ char *bindaddr = NULL;
+ smartlist_t *string_tmp = smartlist_create();
+
+ tor_assert(mp->is_server);
+
+ SMARTLIST_FOREACH_BEGIN(mp->transports_to_launch, char *, t) {
+ tor_asprintf(&bindaddr, "%s-%s", t, get_bindaddr_for_transport(t));
+ smartlist_add(string_tmp, bindaddr);
+ } SMARTLIST_FOREACH_END(t);
+
+ bindaddr = smartlist_join_strings(string_tmp, ",", 0, NULL);
+
+ SMARTLIST_FOREACH(string_tmp, char *, t, tor_free(t));
+ smartlist_free(string_tmp);
+
+ return bindaddr;
+}
+
+#ifdef MS_WINDOWS
+
+/** Prepare the environment <b>envp</b> of managed proxy <b>mp</b>.
+ * <b>envp</b> is allocated on the heap and should be freed by the
+ * caller after its use. */
+static void
+set_managed_proxy_environment(LPVOID *envp, const managed_proxy_t *mp)
+{
+ const or_options_t *options = get_options();
+ extern char **environ;
+
+ LPVOID tmp=NULL;
+
+ char *state_tmp=NULL;
+ char *state_env=NULL;
+ char *transports_to_launch=NULL;
+ char *transports_env=NULL;
+ char *bindaddr_tmp=NULL;
+ char *bindaddr_env=NULL;
+ char *orport_env=NULL;
+
+ char version_env[31]; /* XXX temp */
+ char extended_env[43]; /* XXX temp */
+
+ int env_size = 0;
+
+ /* A smartlist carrying all the env. variables that the managed
+ proxy should inherit. */
+ smartlist_t *envs = smartlist_create();
+
+ /* Copy the whole environment of the Tor process.
+ It should also copy PATH and HOME of the Tor process.*/
+ char **environ_tmp = environ;
+ while (*environ_tmp)
+ smartlist_add(envs, *environ_tmp++);
+
+ /* Create the TOR_PT_* environment variables. */
+ state_tmp = get_datadir_fname("pt_state/"); /* XXX temp */
+ tor_asprintf(&state_env, "TOR_PT_STATE_LOCATION=%s", state_tmp);
+
+ strcpy(version_env, "TOR_PT_MANAGED_TRANSPORT_VER=1");
+
+ transports_to_launch =
+ smartlist_join_strings(mp->transports_to_launch, ",", 0, NULL);
+
+ tor_asprintf(&transports_env,
+ mp->is_server ?
+ "TOR_PT_SERVER_TRANSPORTS=%s" : "TOR_PT_CLIENT_TRANSPORTS=%s",
+ transports_to_launch);
+
+ smartlist_add(envs, state_env);
+ smartlist_add(envs, version_env);
+ smartlist_add(envs, transports_env);
+
+ if (mp->is_server) {
+ tor_asprintf(&orport_env, "TOR_PT_ORPORT=127.0.0.1:%d", options->ORPort);
+
+ bindaddr_tmp = get_bindaddr_for_proxy(mp);
+ tor_asprintf(&bindaddr_env, "TOR_PT_SERVER_BINDADDR=%s", bindaddr_tmp);
+
+ strcpy(extended_env, "TOR_PT_EXTENDED_SERVER_PORT=127.0.0.1:4200");
+
+ smartlist_add(envs, orport_env);
+ smartlist_add(envs, extended_env);
+ smartlist_add(envs, bindaddr_env);
+ }
+
+ /* It seems like some versions of Windows need a sorted lpEnvironment
+ block. */
+ smartlist_sort_strings(envs);
+
+ /* An environment block consists of a null-terminated block of
+ null-terminated strings: */
+
+ /* Calculate the block's size. */
+ SMARTLIST_FOREACH(envs, const char *, s,
+ env_size += strlen(s) + 1);
+ env_size += 1; /* space for last NUL */
+
+ *envp = tor_malloc(env_size);
+ tmp = *envp;
+
+ /* Create the block. */
+ SMARTLIST_FOREACH_BEGIN(envs, const char *, s) {
+ memcpy(tmp, s, strlen(s)); /* copy the env. variable string */
+ tmp += strlen(s);
+ memset(tmp, '\0', 1); /* append NUL at the end of the string */
+ tmp += 1;
+ } SMARTLIST_FOREACH_END(s);
+ memset(tmp, '\0', 1); /* last NUL */
+
+ /* Finally, free the whole mess. */
+ tor_free(state_tmp);
+ tor_free(state_env);
+ tor_free(transports_to_launch);
+ tor_free(transports_env);
+ tor_free(bindaddr_tmp);
+ tor_free(bindaddr_env);
+ tor_free(orport_env);
+
+ smartlist_free(envs);
+}
+
+#else /* MS_WINDOWS */
+
+/** Prepare the environment <b>envp</b> of managed proxy <b>mp</b>.
+ * <b>envp</b> is allocated on the heap and should be freed by the
+ * caller after its use. */
+static int
+set_managed_proxy_environment(char ***envp, const managed_proxy_t *mp)
+{
+ const or_options_t *options = get_options();
+ char **tmp=NULL;
+ char *state_loc=NULL;
+ char *transports_to_launch=NULL;
+ char *bindaddr=NULL;
+ char *home_env=NULL;
+ char *path_env=NULL;
+
+ int r = -1;
+ int n_envs = mp->is_server ? ENVIRON_SIZE_SERVER : ENVIRON_SIZE_CLIENT;
+
+ /* allocate enough space for our env. vars and a NULL pointer */
+ *envp = tor_malloc(sizeof(char*)*(n_envs+1));
+ tmp = *envp;
+
+ state_loc = get_datadir_fname("pt_state/"); /* XXX temp */
+ transports_to_launch =
+ smartlist_join_strings(mp->transports_to_launch, ",", 0, NULL);
+
+ home_env = getenv("HOME");
+ path_env = getenv("PATH");
+ if (!home_env || !path_env)
+ goto done;
+
+ tor_asprintf(tmp++, "HOME=%s", home_env);
+ tor_asprintf(tmp++, "PATH=%s", path_env);
+ tor_asprintf(tmp++, "TOR_PT_STATE_LOCATION=%s", state_loc);
+ tor_asprintf(tmp++, "TOR_PT_MANAGED_TRANSPORT_VER=1"); /* temp */
+ if (mp->is_server) {
+ bindaddr = get_bindaddr_for_proxy(mp);
+
+ /* XXX temp */
+ tor_asprintf(tmp++, "TOR_PT_ORPORT=127.0.0.1:%d",
+ router_get_advertised_or_port(options));
+ tor_asprintf(tmp++, "TOR_PT_SERVER_BINDADDR=%s", bindaddr);
+ tor_asprintf(tmp++, "TOR_PT_SERVER_TRANSPORTS=%s", transports_to_launch);
+ /* XXX temp*/
+ tor_asprintf(tmp++, "TOR_PT_EXTENDED_SERVER_PORT=127.0.0.1:4200");
+ } else {
+ tor_asprintf(tmp++, "TOR_PT_CLIENT_TRANSPORTS=%s", transports_to_launch);
+ }
+ *tmp = NULL;
+
+ r = 0;
+
+ done:
+ tor_free(state_loc);
+ tor_free(transports_to_launch);
+ tor_free(bindaddr);
+
+ return r;
+}
+
+#endif /* MS_WINDOWS */
+
+/** Create and return a new managed proxy for <b>transport</b> using
+ * <b>proxy_argv</b>. If <b>is_server</b> is true, it's a server
+ * managed proxy. */
+static managed_proxy_t *
+managed_proxy_create(const smartlist_t *transport_list,
+ char **proxy_argv, int is_server)
+{
+ managed_proxy_t *mp = tor_malloc_zero(sizeof(managed_proxy_t));
+ mp->conf_state = PT_PROTO_INFANT;
+ mp->is_server = is_server;
+ mp->argv = proxy_argv;
+ mp->transports = smartlist_create();
+
+ mp->transports_to_launch = smartlist_create();
+ SMARTLIST_FOREACH(transport_list, const char *, transport,
+ add_transport_to_proxy(transport, mp));
+
+ /* register the managed proxy */
+ if (!managed_proxy_list)
+ managed_proxy_list = smartlist_create();
+ smartlist_add(managed_proxy_list, mp);
+ unconfigured_proxies_n++;
+
+ return mp;
+}
+
+/** Register <b>transport</b> using proxy with <b>proxy_argv</b> to
+ * the managed proxy subsystem.
+ * If <b>is_server</b> is true, then the proxy is a server proxy. */
+void
+pt_kickstart_proxy(const smartlist_t *transport_list,
+ char **proxy_argv, int is_server)
+{
+ managed_proxy_t *mp=NULL;
+ transport_t *old_transport = NULL;
+
+ mp = get_managed_proxy_by_argv_and_type(proxy_argv, is_server);
+
+ if (!mp) { /* we haven't seen this proxy before */
+ managed_proxy_create(transport_list, proxy_argv, is_server);
+
+ } else { /* known proxy. add its transport to its transport list */
+ if (mp->got_hup) {
+ /* If the managed proxy we found is marked by a SIGHUP, it means
+ that it's not useless and should be kept. If it's marked for
+ removal, unmark it and increase the unconfigured proxies so
+ that we try to restart it if we need to. Afterwards, check if
+ a transport_t for 'transport' used to exist before the SIGHUP
+ and make sure it doesn't get deleted because we might reuse
+ it. */
+ if (mp->marked_for_removal) {
+ mp->marked_for_removal = 0;
+ unconfigured_proxies_n++;
+ }
+
+ SMARTLIST_FOREACH_BEGIN(transport_list, const char *, transport) {
+ old_transport = transport_get_by_name(transport);
+ if (old_transport)
+ old_transport->marked_for_removal = 0;
+ } SMARTLIST_FOREACH_END(transport);
+ }
+
+ SMARTLIST_FOREACH(transport_list, const char *, transport,
+ add_transport_to_proxy(transport, mp));
+ free_execve_args(proxy_argv);
+ }
+}
+
+/** Frees the array of pointers in <b>arg</b> used as arguments to
+ execve(2). */
+static INLINE void
+free_execve_args(char **arg)
+{
+ char **tmp = arg;
+ while (*tmp) /* use the fact that the last element of the array is a
+ NULL pointer to know when to stop freeing */
+ _tor_free(*tmp++);
+
+ tor_free(arg);
+}
+
+/** Tor will read its config.
+ * Prepare the managed proxy list so that proxies not used in the new
+ * config will shutdown, and proxies that need to spawn different
+ * transports will do so. */
+void
+pt_prepare_proxy_list_for_config_read(void)
+{
+ if (!managed_proxy_list)
+ return;
+
+ SMARTLIST_FOREACH_BEGIN(managed_proxy_list, managed_proxy_t *, mp) {
+ /* Destroy unconfigured proxies. */
+ if (mp->conf_state != PT_PROTO_COMPLETED) {
+ managed_proxy_destroy(mp, 1);
+ unconfigured_proxies_n--;
+ continue;
+ }
+
+ tor_assert(mp->conf_state == PT_PROTO_COMPLETED);
+
+ mp->marked_for_removal = 1;
+ mp->got_hup = 1;
+ SMARTLIST_FOREACH(mp->transports_to_launch, char *, t, tor_free(t));
+ smartlist_clear(mp->transports_to_launch);
+ } SMARTLIST_FOREACH_END(mp);
+
+ tor_assert(unconfigured_proxies_n == 0);
+}
+
+/** The tor config was read.
+ * Destroy all managed proxies that were marked by a previous call to
+ * prepare_proxy_list_for_config_read() and are not used by the new
+ * config. */
+void
+sweep_proxy_list(void)
+{
+ if (!managed_proxy_list)
+ return;
+
+ SMARTLIST_FOREACH_BEGIN(managed_proxy_list, managed_proxy_t *, mp) {
+ if (mp->marked_for_removal) {
+ SMARTLIST_DEL_CURRENT(managed_proxy_list, mp);
+ managed_proxy_destroy(mp, 1);
+ }
+ } SMARTLIST_FOREACH_END(mp);
+}
+
+/** Release all storage held by the pluggable transports subsystem. */
+void
+pt_free_all(void)
+{
+ if (managed_proxy_list) {
+ /* If the proxy is in PT_PROTO_COMPLETED, it has registered its
+ transports and it's the duty of the circuitbuild.c subsystem to
+ free them. Otherwise, it hasn't registered its transports yet
+ and we should free them here. */
+ SMARTLIST_FOREACH(managed_proxy_list, managed_proxy_t *, mp,
+ managed_proxy_destroy(mp, 1));
+
+ smartlist_free(managed_proxy_list);
+ managed_proxy_list=NULL;
+ }
+}
+
diff --git a/src/or/transports.h b/src/or/transports.h
new file mode 100644
index 000000000..314af2b3a
--- /dev/null
+++ b/src/or/transports.h
@@ -0,0 +1,106 @@
+/* Copyright (c) 2003-2004, Roger Dingledine
+ * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
+ * Copyright (c) 2007-2011, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * \file transports.h
+ * \brief Headers for transports.c
+ **/
+
+#ifndef TOR_TRANSPORTS_H
+#define TOR_TRANSPORTS_H
+
+void pt_kickstart_proxy(const smartlist_t *transport_list, char **proxy_argv,
+ int is_server);
+
+#define pt_kickstart_client_proxy(tl, pa) \
+ pt_kickstart_proxy(tl, pa, 0)
+#define pt_kickstart_server_proxy(tl, pa) \
+ pt_kickstart_proxy(tl, pa, 1)
+
+void pt_configure_remaining_proxies(void);
+
+int pt_proxies_configuration_pending(void);
+
+void pt_free_all(void);
+
+void pt_prepare_proxy_list_for_config_read(void);
+void sweep_proxy_list(void);
+
+#ifdef PT_PRIVATE
+/** State of the managed proxy configuration protocol. */
+enum pt_proto_state {
+ PT_PROTO_INFANT, /* was just born */
+ PT_PROTO_LAUNCHED, /* was just launched */
+ PT_PROTO_ACCEPTING_METHODS, /* accepting methods */
+ PT_PROTO_CONFIGURED, /* configured successfully */
+ PT_PROTO_COMPLETED, /* configure and registered its transports */
+ PT_PROTO_BROKEN, /* broke during the protocol */
+ PT_PROTO_FAILED_LAUNCH /* failed while launching */
+};
+
+/** Structure containing information of a managed proxy. */
+typedef struct {
+ enum pt_proto_state conf_state; /* the current configuration state */
+ char **argv; /* the cli arguments of this proxy */
+ int conf_protocol; /* the configuration protocol version used */
+
+ int is_server; /* is it a server proxy? */
+
+ /* A pointer to the process handle of this managed proxy. */
+ process_handle_t *process_handle;
+
+ int pid; /* The Process ID this managed proxy is using. */
+
+ /** Boolean: We are re-parsing our config, and we are going to
+ * remove this managed proxy if we don't find it any transport
+ * plugins that use it. */
+ unsigned int marked_for_removal : 1;
+
+ /** Boolean: We got a SIGHUP while this proxy was running. We use
+ * this flag to signify that this proxy might need to be restarted
+ * so that it can listen for other transports according to the new
+ * torrc. */
+ unsigned int got_hup : 1;
+
+ /* transports to-be-launched by this proxy */
+ smartlist_t *transports_to_launch;
+
+ /* The 'transports' list contains all the transports this proxy has
+ launched.
+
+ Before a managed_proxy_t reaches the PT_PROTO_COMPLETED phase,
+ this smartlist contains a 'transport_t' for every transport it
+ has launched.
+
+ When the managed_proxy_t reaches the PT_PROTO_COMPLETED phase, it
+ registers all its transports to the circuitbuild.c subsystem. At
+ that point the 'transport_t's are owned by the circuitbuild.c
+ subsystem.
+
+ To avoid carrying dangling 'transport_t's in this smartlist,
+ right before the managed_proxy_t reaches the PT_PROTO_COMPLETED
+ phase we replace all 'transport_t's with strings of their
+ transport names.
+
+ So, tl;dr:
+ When (conf_state != PT_PROTO_COMPLETED) this list carries
+ (transport_t *).
+ When (conf_state == PT_PROTO_COMPLETED) this list carries
+ (char *).
+ */
+ smartlist_t *transports;
+} managed_proxy_t;
+
+int parse_cmethod_line(const char *line, managed_proxy_t *mp);
+int parse_smethod_line(const char *line, managed_proxy_t *mp);
+
+int parse_version(const char *line, managed_proxy_t *mp);
+void parse_env_error(const char *line);
+void handle_proxy_line(const char *line, managed_proxy_t *mp);
+
+#endif
+
+#endif
+
diff --git a/src/test/Makefile.am b/src/test/Makefile.am
index e675431c6..73de30071 100644
--- a/src/test/Makefile.am
+++ b/src/test/Makefile.am
@@ -1,6 +1,6 @@
TESTS = test
-noinst_PROGRAMS = test test-child
+noinst_PROGRAMS = test test-child bench
AM_CPPFLAGS = -DSHARE_DATADIR="\"$(datadir)\"" \
-DLOCALSTATEDIR="\"$(localstatedir)\"" \
@@ -19,10 +19,14 @@ test_SOURCES = \
test_data.c \
test_dir.c \
test_microdesc.c \
+ test_pt.c \
test_util.c \
test_config.c \
tinytest.c
+bench_SOURCES = \
+ bench.c
+
test_LDFLAGS = @TOR_LDFLAGS_zlib@ @TOR_LDFLAGS_openssl@ \
@TOR_LDFLAGS_libevent@
test_LDADD = ../or/libtor.a ../common/libor.a ../common/libor-crypto.a \
@@ -30,6 +34,13 @@ test_LDADD = ../or/libtor.a ../common/libor.a ../common/libor-crypto.a \
@TOR_ZLIB_LIBS@ -lm @TOR_LIBEVENT_LIBS@ @TOR_OPENSSL_LIBS@ \
@TOR_LIB_WS32@ @TOR_LIB_GDI@
+bench_LDFLAGS = @TOR_LDFLAGS_zlib@ @TOR_LDFLAGS_openssl@ \
+ @TOR_LDFLAGS_libevent@
+bench_LDADD = ../or/libtor.a ../common/libor.a ../common/libor-crypto.a \
+ ../common/libor-event.a \
+ @TOR_ZLIB_LIBS@ -lm @TOR_LIBEVENT_LIBS@ @TOR_OPENSSL_LIBS@ \
+ @TOR_LIB_WS32@ @TOR_LIB_GDI@
+
noinst_HEADERS = \
tinytest.h \
tinytest_macros.h \
diff --git a/src/test/bench.c b/src/test/bench.c
new file mode 100644
index 000000000..ff2794e7c
--- /dev/null
+++ b/src/test/bench.c
@@ -0,0 +1,327 @@
+/* Copyright (c) 2001-2004, Roger Dingledine.
+ * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
+ * Copyright (c) 2007-2011, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/* Ordinarily defined in tor_main.c; this bit is just here to provide one
+ * since we're not linking to tor_main.c */
+const char tor_git_revision[] = "";
+
+/**
+ * \file bench.c
+ * \brief Benchmarks for lower level Tor modules.
+ **/
+
+#include "orconfig.h"
+
+#define RELAY_PRIVATE
+
+#include "or.h"
+#include "relay.h"
+
+#if defined(HAVE_CLOCK_GETTIME) && defined(CLOCK_PROCESS_CPUTIME_ID)
+static uint64_t nanostart;
+static inline uint64_t
+timespec_to_nsec(const struct timespec *ts)
+{
+ return ((uint64_t)ts->tv_sec)*1000000000 + ts->tv_nsec;
+}
+
+static void
+reset_perftime(void)
+{
+ struct timespec ts;
+ int r;
+ r = clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &ts);
+ tor_assert(r == 0);
+ nanostart = timespec_to_nsec(&ts);
+}
+
+static uint64_t
+perftime(void)
+{
+ struct timespec ts;
+ int r;
+ r = clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &ts);
+ tor_assert(r == 0);
+ return timespec_to_nsec(&ts) - nanostart;
+}
+
+#else
+static struct timeval tv_start = { 0, 0 };
+static void
+reset_perftime(void)
+{
+ tor_gettimeofday(&tv_start);
+}
+static uint64_t
+perftime(void)
+{
+ struct timeval now, out;
+ tor_gettimeofday(&now);
+ timersub(&now, &tv_start, &out);
+ return ((uint64_t)out.tv_sec)*1000000000 + out.tv_usec*1000;
+}
+#endif
+
+#define NANOCOUNT(start,end,iters) \
+ ( ((double)((end)-(start))) / (iters) )
+
+/** Run AES performance benchmarks. */
+static void
+bench_aes(void)
+{
+ int len, i;
+ char *b1, *b2;
+ crypto_cipher_env_t *c;
+ uint64_t start, end;
+ const int bytes_per_iter = (1<<24);
+ reset_perftime();
+ c = crypto_new_cipher_env();
+ crypto_cipher_generate_key(c);
+ crypto_cipher_encrypt_init_cipher(c);
+ for (len = 1; len <= 8192; len *= 2) {
+ int iters = bytes_per_iter / len;
+ b1 = tor_malloc_zero(len);
+ b2 = tor_malloc_zero(len);
+ start = perftime();
+ for (i = 0; i < iters; ++i) {
+ crypto_cipher_encrypt(c, b1, b2, len);
+ }
+ end = perftime();
+ tor_free(b1);
+ tor_free(b2);
+ printf("%d bytes: %.2f nsec per byte\n", len,
+ NANOCOUNT(start, end, iters*len));
+ }
+ crypto_free_cipher_env(c);
+}
+
+static void
+bench_cell_aes(void)
+{
+ uint64_t start, end;
+ const int len = 509;
+ const int iters = (1<<16);
+ const int max_misalign = 15;
+ char *b = tor_malloc(len+max_misalign);
+ crypto_cipher_env_t *c;
+ int i, misalign;
+
+ c = crypto_new_cipher_env();
+ crypto_cipher_generate_key(c);
+ crypto_cipher_encrypt_init_cipher(c);
+
+ reset_perftime();
+ for (misalign = 0; misalign <= max_misalign; ++misalign) {
+ start = perftime();
+ for (i = 0; i < iters; ++i) {
+ crypto_cipher_crypt_inplace(c, b+misalign, len);
+ }
+ end = perftime();
+ printf("%d bytes, misaligned by %d: %.2f nsec per byte\n", len, misalign,
+ NANOCOUNT(start, end, iters*len));
+ }
+
+ crypto_free_cipher_env(c);
+ tor_free(b);
+}
+
+/** Run digestmap_t performance benchmarks. */
+static void
+bench_dmap(void)
+{
+ smartlist_t *sl = smartlist_create();
+ smartlist_t *sl2 = smartlist_create();
+ uint64_t start, end, pt2, pt3, pt4;
+ int iters = 8192;
+ const int elts = 4000;
+ const int fpostests = 100000;
+ char d[20];
+ int i,n=0, fp = 0;
+ digestmap_t *dm = digestmap_new();
+ digestset_t *ds = digestset_new(elts);
+
+ for (i = 0; i < elts; ++i) {
+ crypto_rand(d, 20);
+ smartlist_add(sl, tor_memdup(d, 20));
+ }
+ for (i = 0; i < elts; ++i) {
+ crypto_rand(d, 20);
+ smartlist_add(sl2, tor_memdup(d, 20));
+ }
+ printf("nbits=%d\n", ds->mask+1);
+
+ reset_perftime();
+
+ start = perftime();
+ for (i = 0; i < iters; ++i) {
+ SMARTLIST_FOREACH(sl, const char *, cp, digestmap_set(dm, cp, (void*)1));
+ }
+ pt2 = perftime();
+ printf("digestmap_set: %.2f ns per element\n",
+ NANOCOUNT(start, pt2, iters*elts));
+
+ for (i = 0; i < iters; ++i) {
+ SMARTLIST_FOREACH(sl, const char *, cp, digestmap_get(dm, cp));
+ SMARTLIST_FOREACH(sl2, const char *, cp, digestmap_get(dm, cp));
+ }
+ pt3 = perftime();
+ printf("digestmap_get: %.2f ns per element\n",
+ NANOCOUNT(pt2, pt3, iters*elts*2));
+
+ for (i = 0; i < iters; ++i) {
+ SMARTLIST_FOREACH(sl, const char *, cp, digestset_add(ds, cp));
+ }
+ pt4 = perftime();
+ printf("digestset_add: %.2f ns per element\n",
+ 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));
+ }
+ end = perftime();
+ printf("digestset_isin: %.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;
+ }
+ printf("False positive rate on digestset: %.2f%%\n",
+ (fp/(double)fpostests)*100);
+
+ digestmap_free(dm, NULL);
+ digestset_free(ds);
+ SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp));
+ SMARTLIST_FOREACH(sl2, char *, cp, tor_free(cp));
+ smartlist_free(sl);
+ smartlist_free(sl2);
+}
+
+static void
+bench_cell_ops(void)
+{
+ const int iters = 1<<16;
+ int i;
+
+ /* benchmarks for cell ops at relay. */
+ or_circuit_t *or_circ = tor_malloc_zero(sizeof(or_circuit_t));
+ cell_t *cell = tor_malloc(sizeof(cell_t));
+ int outbound;
+ uint64_t start, end;
+
+ crypto_rand((char*)cell->payload, sizeof(cell->payload));
+
+ /* Mock-up or_circuit_t */
+ or_circ->_base.magic = OR_CIRCUIT_MAGIC;
+ or_circ->_base.purpose = CIRCUIT_PURPOSE_OR;
+
+ /* Initialize crypto */
+ or_circ->p_crypto = crypto_new_cipher_env();
+ crypto_cipher_generate_key(or_circ->p_crypto);
+ crypto_cipher_encrypt_init_cipher(or_circ->p_crypto);
+ or_circ->n_crypto = crypto_new_cipher_env();
+ crypto_cipher_generate_key(or_circ->n_crypto);
+ crypto_cipher_encrypt_init_cipher(or_circ->n_crypto);
+ or_circ->p_digest = crypto_new_digest_env();
+ or_circ->n_digest = crypto_new_digest_env();
+
+ reset_perftime();
+
+ for (outbound = 0; outbound <= 1; ++outbound) {
+ cell_direction_t d = outbound ? CELL_DIRECTION_OUT : CELL_DIRECTION_IN;
+ start = perftime();
+ for (i = 0; i < iters; ++i) {
+ char recognized = 0;
+ crypt_path_t *layer_hint = NULL;
+ relay_crypt(TO_CIRCUIT(or_circ), cell, d, &layer_hint, &recognized);
+ }
+ end = perftime();
+ printf("%sbound cells: %.2f ns per cell. (%.2f ns per byte of payload)\n",
+ outbound?"Out":" In",
+ NANOCOUNT(start,end,iters),
+ NANOCOUNT(start,end,iters*CELL_PAYLOAD_SIZE));
+ }
+
+ crypto_free_digest_env(or_circ->p_digest);
+ crypto_free_digest_env(or_circ->n_digest);
+ crypto_free_cipher_env(or_circ->p_crypto);
+ crypto_free_cipher_env(or_circ->n_crypto);
+ tor_free(or_circ);
+ tor_free(cell);
+}
+
+typedef void (*bench_fn)(void);
+
+typedef struct benchmark_t {
+ const char *name;
+ bench_fn fn;
+ int enabled;
+} benchmark_t;
+
+#define ENT(s) { #s , bench_##s, 0 }
+
+static struct benchmark_t benchmarks[] = {
+ ENT(dmap),
+ ENT(aes),
+ ENT(cell_aes),
+ ENT(cell_ops),
+ {NULL,NULL,0}
+};
+
+static benchmark_t *
+find_benchmark(const char *name)
+{
+ benchmark_t *b;
+ for (b = benchmarks; b->name; ++b) {
+ if (!strcmp(name, b->name)) {
+ return b;
+ }
+ }
+ return NULL;
+}
+
+/** Main entry point for benchmark code: parse the command line, and run
+ * some benchmarks. */
+int
+main(int argc, const char **argv)
+{
+ int i;
+ int list=0, n_enabled=0;
+ benchmark_t *b;
+
+ tor_threads_init();
+
+ for (i = 1; i < argc; ++i) {
+ if (!strcmp(argv[i], "--list")) {
+ list = 1;
+ } else {
+ benchmark_t *b = find_benchmark(argv[i]);
+ ++n_enabled;
+ if (b) {
+ b->enabled = 1;
+ } else {
+ printf("No such benchmark as %s\n", argv[i]);
+ }
+ }
+ }
+
+ reset_perftime();
+
+ crypto_seed_rng(1);
+
+ for (b = benchmarks; b->name; ++b) {
+ if (b->enabled || n_enabled == 0) {
+ printf("===== %s =====\n", b->name);
+ if (!list)
+ b->fn();
+ }
+ }
+
+ return 0;
+}
+
diff --git a/src/test/test.c b/src/test/test.c
index 76644a71f..5fcc31c47 100644
--- a/src/test/test.c
+++ b/src/test/test.c
@@ -902,7 +902,7 @@ test_circuit_timeout(void)
timeout1 = circuit_build_times_calculate_timeout(&estimate,
CBT_DEFAULT_QUANTILE_CUTOFF/100.0);
circuit_build_times_set_timeout(&estimate);
- log_notice(LD_CIRC, "Timeout1 is %lf, Xm is %d", timeout1, estimate.Xm);
+ log_notice(LD_CIRC, "Timeout1 is %f, Xm is %d", timeout1, estimate.Xm);
/* 2% error */
} while (fabs(circuit_build_times_cdf(&initial, timeout0) -
circuit_build_times_cdf(&initial, timeout1)) > 0.02);
@@ -917,7 +917,7 @@ test_circuit_timeout(void)
CBT_DEFAULT_QUANTILE_CUTOFF/100.0);
circuit_build_times_set_timeout(&final);
- log_notice(LD_CIRC, "Timeout2 is %lf, Xm is %d", timeout2, final.Xm);
+ log_notice(LD_CIRC, "Timeout2 is %f, Xm is %d", timeout2, final.Xm);
/* 5% here because some accuracy is lost due to histogram conversion */
test_assert(fabs(circuit_build_times_cdf(&initial, timeout0) -
@@ -1265,102 +1265,6 @@ test_policies(void)
}
}
-/** Run AES performance benchmarks. */
-static void
-bench_aes(void)
-{
- int len, i;
- char *b1, *b2;
- crypto_cipher_env_t *c;
- struct timeval start, end;
- const int iters = 100000;
- uint64_t nsec;
- c = crypto_new_cipher_env();
- crypto_cipher_generate_key(c);
- crypto_cipher_encrypt_init_cipher(c);
- for (len = 1; len <= 8192; len *= 2) {
- b1 = tor_malloc_zero(len);
- b2 = tor_malloc_zero(len);
- tor_gettimeofday(&start);
- for (i = 0; i < iters; ++i) {
- crypto_cipher_encrypt(c, b1, b2, len);
- }
- tor_gettimeofday(&end);
- tor_free(b1);
- tor_free(b2);
- nsec = (uint64_t) tv_udiff(&start,&end);
- nsec *= 1000;
- nsec /= (iters*len);
- printf("%d bytes: "U64_FORMAT" nsec per byte\n", len,
- U64_PRINTF_ARG(nsec));
- }
- crypto_free_cipher_env(c);
-}
-
-/** Run digestmap_t performance benchmarks. */
-static void
-bench_dmap(void)
-{
- smartlist_t *sl = smartlist_create();
- smartlist_t *sl2 = smartlist_create();
- struct timeval start, end, pt2, pt3, pt4;
- const int iters = 10000;
- const int elts = 4000;
- const int fpostests = 1000000;
- char d[20];
- int i,n=0, fp = 0;
- digestmap_t *dm = digestmap_new();
- digestset_t *ds = digestset_new(elts);
-
- for (i = 0; i < elts; ++i) {
- crypto_rand(d, 20);
- smartlist_add(sl, tor_memdup(d, 20));
- }
- for (i = 0; i < elts; ++i) {
- crypto_rand(d, 20);
- smartlist_add(sl2, tor_memdup(d, 20));
- }
- printf("nbits=%d\n", ds->mask+1);
-
- tor_gettimeofday(&start);
- for (i = 0; i < iters; ++i) {
- SMARTLIST_FOREACH(sl, const char *, cp, digestmap_set(dm, cp, (void*)1));
- }
- tor_gettimeofday(&pt2);
- for (i = 0; i < iters; ++i) {
- SMARTLIST_FOREACH(sl, const char *, cp, digestmap_get(dm, cp));
- SMARTLIST_FOREACH(sl2, const char *, cp, digestmap_get(dm, cp));
- }
- tor_gettimeofday(&pt3);
- for (i = 0; i < iters; ++i) {
- SMARTLIST_FOREACH(sl, const char *, cp, digestset_add(ds, cp));
- }
- tor_gettimeofday(&pt4);
- 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));
- }
- tor_gettimeofday(&end);
-
- for (i = 0; i < fpostests; ++i) {
- crypto_rand(d, 20);
- if (digestset_isin(ds, d)) ++fp;
- }
-
- printf("%ld\n",(unsigned long)tv_udiff(&start, &pt2));
- printf("%ld\n",(unsigned long)tv_udiff(&pt2, &pt3));
- printf("%ld\n",(unsigned long)tv_udiff(&pt3, &pt4));
- printf("%ld\n",(unsigned long)tv_udiff(&pt4, &end));
- printf("-- %d\n", n);
- printf("++ %f\n", fp/(double)fpostests);
- digestmap_free(dm, NULL);
- digestset_free(ds);
- SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp));
- SMARTLIST_FOREACH(sl2, char *, cp, tor_free(cp));
- smartlist_free(sl);
- smartlist_free(sl2);
-}
-
/** Test encoding and parsing of rendezvous service descriptors. */
static void
test_rend_fns(void)
@@ -1899,7 +1803,7 @@ const struct testcase_setup_t legacy_setup = {
{ #group "_" #name, legacy_test_helper, 0, &legacy_setup, \
test_ ## group ## _ ## name }
#define DISABLED(name) \
- { #name, legacy_test_helper, TT_SKIP, &legacy_setup, name }
+ { #name, legacy_test_helper, TT_SKIP, &legacy_setup, test_ ## name }
#define FORK(name) \
{ #name, legacy_test_helper, TT_FORK, &legacy_setup, test_ ## name }
@@ -1913,8 +1817,6 @@ static struct testcase_t test_array[] = {
ENT(geoip),
FORK(stats),
- DISABLED(bench_aes),
- DISABLED(bench_dmap),
END_OF_TESTCASES
};
@@ -1941,6 +1843,7 @@ extern struct testcase_t container_tests[];
extern struct testcase_t util_tests[];
extern struct testcase_t dir_tests[];
extern struct testcase_t microdesc_tests[];
+extern struct testcase_t pt_tests[];
extern struct testcase_t config_tests[];
static struct testgroup_t testgroups[] = {
@@ -1952,6 +1855,7 @@ static struct testgroup_t testgroups[] = {
{ "util/", util_tests },
{ "dir/", dir_tests },
{ "dir/md/", microdesc_tests },
+ { "pt/", pt_tests },
{ "config/", config_tests },
END_OF_GROUPS
};
@@ -2005,6 +1909,7 @@ main(int c, const char **v)
printf("Can't initialize crypto subsystem; exiting.\n");
return 1;
}
+ crypto_set_tls_dh_prime(NULL);
rep_hist_init();
network_init();
setup_directory();
diff --git a/src/test/test_addr.c b/src/test/test_addr.c
index ec0c50897..9d8e1fe8c 100644
--- a/src/test/test_addr.c
+++ b/src/test/test_addr.c
@@ -14,30 +14,30 @@ test_addr_basic(void)
uint16_t u16;
char *cp;
- /* Test parse_addr_port */
+ /* Test addr_port_lookup */
cp = NULL; u32 = 3; u16 = 3;
- test_assert(!parse_addr_port(LOG_WARN, "1.2.3.4", &cp, &u32, &u16));
+ test_assert(!addr_port_lookup(LOG_WARN, "1.2.3.4", &cp, &u32, &u16));
test_streq(cp, "1.2.3.4");
test_eq(u32, 0x01020304u);
test_eq(u16, 0);
tor_free(cp);
- test_assert(!parse_addr_port(LOG_WARN, "4.3.2.1:99", &cp, &u32, &u16));
+ test_assert(!addr_port_lookup(LOG_WARN, "4.3.2.1:99", &cp, &u32, &u16));
test_streq(cp, "4.3.2.1");
test_eq(u32, 0x04030201u);
test_eq(u16, 99);
tor_free(cp);
- test_assert(!parse_addr_port(LOG_WARN, "nonexistent.address:4040",
+ test_assert(!addr_port_lookup(LOG_WARN, "nonexistent.address:4040",
&cp, NULL, &u16));
test_streq(cp, "nonexistent.address");
test_eq(u16, 4040);
tor_free(cp);
- test_assert(!parse_addr_port(LOG_WARN, "localhost:9999", &cp, &u32, &u16));
+ test_assert(!addr_port_lookup(LOG_WARN, "localhost:9999", &cp, &u32, &u16));
test_streq(cp, "localhost");
test_eq(u32, 0x7f000001u);
test_eq(u16, 9999);
tor_free(cp);
u32 = 3;
- test_assert(!parse_addr_port(LOG_WARN, "localhost", NULL, &u32, &u16));
+ test_assert(!addr_port_lookup(LOG_WARN, "localhost", NULL, &u32, &u16));
test_eq(cp, NULL);
test_eq(u32, 0x7f000001u);
test_eq(u16, 0);
@@ -53,9 +53,17 @@ test_addr_basic(void)
char tmpbuf[TOR_ADDR_BUF_LEN];
const char *ip = "176.192.208.224";
struct in_addr in;
- tor_inet_pton(AF_INET, ip, &in);
- tor_inet_ntop(AF_INET, &in, tmpbuf, sizeof(tmpbuf));
+
+ /* good round trip */
+ test_eq(tor_inet_pton(AF_INET, ip, &in), 1);
+ test_eq_ptr(tor_inet_ntop(AF_INET, &in, tmpbuf, sizeof(tmpbuf)), &tmpbuf);
test_streq(tmpbuf, ip);
+
+ /* just enough buffer length */
+ test_streq(tor_inet_ntop(AF_INET, &in, tmpbuf, strlen(ip) + 1), ip);
+
+ /* too short buffer */
+ test_eq_ptr(tor_inet_ntop(AF_INET, &in, tmpbuf, strlen(ip)), NULL);
}
done:
@@ -167,6 +175,7 @@ static void
test_addr_ip6_helpers(void)
{
char buf[TOR_ADDR_BUF_LEN], bug[TOR_ADDR_BUF_LEN];
+ char rbuf[REVERSE_LOOKUP_NAME_BUF_LEN];
struct in6_addr a1, a2;
tor_addr_t t1, t2;
int r, i;
@@ -177,8 +186,30 @@ test_addr_ip6_helpers(void)
struct sockaddr_in *sin;
struct sockaddr_in6 *sin6;
- // struct in_addr b1, b2;
/* Test tor_inet_ntop and tor_inet_pton: IPv6 */
+ {
+ const char *ip = "2001::1234";
+ const char *ip_ffff = "::ffff:192.168.1.2";
+
+ /* good round trip */
+ test_eq(tor_inet_pton(AF_INET6, ip, &a1), 1);
+ test_eq_ptr(tor_inet_ntop(AF_INET6, &a1, buf, sizeof(buf)), &buf);
+ test_streq(buf, ip);
+
+ /* good round trip - ::ffff:0:0 style */
+ test_eq(tor_inet_pton(AF_INET6, ip_ffff, &a2), 1);
+ test_eq_ptr(tor_inet_ntop(AF_INET6, &a2, buf, sizeof(buf)), &buf);
+ test_streq(buf, ip_ffff);
+
+ /* just long enough buffer (remember \0) */
+ test_streq(tor_inet_ntop(AF_INET6, &a1, buf, strlen(ip)+1), ip);
+ test_streq(tor_inet_ntop(AF_INET6, &a2, buf, strlen(ip_ffff)+1),
+ ip_ffff);
+
+ /* too short buffer (remember \0) */
+ test_eq_ptr(tor_inet_ntop(AF_INET6, &a1, buf, strlen(ip)), NULL);
+ test_eq_ptr(tor_inet_ntop(AF_INET6, &a2, buf, strlen(ip_ffff)), NULL);
+ }
/* ==== Converting to and from sockaddr_t. */
sin = (struct sockaddr_in *)&sa_storage;
@@ -270,12 +301,23 @@ test_addr_ip6_helpers(void)
test_ntop6_reduces("1000:0001:0000:0007:0000:0000:0000:0000",
"1000:1:0:7::");
+ /* Bad af param */
+ test_eq(tor_inet_pton(AF_UNSPEC, 0, 0), -1);
+
/* === Test pton: invalid in6. */
test_pton6_bad("foobar.");
+ test_pton6_bad("-1::");
+ test_pton6_bad("00001::");
+ test_pton6_bad("10000::");
+ test_pton6_bad("::10000");
test_pton6_bad("55555::");
test_pton6_bad("9:-60::");
+ test_pton6_bad("9:+60::");
+ test_pton6_bad("9|60::");
+ test_pton6_bad("0x60::");
+ test_pton6_bad("::0x60");
+ test_pton6_bad("9:0x60::");
test_pton6_bad("1:2:33333:4:0002:3::");
- //test_pton6_bad("1:2:3333:4:00002:3::");// BAD, but glibc doesn't say so.
test_pton6_bad("1:2:3333:4:fish:3::");
test_pton6_bad("1:2:3:4:5:6:7:8:9");
test_pton6_bad("1:2:3:4:5:6:7");
@@ -283,8 +325,14 @@ test_addr_ip6_helpers(void)
test_pton6_bad("1:2:3:4:5:6:1.2.3");
test_pton6_bad("::1.2.3");
test_pton6_bad("::1.2.3.4.5");
+ test_pton6_bad("::ffff:0xff.0.0.0");
+ test_pton6_bad("::ffff:ff.0.0.0");
+ test_pton6_bad("::ffff:256.0.0.0");
+ test_pton6_bad("::ffff:-1.0.0.0");
test_pton6_bad("99");
test_pton6_bad("");
+ test_pton6_bad(".");
+ test_pton6_bad(":");
test_pton6_bad("1::2::3:4");
test_pton6_bad("a:::b:c");
test_pton6_bad(":::a:b:c");
@@ -293,6 +341,9 @@ test_addr_ip6_helpers(void)
/* test internal checking */
test_external_ip("fbff:ffff::2:7", 0);
test_internal_ip("fc01::2:7", 0);
+ test_internal_ip("fc01::02:7", 0);
+ test_internal_ip("fc01::002:7", 0);
+ test_internal_ip("fc01::0002:7", 0);
test_internal_ip("fdff:ffff::f:f", 0);
test_external_ip("fe00::3:f", 0);
@@ -363,33 +414,67 @@ test_addr_ip6_helpers(void)
test_addr_compare_masked("0::2:2:1", <, "0::8000:2:1", 81);
test_addr_compare_masked("0::2:2:1", ==, "0::8000:2:1", 80);
- /* Test decorated addr_to_string. */
- test_eq(AF_INET6, tor_addr_from_str(&t1, "[123:45:6789::5005:11]"));
+ /* Test undecorated tor_addr_to_str */
+ test_eq(AF_INET6, tor_addr_parse(&t1, "[123:45:6789::5005:11]"));
+ p1 = tor_addr_to_str(buf, &t1, sizeof(buf), 0);
+ test_streq(p1, "123:45:6789::5005:11");
+ test_eq(AF_INET, tor_addr_parse(&t1, "18.0.0.1"));
+ p1 = tor_addr_to_str(buf, &t1, sizeof(buf), 0);
+ test_streq(p1, "18.0.0.1");
+
+ /* Test decorated tor_addr_to_str */
+ test_eq(AF_INET6, tor_addr_parse(&t1, "[123:45:6789::5005:11]"));
p1 = tor_addr_to_str(buf, &t1, sizeof(buf), 1);
test_streq(p1, "[123:45:6789::5005:11]");
- test_eq(AF_INET, tor_addr_from_str(&t1, "18.0.0.1"));
+ test_eq(AF_INET, tor_addr_parse(&t1, "18.0.0.1"));
p1 = tor_addr_to_str(buf, &t1, sizeof(buf), 1);
test_streq(p1, "18.0.0.1");
- /* Test tor_addr_parse_reverse_lookup_name */
- i = tor_addr_parse_reverse_lookup_name(&t1, "Foobar.baz", AF_UNSPEC, 0);
+ /* Test buffer bounds checking of tor_addr_to_str */
+ test_eq(AF_INET6, tor_addr_parse(&t1, "::")); /* 2 + \0 */
+ test_eq_ptr(tor_addr_to_str(buf, &t1, 2, 0), NULL); /* too short buf */
+ test_streq(tor_addr_to_str(buf, &t1, 3, 0), "::");
+ test_eq_ptr(tor_addr_to_str(buf, &t1, 4, 1), NULL); /* too short buf */
+ test_streq(tor_addr_to_str(buf, &t1, 5, 1), "[::]");
+
+ test_eq(AF_INET6, tor_addr_parse(&t1, "2000::1337")); /* 10 + \0 */
+ test_eq_ptr(tor_addr_to_str(buf, &t1, 10, 0), NULL); /* too short buf */
+ test_streq(tor_addr_to_str(buf, &t1, 11, 0), "2000::1337");
+ test_eq_ptr(tor_addr_to_str(buf, &t1, 12, 1), NULL); /* too short buf */
+ test_streq(tor_addr_to_str(buf, &t1, 13, 1), "[2000::1337]");
+
+ test_eq(AF_INET, tor_addr_parse(&t1, "1.2.3.4")); /* 7 + \0 */
+ test_eq_ptr(tor_addr_to_str(buf, &t1, 7, 0), NULL); /* too short buf */
+ test_streq(tor_addr_to_str(buf, &t1, 8, 0), "1.2.3.4");
+
+ test_eq(AF_INET, tor_addr_parse(&t1, "255.255.255.255")); /* 15 + \0 */
+ test_eq_ptr(tor_addr_to_str(buf, &t1, 15, 0), NULL); /* too short buf */
+ test_streq(tor_addr_to_str(buf, &t1, 16, 0), "255.255.255.255");
+ test_eq_ptr(tor_addr_to_str(buf, &t1, 15, 1), NULL); /* too short buf */
+ test_streq(tor_addr_to_str(buf, &t1, 16, 1), "255.255.255.255");
+
+ t1.family = AF_UNSPEC;
+ test_eq_ptr(tor_addr_to_str(buf, &t1, sizeof(buf), 0), NULL);
+
+ /* Test tor_addr_parse_PTR_name */
+ i = tor_addr_parse_PTR_name(&t1, "Foobar.baz", AF_UNSPEC, 0);
test_eq(0, i);
- i = tor_addr_parse_reverse_lookup_name(&t1, "Foobar.baz", AF_UNSPEC, 1);
+ i = tor_addr_parse_PTR_name(&t1, "Foobar.baz", AF_UNSPEC, 1);
test_eq(0, i);
- i = tor_addr_parse_reverse_lookup_name(&t1, "1.0.168.192.in-addr.arpa",
+ i = tor_addr_parse_PTR_name(&t1, "1.0.168.192.in-addr.arpa",
AF_UNSPEC, 1);
test_eq(1, i);
test_eq(tor_addr_family(&t1), AF_INET);
p1 = tor_addr_to_str(buf, &t1, sizeof(buf), 1);
test_streq(p1, "192.168.0.1");
- i = tor_addr_parse_reverse_lookup_name(&t1, "192.168.0.99", AF_UNSPEC, 0);
+ i = tor_addr_parse_PTR_name(&t1, "192.168.0.99", AF_UNSPEC, 0);
test_eq(0, i);
- i = tor_addr_parse_reverse_lookup_name(&t1, "192.168.0.99", AF_UNSPEC, 1);
+ i = tor_addr_parse_PTR_name(&t1, "192.168.0.99", AF_UNSPEC, 1);
test_eq(1, i);
p1 = tor_addr_to_str(buf, &t1, sizeof(buf), 1);
test_streq(p1, "192.168.0.99");
memset(&t1, 0, sizeof(t1));
- i = tor_addr_parse_reverse_lookup_name(&t1,
+ i = tor_addr_parse_PTR_name(&t1,
"0.1.2.3.4.5.6.7.8.9.a.b.c.d.e.f."
"f.e.e.b.1.e.b.e.e.f.f.e.e.e.d.9."
"ip6.ARPA",
@@ -398,43 +483,91 @@ test_addr_ip6_helpers(void)
p1 = tor_addr_to_str(buf, &t1, sizeof(buf), 1);
test_streq(p1, "[9dee:effe:ebe1:beef:fedc:ba98:7654:3210]");
/* Failing cases. */
- i = tor_addr_parse_reverse_lookup_name(&t1,
+ i = tor_addr_parse_PTR_name(&t1,
"6.7.8.9.a.b.c.d.e.f."
"f.e.e.b.1.e.b.e.e.f.f.e.e.e.d.9."
"ip6.ARPA",
AF_UNSPEC, 0);
test_eq(i, -1);
- i = tor_addr_parse_reverse_lookup_name(&t1,
+ i = tor_addr_parse_PTR_name(&t1,
"6.7.8.9.a.b.c.d.e.f.a.b.c.d.e.f.0."
"f.e.e.b.1.e.b.e.e.f.f.e.e.e.d.9."
"ip6.ARPA",
AF_UNSPEC, 0);
test_eq(i, -1);
- i = tor_addr_parse_reverse_lookup_name(&t1,
+ i = tor_addr_parse_PTR_name(&t1,
"6.7.8.9.a.b.c.d.e.f.X.0.0.0.0.9."
"f.e.e.b.1.e.b.e.e.f.f.e.e.e.d.9."
"ip6.ARPA",
AF_UNSPEC, 0);
test_eq(i, -1);
- i = tor_addr_parse_reverse_lookup_name(&t1, "32.1.1.in-addr.arpa",
+ i = tor_addr_parse_PTR_name(&t1, "32.1.1.in-addr.arpa",
AF_UNSPEC, 0);
test_eq(i, -1);
- i = tor_addr_parse_reverse_lookup_name(&t1, ".in-addr.arpa",
+ i = tor_addr_parse_PTR_name(&t1, ".in-addr.arpa",
AF_UNSPEC, 0);
test_eq(i, -1);
- i = tor_addr_parse_reverse_lookup_name(&t1, "1.2.3.4.5.in-addr.arpa",
+ i = tor_addr_parse_PTR_name(&t1, "1.2.3.4.5.in-addr.arpa",
AF_UNSPEC, 0);
test_eq(i, -1);
- i = tor_addr_parse_reverse_lookup_name(&t1, "1.2.3.4.5.in-addr.arpa",
+ i = tor_addr_parse_PTR_name(&t1, "1.2.3.4.5.in-addr.arpa",
AF_INET6, 0);
test_eq(i, -1);
- i = tor_addr_parse_reverse_lookup_name(&t1,
+ i = tor_addr_parse_PTR_name(&t1,
"6.7.8.9.a.b.c.d.e.f.a.b.c.d.e.0."
"f.e.e.b.1.e.b.e.e.f.f.e.e.e.d.9."
"ip6.ARPA",
AF_INET, 0);
test_eq(i, -1);
+ /* === Test tor_addr_to_PTR_name */
+
+ /* Stage IPv4 addr */
+ memset(&sa_storage, 0, sizeof(sa_storage));
+ sin = (struct sockaddr_in *)&sa_storage;
+ sin->sin_family = AF_INET;
+ sin->sin_addr.s_addr = htonl(0x7f010203); /* 127.1.2.3 */
+ tor_addr_from_sockaddr(&t1, (struct sockaddr *)sin, NULL);
+
+ /* Check IPv4 PTR - too short buffer */
+ test_eq(tor_addr_to_PTR_name(rbuf, 1, &t1), -1);
+ test_eq(tor_addr_to_PTR_name(rbuf,
+ strlen("3.2.1.127.in-addr.arpa") - 1,
+ &t1), -1);
+
+ /* Check IPv4 PTR - valid addr */
+ test_eq(tor_addr_to_PTR_name(rbuf, sizeof(rbuf), &t1),
+ strlen("3.2.1.127.in-addr.arpa"));
+ test_streq(rbuf, "3.2.1.127.in-addr.arpa");
+
+ /* Invalid addr family */
+ t1.family = AF_UNSPEC;
+ test_eq(tor_addr_to_PTR_name(rbuf, sizeof(rbuf), &t1), -1);
+
+ /* Stage IPv6 addr */
+ memset(&sa_storage, 0, sizeof(sa_storage));
+ sin6 = (struct sockaddr_in6 *)&sa_storage;
+ sin6->sin6_family = AF_INET6;
+ sin6->sin6_addr.s6_addr[0] = 0x80; /* 8000::abcd */
+ sin6->sin6_addr.s6_addr[14] = 0xab;
+ sin6->sin6_addr.s6_addr[15] = 0xcd;
+
+ tor_addr_from_sockaddr(&t1, (struct sockaddr *)sin6, NULL);
+
+ {
+ const char* addr_PTR = "d.c.b.a.0.0.0.0.0.0.0.0.0.0.0.0."
+ "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.ip6.arpa";
+
+ /* Check IPv6 PTR - too short buffer */
+ test_eq(tor_addr_to_PTR_name(rbuf, 0, &t1), -1);
+ test_eq(tor_addr_to_PTR_name(rbuf, strlen(addr_PTR) - 1, &t1), -1);
+
+ /* Check IPv6 PTR - valid addr */
+ test_eq(tor_addr_to_PTR_name(rbuf, sizeof(rbuf), &t1),
+ strlen(addr_PTR));
+ test_streq(rbuf, addr_PTR);
+ }
+
/* test tor_addr_parse_mask_ports */
test_addr_mask_ports_parse("[::f]/17:47-95", AF_INET6,
0, 0, 0, 0x0000000f, 17, 47, 95);
diff --git a/src/test/test_config.c b/src/test/test_config.c
index 99d7215be..4ce0fa845 100644
--- a/src/test/test_config.c
+++ b/src/test/test_config.c
@@ -37,7 +37,7 @@ test_config_addressmap(void *arg)
"MapAddress 6.6.6.6 www.infiniteloop.org\n"
, sizeof(buf));
- config_get_lines(buf, &(get_options_mutable()->AddressMap));
+ config_get_lines(buf, &(get_options_mutable()->AddressMap), 0);
config_register_addressmaps(get_options());
/* MapAddress .invalidwildcard.com .torserver.exit - no match */
@@ -118,7 +118,7 @@ test_config_addressmap(void *arg)
"MapAddress *.torproject.org 1.1.1.1\n"
"MapAddress *.net 2.2.2.2\n"
, sizeof(buf));
- config_get_lines(buf, &(get_options_mutable()->AddressMap));
+ config_get_lines(buf, &(get_options_mutable()->AddressMap), 0);
config_register_addressmaps(get_options());
strlcpy(address, "www.abc.com", sizeof(address));
@@ -144,7 +144,7 @@ test_config_addressmap(void *arg)
/* We don't support '*' as a mapping directive */
addressmap_clear_configured();
strlcpy(buf, "MapAddress * *.torserver.exit\n", sizeof(buf));
- config_get_lines(buf, &(get_options_mutable()->AddressMap));
+ config_get_lines(buf, &(get_options_mutable()->AddressMap), 0);
config_register_addressmaps(get_options());
strlcpy(address, "www.abc.com", sizeof(address));
diff --git a/src/test/test_crypto.c b/src/test/test_crypto.c
index dca0d3a28..cad8c2f55 100644
--- a/src/test/test_crypto.c
+++ b/src/test/test_crypto.c
@@ -7,6 +7,7 @@
#define CRYPTO_PRIVATE
#include "or.h"
#include "test.h"
+#include "aes.h"
/** Run unit tests for Diffie-Hellman functionality. */
static void
@@ -95,13 +96,16 @@ test_crypto_rng(void)
/** Run unit tests for our AES functionality */
static void
-test_crypto_aes(void)
+test_crypto_aes(void *arg)
{
char *data1 = NULL, *data2 = NULL, *data3 = NULL;
crypto_cipher_env_t *env1 = NULL, *env2 = NULL;
int i, j;
char *mem_op_hex_tmp=NULL;
+ int use_evp = !strcmp(arg,"evp");
+ evaluate_evp_for_aes(use_evp);
+
data1 = tor_malloc(1024);
data2 = tor_malloc(1024);
data3 = tor_malloc(1024);
@@ -231,7 +235,7 @@ test_crypto_sha(void)
{
crypto_digest_env_t *d1 = NULL, *d2 = NULL;
int i;
- char key[80];
+ char key[160];
char digest[32];
char data[50];
char d_out1[DIGEST_LEN], d_out2[DIGEST256_LEN];
@@ -276,6 +280,75 @@ test_crypto_sha(void)
test_streq(hex_str(digest, 20),
"AA4AE5E15272D00E95705637CE8A3B55ED402112");
+ /* Test HMAC-SHA256 with test cases from wikipedia and RFC 4231 */
+
+ /* Case empty (wikipedia) */
+ crypto_hmac_sha256(digest, "", 0, "", 0);
+ test_streq(hex_str(digest, 32),
+ "B613679A0814D9EC772F95D778C35FC5FF1697C493715653C6C712144292C5AD");
+
+ /* Case quick-brown (wikipedia) */
+ crypto_hmac_sha256(digest, "key", 3,
+ "The quick brown fox jumps over the lazy dog", 43);
+ test_streq(hex_str(digest, 32),
+ "F7BC83F430538424B13298E6AA6FB143EF4D59A14946175997479DBC2D1A3CD8");
+
+ /* "Test Case 1" from RFC 4231 */
+ memset(key, 0x0b, 20);
+ crypto_hmac_sha256(digest, key, 20, "Hi There", 8);
+ test_memeq_hex(digest,
+ "b0344c61d8db38535ca8afceaf0bf12b"
+ "881dc200c9833da726e9376c2e32cff7");
+
+ /* "Test Case 2" from RFC 4231 */
+ memset(key, 0x0b, 20);
+ crypto_hmac_sha256(digest, "Jefe", 4, "what do ya want for nothing?", 28);
+ test_memeq_hex(digest,
+ "5bdcc146bf60754e6a042426089575c7"
+ "5a003f089d2739839dec58b964ec3843");
+
+ /* "Test case 3" from RFC 4231 */
+ memset(key, 0xaa, 20);
+ memset(data, 0xdd, 50);
+ crypto_hmac_sha256(digest, key, 20, data, 50);
+ test_memeq_hex(digest,
+ "773ea91e36800e46854db8ebd09181a7"
+ "2959098b3ef8c122d9635514ced565fe");
+
+ /* "Test case 4" from RFC 4231 */
+ base16_decode(key, 25,
+ "0102030405060708090a0b0c0d0e0f10111213141516171819", 50);
+ memset(data, 0xcd, 50);
+ crypto_hmac_sha256(digest, key, 25, data, 50);
+ test_memeq_hex(digest,
+ "82558a389a443c0ea4cc819899f2083a"
+ "85f0faa3e578f8077a2e3ff46729665b");
+
+ /* "Test case 5" from RFC 4231 */
+ memset(key, 0x0c, 20);
+ crypto_hmac_sha256(digest, key, 20, "Test With Truncation", 20);
+ test_memeq_hex(digest,
+ "a3b6167473100ee06e0c796c2955552b");
+
+ /* "Test case 6" from RFC 4231 */
+ memset(key, 0xaa, 131);
+ crypto_hmac_sha256(digest, key, 131,
+ "Test Using Larger Than Block-Size Key - Hash Key First",
+ 54);
+ test_memeq_hex(digest,
+ "60e431591ee0b67f0d8a26aacbf5b77f"
+ "8e0bc6213728c5140546040f0ee37f54");
+
+ /* "Test case 7" from RFC 4231 */
+ memset(key, 0xaa, 131);
+ crypto_hmac_sha256(digest, key, 131,
+ "This is a test using a larger than block-size key and a "
+ "larger than block-size data. The key needs to be hashed "
+ "before being used by the HMAC algorithm.", 152);
+ test_memeq_hex(digest,
+ "9b09ffa71b942fcb27635fbcd5b0e944"
+ "bfdc63644f0713938a7f51535c3a35e2");
+
/* Incremental digest code. */
d1 = crypto_new_digest_env();
test_assert(d1);
@@ -601,7 +674,7 @@ test_crypto_s2k(void)
/** Test AES-CTR encryption and decryption with IV. */
static void
-test_crypto_aes_iv(void)
+test_crypto_aes_iv(void *arg)
{
crypto_cipher_env_t *cipher;
char *plain, *encrypted1, *encrypted2, *decrypted1, *decrypted2;
@@ -609,6 +682,9 @@ test_crypto_aes_iv(void)
char key1[16], key2[16];
ssize_t encrypted_size, decrypted_size;
+ int use_evp = !strcmp(arg,"evp");
+ evaluate_evp_for_aes(use_evp);
+
plain = tor_malloc(4095);
encrypted1 = tor_malloc(4095 + 1 + 16);
encrypted2 = tor_malloc(4095 + 1 + 16);
@@ -782,18 +858,36 @@ test_crypto_base32_decode(void)
;
}
+static void *
+pass_data_setup_fn(const struct testcase_t *testcase)
+{
+ return testcase->setup_data;
+}
+static int
+pass_data_cleanup_fn(const struct testcase_t *testcase, void *ptr)
+{
+ (void)ptr;
+ (void)testcase;
+ return 1;
+}
+static const struct testcase_setup_t pass_data = {
+ pass_data_setup_fn, pass_data_cleanup_fn
+};
+
#define CRYPTO_LEGACY(name) \
{ #name, legacy_test_helper, 0, &legacy_setup, test_crypto_ ## name }
struct testcase_t crypto_tests[] = {
CRYPTO_LEGACY(formats),
CRYPTO_LEGACY(rng),
- CRYPTO_LEGACY(aes),
+ { "aes_AES", test_crypto_aes, TT_FORK, &pass_data, (void*)"aes" },
+ { "aes_EVP", test_crypto_aes, TT_FORK, &pass_data, (void*)"evp" },
CRYPTO_LEGACY(sha),
CRYPTO_LEGACY(pk),
CRYPTO_LEGACY(dh),
CRYPTO_LEGACY(s2k),
- CRYPTO_LEGACY(aes_iv),
+ { "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),
END_OF_TESTCASES
};
diff --git a/src/test/test_dir.c b/src/test/test_dir.c
index 04ca29a9f..046a1f25b 100644
--- a/src/test/test_dir.c
+++ b/src/test/test_dir.c
@@ -7,10 +7,12 @@
#define DIRSERV_PRIVATE
#define DIRVOTE_PRIVATE
#define ROUTER_PRIVATE
+#define HIBERNATE_PRIVATE
#include "or.h"
#include "directory.h"
#include "dirserv.h"
#include "dirvote.h"
+#include "hibernate.h"
#include "networkstatus.h"
#include "router.h"
#include "routerlist.h"
@@ -85,6 +87,8 @@ test_dir_formats(void)
test_assert(pk1 && pk2 && pk3);
+ hibernate_set_state_for_testing_(HIBERNATE_STATE_LIVE);
+
get_platform_str(platform, sizeof(platform));
r1 = tor_malloc_zero(sizeof(routerinfo_t));
r1->address = tor_strdup("18.244.0.1");
@@ -92,6 +96,8 @@ test_dir_formats(void)
r1->cache_info.published_on = 0;
r1->or_port = 9000;
r1->dir_port = 9003;
+ tor_addr_parse(&r1->ipv6_addr, "1:2:3:4::");
+ r1->ipv6_orport = 9999;
r1->onion_pkey = crypto_pk_dup_key(pk1);
r1->identity_pkey = crypto_pk_dup_key(pk2);
r1->bandwidthrate = 1000;
@@ -137,6 +143,7 @@ test_dir_formats(void)
test_assert(router_dump_router_to_string(buf, 2048, r1, pk2)>0);
strlcpy(buf2, "router Magri 18.244.0.1 9000 0 9003\n"
+ "or-address [1:2:3:4::]:9999\n"
"platform Tor "VERSION" on ", sizeof(buf2));
strlcat(buf2, get_uname(), sizeof(buf2));
strlcat(buf2, "\n"
@@ -616,13 +623,81 @@ test_dir_param_voting(void)
test_eq(0, networkstatus_get_param(&vote4, "foobar", 0, -100, 8));
smartlist_add(votes, &vote1);
+
+ /* Do the first tests without adding all the other votes, for
+ * networks without many dirauths. */
+
+ res = dirvote_compute_params(votes, 11, 6);
+ test_streq(res, "ab=90 abcd=20 cw=50 x-yz=-99");
+ tor_free(res);
+
+ res = dirvote_compute_params(votes, 12, 2);
+ test_streq(res, "");
+ tor_free(res);
+
+ res = dirvote_compute_params(votes, 12, 1);
+ test_streq(res, "ab=90 abcd=20 cw=50 x-yz=-99");
+ tor_free(res);
+
smartlist_add(votes, &vote2);
+
+ res = dirvote_compute_params(votes, 11, 2);
+ test_streq(res, "ab=27 abcd=20 cw=5 x-yz=-99");
+ tor_free(res);
+
+ res = dirvote_compute_params(votes, 12, 2);
+ test_streq(res, "ab=27 cw=5 x-yz=-99");
+ tor_free(res);
+
+ res = dirvote_compute_params(votes, 12, 3);
+ test_streq(res, "ab=27 cw=5 x-yz=-99");
+ tor_free(res);
+
+ res = dirvote_compute_params(votes, 12, 6);
+ test_streq(res, "");
+ tor_free(res);
+
smartlist_add(votes, &vote3);
+
+ res = dirvote_compute_params(votes, 11, 3);
+ test_streq(res, "ab=27 abcd=20 c=60 cw=50 x-yz=-9 zzzzz=101");
+ tor_free(res);
+
+ res = dirvote_compute_params(votes, 12, 3);
+ test_streq(res, "ab=27 abcd=20 cw=50 x-yz=-9");
+ tor_free(res);
+
+ res = dirvote_compute_params(votes, 12, 5);
+ test_streq(res, "cw=50 x-yz=-9");
+ tor_free(res);
+
+ res = dirvote_compute_params(votes, 12, 9);
+ test_streq(res, "cw=50 x-yz=-9");
+ tor_free(res);
+
smartlist_add(votes, &vote4);
- res = dirvote_compute_params(votes);
- test_streq(res,
- "ab=90 abcd=20 c=1 cw=50 x-yz=-9 zzzzz=101");
+ res = dirvote_compute_params(votes, 11, 4);
+ test_streq(res, "ab=90 abcd=20 c=1 cw=50 x-yz=-9 zzzzz=101");
+ tor_free(res);
+
+ res = dirvote_compute_params(votes, 12, 4);
+ test_streq(res, "ab=90 abcd=20 cw=50 x-yz=-9");
+ tor_free(res);
+
+ res = dirvote_compute_params(votes, 12, 5);
+ test_streq(res, "ab=90 abcd=20 cw=50 x-yz=-9");
+ tor_free(res);
+
+ /* Test that the special-cased "at least three dirauths voted for
+ * this param" logic works as expected. */
+ res = dirvote_compute_params(votes, 12, 6);
+ test_streq(res, "ab=90 abcd=20 cw=50 x-yz=-9");
+ tor_free(res);
+
+ res = dirvote_compute_params(votes, 12, 10);
+ test_streq(res, "ab=90 abcd=20 cw=50 x-yz=-9");
+ tor_free(res);
done:
tor_free(res);
@@ -1045,7 +1120,7 @@ test_dir_v3_networkstatus(void)
"Running:Stable:V2Dir:Valid");
tor_free(cp);
cp = smartlist_join_strings(con->net_params, ":", 0, NULL);
- test_streq(cp, "bar=2000000000:circuitwindow=80:foo=660");
+ test_streq(cp, "circuitwindow=80:foo=660");
tor_free(cp);
test_eq(4, smartlist_len(con->voters)); /*3 voters, 1 legacy key.*/
@@ -1303,7 +1378,7 @@ test_dir_v3_networkstatus(void)
}
#define DIR_LEGACY(name) \
- { #name, legacy_test_helper, 0, &legacy_setup, test_dir_ ## name }
+ { #name, legacy_test_helper, TT_FORK, &legacy_setup, test_dir_ ## name }
#define DIR(name) \
{ #name, test_dir_##name, 0, NULL, NULL }
diff --git a/src/test/test_pt.c b/src/test/test_pt.c
new file mode 100644
index 000000000..45f441106
--- /dev/null
+++ b/src/test/test_pt.c
@@ -0,0 +1,147 @@
+/* Copyright (c) 2001-2004, Roger Dingledine.
+ * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
+ * Copyright (c) 2007-2011, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#include "orconfig.h"
+#define PT_PRIVATE
+#include "or.h"
+#include "transports.h"
+#include "circuitbuild.h"
+#include "test.h"
+
+static void
+reset_mp(managed_proxy_t *mp)
+{
+ mp->conf_state = PT_PROTO_LAUNCHED;
+ SMARTLIST_FOREACH(mp->transports, transport_t *, t, transport_free(t));
+ smartlist_clear(mp->transports);
+}
+
+static void
+test_pt_parsing(void)
+{
+ char line[200];
+
+ managed_proxy_t *mp = tor_malloc(sizeof(managed_proxy_t));
+ mp->conf_state = PT_PROTO_INFANT;
+ mp->transports = smartlist_create();
+
+ /* incomplete cmethod */
+ strcpy(line,"CMETHOD trebuchet");
+ test_assert(parse_cmethod_line(line, mp) < 0);
+
+ reset_mp(mp);
+
+ /* wrong proxy type */
+ strcpy(line,"CMETHOD trebuchet dog 127.0.0.1:1999");
+ test_assert(parse_cmethod_line(line, mp) < 0);
+
+ reset_mp(mp);
+
+ /* wrong addrport */
+ strcpy(line,"CMETHOD trebuchet socks4 abcd");
+ test_assert(parse_cmethod_line(line, mp) < 0);
+
+ reset_mp(mp);
+
+ /* correct line */
+ strcpy(line,"CMETHOD trebuchet socks5 127.0.0.1:1999");
+ test_assert(parse_cmethod_line(line, mp) == 0);
+ test_assert(smartlist_len(mp->transports));
+
+ reset_mp(mp);
+
+ /* incomplete smethod */
+ strcpy(line,"SMETHOD trebuchet");
+ test_assert(parse_smethod_line(line, mp) < 0);
+
+ reset_mp(mp);
+
+ /* wrong addr type */
+ strcpy(line,"SMETHOD trebuchet abcd");
+ test_assert(parse_smethod_line(line, mp) < 0);
+
+ reset_mp(mp);
+
+ /* cowwect */
+ strcpy(line,"SMETHOD trebuchy 127.0.0.1:1999");
+ test_assert(parse_smethod_line(line, mp) == 0);
+
+ reset_mp(mp);
+
+ /* unsupported version */
+ strcpy(line,"VERSION 666");
+ test_assert(parse_version(line, mp) < 0);
+
+ /* incomplete VERSION */
+ strcpy(line,"VERSION ");
+ test_assert(parse_version(line, mp) < 0);
+
+ /* correct VERSION */
+ strcpy(line,"VERSION 1");
+ test_assert(parse_version(line, mp) == 0);
+
+ done:
+ tor_free(mp);
+}
+
+static void
+test_pt_protocol(void)
+{
+ char line[200];
+
+ managed_proxy_t *mp = tor_malloc_zero(sizeof(managed_proxy_t));
+ mp->conf_state = PT_PROTO_LAUNCHED;
+ mp->transports = smartlist_create();
+
+ /* various wrong protocol runs: */
+
+ strcpy(line, "TEST TEST");
+ handle_proxy_line(line, mp);
+ test_assert(mp->conf_state == PT_PROTO_BROKEN);
+
+ reset_mp(mp);
+
+ strcpy(line,"VERSION 1");
+ handle_proxy_line(line, mp);
+ test_assert(mp->conf_state == PT_PROTO_ACCEPTING_METHODS);
+
+ strcpy(line,"VERSION 1");
+ handle_proxy_line(line, mp);
+ test_assert(mp->conf_state == PT_PROTO_BROKEN);
+
+ reset_mp(mp);
+
+ strcpy(line,"CMETHOD trebuchet socks5 127.0.0.1:1999");
+ handle_proxy_line(line, mp);
+ test_assert(mp->conf_state == PT_PROTO_BROKEN);
+
+ reset_mp(mp);
+
+ /* correct protocol run: */
+ strcpy(line,"VERSION 1");
+ handle_proxy_line(line, mp);
+ test_assert(mp->conf_state == PT_PROTO_ACCEPTING_METHODS);
+
+ strcpy(line,"CMETHOD trebuchet socks5 127.0.0.1:1999");
+ handle_proxy_line(line, mp);
+ test_assert(mp->conf_state == PT_PROTO_ACCEPTING_METHODS);
+
+ strcpy(line,"CMETHODS DONE");
+ handle_proxy_line(line, mp);
+ test_assert(mp->conf_state == PT_PROTO_CONFIGURED);
+
+ done:
+ tor_free(mp);
+}
+
+#define PT_LEGACY(name) \
+ { #name, legacy_test_helper, 0, &legacy_setup, test_pt_ ## name }
+
+struct testcase_t pt_tests[] = {
+ PT_LEGACY(parsing),
+ PT_LEGACY(protocol),
+ END_OF_TESTCASES
+};
+
diff --git a/src/test/test_util.c b/src/test/test_util.c
index f9672c100..c762a8d7b 100644
--- a/src/test/test_util.c
+++ b/src/test/test_util.c
@@ -363,16 +363,6 @@ test_util_strmisc(void)
test_assert(!tor_strisprint(cp));
tor_free(cp);
- /* Test eat_whitespace. */
- {
- const char *s = " \n a";
- test_eq_ptr(eat_whitespace(s), s+4);
- s = "abcd";
- test_eq_ptr(eat_whitespace(s), s);
- s = "#xyz\nab";
- test_eq_ptr(eat_whitespace(s), s+5);
- }
-
/* Test memmem and memstr */
{
const char *haystack = "abcde";
@@ -409,6 +399,20 @@ test_util_strmisc(void)
SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp));
smartlist_free(sl);
}
+
+ /* Test hex_str */
+ {
+ char binary_data[64];
+ size_t i;
+ for (i = 0; i < sizeof(binary_data); ++i)
+ binary_data[i] = i;
+ test_streq(hex_str(binary_data, 0), "");
+ test_streq(hex_str(binary_data, 1), "00");
+ test_streq(hex_str(binary_data, 17), "000102030405060708090A0B0C0D0E0F10");
+ test_streq(hex_str(binary_data, 32),
+ "000102030405060708090A0B0C0D0E0F"
+ "101112131415161718191A1B1C1D1E1F");
+ }
done:
;
}
@@ -1384,27 +1388,29 @@ run_util_spawn_background(const char *argv[], const char *expected_out,
{
int retval, exit_code;
ssize_t pos;
- process_handle_t process_handle;
+ process_handle_t *process_handle=NULL;
char stdout_buf[100], stderr_buf[100];
+ int status;
/* Start the program */
#ifdef MS_WINDOWS
- tor_spawn_background(NULL, argv, &process_handle);
+ status = tor_spawn_background(NULL, argv, NULL, &process_handle);
#else
- tor_spawn_background(argv[0], argv, &process_handle);
+ status = tor_spawn_background(argv[0], argv, NULL, &process_handle);
#endif
- tt_int_op(process_handle.status, ==, expected_status);
-
- /* If the process failed to start, don't bother continuing */
- if (process_handle.status == PROCESS_STATUS_ERROR)
+ tt_int_op(status, ==, expected_status);
+ if (status == PROCESS_STATUS_ERROR)
return;
- tt_int_op(process_handle.stdout_pipe, >, 0);
- tt_int_op(process_handle.stderr_pipe, >, 0);
+ tt_assert(process_handle != NULL);
+ tt_int_op(process_handle->status, ==, expected_status);
+
+ tt_int_op(process_handle->stdout_pipe, >, 0);
+ tt_int_op(process_handle->stderr_pipe, >, 0);
/* Check stdout */
- pos = tor_read_all_from_process_stdout(&process_handle, stdout_buf,
+ pos = tor_read_all_from_process_stdout(process_handle, stdout_buf,
sizeof(stdout_buf) - 1);
tt_assert(pos >= 0);
stdout_buf[pos] = '\0';
@@ -1418,7 +1424,7 @@ run_util_spawn_background(const char *argv[], const char *expected_out,
// TODO: Make test-child exit with something other than 0
/* Check stderr */
- pos = tor_read_all_from_process_stderr(&process_handle, stderr_buf,
+ pos = tor_read_all_from_process_stderr(process_handle, stderr_buf,
sizeof(stderr_buf) - 1);
tt_assert(pos >= 0);
stderr_buf[pos] = '\0';
@@ -1426,7 +1432,8 @@ run_util_spawn_background(const char *argv[], const char *expected_out,
tt_int_op(pos, ==, strlen(expected_err));
done:
- ;
+ if (process_handle)
+ tor_process_handle_destroy(process_handle, 1);
}
/** Check that we can launch a process and read the output */
@@ -1485,7 +1492,8 @@ test_util_spawn_background_partial_read(void *ptr)
int retval, exit_code;
ssize_t pos = -1;
- process_handle_t process_handle;
+ process_handle_t *process_handle=NULL;
+ int status;
char stdout_buf[100], stderr_buf[100];
#ifdef MS_WINDOWS
const char *argv[] = {"test-child.exe", "--test", NULL};
@@ -1506,21 +1514,23 @@ test_util_spawn_background_partial_read(void *ptr)
/* Start the program */
#ifdef MS_WINDOWS
- tor_spawn_background(NULL, argv, &process_handle);
+ status = tor_spawn_background(NULL, argv, NULL, &process_handle);
#else
- tor_spawn_background(argv[0], argv, &process_handle);
+ status = tor_spawn_background(argv[0], argv, NULL, &process_handle);
#endif
- tt_int_op(process_handle.status, ==, expected_status);
+ tt_int_op(status, ==, expected_status);
+ tt_assert(process_handle);
+ tt_int_op(process_handle->status, ==, expected_status);
/* Check stdout */
- for (expected_out_ctr =0; expected_out[expected_out_ctr] != NULL;) {
+ for (expected_out_ctr = 0; expected_out[expected_out_ctr] != NULL;) {
#ifdef MS_WINDOWS
- pos = tor_read_all_handle(process_handle.stdout_pipe, stdout_buf,
+ pos = tor_read_all_handle(process_handle->stdout_pipe, stdout_buf,
sizeof(stdout_buf) - 1, NULL);
#else
/* Check that we didn't read the end of file last time */
tt_assert(!eof);
- pos = tor_read_all_handle(process_handle.stdout_handle, stdout_buf,
+ pos = tor_read_all_handle(process_handle->stdout_handle, stdout_buf,
sizeof(stdout_buf) - 1, NULL, &eof);
#endif
log_info(LD_GENERAL, "tor_read_all_handle() returned %d", (int)pos);
@@ -1538,16 +1548,16 @@ test_util_spawn_background_partial_read(void *ptr)
/* The process should have exited without writing more */
#ifdef MS_WINDOWS
- pos = tor_read_all_handle(process_handle.stdout_pipe, stdout_buf,
+ pos = tor_read_all_handle(process_handle->stdout_pipe, stdout_buf,
sizeof(stdout_buf) - 1,
- &process_handle);
+ process_handle);
tt_int_op(pos, ==, 0);
#else
if (!eof) {
/* We should have got all the data, but maybe not the EOF flag */
- pos = tor_read_all_handle(process_handle.stdout_handle, stdout_buf,
+ pos = tor_read_all_handle(process_handle->stdout_handle, stdout_buf,
sizeof(stdout_buf) - 1,
- &process_handle, &eof);
+ process_handle, &eof);
tt_int_op(pos, ==, 0);
tt_assert(eof);
}
@@ -1562,7 +1572,7 @@ test_util_spawn_background_partial_read(void *ptr)
// TODO: Make test-child exit with something other than 0
/* Check stderr */
- pos = tor_read_all_from_process_stderr(&process_handle, stderr_buf,
+ pos = tor_read_all_from_process_stderr(process_handle, stderr_buf,
sizeof(stderr_buf) - 1);
tt_assert(pos >= 0);
stderr_buf[pos] = '\0';
@@ -1570,7 +1580,7 @@ test_util_spawn_background_partial_read(void *ptr)
tt_int_op(pos, ==, strlen(expected_err));
done:
- ;
+ tor_process_handle_destroy(process_handle, 1);
}
/**
@@ -1593,7 +1603,7 @@ test_util_join_win_cmdline(void *ptr)
{"a\\\\\\b", "de fg", "H", NULL}, // Backslashes
{"a\\\"b", "\\c", "D\\", NULL}, // Backslashes before quote
{"a\\\\b c", "d", "E", NULL}, // Backslashes not before quote
- {} // Terminator
+ { NULL } // Terminator
};
const char *cmdlines[] = {
@@ -1645,12 +1655,12 @@ test_util_split_lines(void *ptr)
{"\n\rfoo\n\rbar\r\n", 12, {"foo", "bar", NULL}},
{"fo o\r\nb\tar", 10, {"fo o", "b.ar", NULL}},
{"\x0f""f\0o\0\n\x01""b\0r\0\r", 12, {".f.o.", ".b.r.", NULL}},
- {NULL, 0, {}}
+ {NULL, 0, { NULL }}
};
int i, j;
char *orig_line;
- smartlist_t *sl;
+ smartlist_t *sl=NULL;
(void)ptr;
@@ -1679,10 +1689,12 @@ test_util_split_lines(void *ptr)
tt_assert(tests[i].split_line[j] == NULL);
tor_free(orig_line);
smartlist_free(sl);
+ sl = NULL;
}
done:
- ;
+ tor_free(orig_line);
+ smartlist_free(sl);
}
static void
@@ -1738,6 +1750,92 @@ test_util_di_ops(void)
;
}
+/**
+ * Test counting high bits
+ */
+static void
+test_util_n_bits_set(void *ptr)
+{
+ (void)ptr;
+ test_eq(n_bits_set_u8(0), 0);
+ test_eq(n_bits_set_u8(1), 1);
+ test_eq(n_bits_set_u8(129), 2);
+ test_eq(n_bits_set_u8(255), 8);
+ done:
+ ;
+}
+
+/**
+ * Test LHS whitespace (and comment) eater
+ */
+static void
+test_util_eat_whitespace(void *ptr)
+{
+ const char ws[] = { ' ', '\t', '\r' }; /* Except NL */
+ char str[80];
+ size_t i;
+
+ (void)ptr;
+
+ /* Try one leading ws */
+ strcpy(str, "fuubaar");
+ for (i = 0; i < sizeof(ws); ++i) {
+ str[0] = ws[i];
+ test_streq(eat_whitespace(str), str + 1);
+ test_streq(eat_whitespace_eos(str, str + strlen(str)), str + 1);
+ test_streq(eat_whitespace_eos_no_nl(str, str + strlen(str)), str + 1);
+ test_streq(eat_whitespace_no_nl(str), str + 1);
+ }
+ str[0] = '\n';
+ test_streq(eat_whitespace(str), str + 1);
+ test_streq(eat_whitespace_eos(str, str + strlen(str)), str + 1);
+
+ /* Empty string */
+ strcpy(str, "");
+ test_eq_ptr(eat_whitespace(str), str);
+ test_eq_ptr(eat_whitespace_eos(str, str), str);
+ test_eq_ptr(eat_whitespace_eos_no_nl(str, str), str);
+ test_eq_ptr(eat_whitespace_no_nl(str), str);
+
+ /* Only ws */
+ strcpy(str, " \t\r\n");
+ test_eq_ptr(eat_whitespace(str), str + strlen(str));
+ test_eq_ptr(eat_whitespace_eos(str, str + strlen(str)), str + strlen(str));
+
+ strcpy(str, " \t\r ");
+ test_eq_ptr(eat_whitespace_no_nl(str), str + strlen(str));
+ test_eq_ptr(eat_whitespace_eos_no_nl(str, str + strlen(str)),
+ str + strlen(str));
+
+ /* Multiple ws */
+ strcpy(str, "fuubaar");
+ for (i = 0; i < sizeof(ws); ++i)
+ str[i] = ws[i];
+ test_streq(eat_whitespace(str), str + sizeof(ws));
+ test_streq(eat_whitespace_eos(str, str + strlen(str)), str + sizeof(ws));
+ test_streq(eat_whitespace_no_nl(str), str + sizeof(ws));
+ test_streq(eat_whitespace_eos_no_nl(str, str + strlen(str)),
+ str + sizeof(ws));
+
+ /* Eat comment */
+ strcpy(str, "# Comment \n No Comment");
+ test_streq(eat_whitespace(str), "No Comment");
+ test_streq(eat_whitespace_eos(str, str + strlen(str)), "No Comment");
+
+ /* Eat comment & ws mix */
+ strcpy(str, " # \t Comment \n\t\nNo Comment");
+ test_streq(eat_whitespace(str), "No Comment");
+ test_streq(eat_whitespace_eos(str, str + strlen(str)), "No Comment");
+
+ /* Eat entire comment */
+ strcpy(str, "#Comment");
+ test_eq_ptr(eat_whitespace(str), str + strlen(str));
+ test_eq_ptr(eat_whitespace_eos(str, str + strlen(str)), str + strlen(str));
+
+ done:
+ ;
+}
+
#define UTIL_LEGACY(name) \
{ #name, legacy_test_helper, 0, &legacy_setup, test_util_ ## name }
@@ -1775,6 +1873,8 @@ struct testcase_t util_tests[] = {
UTIL_TEST(spawn_background_partial_read, 0),
UTIL_TEST(join_win_cmdline, 0),
UTIL_TEST(split_lines, 0),
+ UTIL_TEST(n_bits_set, 0),
+ UTIL_TEST(eat_whitespace, 0),
END_OF_TESTCASES
};
diff --git a/src/tools/tor-gencert.c b/src/tools/tor-gencert.c
index 7a516b457..57f82b1bc 100644
--- a/src/tools/tor-gencert.c
+++ b/src/tools/tor-gencert.c
@@ -153,7 +153,7 @@ parse_commandline(int argc, char **argv)
}
months_lifetime = atoi(argv[++i]);
if (months_lifetime > 24 || months_lifetime < 0) {
- fprintf(stderr, "Lifetime (in months) was out of range.");
+ fprintf(stderr, "Lifetime (in months) was out of range.\n");
return 1;
}
} else if (!strcmp(argv[i], "-r") || !strcmp(argv[i], "--reuse")) {
@@ -169,7 +169,7 @@ parse_commandline(int argc, char **argv)
fprintf(stderr, "No argument to -a\n");
return 1;
}
- if (parse_addr_port(LOG_ERR, argv[++i], NULL, &addr, &port)<0)
+ if (addr_port_lookup(LOG_ERR, argv[++i], NULL, &addr, &port)<0)
return 1;
in.s_addr = htonl(addr);
tor_inet_ntoa(&in, b, sizeof(b));
diff --git a/src/tools/tor-resolve.c b/src/tools/tor-resolve.c
index 8c4d3f648..f1220d9d8 100644
--- a/src/tools/tor-resolve.c
+++ b/src/tools/tor-resolve.c
@@ -393,7 +393,7 @@ main(int argc, char **argv)
socksport = 9050; /* 9050 */
}
} else if (n_args == 2) {
- if (parse_addr_port(LOG_WARN, arg[1], NULL, &sockshost, &socksport)<0) {
+ if (addr_port_lookup(LOG_WARN, arg[1], NULL, &sockshost, &socksport)<0) {
fprintf(stderr, "Couldn't parse/resolve address %s", arg[1]);
return 1;
}
diff --git a/src/win32/orconfig.h b/src/win32/orconfig.h
index aed3002a5..34d7c75b0 100644
--- a/src/win32/orconfig.h
+++ b/src/win32/orconfig.h
@@ -234,7 +234,7 @@
#define USING_TWOS_COMPLEMENT
/* Version number of package */
-#define VERSION "0.2.3.3-alpha-dev"
+#define VERSION "0.2.3.8-alpha-dev"