aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore4
-rw-r--r--ChangeLog1573
-rw-r--r--Makefile.am1
-rw-r--r--Makefile.nmake5
-rw-r--r--ReleaseNotes1494
-rw-r--r--changes/UserspaceIOCPBuffers7
-rw-r--r--changes/bug134513
-rw-r--r--changes/bug13524
-rw-r--r--changes/bug18106
-rw-r--r--changes/bug24745
-rw-r--r--changes/bug25034
-rw-r--r--changes/bug2732-simple7
-rw-r--r--changes/bug27525
-rw-r--r--changes/bug2792_checkdir8
-rw-r--r--changes/bug28505
-rw-r--r--changes/bug29725
-rw-r--r--changes/bug30194
-rw-r--r--changes/bug30226
-rw-r--r--changes/bug30264
-rw-r--r--changes/bug31184
-rw-r--r--changes/bug3122_memcmp7
-rw-r--r--changes/bug31356
-rw-r--r--changes/bug31757
-rw-r--r--changes/bug31835
-rw-r--r--changes/bug31984
-rw-r--r--changes/bug32006
-rw-r--r--changes/bug32074
-rw-r--r--changes/bug32134
-rw-r--r--changes/bug32524
-rw-r--r--changes/bug42305
-rw-r--r--changes/bug45544
-rw-r--r--changes/check-fetched-rend-desc-service-id7
-rw-r--r--changes/check-public-key-exponents5
-rw-r--r--changes/checkSpaces5
-rw-r--r--changes/dirvote_null_deref4
-rw-r--r--changes/exit-policy-default-is-not-a-prefix5
-rw-r--r--changes/feature30496
-rw-r--r--changes/feature307614
-rw-r--r--changes/geoip-may20113
-rw-r--r--changes/md_cache_replace6
-rw-r--r--changes/mdesc_null_deref5
-rw-r--r--changes/microdesc_use10
-rw-r--r--configure.in38
-rwxr-xr-xcontrib/checkSpace.pl2
-rwxr-xr-xcontrib/findMergedChanges.pl8
-rw-r--r--contrib/package_nsis-mingw.sh2
-rw-r--r--contrib/tor-mingw.nsi.in2
-rw-r--r--doc/HACKING39
-rw-r--r--doc/Makefile.am18
-rw-r--r--doc/nodefamily_routerset4
-rw-r--r--doc/tor.1.txt189
-rw-r--r--src/common/Makefile.am2
-rw-r--r--src/common/Makefile.nmake20
-rw-r--r--src/common/OpenBSD_malloc_Linux.c2
-rw-r--r--src/common/address.c65
-rw-r--r--src/common/address.h13
-rw-r--r--src/common/aes.c842
-rw-r--r--src/common/aes.h2
-rw-r--r--src/common/compat.c77
-rw-r--r--src/common/compat.h34
-rw-r--r--src/common/compat_libevent.c122
-rw-r--r--src/common/compat_libevent.h12
-rw-r--r--src/common/container.c24
-rw-r--r--src/common/crypto.c123
-rw-r--r--src/common/crypto.h5
-rw-r--r--src/common/log.c2
-rw-r--r--src/common/mempool.c1
-rw-r--r--src/common/procmon.c8
-rw-r--r--src/common/torgzip.c7
-rw-r--r--src/common/torint.h9
-rw-r--r--src/common/tortls.c709
-rw-r--r--src/common/tortls.h29
-rw-r--r--src/common/util.c1007
-rw-r--r--src/common/util.h78
-rw-r--r--src/config/geoip28180
-rw-r--r--src/or/Makefile.am12
-rw-r--r--src/or/Makefile.nmake28
-rw-r--r--src/or/buffers.c355
-rw-r--r--src/or/buffers.h25
-rw-r--r--src/or/circuitbuild.c596
-rw-r--r--src/or/circuitbuild.h46
-rw-r--r--src/or/circuitlist.c62
-rw-r--r--src/or/circuituse.c317
-rw-r--r--src/or/circuituse.h9
-rw-r--r--src/or/command.c675
-rw-r--r--src/or/config.c1370
-rw-r--r--src/or/config.h27
-rw-r--r--src/or/connection.c1223
-rw-r--r--src/or/connection.h7
-rw-r--r--src/or/connection_edge.c798
-rw-r--r--src/or/connection_edge.h38
-rw-r--r--src/or/connection_or.c872
-rw-r--r--src/or/connection_or.h33
-rw-r--r--src/or/control.c360
-rw-r--r--src/or/control.h3
-rw-r--r--src/or/cpuworker.c24
-rw-r--r--src/or/directory.c168
-rw-r--r--src/or/directory.h2
-rw-r--r--src/or/dirserv.c226
-rw-r--r--src/or/dirserv.h17
-rw-r--r--src/or/dirvote.c9
-rw-r--r--src/or/dirvote.h6
-rw-r--r--src/or/dns.c16
-rw-r--r--src/or/dnsserv.c79
-rw-r--r--src/or/dnsserv.h4
-rw-r--r--src/or/eventdns.c32
-rw-r--r--src/or/eventdns.h2
-rw-r--r--src/or/geoip.c324
-rw-r--r--src/or/geoip.h9
-rw-r--r--src/or/hibernate.c51
-rw-r--r--src/or/hibernate.h26
-rw-r--r--src/or/main.c329
-rw-r--r--src/or/main.h3
-rw-r--r--src/or/microdesc.c86
-rw-r--r--src/or/microdesc.h8
-rw-r--r--src/or/networkstatus.c35
-rw-r--r--src/or/networkstatus.h5
-rw-r--r--src/or/nodelist.c33
-rw-r--r--src/or/nodelist.h2
-rw-r--r--src/or/ntmain.c2
-rw-r--r--src/or/or.h560
-rw-r--r--src/or/policies.c53
-rw-r--r--src/or/policies.h8
-rw-r--r--src/or/relay.c159
-rw-r--r--src/or/relay.h9
-rw-r--r--src/or/rendclient.c341
-rw-r--r--src/or/rendclient.h18
-rw-r--r--src/or/rendcommon.c18
-rw-r--r--src/or/rendservice.c146
-rw-r--r--src/or/rendservice.h2
-rw-r--r--src/or/rephist.c416
-rw-r--r--src/or/rephist.h9
-rw-r--r--src/or/router.c341
-rw-r--r--src/or/router.h62
-rw-r--r--src/or/routerlist.c149
-rw-r--r--src/or/routerlist.h4
-rw-r--r--src/or/routerparse.c124
-rw-r--r--src/or/routerparse.h1
-rw-r--r--src/or/status.c15
-rw-r--r--src/or/transports.c1048
-rw-r--r--src/or/transports.h105
-rw-r--r--src/test/Makefile.am15
-rw-r--r--src/test/bench.c327
-rw-r--r--src/test/test-child.c22
-rw-r--r--src/test/test.c804
-rw-r--r--src/test/test.h3
-rw-r--r--src/test/test_addr.c196
-rw-r--r--src/test/test_crypto.c101
-rw-r--r--src/test/test_dir.c12
-rw-r--r--src/test/test_microdesc.c2
-rw-r--r--src/test/test_pt.c147
-rw-r--r--src/test/test_util.c419
-rw-r--r--src/test/tinytest.c17
-rw-r--r--src/test/tinytest_demo.c16
-rw-r--r--src/test/tinytest_macros.h39
-rw-r--r--src/tools/tor-fw-helper/Makefile.am4
-rw-r--r--src/tools/tor-fw-helper/tor-fw-helper-natpmp.c2
-rw-r--r--src/tools/tor-fw-helper/tor-fw-helper-upnp.c3
-rw-r--r--src/tools/tor-fw-helper/tor-fw-helper.c35
-rw-r--r--src/tools/tor-gencert.c6
-rw-r--r--src/tools/tor-resolve.c6
-rw-r--r--src/win32/orconfig.h12
162 files changed, 35051 insertions, 14044 deletions
diff --git a/.gitignore b/.gitignore
index 867a97d2f..26e9e3808 100644
--- a/.gitignore
+++ b/.gitignore
@@ -144,8 +144,12 @@
# /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
+/src/test/test-child.exe
# /src/tools/
diff --git a/ChangeLog b/ChangeLog
index a735900ed..4b9d9f05d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,145 +1,1242 @@
-Changes in version 0.2.3.1-alpha - 2011-05-05
- Tor 0.2.3.1-alpha adds some new experimental features, including support
- for an improved network IO backend, IOCP networking on Windows,
- microdescriptor caching, "fast-start" support for streams, and automatic
- home router configuration. There are also numerous internal improvements
- to try to make the code easier for developers to work with.
+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.
- This is the first alpha release in a new series, so expect there to be
- bugs. Users who would rather test out a more stable branch should
- stay with 0.2.2.x for now.
+ 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:
- - Tor can now optionally build with the "bufferevents" buffered IO
- backend provided by Libevent 2. To use this feature, make sure you
- have the latest possible version of Libevent, and pass the
- --enable-bufferevents flag to configure when building Tor from
- source. This feature will make our networking code more flexible,
- let us stack layers on each other, and let us use more efficient
- zero-copy transports where available.
- - As an experimental feature, Tor can use IOCP for networking on Windows.
- Once this code is tuned and optimized, it promises much better
- performance than the select-based backend we've used in the past. To
- try this feature, you must build Tor with Libevent 2, configure Tor
- with the "bufferevents" buffered IO backend, and add "DisableIOCP 0" to
- your torrc. There are known bugs here: only try this if you can help
- debug it as it breaks.
- - The EntryNodes option can now include country codes like {de} or IP
- addresses or network masks. Previously we had disallowed these options
- because we didn't have an efficient way to keep the list up to
- date. Fixes bug 1982, but see bug 2798 for an unresolved issue here.
- - Exit nodes now accept and queue data on not-yet-connected streams.
- Previously, the client wasn't allowed to send data until the stream was
- connected, which slowed down all connections. This change will enable
- clients to perform a "fast-start" on streams and send data without
- having to wait for a confirmation that the stream has opened. (Patch
- from Ian Goldberg; implements the server side of Proposal 174.)
- - Tor now has initial support for automatic port mapping on the many
- home routers that support NAT-PMP or UPnP. (Not yet supported on
- Windows). To build the support code, you'll need to have libnatpnp
- library and/or the libminiupnpc library, and you'll need to enable the
- feature specifically by passing "--enable-upnp" and/or
- "--enable-natpnp" to configure. To turn it on, use the new
- PortForwarding option.
- - Caches now download, cache, and serve multiple "flavors" of the
- consensus, including a flavor that describes microdescriptors.
- - Caches now download, cache, and serve microdescriptors -- small
- summaries of router descriptors that are authenticated by all of the
- directory authorities. Once enough caches are running this code,
- clients will be able to save significant amounts of directory bandwidth
- by downloading microdescriptors instead of router descriptors.
+ - 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:
- - Make logging resolution configurable with a new LogGranularity
- option, and change the default from 1 millisecond to 1
- second. Implements enhancement 1668.
- - We log which torrc file we're using on startup. Implements ticket
- 2444.
- - Ordinarily, Tor does not count traffic from private addresses (like
- 127.0.0.1 or 10.0.0.1) when calculating rate limits or accounting.
- There is now a new option, CountPrivateBandwidth, to disable this
- behavior. Patch from Daniel Cagara.
- - New --enable-static-tor configure option for building Tor as
- statically as possible. Idea, general hackery and thoughts from
- Alexei Czeskis, John Gilmore, Jacob Appelbaum. Implements ticket
- 2702.
- - If you set the NumCPUs option to 0, Tor will now try to detect how
- many CPUs you have. This is the new default behavior.
- Turn on directory request statistics by default and include them in
extra-info descriptors. Don't break if we have no GeoIP database.
- - Relays that set "ConnDirectionStatistics 1" write statistics on the
- bidirectional use of connections to disk every 24 hours.
- - Add a GeoIP file digest to the extra-info descriptor. Implements
- enhancement 1883.
- - Add a new 'Heartbeat' log message type to periodically log a message
- describing Tor's status at level Notice. This feature is meant for
- operators who log at notice, and want to make sure that their Tor
- server is still working. Implementation by George Kadianakis.
+ Backported from 0.2.3.1-alpha; implements ticket 3951.
+ - Update to the October 4 2011 Maxmind GeoLite Country database.
- o Minor bugfixes (on 0.2.2.25-alpha):
- - When loading the microdesc journal, remember its current size.
- In 0.2.2, this helps prevent the microdesc journal from growing
- without limit on authorities (who are the only ones to use it in
- 0.2.2). Fixes a part of bug 2230; bugfix on 0.2.2.6-alpha.
- Fix posted by "cypherpunks."
- - The microdesc journal is supposed to get rebuilt only if it is
- at least _half_ the length of the store, not _twice_ the length
- of the store. Bugfix on 0.2.2.6-alpha; fixes part of bug 2230.
- - If as an authority we fail to compute the identity digest of a v3
- legacy keypair, warn, and don't use a buffer-full of junk instead.
- Bugfix on 0.2.1.1-alpha; fixes bug 3106.
- - Authorities now clean their microdesc cache periodically and when
- reading from disk initially, not only when adding new descriptors.
- This prevents a bug where we could lose microdescriptors. Bugfix
- on 0.2.2.6-alpha.
- o Minor features (controller):
- - Add a new SIGNAL event to the controller interface so that
- controllers can be notified when Tor handles a signal. Resolves
- issue 1955. Patch by John Brooks.
- - Add a new GETINFO option to get total bytes read and written. Patch
- from pipe, revised by atagar. Resolves ticket 2345.
- - Implement some GETINFO controller fields to provide information about
- the Tor process's pid, euid, username, and resource limits.
+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
+ and optimistic data features introduced earlier in the 0.2.3.x
+ series. It also includes numerous critical bugfixes in the (optional)
+ bufferevent-based networking backend.
+
+ o Major features (stream isolation):
+ - You can now configure Tor so that streams from different
+ applications are isolated on different circuits, to prevent an
+ attacker who sees your streams as they leave an exit node from
+ linking your sessions to one another. To do this, choose some way
+ to distinguish the applications: have them connect to different
+ SocksPorts, or have one of them use SOCKS4 while the other uses
+ SOCKS5, or have them pass different authentication strings to the
+ SOCKS proxy. Then, use the new SocksPort syntax to configure the
+ degree of isolation you need. This implements Proposal 171.
+ - There's a new syntax for specifying multiple client ports (such as
+ SOCKSPort, TransPort, DNSPort, NATDPort): you can now just declare
+ multiple *Port entries with full addr:port syntax on each.
+ The old *ListenAddress format is still supported, but you can't
+ mix it with the new *Port syntax.
+
+ o Major features (other):
+ - Enable microdescriptor fetching by default for clients. This allows
+ clients to download a much smaller amount of directory information.
+ To disable it (and go back to the old-style consensus and
+ descriptors), set "UseMicrodescriptors 0" in your torrc file.
+ - Tor's firewall-helper feature, introduced in 0.2.3.1-alpha (see the
+ "PortForwarding" config option), now supports Windows.
+ - When using an exit relay running 0.2.3.x, clients can now
+ "optimistically" send data before the exit relay reports that
+ the stream has opened. This saves a round trip when starting
+ connections where the client speaks first (such as web browsing).
+ This behavior is controlled by a consensus parameter (currently
+ disabled). To turn it on or off manually, use the "OptimisticData"
+ torrc option. Implements proposal 181; code by Ian Goldberg.
+
+ o Major bugfixes (bufferevents, fixes on 0.2.3.1-alpha):
+ - When using IOCP on Windows, we need to enable Libevent windows
+ threading support.
+ - The IOCP backend now works even when the user has not specified
+ the (internal, debugging-only) _UseFilteringSSLBufferevents option.
+ Fixes part of bug 3752.
+ - Correctly record the bytes we've read and written when using
+ bufferevents, so that we can include them in our bandwidth history
+ and advertised bandwidth. Fixes bug 3803.
+ - Apply rate-limiting only at the bottom of a chain of filtering
+ bufferevents. This prevents us from filling up internal read
+ buffers and violating rate-limits when filtering bufferevents
+ are enabled. Fixes part of bug 3804.
+ - Add high-watermarks to the output buffers for filtered
+ bufferevents. This prevents us from filling up internal write
+ buffers and wasting CPU cycles when filtering bufferevents are
+ enabled. Fixes part of bug 3804.
+ - Correctly notice when data has been written from a bufferevent
+ without flushing it completely. Fixes bug 3805.
+ - Fix a bug where server-side tunneled bufferevent-based directory
+ streams would get closed prematurely. Fixes bug 3814.
+ - Fix a use-after-free error with per-connection rate-limiting
+ buckets. Fixes bug 3888.
+
+ o Major bugfixes (also part of 0.2.2.31-rc):
+ - If we're configured to write our ControlPorts to disk, only write
+ them after switching UID and creating the data directory. This way,
+ we don't fail when starting up with a nonexistent DataDirectory
+ and a ControlPortWriteToFile setting based on that directory. Fixes
+ bug 3747; bugfix on Tor 0.2.2.26-beta.
+
+ o Minor features:
+ - Added a new CONF_CHANGED event so that controllers can be notified
+ of any configuration changes made by other controllers, or by the
+ user. Implements ticket 1692.
+ - Use evbuffer_copyout() in inspect_evbuffer(). This fixes a memory
+ leak when using bufferevents, and lets Libevent worry about how to
+ best copy data out of a buffer.
+ - Replace files in stats/ rather than appending to them. Now that we
+ include statistics in extra-info descriptors, it makes no sense to
+ keep old statistics forever. Implements ticket 2930.
+
+ o Minor features (build compatibility):
+ - Limited, experimental support for building with nmake and MSVC.
+ - Provide a substitute implementation of lround() for MSVC, which
+ apparently lacks it. Patch from Gisle Vanem.
+
+ o Minor features (also part of 0.2.2.31-rc):
+ - Update to the August 2 2011 Maxmind GeoLite Country database.
+
+ o Minor bugfixes (on 0.2.3.x-alpha):
+ - Fix a spurious warning when parsing SOCKS requests with
+ bufferevents enabled. Fixes bug 3615; bugfix on 0.2.3.2-alpha.
+ - Get rid of a harmless warning that could happen on relays running
+ with bufferevents. The warning was caused by someone doing an http
+ request to a relay's orport. Also don't warn for a few related
+ non-errors. Fixes bug 3700; bugfix on 0.2.3.1-alpha.
+
+ o Minor bugfixes (on 2.2.x and earlier):
+ - 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.
+ - The "--quiet" and "--hush" options now apply not only to Tor's
+ behavior before logs are configured, but also to Tor's behavior in
+ the absense of configured logs. Fixes bug 3550; bugfix on
+ 0.2.0.10-alpha.
+
+ o Minor bugfixes (also part of 0.2.2.31-rc):
+ - Write several files in text mode, on OSes that distinguish text
+ mode from binary mode (namely, Windows). These files are:
+ 'buffer-stats', 'dirreq-stats', and 'entry-stats' on relays
+ that collect those statistics; 'client_keys' and 'hostname' for
+ hidden services that use authentication; and (in the tor-gencert
+ utility) newly generated identity and signing keys. Previously,
+ we wouldn't specify text mode or binary mode, leading to an
+ assertion failure. Fixes bug 3607. Bugfix on 0.2.1.1-alpha (when
+ the DirRecordUsageByCountry option which would have triggered
+ the assertion failure was added), although this assertion failure
+ would have occurred in tor-gencert on Windows in 0.2.0.1-alpha.
+ - Selectively disable deprecation warnings on OS X because Lion
+ started deprecating the shipped copy of openssl. Fixes bug 3643.
+ - Remove an extra pair of quotation marks around the error
+ message in control-port STATUS_GENERAL BUG events. Bugfix on
+ 0.1.2.6-alpha; fixes bug 3732.
+ - When unable to format an address as a string, report its value
+ as "???" rather than reusing the last formatted address. Bugfix
+ on 0.2.1.5-alpha.
+
+ o Code simplifications and refactoring:
+ - Rewrite the listener-selection logic so that parsing which ports
+ we want to listen on is now separate from binding to the ports
+ we want.
o Build changes:
- - Our build system requires automake 1.6 or later to create the
- Makefile.in files. Previously, you could have used 1.4.
- This only affects developers and people building Tor from git;
- people who build Tor from the source distribution without changing
- the Makefile.am files should be fine.
- - Our autogen.sh script uses autoreconf to launch autoconf, automake, and
- so on. This is more robust against some of the failure modes
- associated with running the autotools pieces on their own.
+ - Building Tor with bufferevent support now requires Libevent
+ 2.0.13-stable or later. Previous versions of Libevent had bugs in
+ SSL-related bufferevents and related issues that would make Tor
+ work badly with bufferevents. Requiring 2.0.13-stable also allows
+ Tor with bufferevents to take advantage of Libevent APIs
+ introduced after 2.0.8-rc.
+
+
+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,
+ a founder of the PETS community, a leader in our field, a mentor,
+ and a friend. He left us with these words: "I had the possibility
+ to contribute to this world that is not as it should be. I hope I
+ could help in some areas to make the world a better place, and that
+ I could also encourage other people to be engaged in improving the
+ world. Please, stay engaged. This world needs you, your love, your
+ initiative -- now I cannot be part of that anymore."
+
+ Tor 0.2.2.32, the first stable release in the 0.2.2 branch, is finally
+ ready. More than two years in the making, this release features improved
+ client performance and hidden service reliability, better compatibility
+ for Android, correct behavior for bridges that listen on more than
+ one address, more extensible and flexible directory object handling,
+ better reporting of network statistics, improved code security, and
+ many many other features and bugfixes.
+
+
+Changes in version 0.2.2.31-rc - 2011-08-17
+ Tor 0.2.2.31-rc is the second and hopefully final release candidate
+ for the Tor 0.2.2.x series.
+
+ o Major bugfixes:
+ - Remove an extra pair of quotation marks around the error
+ message in control-port STATUS_GENERAL BUG events. Bugfix on
+ 0.1.2.6-alpha; fixes bug 3732.
+ - If we're configured to write our ControlPorts to disk, only write
+ them after switching UID and creating the data directory. This way,
+ we don't fail when starting up with a nonexistent DataDirectory
+ and a ControlPortWriteToFile setting based on that directory. Fixes
+ bug 3747; bugfix on Tor 0.2.2.26-beta.
+
+ o Minor features:
+ - Update to the August 2 2011 Maxmind GeoLite Country database.
+
+ o Minor bugfixes:
+ - Allow GETINFO fingerprint to return a fingerprint even when
+ we have not yet built a router descriptor. Fixes bug 3577;
+ bugfix on 0.2.0.1-alpha.
+ - Write several files in text mode, on OSes that distinguish text
+ mode from binary mode (namely, Windows). These files are:
+ 'buffer-stats', 'dirreq-stats', and 'entry-stats' on relays
+ that collect those statistics; 'client_keys' and 'hostname' for
+ hidden services that use authentication; and (in the tor-gencert
+ utility) newly generated identity and signing keys. Previously,
+ we wouldn't specify text mode or binary mode, leading to an
+ assertion failure. Fixes bug 3607. Bugfix on 0.2.1.1-alpha (when
+ the DirRecordUsageByCountry option which would have triggered
+ the assertion failure was added), although this assertion failure
+ would have occurred in tor-gencert on Windows in 0.2.0.1-alpha.
+ - Selectively disable deprecation warnings on OS X because Lion
+ started deprecating the shipped copy of openssl. Fixes bug 3643.
+ - When unable to format an address as a string, report its value
+ as "???" rather than reusing the last formatted address. Bugfix
+ on 0.2.1.5-alpha.
+
+
+Changes in version 0.2.3.2-alpha - 2011-07-18
+ Tor 0.2.3.2-alpha introduces two new experimental features:
+ microdescriptors and pluggable transports. It also continues cleaning
+ up a variety of recently introduced features.
+
+ o Major features:
+ - Clients can now use microdescriptors instead of regular descriptors
+ to build circuits. Microdescriptors are authority-generated
+ summaries of regular descriptors' contents, designed to change
+ very rarely (see proposal 158 for details). This feature is
+ designed to save bandwidth, especially for clients on slow internet
+ connections. It's off by default for now, since nearly no caches
+ support it, but it will be on-by-default for clients in a future
+ version. You can use the UseMicrodescriptors option to turn it on.
+ - Tor clients using bridges can now be configured to use a separate
+ 'transport' proxy for each bridge. This approach helps to resist
+ censorship by allowing bridges to use protocol obfuscation
+ plugins. It implements part of proposal 180. Implements ticket 2841.
+ - While we're trying to bootstrap, record how many TLS connections
+ fail in each state, and report which states saw the most failures
+ in response to any bootstrap failures. This feature may speed up
+ diagnosis of censorship events. Implements ticket 3116.
+
+ o Major bugfixes (on 0.2.3.1-alpha):
+ - When configuring a large set of nodes in EntryNodes (as with
+ 'EntryNodes {cc}' or 'EntryNodes 1.1.1.1/16'), choose only a
+ random subset to be guards, and choose them in random
+ order. Fixes bug 2798.
+ - Tor could crash when remembering a consensus in a non-used consensus
+ flavor without having a current consensus set. Fixes bug 3361.
+ - Comparing an unknown address to a microdescriptor's shortened exit
+ policy would always give a "rejected" result. Fixes bug 3599.
+ - Using microdescriptors as a client no longer prevents Tor from
+ uploading and downloading hidden service descriptors. Fixes
+ bug 3601.
+
+ o Minor features:
+ - Allow nameservers with IPv6 address. Resolves bug 2574.
+ - Accept attempts to include a password authenticator in the
+ handshake, as supported by SOCKS5. This handles SOCKS clients that
+ don't know how to omit a password when authenticating. Resolves
+ bug 1666.
+ - When configuring a large set of nodes in EntryNodes, and there are
+ enough of them listed as Guard so that we don't need to consider
+ the non-guard entries, prefer the ones listed with the Guard flag.
+ - Check for and recover from inconsistency in the microdescriptor
+ cache. This will make it harder for us to accidentally free a
+ microdescriptor without removing it from the appropriate data
+ structures. Fixes issue 3135; issue noted by "wanoskarnet".
+ - Log SSL state transitions at log level DEBUG, log domain
+ HANDSHAKE. This can be useful for debugging censorship events.
+ Implements ticket 3264.
+ - Add port 6523 (Gobby) to LongLivedPorts. Patch by intrigeri;
+ implements ticket 3439.
+
+ o Minor bugfixes (on 0.2.3.1-alpha):
+ - Do not free all general-purpose regular descriptors just
+ because microdescriptor use is enabled. Fixes bug 3113.
+ - Correctly link libevent_openssl when --enable-static-libevent
+ is passed to configure. Fixes bug 3118.
+ - Bridges should not complain during their heartbeat log messages that
+ they are unlisted in the consensus: that's more or less the point
+ of being a bridge. Fixes bug 3183.
+ - Report a SIGNAL event to controllers when acting on a delayed
+ SIGNAL NEWNYM command. Previously, we would report a SIGNAL
+ event to the controller if we acted on a SIGNAL NEWNYM command
+ immediately, and otherwise not report a SIGNAL event for the
+ command at all. Fixes bug 3349.
+ - Fix a crash when handling the SIGNAL controller command or
+ reporting ERR-level status events with bufferevents enabled. Found
+ by Robert Ransom. Fixes bug 3367.
+ - Always ship the tor-fw-helper manpage in our release tarballs.
+ Fixes bug 3389. Reported by Stephen Walker.
+ - Fix a class of double-mark-for-close bugs when bufferevents
+ are enabled. Fixes bug 3403.
+ - Update tor-fw-helper to support libnatpmp-20110618. Fixes bug 3434.
+ - Add SIGNAL to the list returned by the 'GETINFO events/names'
+ control-port command. Fixes part of bug 3465.
+ - Prevent using negative indices during unit test runs when read_all()
+ fails. Spotted by coverity.
+ - Fix a rare memory leak when checking the nodelist without it being
+ present. Found by coverity.
+ - Only try to download a microdescriptor-flavored consensus from
+ a directory cache that provides them.
+
+ o Minor bugfixes (on 0.2.2.x and earlier):
+ - Assert that hidden-service-related operations are not performed
+ using single-hop circuits. Previously, Tor would assert that
+ client-side streams are not attached to single-hop circuits,
+ but not that other sensitive operations on the client and service
+ side are not performed using single-hop circuits. Fixes bug 3332;
+ bugfix on 0.0.6.
+ - Don't publish a new relay descriptor when we reload our onion key,
+ unless the onion key has actually changed. Fixes bug 3263 and
+ resolves another cause of bug 1810. Bugfix on 0.1.1.11-alpha.
+ - Allow GETINFO fingerprint to return a fingerprint even when
+ we have not yet built a router descriptor. Fixes bug 3577;
+ bugfix on 0.2.0.1-alpha.
+ - Make 'tor --digests' list hashes of all Tor source files. Bugfix
+ on 0.2.2.4-alpha; fixes bug 3427.
+
+ o Code simplification and refactoring:
+ - Use tor_sscanf() in place of scanf() in more places through the
+ code. This makes us a little more locale-independent, and
+ should help shut up code-analysis tools that can't tell
+ a safe sscanf string from a dangerous one.
+ - Use tt_assert(), not tor_assert(), for checking for test failures.
+ This makes the unit tests more able to go on in the event that
+ one of them fails.
+ - Split connection_about_to_close() into separate functions for each
+ connection type.
+
+ o Build changes:
+ - On Windows, we now define the _WIN32_WINNT macros only if they
+ are not already defined. This lets the person building Tor decide,
+ if they want, to require a later version of Windows.
- o Minor packaging issues:
- - On OpenSUSE, create the /var/run/tor directory on startup if it is not
- already created. Patch from Andreas Stieger. Fixes bug 2573.
+
+Changes in version 0.2.2.30-rc - 2011-07-07
+ Tor 0.2.2.30-rc is the first release candidate for the Tor 0.2.2.x
+ series. It fixes a few smaller bugs, but generally appears stable.
+ Please test it and let us know whether it is!
+
+ o Minor bugfixes:
+ - Send a SUCCEEDED stream event to the controller when a reverse
+ resolve succeeded. Fixes bug 3536; bugfix on 0.0.8pre1. Issue
+ discovered by katmagic.
+ - 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.
+ - Add BUILDTIMEOUT_SET to the list returned by the 'GETINFO
+ events/names' control-port command. Bugfix on 0.2.2.9-alpha;
+ fixes part of bug 3465.
+ - Fix a memory leak when receiving a descriptor for a hidden
+ service we didn't ask for. Found by Coverity; CID #30. Bugfix
+ on 0.2.2.26-beta.
+
+ o Minor features:
+ - Update to the July 1 2011 Maxmind GeoLite Country database.
+
+
+Changes in version 0.2.2.29-beta - 2011-06-20
+ Tor 0.2.2.29-beta reverts an accidental behavior change for users who
+ have bridge lines in their torrc but don't want to use them; gets
+ us closer to having the control socket feature working on Debian;
+ and fixes a variety of smaller bugs.
+
+ o Major bugfixes:
+ - Revert the UseBridges option to its behavior before 0.2.2.28-beta.
+ When we changed the default behavior to "use bridges if any
+ are listed in the torrc", we surprised users who had bridges
+ in their torrc files but who didn't actually want to use them.
+ Partial resolution for bug 3354.
+
+ o Privacy fixes:
+ - 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:
+ - Fix a bug when using ControlSocketsGroupWritable with User. The
+ directory's group would be checked against the current group, not
+ the configured group. Patch by Jérémy Bobbio. Fixes bug 3393;
+ bugfix on 0.2.2.26-beta.
+ - Make connection_printf_to_buf()'s behaviour sane. Its callers
+ expect it to emit a CRLF iff the format string ends with CRLF;
+ it actually emitted a CRLF iff (a) the format string ended with
+ CRLF or (b) the resulting string was over 1023 characters long or
+ (c) the format string did not end with CRLF *and* the resulting
+ string was 1021 characters long or longer. Bugfix on 0.1.1.9-alpha;
+ fixes part of bug 3407.
+ - Make send_control_event_impl()'s behaviour sane. Its callers
+ expect it to always emit a CRLF at the end of the string; it
+ might have emitted extra control characters as well. Bugfix on
+ 0.1.1.9-alpha; fixes another part of bug 3407.
+ - Make crypto_rand_int() check the value of its input correctly.
+ Previously, it accepted values up to UINT_MAX, but could return a
+ negative number if given a value above INT_MAX+1. Found by George
+ Kadianakis. Fixes bug 3306; bugfix on 0.2.2pre14.
+ - Avoid a segfault when reading a malformed circuit build state
+ with more than INT_MAX entries. Found by wanoskarnet. Bugfix on
+ 0.2.2.4-alpha.
+ - When asked about a DNS record type we don't support via a
+ client DNSPort, reply with NOTIMPL rather than an empty
+ reply. Patch by intrigeri. Fixes bug 3369; bugfix on 2.0.1-alpha.
+ - Fix a rare memory leak during stats writing. Found by coverity.
+
+ o Minor features:
+ - Update to the June 1 2011 Maxmind GeoLite Country database.
o Code simplifications and refactoring:
- - A major revision to our internal node-selecting and listing logic.
- Tor already had at least two major ways to look at the question of
- "which Tor servers do we know about": a list of router descriptors,
- and a list of entries in the current consensus. With
- microdescriptors, we're adding a third. Having so many systems
- without an abstraction layer over them was hurting the codebase.
- Now, we have a new "node_t" abstraction that presents a consistent
- interface to a client's view of a Tor node, and holds (nearly) all
- of the mutable state formerly in routerinfo_t and routerstatus_t.
- - The helper programs tor-gencert, tor-resolve, and tor-checkkey
- no longer link against Libevent: they never used it, but
- our library structure used to force them to link it.
+ - Remove some dead code as indicated by coverity.
+ - Remove a few dead assignments during router parsing. Found by
+ coverity.
+ - Add some forgotten return value checks during unit tests. Found
+ by coverity.
+ - Don't use 1-bit wide signed bit fields. Found by coverity.
+
+
+Changes in version 0.2.2.28-beta - 2011-06-04
+ Tor 0.2.2.28-beta makes great progress towards a new stable release: we
+ fixed a big bug in whether relays stay in the consensus consistently,
+ we moved closer to handling bridges and hidden services correctly,
+ and we started the process of better handling the dreaded "my Vidalia
+ died, and now my Tor demands a password when I try to reconnect to it"
+ usability issue.
- o Removed features:
- - Remove some old code to work around even older versions of Tor that
- used forked processes to handle DNS requests. Such versions of Tor
- are no longer in use as servers.
+ o Major bugfixes:
+ - Don't decide to make a new descriptor when receiving a HUP signal.
+ This bug has caused a lot of 0.2.2.x relays to disappear from the
+ consensus periodically. Fixes the most common case of triggering
+ bug 1810; bugfix on 0.2.2.7-alpha.
+ - Actually allow nameservers with IPv6 addresses. Fixes bug 2574.
+ - Don't try to build descriptors if "ORPort auto" is set and we
+ don't know our actual ORPort yet. Fix for bug 3216; bugfix on
+ 0.2.2.26-beta.
+ - Resolve a crash that occurred when setting BridgeRelay to 1 with
+ accounting enabled. Fixes bug 3228; bugfix on 0.2.2.18-alpha.
+ - Apply circuit timeouts to opened hidden-service-related circuits
+ based on the correct start time. Previously, we would apply the
+ circuit build timeout based on time since the circuit's creation;
+ it was supposed to be applied based on time since the circuit
+ entered its current state. Bugfix on 0.0.6; fixes part of bug 1297.
+ - Use the same circuit timeout for client-side introduction
+ circuits as for other four-hop circuits, rather than the timeout
+ for single-hop directory-fetch circuits; the shorter timeout may
+ have been appropriate with the static circuit build timeout in
+ 0.2.1.x and earlier, but caused many hidden service access attempts
+ to fail with the adaptive CBT introduced in 0.2.2.2-alpha. Bugfix
+ on 0.2.2.2-alpha; fixes another part of bug 1297.
+ - In ticket 2511 we fixed a case where you could use an unconfigured
+ bridge if you had configured it as a bridge the last time you ran
+ Tor. Now fix another edge case: if you had configured it as a bridge
+ but then switched to a different bridge via the controller, you
+ would still be willing to use the old one. Bugfix on 0.2.0.1-alpha;
+ fixes bug 3321.
- o Documentation fixes:
- - Correct a broken faq link in the INSTALL file. Fixes bug 2307.
- - Add missing documentation for the authority-related torrc options
- RephistTrackTime, BridgePassword, and V3AuthUseLegacyKey. Resolves
- issue 2379.
+ o Major features:
+ - Add an __OwningControllerProcess configuration option and a
+ TAKEOWNERSHIP control-port command. Now a Tor controller can ensure
+ that when it exits, Tor will shut down. Implements feature 3049.
+ - If "UseBridges 1" is set and no bridges are configured, Tor will
+ now refuse to build any circuits until some bridges are set.
+ If "UseBridges auto" is set, Tor will use bridges if they are
+ configured and we are not running as a server, but otherwise will
+ make circuits as usual. The new default is "auto". Patch by anonym,
+ so the Tails LiveCD can stop automatically revealing you as a Tor
+ user on startup.
+
+ o Minor bugfixes:
+ - Fix warnings from GCC 4.6's "-Wunused-but-set-variable" option.
+ - Remove a trailing asterisk from "exit-policy/default" in the
+ output of the control port command "GETINFO info/names". Bugfix
+ on 0.1.2.5-alpha.
+ - Use a wide type to hold sockets when built for 64-bit Windows builds.
+ Fixes bug 3270.
+ - Warn when the user configures two HiddenServiceDir lines that point
+ to the same directory. Bugfix on 0.0.6 (the version introducing
+ HiddenServiceDir); fixes bug 3289.
+ - Remove dead code from rend_cache_lookup_v2_desc_as_dir. Fixes
+ part of bug 2748; bugfix on 0.2.0.10-alpha.
+ - Log malformed requests for rendezvous descriptors as protocol
+ warnings, not warnings. Also, use a more informative log message
+ in case someone sees it at log level warning without prior
+ info-level messages. Fixes the other part of bug 2748; bugfix
+ on 0.2.0.10-alpha.
+ - Clear the table recording the time of the last request for each
+ hidden service descriptor from each HS directory on SIGNAL NEWNYM.
+ Previously, we would clear our HS descriptor cache on SIGNAL
+ NEWNYM, but if we had previously retrieved a descriptor (or tried
+ to) from every directory responsible for it, we would refuse to
+ fetch it again for up to 15 minutes. Bugfix on 0.2.2.25-alpha;
+ fixes bug 3309.
+ - Fix a log message that said "bits" while displaying a value in
+ bytes. Found by wanoskarnet. Fixes bug 3318; bugfix on
+ 0.2.0.1-alpha.
+ - When checking for 1024-bit keys, check for 1024 bits, not 128
+ bytes. This allows Tor to correctly discard keys of length 1017
+ through 1023. Bugfix on 0.0.9pre5.
+
+ o Minor features:
+ - Relays now log the reason for publishing a new relay descriptor,
+ so we have a better chance of hunting down instances of bug 1810.
+ Resolves ticket 3252.
+ - Revise most log messages that refer to nodes by nickname to
+ instead use the "$key=nickname at address" format. This should be
+ more useful, especially since nicknames are less and less likely
+ to be unique. Resolves ticket 3045.
+ - Log (at info level) when purging pieces of hidden-service-client
+ state because of SIGNAL NEWNYM.
+
+ o Removed options:
+ - Remove undocumented option "-F" from tor-resolve: it hasn't done
+ anything since 0.2.1.16-rc.
Changes in version 0.2.2.27-beta - 2011-05-18
@@ -231,7 +1328,7 @@ Changes in version 0.2.2.26-beta - 2011-05-17
- Authorities now clean their microdesc cache periodically and when
reading from disk initially, not only when adding new descriptors.
This prevents a bug where we could lose microdescriptors. Bugfix
- on 0.2.2.6-alpha. 2230
+ on 0.2.2.6-alpha. Fixes bug 2230.
- 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
@@ -300,6 +1397,153 @@ Changes in version 0.2.2.26-beta - 2011-05-17
bug 3022.
+Changes in version 0.2.3.1-alpha - 2011-05-05
+ Tor 0.2.3.1-alpha adds some new experimental features, including support
+ for an improved network IO backend, IOCP networking on Windows,
+ microdescriptor caching, "fast-start" support for streams, and automatic
+ home router configuration. There are also numerous internal improvements
+ to try to make the code easier for developers to work with.
+
+ This is the first alpha release in a new series, so expect there to be
+ bugs. Users who would rather test out a more stable branch should
+ stay with 0.2.2.x for now.
+
+ o Major features:
+ - Tor can now optionally build with the "bufferevents" buffered IO
+ backend provided by Libevent 2. To use this feature, make sure you
+ have the latest possible version of Libevent, and pass the
+ --enable-bufferevents flag to configure when building Tor from
+ source. This feature will make our networking code more flexible,
+ let us stack layers on each other, and let us use more efficient
+ zero-copy transports where available.
+ - As an experimental feature, Tor can use IOCP for networking on Windows.
+ Once this code is tuned and optimized, it promises much better
+ performance than the select-based backend we've used in the past. To
+ try this feature, you must build Tor with Libevent 2, configure Tor
+ with the "bufferevents" buffered IO backend, and add "DisableIOCP 0" to
+ your torrc. There are known bugs here: only try this if you can help
+ debug it as it breaks.
+ - The EntryNodes option can now include country codes like {de} or IP
+ addresses or network masks. Previously we had disallowed these options
+ because we didn't have an efficient way to keep the list up to
+ date. Fixes bug 1982, but see bug 2798 for an unresolved issue here.
+ - Exit nodes now accept and queue data on not-yet-connected streams.
+ Previously, the client wasn't allowed to send data until the stream was
+ connected, which slowed down all connections. This change will enable
+ clients to perform a "fast-start" on streams and send data without
+ having to wait for a confirmation that the stream has opened. (Patch
+ from Ian Goldberg; implements the server side of Proposal 174.)
+ - Tor now has initial support for automatic port mapping on the many
+ home routers that support NAT-PMP or UPnP. (Not yet supported on
+ Windows). To build the support code, you'll need to have libnatpnp
+ library and/or the libminiupnpc library, and you'll need to enable the
+ feature specifically by passing "--enable-upnp" and/or
+ "--enable-natpnp" to configure. To turn it on, use the new
+ PortForwarding option.
+ - Caches now download, cache, and serve multiple "flavors" of the
+ consensus, including a flavor that describes microdescriptors.
+ - Caches now download, cache, and serve microdescriptors -- small
+ summaries of router descriptors that are authenticated by all of the
+ directory authorities. Once enough caches are running this code,
+ clients will be able to save significant amounts of directory bandwidth
+ by downloading microdescriptors instead of router descriptors.
+
+ o Minor features:
+ - Make logging resolution configurable with a new LogTimeGranularity
+ option, and change the default from 1 millisecond to 1 second.
+ Implements enhancement 1668.
+ - We log which torrc file we're using on startup. Implements ticket
+ 2444.
+ - Ordinarily, Tor does not count traffic from private addresses (like
+ 127.0.0.1 or 10.0.0.1) when calculating rate limits or accounting.
+ There is now a new option, CountPrivateBandwidth, to disable this
+ behavior. Patch from Daniel Cagara.
+ - New --enable-static-tor configure option for building Tor as
+ statically as possible. Idea, general hackery and thoughts from
+ Alexei Czeskis, John Gilmore, Jacob Appelbaum. Implements ticket
+ 2702.
+ - If you set the NumCPUs option to 0, Tor will now try to detect how
+ many CPUs you have. This is the new default behavior.
+ - Turn on directory request statistics by default and include them in
+ extra-info descriptors. Don't break if we have no GeoIP database.
+ - Relays that set "ConnDirectionStatistics 1" write statistics on the
+ bidirectional use of connections to disk every 24 hours.
+ - Add a GeoIP file digest to the extra-info descriptor. Implements
+ enhancement 1883.
+ - The NodeFamily option -- which let you declare that you want to
+ consider nodes to be part of a family whether they list themselves
+ that way or not -- now allows IP address ranges and country codes.
+ - Add a new 'Heartbeat' log message type to periodically log a message
+ describing Tor's status at level Notice. This feature is meant for
+ operators who log at notice, and want to make sure that their Tor
+ server is still working. Implementation by George Kadianakis.
+
+ o Minor bugfixes (on 0.2.2.25-alpha):
+ - When loading the microdesc journal, remember its current size.
+ In 0.2.2, this helps prevent the microdesc journal from growing
+ without limit on authorities (who are the only ones to use it in
+ 0.2.2). Fixes a part of bug 2230; bugfix on 0.2.2.6-alpha.
+ Fix posted by "cypherpunks."
+ - The microdesc journal is supposed to get rebuilt only if it is
+ at least _half_ the length of the store, not _twice_ the length
+ of the store. Bugfix on 0.2.2.6-alpha; fixes part of bug 2230.
+ - If as an authority we fail to compute the identity digest of a v3
+ legacy keypair, warn, and don't use a buffer-full of junk instead.
+ Bugfix on 0.2.1.1-alpha; fixes bug 3106.
+ - Authorities now clean their microdesc cache periodically and when
+ reading from disk initially, not only when adding new descriptors.
+ This prevents a bug where we could lose microdescriptors. Bugfix
+ on 0.2.2.6-alpha.
+
+ o Minor features (controller):
+ - Add a new SIGNAL event to the controller interface so that
+ controllers can be notified when Tor handles a signal. Resolves
+ issue 1955. Patch by John Brooks.
+ - Add a new GETINFO option to get total bytes read and written. Patch
+ from pipe, revised by atagar. Resolves ticket 2345.
+ - Implement some GETINFO controller fields to provide information about
+ the Tor process's pid, euid, username, and resource limits.
+
+ o Build changes:
+ - Our build system requires automake 1.6 or later to create the
+ Makefile.in files. Previously, you could have used 1.4.
+ This only affects developers and people building Tor from git;
+ people who build Tor from the source distribution without changing
+ the Makefile.am files should be fine.
+ - Our autogen.sh script uses autoreconf to launch autoconf, automake, and
+ so on. This is more robust against some of the failure modes
+ associated with running the autotools pieces on their own.
+
+ o Minor packaging issues:
+ - On OpenSUSE, create the /var/run/tor directory on startup if it is not
+ already created. Patch from Andreas Stieger. Fixes bug 2573.
+
+ o Code simplifications and refactoring:
+ - A major revision to our internal node-selecting and listing logic.
+ Tor already had at least two major ways to look at the question of
+ "which Tor servers do we know about": a list of router descriptors,
+ and a list of entries in the current consensus. With
+ microdescriptors, we're adding a third. Having so many systems
+ without an abstraction layer over them was hurting the codebase.
+ Now, we have a new "node_t" abstraction that presents a consistent
+ interface to a client's view of a Tor node, and holds (nearly) all
+ of the mutable state formerly in routerinfo_t and routerstatus_t.
+ - The helper programs tor-gencert, tor-resolve, and tor-checkkey
+ no longer link against Libevent: they never used it, but
+ our library structure used to force them to link it.
+
+ o Removed features:
+ - Remove some old code to work around even older versions of Tor that
+ used forked processes to handle DNS requests. Such versions of Tor
+ are no longer in use as servers.
+
+ o Documentation fixes:
+ - Correct a broken faq link in the INSTALL file. Fixes bug 2307.
+ - Add missing documentation for the authority-related torrc options
+ RephistTrackTime, BridgePassword, and V3AuthUseLegacyKey. Resolves
+ issue 2379.
+
+
Changes in version 0.2.2.25-alpha - 2011-04-29
Tor 0.2.2.25-alpha fixes many bugs: hidden service clients are more
robust, routers no longer overreport their bandwidth, Win7 should crash
@@ -549,7 +1793,7 @@ Changes in version 0.2.2.24-alpha - 2011-04-08
- Directory authorities now log the source of a rejected POSTed v3
networkstatus vote.
- Make compilation with clang possible when using
- --enable-gcc-warnings by removing two warning optionss that clang
+ --enable-gcc-warnings by removing two warning options that clang
hasn't implemented yet and by fixing a few warnings. Implements
ticket 2696.
- When expiring circuits, use microsecond timers rather than
@@ -712,6 +1956,57 @@ Changes in version 0.2.2.23-alpha - 2011-03-08
git://git.torproject.org/torspec.git
+Changes in version 0.2.1.30 - 2011-02-23
+ Tor 0.2.1.30 fixes a variety of less critical bugs. The main other
+ change is a slight tweak to Tor's TLS handshake that makes relays
+ and bridges that run this new version reachable from Iran again.
+ We don't expect this tweak will win the arms race long-term, but it
+ buys us time until we roll out a better solution.
+
+ o Major bugfixes:
+ - Stop sending a CLOCK_SKEW controller status event whenever
+ we fetch directory information from a relay that has a wrong clock.
+ Instead, only inform the controller when it's a trusted authority
+ that claims our clock is wrong. Bugfix on 0.1.2.6-alpha; fixes
+ the rest of bug 1074.
+ - Fix a bounds-checking error that could allow an attacker to
+ remotely crash a directory authority. Bugfix on 0.2.1.5-alpha.
+ Found by "piebeer".
+ - If relays set RelayBandwidthBurst but not RelayBandwidthRate,
+ Tor would ignore their RelayBandwidthBurst setting,
+ potentially using more bandwidth than expected. Bugfix on
+ 0.2.0.1-alpha. Reported by Paul Wouters. Fixes bug 2470.
+ - Ignore and warn if the user mistakenly sets "PublishServerDescriptor
+ hidserv" in her torrc. The 'hidserv' argument never controlled
+ publication of hidden service descriptors. Bugfix on 0.2.0.1-alpha.
+
+ o Minor features:
+ - Adjust our TLS Diffie-Hellman parameters to match those used by
+ Apache's mod_ssl.
+ - Update to the February 1 2011 Maxmind GeoLite Country database.
+
+ o Minor bugfixes:
+ - Check for and reject overly long directory certificates and
+ directory tokens before they have a chance to hit any assertions.
+ Bugfix on 0.2.1.28. Found by "doorss".
+ - Bring the logic that gathers routerinfos and assesses the
+ acceptability of circuits into line. This prevents a Tor OP from
+ getting locked in a cycle of choosing its local OR as an exit for a
+ path (due to a .exit request) and then rejecting the circuit because
+ its OR is not listed yet. It also prevents Tor clients from using an
+ OR running in the same instance as an exit (due to a .exit request)
+ if the OR does not meet the same requirements expected of an OR
+ running elsewhere. Fixes bug 1859; bugfix on 0.1.0.1-rc.
+
+ o Packaging changes:
+ - Stop shipping the Tor specs files and development proposal documents
+ in the tarball. They are now in a separate git repository at
+ git://git.torproject.org/torspec.git
+ - Do not include Git version tags as though they are SVN tags when
+ generating a tarball from inside a repository that has switched
+ between branches. Bugfix on 0.2.1.15-rc; fixes bug 2402.
+
+
Changes in version 0.2.2.22-alpha - 2011-01-25
Tor 0.2.2.22-alpha fixes a few more less-critical security issues. The
main other change is a slight tweak to Tor's TLS handshake that makes
@@ -1608,9 +2903,10 @@ Changes in version 0.2.2.14-alpha - 2010-07-12
o Minor features:
- New config option "WarnUnsafeSocks 0" disables the warning that
- occurs whenever Tor receives only an IP address instead of a
- hostname. Setups that do DNS locally over Tor are fine, and we
- shouldn't spam the logs in that case.
+ occurs whenever Tor receives a socks handshake using a version of
+ the socks protocol that can only provide an IP address (rather
+ than a hostname). Setups that do DNS locally over Tor are fine,
+ and we shouldn't spam the logs in that case.
- Convert the HACKING file to asciidoc, and add a few new sections
to it, explaining how we use Git, how we make changelogs, and
what should go in a patch.
@@ -2372,8 +3668,9 @@ Changes in version 0.2.2.5-alpha - 2009-10-11
o Major bugfixes:
- Make the tarball compile again. Oops. Bugfix on 0.2.2.4-alpha.
- o New directory authorities:
- - Move dizum to an alternate IP address.
+ o Directory authorities:
+ - Temporarily (just for this release) move dizum to an alternate
+ IP address.
Changes in version 0.2.2.4-alpha - 2009-10-10
@@ -2543,8 +3840,8 @@ Changes in version 0.2.2.1-alpha - 2009-08-26
oldest-bug prize.
o New options for gathering stats safely:
- - Directories that set "DirReqStatistics 1" write statistics on
- directory request to disk every 24 hours. As compared to the
+ - Directory mirrors that set "DirReqStatistics 1" write statistics
+ about directory requests to disk every 24 hours. As compared to the
--enable-geoip-stats flag in 0.2.1.x, there are a few improvements:
1) stats are written to disk exactly every 24 hours; 2) estimated
shares of v2 and v3 requests are determined as mean values, not at
@@ -2582,9 +3879,9 @@ Changes in version 0.2.2.1-alpha - 2009-08-26
the git commit (when we're building from a git checkout).
o Minor bugfixes:
- - If any the v3 certs we download are unparseable, we should actually
- notice the failure so we don't retry indefinitely. Bugfix on
- 0.2.0.x; reported by "rotator".
+ - If any of the v3 certs we download are unparseable, we should
+ actually notice the failure so we don't retry indefinitely. Bugfix
+ on 0.2.0.x; reported by "rotator".
- If the cached cert file is unparseable, warn but don't exit.
- Fix possible segmentation fault on directory authorities. Bugfix on
0.2.1.14-rc.
diff --git a/Makefile.am b/Makefile.am
index 0daca63e9..cd0d8833c 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -15,6 +15,7 @@ EXTRA_DIST = \
ChangeLog \
INSTALL \
LICENSE \
+ Makefile.nmake \
README \
ReleaseNotes \
tor.spec \
diff --git a/Makefile.nmake b/Makefile.nmake
new file mode 100644
index 000000000..425f1ec26
--- /dev/null
+++ b/Makefile.nmake
@@ -0,0 +1,5 @@
+all:
+ cd src/common
+ $(MAKE) /F Makefile.nmake
+ cd ../../src/or
+ $(MAKE) /F Makefile.nmake
diff --git a/ReleaseNotes b/ReleaseNotes
index 7ba473e90..cbc8f0ef3 100644
--- a/ReleaseNotes
+++ b/ReleaseNotes
@@ -3,6 +3,1498 @@ 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,
+ a founder of the PETS community, a leader in our field, a mentor,
+ and a friend. He left us with these words: "I had the possibility
+ to contribute to this world that is not as it should be. I hope I
+ could help in some areas to make the world a better place, and that
+ I could also encourage other people to be engaged in improving the
+ world. Please, stay engaged. This world needs you, your love, your
+ initiative -- now I cannot be part of that anymore."
+
+ Tor 0.2.2.32, the first stable release in the 0.2.2 branch, is finally
+ ready. More than two years in the making, this release features improved
+ client performance and hidden service reliability, better compatibility
+ for Android, correct behavior for bridges that listen on more than
+ one address, more extensible and flexible directory object handling,
+ better reporting of network statistics, improved code security, and
+ many many other features and bugfixes.
+
+ o Major features (client performance):
+ - When choosing which cells to relay first, relays now favor circuits
+ that have been quiet recently, to provide lower latency for
+ low-volume circuits. By default, relays enable or disable this
+ feature based on a setting in the consensus. They can override
+ this default by using the new "CircuitPriorityHalflife" config
+ option. Design and code by Ian Goldberg, Can Tang, and Chris
+ Alexander.
+ - Directory authorities now compute consensus weightings that instruct
+ clients how to weight relays flagged as Guard, Exit, Guard+Exit,
+ and no flag. Clients use these weightings to distribute network load
+ more evenly across these different relay types. The weightings are
+ in the consensus so we can change them globally in the future. Extra
+ thanks to "outofwords" for finding some nasty security bugs in
+ the first implementation of this feature.
+
+ o Major features (client performance, circuit build timeout):
+ - Tor now tracks how long it takes to build client-side circuits
+ over time, and adapts its timeout to local network performance.
+ Since a circuit that takes a long time to build will also provide
+ bad performance, we get significant latency improvements by
+ discarding the slowest 20% of circuits. Specifically, Tor creates
+ circuits more aggressively than usual until it has enough data
+ points for a good timeout estimate. Implements proposal 151.
+ - Circuit build timeout constants can be controlled by consensus
+ parameters. We set good defaults for these parameters based on
+ experimentation on broadband and simulated high-latency links.
+ - Circuit build time learning can be disabled via consensus parameter
+ or by the client via a LearnCircuitBuildTimeout config option. We
+ also automatically disable circuit build time calculation if either
+ AuthoritativeDirectory is set, or if we fail to write our state
+ file. Implements ticket 1296.
+
+ o Major features (relays use their capacity better):
+ - Set SO_REUSEADDR socket option on all sockets, not just
+ listeners. This should help busy exit nodes avoid running out of
+ useable ports just because all the ports have been used in the
+ near past. Resolves issue 2850.
+ - Relays now save observed peak bandwidth throughput rates to their
+ state file (along with total usage, which was already saved),
+ so that they can determine their correct estimated bandwidth on
+ restart. Resolves bug 1863, where Tor relays would reset their
+ estimated bandwidth to 0 after restarting.
+ - Lower the maximum weighted-fractional-uptime cutoff to 98%. This
+ should give us approximately 40-50% more Guard-flagged nodes,
+ improving the anonymity the Tor network can provide and also
+ decreasing the dropoff in throughput that relays experience when
+ they first get the Guard flag.
+ - Directory authorities now take changes in router IP address and
+ ORPort into account when determining router stability. Previously,
+ if a router changed its IP or ORPort, the authorities would not
+ treat it as having any downtime for the purposes of stability
+ calculation, whereas clients would experience downtime since the
+ change would take a while to propagate to them. Resolves issue 1035.
+ - New AccelName and AccelDir options add support for dynamic OpenSSL
+ hardware crypto acceleration engines.
+
+ o Major features (relays control their load better):
+ - Exit relays now try harder to block exit attempts from unknown
+ relays, to make it harder for people to use them as one-hop proxies
+ a la tortunnel. Controlled by the refuseunknownexits consensus
+ parameter (currently enabled), or you can override it on your
+ relay with the RefuseUnknownExits torrc option. Resolves bug 1751;
+ based on a variant of proposal 163.
+ - Add separate per-conn write limiting to go with the per-conn read
+ limiting. We added a global write limit in Tor 0.1.2.5-alpha,
+ but never per-conn write limits.
+ - New consensus params "bwconnrate" and "bwconnburst" to let us
+ rate-limit client connections as they enter the network. It's
+ controlled in the consensus so we can turn it on and off for
+ experiments. It's starting out off. Based on proposal 163.
+
+ o Major features (controllers):
+ - Export GeoIP information on bridge usage to controllers even if we
+ have not yet been running for 24 hours. Now Vidalia bridge operators
+ can get more accurate and immediate feedback about their
+ contributions to the network.
+ - Add an __OwningControllerProcess configuration option and a
+ TAKEOWNERSHIP control-port command. Now a Tor controller can ensure
+ that when it exits, Tor will shut down. Implements feature 3049.
+
+ o Major features (directory authorities):
+ - Directory authorities now create, vote on, and serve multiple
+ parallel formats of directory data as part of their voting process.
+ Partially implements Proposal 162: "Publish the consensus in
+ multiple flavors".
+ - Directory authorities now agree on and publish small summaries
+ of router information that clients can use in place of regular
+ server descriptors. This transition will allow Tor 0.2.3 clients
+ to use far less bandwidth for downloading information about the
+ network. Begins the implementation of Proposal 158: "Clients
+ download consensus + microdescriptors".
+ - The directory voting system is now extensible to use multiple hash
+ algorithms for signatures and resource selection. Newer formats
+ are signed with SHA256, with a possibility for moving to a better
+ hash algorithm in the future.
+ - Directory authorities can now vote on arbitary integer values as
+ part of the consensus process. This is designed to help set
+ network-wide parameters. Implements proposal 167.
+
+ o Major features and bugfixes (node selection):
+ - Revise and reconcile the meaning of the ExitNodes, EntryNodes,
+ ExcludeEntryNodes, ExcludeExitNodes, ExcludeNodes, and Strict*Nodes
+ options. Previously, we had been ambiguous in describing what
+ counted as an "exit" node, and what operations exactly "StrictNodes
+ 0" would permit. This created confusion when people saw nodes built
+ through unexpected circuits, and made it hard to tell real bugs from
+ surprises. Now the intended behavior is:
+ . "Exit", in the context of ExitNodes and ExcludeExitNodes, means
+ a node that delivers user traffic outside the Tor network.
+ . "Entry", in the context of EntryNodes, means a node used as the
+ first hop of a multihop circuit. It doesn't include direct
+ connections to directory servers.
+ . "ExcludeNodes" applies to all nodes.
+ . "StrictNodes" changes the behavior of ExcludeNodes only. When
+ StrictNodes is set, Tor should avoid all nodes listed in
+ ExcludeNodes, even when it will make user requests fail. When
+ StrictNodes is *not* set, then Tor should follow ExcludeNodes
+ whenever it can, except when it must use an excluded node to
+ perform self-tests, connect to a hidden service, provide a
+ hidden service, fulfill a .exit request, upload directory
+ information, or fetch directory information.
+ Collectively, the changes to implement the behavior fix bug 1090.
+ - If EntryNodes, ExitNodes, ExcludeNodes, or ExcludeExitNodes
+ change during a config reload, mark and discard all our origin
+ circuits. This fix should address edge cases where we change the
+ config options and but then choose a circuit that we created before
+ the change.
+ - Make EntryNodes config option much more aggressive even when
+ StrictNodes is not set. Before it would prepend your requested
+ entrynodes to your list of guard nodes, but feel free to use others
+ after that. Now it chooses only from your EntryNodes if any of
+ those are available, and only falls back to others if a) they're
+ all down and b) StrictNodes is not set.
+ - Now we refresh your entry guards from EntryNodes at each consensus
+ fetch -- rather than just at startup and then they slowly rot as
+ the network changes.
+ - Add support for the country code "{??}" in torrc options like
+ ExcludeNodes, to indicate all routers of unknown country. Closes
+ bug 1094.
+ - ExcludeNodes now takes precedence over EntryNodes and ExitNodes: if
+ a node is listed in both, it's treated as excluded.
+ - ExcludeNodes now applies to directory nodes -- as a preference if
+ StrictNodes is 0, or an absolute requirement if StrictNodes is 1.
+ Don't exclude all the directory authorities and set StrictNodes to 1
+ unless you really want your Tor to break.
+ - ExcludeNodes and ExcludeExitNodes now override exit enclaving.
+ - ExcludeExitNodes now overrides .exit requests.
+ - We don't use bridges listed in ExcludeNodes.
+ - When StrictNodes is 1:
+ . We now apply ExcludeNodes to hidden service introduction points
+ and to rendezvous points selected by hidden service users. This
+ can make your hidden service less reliable: use it with caution!
+ . If we have used ExcludeNodes on ourself, do not try relay
+ reachability self-tests.
+ . If we have excluded all the directory authorities, we will not
+ even try to upload our descriptor if we're a relay.
+ . Do not honor .exit requests to an excluded node.
+ - When the set of permitted nodes changes, we now remove any mappings
+ introduced via TrackExitHosts to now-excluded nodes. Bugfix on
+ 0.1.0.1-rc.
+ - We never cannibalize a circuit that had excluded nodes on it, even
+ if StrictNodes is 0. Bugfix on 0.1.0.1-rc.
+ - Improve log messages related to excluded nodes.
+
+ o Major features (misc):
+ - Numerous changes, bugfixes, and workarounds from Nathan Freitas
+ to help Tor build correctly for Android phones.
+ - The options SocksPort, ControlPort, and so on now all accept a
+ value "auto" that opens a socket on an OS-selected port. A
+ new ControlPortWriteToFile option tells Tor to write its
+ actual control port or ports to a chosen file. If the option
+ ControlPortFileGroupReadable is set, the file is created as
+ group-readable. Now users can run two Tor clients on the same
+ system without needing to manually mess with parameters. Resolves
+ part of ticket 3076.
+ - Tor now supports tunneling all of its outgoing connections over
+ a SOCKS proxy, using the SOCKS4Proxy and/or SOCKS5Proxy
+ configuration options. Code by Christopher Davis.
+
+ o Code security improvements:
+ - 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.)
+ - Enable Address Space Layout Randomization (ASLR) and Data Execution
+ Prevention (DEP) by default on Windows to make it harder for
+ attackers to exploit vulnerabilities. Patch from John Brooks.
+ - New "--enable-gcc-hardening" ./configure flag (off by default)
+ to turn on gcc compile time hardening options. It ensures
+ that signed ints have defined behavior (-fwrapv), enables
+ -D_FORTIFY_SOURCE=2 (requiring -O2), adds stack smashing protection
+ with canaries (-fstack-protector-all), turns on ASLR protection if
+ supported by the kernel (-fPIE, -pie), and adds additional security
+ related warnings. Verified to work on Mac OS X and Debian Lenny.
+ - New "--enable-linker-hardening" ./configure flag (off by default)
+ to turn on ELF specific hardening features (relro, now). This does
+ not work with Mac OS X or any other non-ELF binary format.
+ - Always search the Windows system directory for system DLLs, and
+ nowhere else. Bugfix on 0.1.1.23; fixes bug 1954.
+ - New DisableAllSwap option. If set to 1, Tor will attempt to lock all
+ current and future memory pages via mlockall(). On supported
+ platforms (modern Linux and probably BSD but not Windows or OS X),
+ this should effectively disable any and all attempts to page out
+ memory. This option requires that you start your Tor as root --
+ if you use DisableAllSwap, please consider using the User option
+ to properly reduce the privileges of your Tor.
+
+ o Major bugfixes (crashes):
+ - Fix crash bug on platforms where gmtime and localtime can return
+ NULL. Windows 7 users were running into this one. Fixes part of bug
+ 2077. Bugfix on all versions of Tor. Found by boboper.
+ - Introduce minimum/maximum values that clients will believe
+ from the consensus. Now we'll have a better chance to avoid crashes
+ or worse when a consensus param has a weird value.
+ - 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".
+ - 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.
+ - If we're in the pathological case where there's no exit bandwidth
+ but there is non-exit bandwidth, or no guard bandwidth but there
+ is non-guard bandwidth, don't crash during path selection. Bugfix
+ on 0.2.0.3-alpha.
+ - Fix a crash bug when trying to initialize the evdns module in
+ Libevent 2. Bugfix on 0.2.1.16-rc.
+
+ o Major bugfixes (stability):
+ - 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.
+ - Fix an uncommon assertion failure when running with DNSPort under
+ heavy load. Fixes bug 2933; bugfix on 0.2.0.1-alpha.
+ - Treat an unset $HOME like an empty $HOME rather than triggering an
+ assert. Bugfix on 0.0.8pre1; fixes bug 1522.
+ - More gracefully handle corrupt state files, removing asserts
+ in favor of saving a backup and resetting state.
+ - Instead of giving an assertion failure on an internal mismatch
+ on estimated freelist size, just log a BUG warning and try later.
+ Mitigates but does not fix bug 1125.
+ - Fix an assert that got triggered when using the TestingTorNetwork
+ configuration option and then issuing a GETINFO config-text control
+ command. Fixes bug 2250; bugfix on 0.2.1.2-alpha.
+ - If the cached cert file is unparseable, warn but don't exit.
+
+ o Privacy fixes (relays/bridges):
+ - Don't list Windows capabilities in relay descriptors. We never made
+ use of them, and maybe it's a bad idea to publish them. Bugfix
+ on 0.1.1.8-alpha.
+ - If the Nickname configuration option isn't given, Tor would pick a
+ nickname based on the local hostname as the nickname for a relay.
+ Because nicknames are not very important in today's Tor and the
+ "Unnamed" nickname has been implemented, this is now problematic
+ behavior: It leaks information about the hostname without being
+ useful at all. Fixes bug 2979; bugfix on 0.1.2.2-alpha, which
+ introduced the Unnamed nickname. Reported by tagnaq.
+ - Maintain separate TLS contexts and certificates for incoming and
+ outgoing connections in bridge relays. Previously we would use the
+ same TLS contexts and certs for incoming and outgoing connections.
+ Bugfix on 0.2.0.3-alpha; addresses bug 988.
+ - Maintain separate identity keys for incoming and outgoing TLS
+ contexts in bridge relays. Previously we would use the same
+ identity keys for incoming and outgoing TLS contexts. Bugfix on
+ 0.2.0.3-alpha; addresses the other half of bug 988.
+ - 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.
+
+ o Privacy fixes (clients):
+ - 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.
+ - Start the process of disabling ".exit" address notation, since it
+ can be used for a variety of esoteric application-level attacks
+ on users. To reenable it, set "AllowDotExit 1" in your torrc. Fix
+ on 0.0.9rc5.
+ - Reject attempts at the client side to open connections to private
+ IP addresses (like 127.0.0.1, 10.0.0.1, and so on) with
+ a randomly chosen exit node. Attempts to do so are always
+ ill-defined, generally prevented by exit policies, and usually
+ in error. This will also help to detect loops in transparent
+ proxy configurations. You can disable this feature by setting
+ "ClientRejectInternalAddresses 0" in your torrc.
+ - Log a notice when we get a new control connection. Now it's easier
+ for security-conscious users to recognize when a local application
+ is knocking on their controller door. Suggested by bug 1196.
+
+ o Privacy fixes (newnym):
+ - 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.
+ - On SIGHUP, do not clear out all TrackHostExits mappings, client
+ DNS cache entries, and virtual address mappings: that's what
+ NEWNYM is for. Fixes bug 1345; bugfix on 0.1.0.1-rc.
+ - 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 Major bugfixes (relay bandwidth accounting):
+ - Fix a bug that could break accounting on 64-bit systems with large
+ time_t values, making them hibernate for impossibly long intervals.
+ Fixes bug 2146. Bugfix on 0.0.9pre6; fix by boboper.
+ - Fix a bug in bandwidth accounting that could make us use twice
+ the intended bandwidth when our interval start changes due to
+ daylight saving time. Now we tolerate skew in stored vs computed
+ interval starts: if the start of the period changes by no more than
+ 50% of the period's duration, we remember bytes that we transferred
+ in the old period. Fixes bug 1511; bugfix on 0.0.9pre5.
+
+ o Major bugfixes (bridges):
+ - Bridges now use "reject *:*" as their default exit policy. Bugfix
+ on 0.2.0.3-alpha. Fixes bug 1113.
+ - If you configure your bridge with a known identity fingerprint,
+ and the bridge authority is unreachable (as it is in at least
+ one country now), fall back to directly requesting the descriptor
+ from the bridge. Finishes the feature started in 0.2.0.10-alpha;
+ closes bug 1138.
+ - Fix a bug where bridge users who configure the non-canonical
+ address of a bridge automatically switch to its canonical
+ address. If a bridge listens at more than one address, it
+ should be able to advertise those addresses independently and
+ any non-blocked addresses should continue to work. Bugfix on Tor
+ 0.2.0.3-alpha. Fixes bug 2510.
+ - If you configure Tor to use bridge A, and then quit and
+ configure Tor to use bridge B instead (or if you change Tor
+ to use bridge B via the controller), it would happily continue
+ to use bridge A if it's still reachable. While this behavior is
+ a feature if your goal is connectivity, in some scenarios it's a
+ dangerous bug. Bugfix on Tor 0.2.0.1-alpha; fixes bug 2511.
+ - When the controller configures a new bridge, don't wait 10 to 60
+ seconds before trying to fetch its descriptor. Bugfix on
+ 0.2.0.3-alpha; fixes bug 3198 (suggested by 2355).
+
+ o Major bugfixes (directory authorities):
+ - Many relays have been falling out of the consensus lately because
+ not enough authorities know about their descriptor for them to get
+ a majority of votes. When we deprecated the v2 directory protocol,
+ we got rid of the only way that v3 authorities can hear from each
+ other about other descriptors. Now authorities examine every v3
+ vote for new descriptors, and fetch them from that authority. Bugfix
+ on 0.2.1.23.
+ - Authorities could be tricked into giving out the Exit flag to relays
+ that didn't allow exiting to any ports. This bug could screw
+ with load balancing and stats. Bugfix on 0.1.1.6-alpha; fixes bug
+ 1238. Bug discovered by Martin Kowalczyk.
+ - If all authorities restart at once right before a consensus vote,
+ nobody will vote about "Running", and clients will get a consensus
+ with no usable relays. Instead, authorities refuse to build a
+ consensus if this happens. Bugfix on 0.2.0.10-alpha; fixes bug 1066.
+
+ o Major bugfixes (stream-level fairness):
+ - When receiving a circuit-level SENDME for a blocked circuit, try
+ to package cells fairly from all the streams that had previously
+ been blocked on that circuit. Previously, we had started with the
+ oldest stream, and allowed each stream to potentially exhaust
+ the circuit's package window. This gave older streams on any
+ given circuit priority over newer ones. Fixes bug 1937. Detected
+ originally by Camilo Viecco. This bug was introduced before the
+ first Tor release, in svn commit r152: it is the new winner of
+ the longest-lived bug prize.
+ - Fix a stream fairness bug that would cause newer streams on a given
+ circuit to get preference when reading bytes from the origin or
+ destination. Fixes bug 2210. Fix by Mashael AlSabah. This bug was
+ introduced before the first Tor release, in svn revision r152.
+ - When the exit relay got a circuit-level sendme cell, it started
+ reading on the exit streams, even if had 500 cells queued in the
+ circuit queue already, so the circuit queue just grew and grew in
+ some cases. We fix this by not re-enabling reading on receipt of a
+ sendme cell when the cell queue is blocked. Fixes bug 1653. Bugfix
+ on 0.2.0.1-alpha. Detected by Mashael AlSabah. Original patch by
+ "yetonetime".
+ - Newly created streams were allowed to read cells onto circuits,
+ even if the circuit's cell queue was blocked and waiting to drain.
+ This created potential unfairness, as older streams would be
+ blocked, but newer streams would gladly fill the queue completely.
+ We add code to detect this situation and prevent any stream from
+ getting more than one free cell. Bugfix on 0.2.0.1-alpha. Partially
+ fixes bug 1298.
+
+ o Major bugfixes (hidden services):
+ - Apply circuit timeouts to opened hidden-service-related circuits
+ based on the correct start time. Previously, we would apply the
+ circuit build timeout based on time since the circuit's creation;
+ it was supposed to be applied based on time since the circuit
+ entered its current state. Bugfix on 0.0.6; fixes part of bug 1297.
+ - Improve hidden service robustness: When we find that we have
+ extended a hidden service's introduction circuit to a relay not
+ listed as an introduction point in the HS descriptor we currently
+ have, retry with an introduction point from the current
+ descriptor. Previously we would just give up. Fixes bugs 1024 and
+ 1930; bugfix on 0.2.0.10-alpha.
+ - Directory authorities now use data collected from their own
+ uptime observations when choosing whether to assign the HSDir flag
+ to relays, instead of trusting the uptime value the relay reports in
+ its descriptor. This change helps prevent an attack where a small
+ set of nodes with frequently-changing identity keys can blackhole
+ a hidden service. (Only authorities need upgrade; others will be
+ fine once they do.) Bugfix on 0.2.0.10-alpha; fixes bug 2709.
+ - Stop assigning the HSDir flag to relays that disable their
+ DirPort (and thus will refuse to answer directory requests). This
+ fix should dramatically improve the reachability of hidden services:
+ hidden services and hidden service clients pick six HSDir relays
+ to store and retrieve the hidden service descriptor, and currently
+ about half of the HSDir relays will refuse to work. Bugfix on
+ 0.2.0.10-alpha; fixes part of bug 1693.
+
+ o Major bugfixes (misc):
+ - Clients now stop trying to use an exit node associated with a given
+ destination by TrackHostExits if they fail to reach that exit node.
+ Fixes bug 2999. Bugfix on 0.2.0.20-rc.
+ - Fix a regression that caused Tor to rebind its ports if it receives
+ SIGHUP while hibernating. Bugfix in 0.1.1.6-alpha; closes bug 919.
+ - Remove an extra pair of quotation marks around the error
+ message in control-port STATUS_GENERAL BUG events. Bugfix on
+ 0.1.2.6-alpha; fixes bug 3732.
+
+ o Minor features (relays):
+ - Ensure that no empty [dirreq-](read|write)-history lines are added
+ to an extrainfo document. Implements ticket 2497.
+ - When bandwidth accounting is enabled, be more generous with how
+ much bandwidth we'll use up before entering "soft hibernation".
+ Previously, we'd refuse new connections and circuits once we'd
+ used up 95% of our allotment. Now, we use up 95% of our allotment,
+ AND make sure that we have no more than 500MB (or 3 hours of
+ expected traffic, whichever is lower) remaining before we enter
+ soft hibernation.
+ - Relays now log the reason for publishing a new relay descriptor,
+ so we have a better chance of hunting down instances of bug 1810.
+ Resolves ticket 3252.
+ - Log a little more clearly about the times at which we're no longer
+ accepting new connections (e.g. due to hibernating). Resolves
+ bug 2181.
+ - When AllowSingleHopExits is set, print a warning to explain to the
+ relay operator why most clients are avoiding her relay.
+ - Send END_STREAM_REASON_NOROUTE in response to EHOSTUNREACH errors.
+ Clients before 0.2.1.27 didn't handle NOROUTE correctly, but such
+ clients are already deprecated because of security bugs.
+
+ o Minor features (network statistics):
+ - Directory mirrors that set "DirReqStatistics 1" write statistics
+ about directory requests to disk every 24 hours. As compared to the
+ "--enable-geoip-stats" ./configure flag in 0.2.1.x, there are a few
+ improvements: 1) stats are written to disk exactly every 24 hours;
+ 2) estimated shares of v2 and v3 requests are determined as mean
+ values, not at the end of a measurement period; 3) unresolved
+ requests are listed with country code '??'; 4) directories also
+ measure download times.
+ - Exit nodes that set "ExitPortStatistics 1" write statistics on the
+ number of exit streams and transferred bytes per port to disk every
+ 24 hours.
+ - Relays that set "CellStatistics 1" write statistics on how long
+ cells spend in their circuit queues to disk every 24 hours.
+ - Entry nodes that set "EntryStatistics 1" write statistics on the
+ rough number and origins of connecting clients to disk every 24
+ hours.
+ - Relays that write any of the above statistics to disk and set
+ "ExtraInfoStatistics 1" include the past 24 hours of statistics in
+ their extra-info documents. Implements proposal 166.
+
+ o Minor features (GeoIP and statistics):
+ - Provide a log message stating which geoip file we're parsing
+ instead of just stating that we're parsing the geoip file.
+ Implements ticket 2432.
+ - Make sure every relay writes a state file at least every 12 hours.
+ Previously, a relay could go for weeks without writing its state
+ file, and on a crash could lose its bandwidth history, capacity
+ estimates, client country statistics, and so on. Addresses bug 3012.
+ - Relays report the number of bytes spent on answering directory
+ requests in extra-info descriptors similar to {read,write}-history.
+ Implements enhancement 1790.
+ - Report only the top 10 ports in exit-port stats in order not to
+ exceed the maximum extra-info descriptor length of 50 KB. Implements
+ task 2196.
+ - If writing the state file to disk fails, wait up to an hour before
+ retrying again, rather than trying again each second. Fixes bug
+ 2346; bugfix on Tor 0.1.1.3-alpha.
+ - Delay geoip stats collection by bridges for 6 hours, not 2 hours,
+ when we switch from being a public relay to a bridge. Otherwise
+ there will still be clients that see the relay in their consensus,
+ and the stats will end up wrong. Bugfix on 0.2.1.15-rc; fixes
+ bug 932.
+ - Update to the August 2 2011 Maxmind GeoLite Country database.
+
+ o Minor features (clients):
+ - When expiring circuits, use microsecond timers rather than
+ one-second timers. This can avoid an unpleasant situation where a
+ circuit is launched near the end of one second and expired right
+ near the beginning of the next, and prevent fluctuations in circuit
+ timeout values.
+ - If we've configured EntryNodes and our network goes away and/or all
+ our entrynodes get marked down, optimistically retry them all when
+ a new socks application request appears. Fixes bug 1882.
+ - Always perform router selections using weighted relay bandwidth,
+ even if we don't need a high capacity circuit at the time. Non-fast
+ circuits now only differ from fast ones in that they can use relays
+ not marked with the Fast flag. This "feature" could turn out to
+ be a horrible bug; we should investigate more before it goes into
+ a stable release.
+ - When we run out of directory information such that we can't build
+ circuits, but then get enough that we can build circuits, log when
+ we actually construct a circuit, so the user has a better chance of
+ knowing what's going on. Fixes bug 1362.
+ - Log SSL state transitions at debug level during handshake, and
+ include SSL states in error messages. This may help debug future
+ SSL handshake issues.
+
+ o Minor features (directory authorities):
+ - When a router changes IP address or port, authorities now launch
+ a new reachability test for it. Implements ticket 1899.
+ - Directory authorities now reject relays running any versions of
+ Tor between 0.2.1.3-alpha and 0.2.1.18 inclusive; they have
+ known bugs that keep RELAY_EARLY cells from working on rendezvous
+ circuits. Followup to fix for bug 2081.
+ - Directory authorities now reject relays running any version of Tor
+ older than 0.2.0.26-rc. That version is the earliest that fetches
+ current directory information correctly. Fixes bug 2156.
+ - Directory authorities now do an immediate reachability check as soon
+ as they hear about a new relay. This change should slightly reduce
+ the time between setting up a relay and getting listed as running
+ in the consensus. It should also improve the time between setting
+ up a bridge and seeing use by bridge users.
+ - Directory authorities no longer launch a TLS connection to every
+ relay as they startup. Now that we have 2k+ descriptors cached,
+ the resulting network hiccup is becoming a burden. Besides,
+ authorities already avoid voting about Running for the first half
+ hour of their uptime.
+ - Directory authorities now log the source of a rejected POSTed v3
+ networkstatus vote, so we can track failures better.
+ - Backport code from 0.2.3.x that allows directory authorities to
+ clean their microdescriptor caches. Needed to resolve bug 2230.
+
+ o Minor features (hidden services):
+ - Use computed circuit-build timeouts to decide when to launch
+ parallel introduction circuits for hidden services. (Previously,
+ we would retry after 15 seconds.)
+ - Don't allow v0 hidden service authorities to act as clients.
+ Required by fix for bug 3000.
+ - Ignore SIGNAL NEWNYM commands on relay-only Tor instances. Required
+ by fix for bug 3000.
+ - Make hidden services work better in private Tor networks by not
+ requiring any uptime to join the hidden service descriptor
+ DHT. Implements ticket 2088.
+ - Log (at info level) when purging pieces of hidden-service-client
+ state because of SIGNAL NEWNYM.
+
+ o Minor features (controller interface):
+ - New "GETINFO net/listeners/(type)" controller command to return
+ a list of addresses and ports that are bound for listeners for a
+ given connection type. This is useful when the user has configured
+ "SocksPort auto" and the controller needs to know which port got
+ chosen. Resolves another part of ticket 3076.
+ - Have the controller interface give a more useful message than
+ "Internal Error" in response to failed GETINFO requests.
+ - Add a TIMEOUT_RATE keyword to the BUILDTIMEOUT_SET control port
+ event, to give information on the current rate of circuit timeouts
+ over our stored history.
+ - The 'EXTENDCIRCUIT' control port command can now be used with
+ a circ id of 0 and no path. This feature will cause Tor to build
+ a new 'fast' general purpose circuit using its own path selection
+ algorithms.
+ - Added a BUILDTIMEOUT_SET controller event to describe changes
+ to the circuit build timeout.
+ - New controller command "getinfo config-text". It returns the
+ contents that Tor would write if you send it a SAVECONF command,
+ so the controller can write the file to disk itself.
+
+ o Minor features (controller protocol):
+ - Add a new ControlSocketsGroupWritable configuration option: when
+ it is turned on, ControlSockets are group-writeable by the default
+ group of the current user. Patch by Jérémy Bobbio; implements
+ ticket 2972.
+ - Tor now refuses to create a ControlSocket in a directory that is
+ world-readable (or group-readable if ControlSocketsGroupWritable
+ is 0). This is necessary because some operating systems do not
+ enforce permissions on an AF_UNIX sockets. Permissions on the
+ directory holding the socket, however, seems to work everywhere.
+ - Warn when CookieAuthFileGroupReadable is set but CookieAuthFile is
+ not. This would lead to a cookie that is still not group readable.
+ Closes bug 1843. Suggested by katmagic.
+ - Future-proof the controller protocol a bit by ignoring keyword
+ arguments we do not recognize.
+
+ o Minor features (more useful logging):
+ - Revise most log messages that refer to nodes by nickname to
+ instead use the "$key=nickname at address" format. This should be
+ more useful, especially since nicknames are less and less likely
+ to be unique. Resolves ticket 3045.
+ - When an HTTPS proxy reports "403 Forbidden", we now explain
+ what it means rather than calling it an unexpected status code.
+ Closes bug 2503. Patch from Michael Yakubovich.
+ - Rate-limit a warning about failures to download v2 networkstatus
+ documents. Resolves part of bug 1352.
+ - Rate-limit the "your application is giving Tor only an IP address"
+ warning. Addresses bug 2000; bugfix on 0.0.8pre2.
+ - Rate-limit "Failed to hand off onionskin" warnings.
+ - When logging a rate-limited warning, we now mention how many messages
+ got suppressed since the last warning.
+ - Make the formerly ugly "2 unknown, 7 missing key, 0 good, 0 bad,
+ 2 no signature, 4 required" messages about consensus signatures
+ easier to read, and make sure they get logged at the same severity
+ as the messages explaining which keys are which. Fixes bug 1290.
+ - Don't warn when we have a consensus that we can't verify because
+ of missing certificates, unless those certificates are ones
+ that we have been trying and failing to download. Fixes bug 1145.
+
+ o Minor features (log domains):
+ - Add documentation for configuring logging at different severities in
+ different log domains. We've had this feature since 0.2.1.1-alpha,
+ but for some reason it never made it into the manpage. Fixes
+ bug 2215.
+ - Make it simpler to specify "All log domains except for A and B".
+ Previously you needed to say "[*,~A,~B]". Now you can just say
+ "[~A,~B]".
+ - Add a "LogMessageDomains 1" option to include the domains of log
+ messages along with the messages. Without this, there's no way
+ to use log domains without reading the source or doing a lot
+ of guessing.
+ - Add a new "Handshake" log domain for activities that happen
+ during the TLS handshake.
+
+ o Minor features (build process):
+ - Make compilation with clang possible when using
+ "--enable-gcc-warnings" by removing two warning options that clang
+ hasn't implemented yet and by fixing a few warnings. Resolves
+ ticket 2696.
+ - Detect platforms that brokenly use a signed size_t, and refuse to
+ build there. Found and analyzed by doorss and rransom.
+ - Fix a bunch of compile warnings revealed by mingw with gcc 4.5.
+ Resolves bug 2314.
+ - Add support for statically linking zlib by specifying
+ "--enable-static-zlib", to go with our support for statically
+ linking openssl and libevent. Resolves bug 1358.
+ - Instead of adding the svn revision to the Tor version string, report
+ the git commit (when we're building from a git checkout).
+ - Rename the "log.h" header to "torlog.h" so as to conflict with fewer
+ system headers.
+ - New --digests command-line switch to output the digests of the
+ source files Tor was built with.
+ - Generate our manpage and HTML documentation using Asciidoc. This
+ change should make it easier to maintain the documentation, and
+ produce nicer HTML. The build process fails if asciidoc cannot
+ be found and building with asciidoc isn't disabled (via the
+ "--disable-asciidoc" argument to ./configure. Skipping the manpage
+ speeds up the build considerably.
+
+ o Minor features (options / torrc):
+ - Warn when the same option is provided more than once in a torrc
+ file, on the command line, or in a single SETCONF statement, and
+ the option is one that only accepts a single line. Closes bug 1384.
+ - Warn when the user configures two HiddenServiceDir lines that point
+ to the same directory. Bugfix on 0.0.6 (the version introducing
+ HiddenServiceDir); fixes bug 3289.
+ - Add new "perconnbwrate" and "perconnbwburst" consensus params to
+ do individual connection-level rate limiting of clients. The torrc
+ config options with the same names trump the consensus params, if
+ both are present. Replaces the old "bwconnrate" and "bwconnburst"
+ consensus params which were broken from 0.2.2.7-alpha through
+ 0.2.2.14-alpha. Closes bug 1947.
+ - New config option "WarnUnsafeSocks 0" disables the warning that
+ occurs whenever Tor receives a socks handshake using a version of
+ the socks protocol that can only provide an IP address (rather
+ than a hostname). Setups that do DNS locally over Tor are fine,
+ and we shouldn't spam the logs in that case.
+ - New config option "CircuitStreamTimeout" to override our internal
+ timeout schedule for how many seconds until we detach a stream from
+ a circuit and try a new circuit. If your network is particularly
+ slow, you might want to set this to a number like 60.
+ - New options for SafeLogging to allow scrubbing only log messages
+ generated while acting as a relay. Specify "SafeLogging relay" if
+ you want to ensure that only messages known to originate from
+ client use of the Tor process will be logged unsafely.
+ - Time and memory units in the configuration file can now be set to
+ fractional units. For example, "2.5 GB" is now a valid value for
+ AccountingMax.
+ - Support line continuations in the torrc config file. If a line
+ ends with a single backslash character, the newline is ignored, and
+ the configuration value is treated as continuing on the next line.
+ Resolves bug 1929.
+
+ o Minor features (unit tests):
+ - Revise our unit tests to use the "tinytest" framework, so we
+ can run tests in their own processes, have smarter setup/teardown
+ code, and so on. The unit test code has moved to its own
+ subdirectory, and has been split into multiple modules.
+ - Add a unit test for cross-platform directory-listing code.
+ - Add some forgotten return value checks during unit tests. Found
+ by coverity.
+ - Use GetTempDir to find the proper temporary directory location on
+ Windows when generating temporary files for the unit tests. Patch
+ by Gisle Vanem.
+
+ o Minor features (misc):
+ - The "torify" script now uses torsocks where available.
+ - Make Libevent log messages get delivered to controllers later,
+ and not from inside the Libevent log handler. This prevents unsafe
+ reentrant Libevent calls while still letting the log messages
+ get through.
+ - Certain Tor clients (such as those behind check.torproject.org) may
+ want to fetch the consensus in an extra early manner. To enable this
+ a user may now set FetchDirInfoExtraEarly to 1. This also depends on
+ setting FetchDirInfoEarly to 1. Previous behavior will stay the same
+ as only certain clients who must have this information sooner should
+ set this option.
+ - Expand homedirs passed to tor-checkkey. This should silence a
+ coverity complaint about passing a user-supplied string into
+ open() without checking it.
+ - Make sure to disable DirPort if running as a bridge. DirPorts aren't
+ used on bridges, and it makes bridge scanning somewhat easier.
+ - Create the /var/run/tor directory on startup on OpenSUSE if it is
+ not already created. Patch from Andreas Stieger. Fixes bug 2573.
+
+ o Minor bugfixes (relays):
+ - When a relay decides that its DNS is too broken for it to serve
+ as an exit server, it advertised itself as a non-exit, but
+ continued to act as an exit. This could create accidental
+ partitioning opportunities for users. Instead, if a relay is
+ going to advertise reject *:* as its exit policy, it should
+ really act with exit policy "reject *:*". Fixes bug 2366.
+ Bugfix on Tor 0.1.2.5-alpha. Bugfix by user "postman" on trac.
+ - Publish a router descriptor even if generating an extra-info
+ descriptor fails. Previously we would not publish a router
+ descriptor without an extra-info descriptor; this can cause fast
+ exit relays collecting exit-port statistics to drop from the
+ consensus. Bugfix on 0.1.2.9-rc; fixes bug 2195.
+ - When we're trying to guess whether we know our IP address as
+ a relay, we would log various ways that we failed to guess
+ our address, but never log that we ended up guessing it
+ successfully. Now add a log line to help confused and anxious
+ relay operators. Bugfix on 0.1.2.1-alpha; fixes bug 1534.
+ - For bandwidth accounting, calculate our expected bandwidth rate
+ based on the time during which we were active and not in
+ soft-hibernation during the last interval. Previously, we were
+ also considering the time spent in soft-hibernation. If this
+ was a long time, we would wind up underestimating our bandwidth
+ by a lot, and skewing our wakeup time towards the start of the
+ accounting interval. Fixes bug 1789. Bugfix on 0.0.9pre5.
+ - Demote a confusing TLS warning that relay operators might get when
+ someone tries to talk to their ORPort. It is not the operator's
+ fault, nor can they do anything about it. Fixes bug 1364; bugfix
+ on 0.2.0.14-alpha.
+ - Change "Application request when we're believed to be offline."
+ notice to "Application request when we haven't used client
+ functionality lately.", to clarify that it's not an error. Bugfix
+ on 0.0.9.3; fixes bug 1222.
+
+ o Minor bugfixes (bridges):
+ - When a client starts or stops using bridges, never use a circuit
+ that was built before the configuration change. This behavior could
+ put at risk a user who uses bridges to ensure that her traffic
+ only goes to the chosen addresses. Bugfix on 0.2.0.3-alpha; fixes
+ bug 3200.
+ - Do not reset the bridge descriptor download status every time we
+ re-parse our configuration or get a configuration change. Fixes
+ bug 3019; bugfix on 0.2.0.3-alpha.
+ - Users couldn't configure a regular relay to be their bridge. It
+ didn't work because when Tor fetched the bridge descriptor, it found
+ that it already had it, and didn't realize that the purpose of the
+ descriptor had changed. Now we replace routers with a purpose other
+ than bridge with bridge descriptors when fetching them. Bugfix on
+ 0.1.1.9-alpha. Fixes bug 1776.
+ - In the special case where you configure a public exit relay as your
+ bridge, Tor would be willing to use that exit relay as the last
+ hop in your circuit as well. Now we fail that circuit instead.
+ Bugfix on 0.2.0.12-alpha. Fixes bug 2403. Reported by "piebeer".
+
+ o Minor bugfixes (clients):
+ - We now ask the other side of a stream (the client or the exit)
+ for more data on that stream when the amount of queued data on
+ that stream dips low enough. Previously, we wouldn't ask the
+ other side for more data until either it sent us more data (which
+ it wasn't supposed to do if it had exhausted its window!) or we
+ had completely flushed all our queued data. This flow control fix
+ should improve throughput. Fixes bug 2756; bugfix on the earliest
+ released versions of Tor (svn commit r152).
+ - When a client finds that an origin circuit has run out of 16-bit
+ stream IDs, we now mark it as unusable for new streams. Previously,
+ we would try to close the entire circuit. Bugfix on 0.0.6.
+ - Make it explicit that we don't cannibalize one-hop circuits. This
+ happens in the wild, but doesn't turn out to be a problem because
+ we fortunately don't use those circuits. Many thanks to outofwords
+ for the initial analysis and to swissknife who confirmed that
+ two-hop circuits are actually created.
+ - Resolve an edge case in path weighting that could make us misweight
+ our relay selection. Fixes bug 1203; bugfix on 0.0.8rc1.
+ - Make the DNSPort option work with libevent 2.x. Don't alter the
+ behaviour for libevent 1.x. Fixes bug 1143. Found by SwissTorExit.
+
+ o Minor bugfixes (directory authorities):
+ - Make directory authorities more accurate at recording when
+ relays that have failed several reachability tests became
+ unreachable, so we can provide more accuracy at assigning Stable,
+ Guard, HSDir, etc flags. Bugfix on 0.2.0.6-alpha. Resolves bug 2716.
+ - Directory authorities are now more robust to hops back in time
+ when calculating router stability. Previously, if a run of uptime
+ or downtime appeared to be negative, the calculation could give
+ incorrect results. Bugfix on 0.2.0.6-alpha; noticed when fixing
+ bug 1035.
+ - Directory authorities will now attempt to download consensuses
+ if their own efforts to make a live consensus have failed. This
+ change means authorities that restart will fetch a valid
+ consensus, and it means authorities that didn't agree with the
+ current consensus will still fetch and serve it if it has enough
+ signatures. Bugfix on 0.2.0.9-alpha; fixes bug 1300.
+ - Never vote for a server as "Running" if we have a descriptor for
+ it claiming to be hibernating, and that descriptor was published
+ more recently than our last contact with the server. Bugfix on
+ 0.2.0.3-alpha; fixes bug 911.
+ - Directory authorities no longer change their opinion of, or vote on,
+ whether a router is Running, unless they have themselves been
+ online long enough to have some idea. Bugfix on 0.2.0.6-alpha.
+ Fixes bug 1023.
+
+ o Minor bugfixes (hidden services):
+ - Log malformed requests for rendezvous descriptors as protocol
+ warnings, not warnings. Also, use a more informative log message
+ in case someone sees it at log level warning without prior
+ info-level messages. Fixes bug 2748; bugfix on 0.2.0.10-alpha.
+ - Accept hidden service descriptors if we think we might be a hidden
+ service directory, regardless of what our consensus says. This
+ helps robustness, since clients and hidden services can sometimes
+ have a more up-to-date view of the network consensus than we do,
+ and if they think that the directory authorities list us a HSDir,
+ we might actually be one. Related to bug 2732; bugfix on
+ 0.2.0.10-alpha.
+ - 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.
+ - Clients and hidden services now use HSDir-flagged relays for hidden
+ service descriptor downloads and uploads even if the relays have no
+ DirPort set and the client has disabled TunnelDirConns. This will
+ eventually allow us to give the HSDir flag to relays with no
+ DirPort. Fixes bug 2722; bugfix on 0.2.1.6-alpha.
+ - Only limit the lengths of single HS descriptors, even when multiple
+ HS descriptors are published to an HSDir relay in a single POST
+ operation. Fixes bug 2948; bugfix on 0.2.1.5-alpha. Found by hsdir.
+
+ o Minor bugfixes (controllers):
+ - Allow GETINFO fingerprint to return a fingerprint even when
+ we have not yet built a router descriptor. Fixes bug 3577;
+ bugfix on 0.2.0.1-alpha.
+ - Send a SUCCEEDED stream event to the controller when a reverse
+ resolve succeeded. Fixes bug 3536; bugfix on 0.0.8pre1. Issue
+ discovered by katmagic.
+ - Remove a trailing asterisk from "exit-policy/default" in the
+ output of the control port command "GETINFO info/names". Bugfix
+ on 0.1.2.5-alpha.
+ - Make the SIGNAL DUMP controller command work on FreeBSD. Fixes bug
+ 2917. Bugfix on 0.1.1.1-alpha.
+ - 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.
+ - When a controller changes TrackHostExits, remove mappings for
+ hosts that should no longer have their exits tracked. Bugfix on
+ 0.1.0.1-rc.
+ - When a controller changes VirtualAddrNetwork, remove any mappings
+ for hosts that were automapped to the old network. Bugfix on
+ 0.1.1.19-rc.
+ - When a controller changes one of the AutomapHosts* options, remove
+ any mappings for hosts that should no longer be automapped. Bugfix
+ on 0.2.0.1-alpha.
+ - Fix an off-by-one error in calculating some controller command
+ argument lengths. Fortunately, this mistake is harmless since
+ the controller code does redundant NUL termination too. Found by
+ boboper. Bugfix on 0.1.1.1-alpha.
+ - Fix a bug in the controller interface where "GETINFO ns/asdaskljkl"
+ would return "551 Internal error" rather than "552 Unrecognized key
+ ns/asdaskljkl". Bugfix on 0.1.2.3-alpha.
+ - Don't spam the controller with events when we have no file
+ descriptors available. Bugfix on 0.2.1.5-alpha. (Rate-limiting
+ for log messages was already solved from bug 748.)
+ - Emit a GUARD DROPPED controller event for a case we missed.
+ - Ensure DNS requests launched by "RESOLVE" commands from the
+ controller respect the __LeaveStreamsUnattached setconf options. The
+ same goes for requests launched via DNSPort or transparent
+ proxying. Bugfix on 0.2.0.1-alpha; fixes bug 1525.
+
+ o Minor bugfixes (config options):
+ - Tor used to limit HttpProxyAuthenticator values to 48 characters.
+ Change the limit to 512 characters by removing base64 newlines.
+ Fixes bug 2752. Fix by Michael Yakubovich.
+ - Complain if PublishServerDescriptor is given multiple arguments that
+ include 0 or 1. This configuration will be rejected in the future.
+ Bugfix on 0.2.0.1-alpha; closes bug 1107.
+ - Disallow BridgeRelay 1 and ORPort 0 at once in the configuration.
+ Bugfix on 0.2.0.13-alpha; closes bug 928.
+
+ o Minor bugfixes (log subsystem fixes):
+ - When unable to format an address as a string, report its value
+ as "???" rather than reusing the last formatted address. Bugfix
+ on 0.2.1.5-alpha.
+ - Be more consistent in our treatment of file system paths. "~" should
+ get expanded to the user's home directory in the Log config option.
+ Fixes bug 2971; bugfix on 0.2.0.1-alpha, which introduced the
+ feature for the -f and --DataDirectory options.
+
+ o Minor bugfixes (memory management):
+ - 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.
+ - Save a couple bytes in memory allocation every time we escape
+ certain characters in a string. Patch from Florian Zumbiehl.
+
+ o Minor bugfixes (protocol correctness):
+ - When checking for 1024-bit keys, check for 1024 bits, not 128
+ bytes. This allows Tor to correctly discard keys of length 1017
+ through 1023. Bugfix on 0.0.9pre5.
+ - Require that introduction point keys and onion handshake keys
+ have a public exponent of 65537. Starts to fix bug 3207; bugfix
+ on 0.2.0.10-alpha.
+ - Handle SOCKS messages longer than 128 bytes long correctly, rather
+ than waiting forever for them to finish. Fixes bug 2330; bugfix
+ on 0.2.0.16-alpha. Found by doorss.
+ - Never relay a cell for a circuit we have already destroyed.
+ Between marking a circuit as closeable and finally closing it,
+ it may have been possible for a few queued cells to get relayed,
+ even though they would have been immediately dropped by the next
+ OR in the circuit. Fixes bug 1184; bugfix on 0.2.0.1-alpha.
+ - Never queue a cell for a circuit that's already been marked
+ for close.
+ - Fix a spec conformance issue: the network-status-version token
+ must be the first token in a v3 consensus or vote. Discovered by
+ "parakeep". Bugfix on 0.2.0.3-alpha.
+ - A networkstatus vote must contain exactly one signature. Spec
+ conformance issue. Bugfix on 0.2.0.3-alpha.
+ - When asked about a DNS record type we don't support via a
+ client DNSPort, reply with NOTIMPL rather than an empty
+ reply. Patch by intrigeri. Fixes bug 3369; bugfix on 2.0.1-alpha.
+ - Make more fields in the controller protocol case-insensitive, since
+ control-spec.txt said they were.
+
+ o Minor bugfixes (log messages):
+ - Fix a log message that said "bits" while displaying a value in
+ bytes. Found by wanoskarnet. Fixes bug 3318; bugfix on
+ 0.2.0.1-alpha.
+ - Downgrade "no current certificates known for authority" message from
+ Notice to Info. Fixes bug 2899; bugfix on 0.2.0.10-alpha.
+ - Correctly describe errors that occur when generating a TLS object.
+ Previously we would attribute them to a failure while generating a
+ TLS context. Patch by Robert Ransom. Bugfix on 0.1.0.4-rc; fixes
+ bug 1994.
+ - Fix an instance where a Tor directory mirror might accidentally
+ log the IP address of a misbehaving Tor client. Bugfix on
+ 0.1.0.1-rc.
+ - Stop logging at severity 'warn' when some other Tor client tries
+ to establish a circuit with us using weak DH keys. It's a protocol
+ violation, but that doesn't mean ordinary users need to hear about
+ it. Fixes the bug part of bug 1114. Bugfix on 0.1.0.13.
+ - If your relay can't keep up with the number of incoming create
+ cells, it would log one warning per failure into your logs. Limit
+ warnings to 1 per minute. Bugfix on 0.0.2pre10; fixes bug 1042.
+
+ o Minor bugfixes (build fixes):
+ - Fix warnings from GCC 4.6's "-Wunused-but-set-variable" option.
+ - When warning about missing zlib development packages during compile,
+ give the correct package names. Bugfix on 0.2.0.1-alpha.
+ - Fix warnings that newer versions of autoconf produce during
+ ./autogen.sh. These warnings appear to be harmless in our case,
+ but they were extremely verbose. Fixes bug 2020.
+ - Squash a compile warning on OpenBSD. Reported by Tas; fixes
+ bug 1848.
+
+ o Minor bugfixes (portability):
+ - Write several files in text mode, on OSes that distinguish text
+ mode from binary mode (namely, Windows). These files are:
+ 'buffer-stats', 'dirreq-stats', and 'entry-stats' on relays
+ that collect those statistics; 'client_keys' and 'hostname' for
+ hidden services that use authentication; and (in the tor-gencert
+ utility) newly generated identity and signing keys. Previously,
+ we wouldn't specify text mode or binary mode, leading to an
+ assertion failure. Fixes bug 3607. Bugfix on 0.2.1.1-alpha (when
+ the DirRecordUsageByCountry option which would have triggered
+ the assertion failure was added), although this assertion failure
+ would have occurred in tor-gencert on Windows in 0.2.0.1-alpha.
+ - Selectively disable deprecation warnings on OS X because Lion
+ started deprecating the shipped copy of openssl. Fixes bug 3643.
+ - Use a wide type to hold sockets when built for 64-bit Windows.
+ Fixes bug 3270.
+ - Fix an issue that prevented static linking of libevent on
+ some platforms (notably Linux). Fixes bug 2698; bugfix on 0.2.1.23,
+ where we introduced the "--with-static-libevent" configure option.
+ - Fix a bug with our locking implementation on Windows that couldn't
+ correctly detect when a file was already locked. Fixes bug 2504,
+ bugfix on 0.2.1.6-alpha.
+ - Build correctly on OSX with zlib 1.2.4 and higher with all warnings
+ enabled.
+ - Fix IPv6-related connect() failures on some platforms (BSD, OS X).
+ Bugfix on 0.2.0.3-alpha; fixes first part of bug 2660. Patch by
+ "piebeer".
+
+ o Minor bugfixes (code correctness):
+ - 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.
+ - Make connection_printf_to_buf()'s behaviour sane. Its callers
+ expect it to emit a CRLF iff the format string ends with CRLF;
+ it actually emitted a CRLF iff (a) the format string ended with
+ CRLF or (b) the resulting string was over 1023 characters long or
+ (c) the format string did not end with CRLF *and* the resulting
+ string was 1021 characters long or longer. Bugfix on 0.1.1.9-alpha;
+ fixes part of bug 3407.
+ - Make send_control_event_impl()'s behaviour sane. Its callers
+ expect it to always emit a CRLF at the end of the string; it
+ might have emitted extra control characters as well. Bugfix on
+ 0.1.1.9-alpha; fixes another part of bug 3407.
+ - Make crypto_rand_int() check the value of its input correctly.
+ Previously, it accepted values up to UINT_MAX, but could return a
+ negative number if given a value above INT_MAX+1. Found by George
+ Kadianakis. Fixes bug 3306; bugfix on 0.2.2pre14.
+ - Fix a potential null-pointer dereference while computing a
+ consensus. Bugfix on tor-0.2.0.3-alpha, found with the help of
+ clang's analyzer.
+ - If we fail to compute the identity digest of a v3 legacy keypair,
+ warn, and don't use a buffer-full of junk instead. Bugfix on
+ 0.2.1.1-alpha; fixes bug 3106.
+ - Resolve an untriggerable issue in smartlist_string_num_isin(),
+ where if the function had ever in the future been used to check
+ for the presence of a too-large number, it would have given an
+ incorrect result. (Fortunately, we only used it for 16-bit
+ values.) Fixes bug 3175; bugfix on 0.1.0.1-rc.
+ - Be more careful about reporting the correct error from a failed
+ connect() system call. Under some circumstances, it was possible to
+ look at an incorrect value for errno when sending the end reason.
+ Bugfix on 0.1.0.1-rc.
+ - Correctly handle an "impossible" overflow cases in connection byte
+ counting, where we write or read more than 4GB on an edge connection
+ in a single second. Bugfix on 0.1.2.8-beta.
+ - Avoid a double mark-for-free warning when failing to attach a
+ transparent proxy connection. Bugfix on 0.1.2.1-alpha. Fixes
+ bug 2279.
+ - Correctly detect failure to allocate an OpenSSL BIO. Fixes bug 2378;
+ found by "cypherpunks". This bug was introduced before the first
+ Tor release, in svn commit r110.
+ - Fix a bug in bandwidth history state parsing that could have been
+ triggered if a future version of Tor ever changed the timing
+ granularity at which bandwidth history is measured. Bugfix on
+ Tor 0.1.1.11-alpha.
+ - Add assertions to check for overflow in arguments to
+ base32_encode() and base32_decode(); fix a signed-unsigned
+ comparison there too. These bugs are not actually reachable in Tor,
+ but it's good to prevent future errors too. Found by doorss.
+ - Avoid a bogus overlapped memcpy in tor_addr_copy(). Reported by
+ "memcpyfail".
+ - Set target port in get_interface_address6() correctly. Bugfix
+ on 0.1.1.4-alpha and 0.2.0.3-alpha; fixes second part of bug 2660.
+ - Fix an impossible-to-actually-trigger buffer overflow in relay
+ descriptor generation. Bugfix on 0.1.0.15.
+ - Fix numerous small code-flaws found by Coverity Scan Rung 3.
+
+ o Minor bugfixes (code improvements):
+ - After we free an internal connection structure, overwrite it
+ with a different memory value than we use for overwriting a freed
+ internal circuit structure. Should help with debugging. Suggested
+ by bug 1055.
+ - If OpenSSL fails to make a duplicate of a private or public key, log
+ an error message and try to exit cleanly. May help with debugging
+ if bug 1209 ever remanifests.
+ - Some options used different conventions for uppercasing of acronyms
+ when comparing manpage and source. Fix those in favor of the
+ manpage, as it makes sense to capitalize acronyms.
+ - Take a first step towards making or.h smaller by splitting out
+ function definitions for all source files in src/or/. Leave
+ structures and defines in or.h for now.
+ - Remove a few dead assignments during router parsing. Found by
+ coverity.
+ - Don't use 1-bit wide signed bit fields. Found by coverity.
+ - 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.
+ - The memarea code now uses a sentinel value at the end of each area
+ to make sure nothing writes beyond the end of an area. This might
+ help debug some conceivable causes of bug 930.
+ - Always treat failure to allocate an RSA key as an unrecoverable
+ allocation error.
+ - Add some more defensive programming for architectures that can't
+ handle unaligned integer accesses. We don't know of any actual bugs
+ right now, but that's the best time to fix them. Fixes bug 1943.
+
+ o Minor bugfixes (misc):
+ - Fix a rare bug in rend_fn unit tests: we would fail a test when
+ a randomly generated port is 0. Diagnosed by Matt Edman. Bugfix
+ on 0.2.0.10-alpha; fixes bug 1808.
+ - Where available, use Libevent 2.0's periodic timers so that our
+ once-per-second cleanup code gets called even more closely to
+ once per second than it would otherwise. Fixes bug 943.
+ - Ignore OutboundBindAddress when connecting to localhost.
+ Connections to localhost need to come _from_ localhost, or else
+ local servers (like DNS and outgoing HTTP/SOCKS proxies) will often
+ refuse to listen.
+ - Update our OpenSSL 0.9.8l fix so that it works with OpenSSL 0.9.8m
+ too.
+ - If any of the v3 certs we download are unparseable, we should
+ actually notice the failure so we don't retry indefinitely. Bugfix
+ on 0.2.0.x; reported by "rotator".
+ - When Tor fails to parse a descriptor of any kind, dump it to disk.
+ Might help diagnosing bug 1051.
+ - Make our 'torify' script more portable; if we have only one of
+ 'torsocks' or 'tsocks' installed, don't complain to the user;
+ and explain our warning about tsocks better.
+ - Fix some urls in the exit notice file and make it XHTML1.1 strict
+ compliant. Based on a patch from Christian Kujau.
+
+ o Documentation changes:
+ - Modernize the doxygen configuration file slightly. Fixes bug 2707.
+ - Resolve all doxygen warnings except those for missing documentation.
+ Fixes bug 2705.
+ - Add doxygen documentation for more functions, fields, and types.
+ - Convert the HACKING file to asciidoc, and add a few new sections
+ to it, explaining how we use Git, how we make changelogs, and
+ what should go in a patch.
+ - Document the default socks host and port (127.0.0.1:9050) for
+ tor-resolve.
+ - Removed some unnecessary files from the source distribution. The
+ AUTHORS file has now been merged into the people page on the
+ website. The roadmaps and design doc can now be found in the
+ projects directory in svn.
+
+ o Deprecated and removed features (config):
+ - Remove the torrc.complete file. It hasn't been kept up to date
+ and users will have better luck checking out the manpage.
+ - Remove the HSAuthorityRecordStats option that version 0 hidden
+ service authorities could use to track statistics of overall v0
+ hidden service usage.
+ - Remove the obsolete "NoPublish" option; it has been flagged
+ as obsolete and has produced a warning since 0.1.1.18-rc.
+ - Caches no longer download and serve v2 networkstatus documents
+ unless FetchV2Networkstatus flag is set: these documents haven't
+ haven't been used by clients or relays since 0.2.0.x. Resolves
+ bug 3022.
+
+ o Deprecated and removed features (controller):
+ - The controller no longer accepts the old obsolete "addr-mappings/"
+ or "unregistered-servers-" GETINFO values.
+ - The EXTENDED_EVENTS and VERBOSE_NAMES controller features are now
+ always on; using them is necessary for correct forward-compatible
+ controllers.
+
+ o Deprecated and removed features (misc):
+ - Hidden services no longer publish version 0 descriptors, and clients
+ do not request or use version 0 descriptors. However, the old hidden
+ service authorities still accept and serve version 0 descriptors
+ when contacted by older hidden services/clients.
+ - Remove undocumented option "-F" from tor-resolve: it hasn't done
+ anything since 0.2.1.16-rc.
+ - Remove everything related to building the expert bundle for OS X.
+ It has confused many users, doesn't work right on OS X 10.6,
+ and is hard to get rid of once installed. Resolves bug 1274.
+ - Remove support for .noconnect style addresses. Nobody was using
+ them, and they provided another avenue for detecting Tor users
+ via application-level web tricks.
+ - When we fixed bug 1038 we had to put in a restriction not to send
+ RELAY_EARLY cells on rend circuits. This was necessary as long
+ as relays using Tor 0.2.1.3-alpha through 0.2.1.18-alpha were
+ active. Now remove this obsolete check. Resolves bug 2081.
+ - Remove workaround code to handle directory responses from servers
+ that had bug 539 (they would send HTTP status 503 responses _and_
+ send a body too). Since only server versions before
+ 0.2.0.16-alpha/0.1.2.19 were affected, there is no longer reason to
+ keep the workaround in place.
+ - Remove the old 'fuzzy time' logic. It was supposed to be used for
+ handling calculations where we have a known amount of clock skew and
+ an allowed amount of unknown skew. But we only used it in three
+ places, and we never adjusted the known/unknown skew values. This is
+ still something we might want to do someday, but if we do, we'll
+ want to do it differently.
+ - Remove the "--enable-iphone" option to ./configure. According to
+ reports from Marco Bonetti, Tor builds fine without any special
+ tweaking on recent iPhone SDK versions.
+
+
Changes in version 0.2.1.30 - 2011-02-23
Tor 0.2.1.30 fixes a variety of less critical bugs. The main other
change is a slight tweak to Tor's TLS handshake that makes relays
@@ -1972,6 +3464,8 @@ Changes in version 0.2.0.30 - 2008-07-15
warning "-Wshorten-64-to-32" is available.
- Support compilation to target iPhone; patch from cjacker huang.
To build for iPhone, pass the --enable-iphone option to configure.
+ - Port Tor to build and run correctly on Windows CE systems, using
+ the wcecompat library. Contributed by Valerio Lupi.
- Detect non-ASCII platforms (if any still exist) and refuse to
build there: some of our code assumes that 'A' is 65 and so on.
- Clear up some MIPSPro compiler warnings.
diff --git a/changes/UserspaceIOCPBuffers b/changes/UserspaceIOCPBuffers
new file mode 100644
index 000000000..7115b5fe5
--- /dev/null
+++ b/changes/UserspaceIOCPBuffers
@@ -0,0 +1,7 @@
+ 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.
diff --git a/changes/bug1345 b/changes/bug1345
deleted file mode 100644
index 0c9375a35..000000000
--- a/changes/bug1345
+++ /dev/null
@@ -1,13 +0,0 @@
- o Minor bugfixes:
- - On SIGHUP, do not clear out all TrackHostExits mappings, client DNS
- cache entries, and virtual address mappings: that's what NEWNYM is
- for. Bugfix on Tor 0.1.0.1-rc; fixes bug 1345.
- - When TrackHostExits is changed from a controller, remove any
- mappings for hosts that should no longer have their exits tracked.
- Bugfix on Tor 0.1.0.1-rc.
- - When VirtualAddrNetwork option is changed from a controller,
- remove any mappings for hosts that were automapped to
- that network. Bugfix on 0.1.1.19-rc.
- - When one of the AutomapHosts* options is changed from a
- controller, remove any mappings for hosts that should no longer be
- automapped. Bugfix on 0.2.0.1-alpha.
diff --git a/changes/bug1352 b/changes/bug1352
deleted file mode 100644
index bde019240..000000000
--- a/changes/bug1352
+++ /dev/null
@@ -1,4 +0,0 @@
- o Minor features
- - Rate-limit a warning about failures to download v2 networkstatus
- documents. Resolves part of bug 1352.
-
diff --git a/changes/bug1810 b/changes/bug1810
deleted file mode 100644
index 11e561f7c..000000000
--- a/changes/bug1810
+++ /dev/null
@@ -1,6 +0,0 @@
- o Major bugfixes:
- - Don't decide to make a new descriptor when receiving a HUP signal.
- This bug has caused a lot of relays to disappear from the consensus
- periodically. Fixes the most common case of triggering bug 1810;
- bugfix on 0.2.2.7-alpha.
-
diff --git a/changes/bug2474 b/changes/bug2474
new file mode 100644
index 000000000..02d3eb7ba
--- /dev/null
+++ b/changes/bug2474
@@ -0,0 +1,5 @@
+ o Minor features
+ - Try to make the introductory warning message that Tor prints on
+ startup more useful for actually finding help and information.
+ Resolves bug2474.
+
diff --git a/changes/bug2503 b/changes/bug2503
deleted file mode 100644
index 50b8bf50c..000000000
--- a/changes/bug2503
+++ /dev/null
@@ -1,4 +0,0 @@
- o Minor features:
- - When an HTTPS proxy reports "403 Forbidden", we now explain
- what it means rather than calling it an unexpected status code.
- Closes bug 2503. Patch from "mikey".
diff --git a/changes/bug2732-simple b/changes/bug2732-simple
deleted file mode 100644
index 367836152..000000000
--- a/changes/bug2732-simple
+++ /dev/null
@@ -1,7 +0,0 @@
- o Minor bugfixes
- - Do not reject hidden service descriptors simply because we don't
- think we have not been assigned the HSDir flag. Clients and
- hidden services can have a more up-to-date view of the network
- consensus, and if they think that the directory authorities
- list us a HSDir, we might actually be one. Related to bug 2732;
- bugfix on 0.2.0.10-alpha.
diff --git a/changes/bug2752 b/changes/bug2752
deleted file mode 100644
index b872d3374..000000000
--- a/changes/bug2752
+++ /dev/null
@@ -1,5 +0,0 @@
- o Minor features:
- - Tor used to limit HttpProxyAuthenticator values to 48 characters.
- Changed the limit to 512 characters by removing base64 newlines.
- Fixes bug 2752. Fix by Michael Yakubovich.
-
diff --git a/changes/bug2792_checkdir b/changes/bug2792_checkdir
deleted file mode 100644
index 10de1deb2..000000000
--- a/changes/bug2792_checkdir
+++ /dev/null
@@ -1,8 +0,0 @@
- o Minor features:
- - Tor now refuses to create a ControlSocket in a directory that is
- world-readable (or group-readable if ControlSocketsGroupWritable
- is 0). This is necessary because some operating systems do not
- check the permissions on an AF_UNIX socket when programs try to
- connect to it. Checking permissions on the directory holding
- the socket, however, seems to work everywhere.
-
diff --git a/changes/bug2850 b/changes/bug2850
deleted file mode 100644
index 77ccbfa25..000000000
--- a/changes/bug2850
+++ /dev/null
@@ -1,5 +0,0 @@
- - Minor features
- o Set SO_REUSEADDR on all sockets, not just listeners. This should
- help busy exit nodes avoid running out of useable ports just because
- all the ports have been used in the near past. Resolves issue 2850.
-
diff --git a/changes/bug2972 b/changes/bug2972
deleted file mode 100644
index 26afcca42..000000000
--- a/changes/bug2972
+++ /dev/null
@@ -1,5 +0,0 @@
- o Minor features:
- - Allow ControlSockets to be group-writable when the
- ControlSocksGroupWritable configuration option is turned on. Patch
- by Jérémy Bobbio; implements ticket 2972.
-
diff --git a/changes/bug3019 b/changes/bug3019
deleted file mode 100644
index 4df709fb3..000000000
--- a/changes/bug3019
+++ /dev/null
@@ -1,4 +0,0 @@
- o Minor bugfixes:
- - Do not reset the bridge descriptor download status every time we
- re-parse our configuration or get a configuration change. Fixes
- bug 3019; bugfix on Tor 0.2.0.3-alpha.
diff --git a/changes/bug3022 b/changes/bug3022
deleted file mode 100644
index 9472e6d19..000000000
--- a/changes/bug3022
+++ /dev/null
@@ -1,6 +0,0 @@
- o Removed features
- - Caches no longer download and serve v2 networkstatus documents
- unless FetchV2Networkstatus flag is set: these documents haven't
- haven't been used by clients or relays since 0.2.0.x. Resolves
- bug 3022.
-
diff --git a/changes/bug3026 b/changes/bug3026
deleted file mode 100644
index c0c0a3860..000000000
--- a/changes/bug3026
+++ /dev/null
@@ -1,4 +0,0 @@
- o Minor bugfixes (directory authority)
- - Do not upload our own vote or signature set to ourself. It would
- tell us nothing new. Also, as of Tor 0.2.2.24-alpha, we started
- to warn about receiving duplicate votes. Resolves bug 3026.
diff --git a/changes/bug3118 b/changes/bug3118
deleted file mode 100644
index c70298173..000000000
--- a/changes/bug3118
+++ /dev/null
@@ -1,4 +0,0 @@
- o Minor bugfixes:
- - Correctly link libevent_openssl when --enable-static-libevent
- is passed to configure. Fixes bug 3118; bugfix on 0.2.3.1-alpha.
-
diff --git a/changes/bug3122_memcmp b/changes/bug3122_memcmp
deleted file mode 100644
index a04947674..000000000
--- a/changes/bug3122_memcmp
+++ /dev/null
@@ -1,7 +0,0 @@
- o Security fixes
- - 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.)
diff --git a/changes/bug3135 b/changes/bug3135
deleted file mode 100644
index d76112348..000000000
--- a/changes/bug3135
+++ /dev/null
@@ -1,6 +0,0 @@
- o Minor bugfixes
- - Do not crash when our configuration file becomes unreadable
- (usually due to a permissions change) between when we start
- up and when a controller calls SAVECONF. Fixes bug 3135;
- bugfix on 0.0.9pre6.
-
diff --git a/changes/bug3175 b/changes/bug3175
deleted file mode 100644
index 3360fbce0..000000000
--- a/changes/bug3175
+++ /dev/null
@@ -1,7 +0,0 @@
- o Minor bugfixes:
- - Resolve an untriggerable issue in smartlist_string_num_isin(),
- where if the function had ever in the future been used to check
- for the presence of a too-large number, it would have given an
- incorrect result. (Fortunately, we only used it for 16-bit
- values.) Fixes bug 3175; bugfix on Tor 0.1.0.1-rc.
-
diff --git a/changes/bug3183 b/changes/bug3183
deleted file mode 100644
index b1e594b8d..000000000
--- a/changes/bug3183
+++ /dev/null
@@ -1,5 +0,0 @@
- o Minor bugfixes:
- - Bridges should not complain that they are unlisted in the consensus:
- that's more or less the point of being a bridge. Bugfix on
- 0.2.3.1-alpha; fixes bug 3183.
-
diff --git a/changes/bug3198 b/changes/bug3198
deleted file mode 100644
index 29c16852e..000000000
--- a/changes/bug3198
+++ /dev/null
@@ -1,4 +0,0 @@
- o Major bugfixes:
- - When we configure a new bridge via the controller, don't wait up
- to ten seconds before trying to fetch its descriptor. Bugfix on
- 0.2.0.3-alpha; fixes bug 3198 (suggested by 2355).
diff --git a/changes/bug3200 b/changes/bug3200
deleted file mode 100644
index a80d51633..000000000
--- a/changes/bug3200
+++ /dev/null
@@ -1,6 +0,0 @@
- o Minor bugfixes:
- - When a client starts or stops using bridges, never use a circuit
- that was built before the configuration change. This behavior could
- put at risk a user who uses bridges to ensure that her traffic
- only goes to the chosen addresses. Bugfix on 0.2.0.3-alpha; fixes
- bug 3200.
diff --git a/changes/bug3207 b/changes/bug3207
deleted file mode 100644
index 65a7dac1a..000000000
--- a/changes/bug3207
+++ /dev/null
@@ -1,4 +0,0 @@
- o Minor bugfixes:
- - Require that onion keys have exponent 65537 in microdescriptors too.
- Fixes part of bug 3207; bugfix on 0.2.2.25-alpha
-
diff --git a/changes/bug3213 b/changes/bug3213
deleted file mode 100644
index ab7de2d62..000000000
--- a/changes/bug3213
+++ /dev/null
@@ -1,4 +0,0 @@
- o Major bugfixes:
- - Fix a crash bug when changing bridges in a running Tor process.
- Fixes bug 3213; bugfix on 0.2.2.26-beta.
-
diff --git a/changes/bug3252 b/changes/bug3252
deleted file mode 100644
index f85f633fb..000000000
--- a/changes/bug3252
+++ /dev/null
@@ -1,4 +0,0 @@
- o Minor features:
- - Relays now log the reason for publishing a new relay descriptor,
- so we have a better chance of hunting down the root cause of bug
- 1810. Resolves ticket 3252.
diff --git a/changes/bug4230 b/changes/bug4230
new file mode 100644
index 000000000..c1ba5847f
--- /dev/null
+++ b/changes/bug4230
@@ -0,0 +1,5 @@
+ 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.
+
diff --git a/changes/bug4554 b/changes/bug4554
new file mode 100644
index 000000000..e4754c29e
--- /dev/null
+++ b/changes/bug4554
@@ -0,0 +1,4 @@
+ o Minor bugfixes:
+ - Fix a compile warning in tor_inet_pton(). Bugfix on 0.2.3.8-alpha;
+ fixes bug 4554.
+
diff --git a/changes/check-fetched-rend-desc-service-id b/changes/check-fetched-rend-desc-service-id
deleted file mode 100644
index 2f37c3021..000000000
--- a/changes/check-fetched-rend-desc-service-id
+++ /dev/null
@@ -1,7 +0,0 @@
- o Security fixes:
- - When fetching a hidden service descriptor, check that it is for
- the hidden service we were trying to connect to, in order to
- stop a directory from pre-seeding a client with a descriptor for
- a hidden service that they didn't want. Bugfix on 0.0.6.
-
-
diff --git a/changes/check-public-key-exponents b/changes/check-public-key-exponents
deleted file mode 100644
index a8d00673b..000000000
--- a/changes/check-public-key-exponents
+++ /dev/null
@@ -1,5 +0,0 @@
- o Minor bugfixes:
- - Require that introduction point keys and onion keys have public
- exponent 65537. Bugfix on 0.2.0.10-alpha.
-
-
diff --git a/changes/checkSpaces b/changes/checkSpaces
new file mode 100644
index 000000000..91f79ed0f
--- /dev/null
+++ b/changes/checkSpaces
@@ -0,0 +1,5 @@
+ o Minor bugfixes:
+ - Prevent a false positive from the check-spaces script by disabling
+ the "whitespace between function name and (" check for functions
+ named 'op()'.
+
diff --git a/changes/dirvote_null_deref b/changes/dirvote_null_deref
deleted file mode 100644
index 65dc519f5..000000000
--- a/changes/dirvote_null_deref
+++ /dev/null
@@ -1,4 +0,0 @@
- o Minor bugfixes:
- - Fix a potential null-pointer dereference while computing a consensus.
- Bugfix on tor-0.2.0.3-alpha, found with the help of clang's analyzer.
-
diff --git a/changes/exit-policy-default-is-not-a-prefix b/changes/exit-policy-default-is-not-a-prefix
deleted file mode 100644
index 6eb1e8df9..000000000
--- a/changes/exit-policy-default-is-not-a-prefix
+++ /dev/null
@@ -1,5 +0,0 @@
- o Minor bugfixes:
- - Remove a trailing asterisk from "exit-policy/default" in the
- output of the control port command "GETINFO info/names". Bugfix
- on 0.1.2.5-alpha.
-
diff --git a/changes/feature3049 b/changes/feature3049
deleted file mode 100644
index 7960a1f47..000000000
--- a/changes/feature3049
+++ /dev/null
@@ -1,6 +0,0 @@
- o Major features:
- - Add an __OwningControllerProcess configuration option and a
- TAKEOWNERSHIP control-port command, so that a Tor controller can
- ensure that when it exits, Tor will shut down. Implements
- feature 3049.
-
diff --git a/changes/feature3076 b/changes/feature3076
deleted file mode 100644
index a3dcec874..000000000
--- a/changes/feature3076
+++ /dev/null
@@ -1,14 +0,0 @@
- o Minor features
- - The options SocksPort, ControlPort, and so on now all accept an
- optional value "auto" that opens a socket on an OS-selected port.
- o Minor features (controller)
- - GETINFO net/listeners/(type) now returns a list of the addresses
- and ports that are bound for listeners for a given connection
- type. This is useful for if the user has selected SocksPort
- "auto", and you need to know which port got chosen.
- - There is a ControlPortWriteToFile option that tells Tor to write
- its actual control port or ports to a chosen file. If the option
- ControlPortFileGroupReadable is set, the file is created as
- group-readable.
-
-
diff --git a/changes/geoip-may2011 b/changes/geoip-may2011
deleted file mode 100644
index c908f24b4..000000000
--- a/changes/geoip-may2011
+++ /dev/null
@@ -1,3 +0,0 @@
- o Minor features:
- - Update to the May 1 2011 Maxmind GeoLite Country database.
-
diff --git a/changes/md_cache_replace b/changes/md_cache_replace
deleted file mode 100644
index 88e029c00..000000000
--- a/changes/md_cache_replace
+++ /dev/null
@@ -1,6 +0,0 @@
- o Minor bugfixes
- - Avoid a bug that would keep us from replacing a microdescriptor
- cache on Windows. (We would try to replace the file while still
- holding it open. That's fine on Unix, but Windows doesn't let us
- do that.) Bugfix on 0.2.2.6-alpha; bug found by wanoskarnet.
-
diff --git a/changes/mdesc_null_deref b/changes/mdesc_null_deref
deleted file mode 100644
index 30f028053..000000000
--- a/changes/mdesc_null_deref
+++ /dev/null
@@ -1,5 +0,0 @@
- o Minor bugfixes:
- - Avoid a possible null-pointer dereference when rebuilding the mdesc
- cache without actually having any descriptors to cache. Bugfix on
- 0.2.2.6-alpha. Issue discovered using clang's static analyzer.
-
diff --git a/changes/microdesc_use b/changes/microdesc_use
deleted file mode 100644
index 89faf7c5f..000000000
--- a/changes/microdesc_use
+++ /dev/null
@@ -1,10 +0,0 @@
- o Major features
- - Clients can now use microdescriptors instead of regular descriptors
- to build circuits. Microdescriptors are authority-generated and
- -authenticated summaries of regular descriptors' contents, designed
- to change very rarely. This feature is designed to save bandwidth,
- especially for clients on slow internet connections. It's off
- by default for now, since nearly no caches support it, but it will
- be on-by-default for clients in a future version. You can use the
- UseMicrodescriptors option to turn it on.
-
diff --git a/configure.in b/configure.in
index e5db37060..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.1-alpha-dev)
+AM_INIT_AUTOMAKE(tor, 0.2.3.8-alpha-dev)
AM_CONFIG_HEADER(orconfig.h)
AC_CANONICAL_HOST
@@ -148,6 +148,12 @@ fi
AC_ARG_ENABLE(bufferevents,
AS_HELP_STRING(--enable-bufferevents, use Libevent's buffered IO.))
+dnl check for the correct "ar" when cross-compiling
+AN_MAKEVAR([AR], [AC_PROG_AR])
+AN_PROGRAM([ar], [AC_PROG_AR])
+AC_DEFUN([AC_PROG_AR], [AC_CHECK_TOOL([AR], [ar], [ar])])
+AC_PROG_AR
+
AC_PROG_CC
AC_PROG_CPP
AC_PROG_MAKE_SET
@@ -183,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
])
@@ -270,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])
@@ -282,6 +289,7 @@ dnl exports strlcpy without defining it in a header.
AC_CHECK_FUNCS(
accept4 \
+ clock_gettime \
flock \
ftime \
getaddrinfo \
@@ -290,8 +298,10 @@ AC_CHECK_FUNCS(
gmtime_r \
inet_aton \
localtime_r \
+ lround \
memmem \
prctl \
+ rint \
socketpair \
strlcat \
strlcpy \
@@ -325,6 +335,7 @@ dnl Where do you live, libevent? And how do we call you?
if test "$bwin32" = true; then
TOR_LIB_WS32=-lws2_32
+ TOR_LIB_IPHLPAPI=-liphlpapi
# Some of the cargo-cults recommend -lwsock32 as well, but I don't
# think it's actually necessary.
TOR_LIB_GDI=-lgdi32
@@ -334,6 +345,7 @@ else
fi
AC_SUBST(TOR_LIB_WS32)
AC_SUBST(TOR_LIB_GDI)
+AC_SUBST(TOR_LIB_IPHLPAPI)
dnl We need to do this before we try our disgusting hack below.
AC_CHECK_HEADERS([sys/types.h])
@@ -353,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
@@ -438,7 +447,7 @@ int x = 1;
AC_MSG_CHECKING([whether Libevent is new enough for bufferevents])
AC_COMPILE_IFELSE([AC_LANG_SOURCE([
#include <event2/event.h>
-#if !defined(LIBEVENT_VERSION_NUMBER) || LIBEVENT_VERSION_NUMBER < 0x02000800
+#if !defined(LIBEVENT_VERSION_NUMBER) || LIBEVENT_VERSION_NUMBER < 0x02000d00
#error
int x = y(zz);
#else
@@ -446,7 +455,7 @@ int x = 1;
#endif
])], [ AC_MSG_RESULT([yes]) ],
[ AC_MSG_RESULT([no])
- AC_MSG_ERROR([Libevent does not seem new enough to support bufferevents. We require 2.0.8-rc or later]) ] )
+ AC_MSG_ERROR([Libevent does not seem new enough to support bufferevents. We require 2.0.13-stable or later]) ] )
fi
fi
fi
@@ -545,7 +554,7 @@ if test "$natpmp" = "true"; then
[ int r;
natpmp_t natpmp;
natpmpresp_t response;
- r = initnatpmp(&natpmp);],
+ r = initnatpmp(&natpmp, 0, 0);],
[printf("initnatpmp() returned %d (%s)\n", r, r?"FAILED":"SUCCESS");
exit(0);],
[--with-libnatpmp-dir],
@@ -559,7 +568,7 @@ dnl There are no packages for Debian or Redhat as of this patch
if test "$upnp" = "true"; then
AC_DEFINE(MINIUPNPC, 1, [Define to 1 if we are building with UPnP.])
- TOR_SEARCH_LIBRARY(libminiupnpc, $trylibminiupnpcdir, [-lminiupnpc],
+ TOR_SEARCH_LIBRARY(libminiupnpc, $trylibminiupnpcdir, [-lminiupnpc $TOR_LIB_WS32 $TOR_LIB_IPHLPAPI],
[#include <miniupnpc/miniwget.h>
#include <miniupnpc/miniupnpc.h>
#include <miniupnpc/upnpcommands.h>],
@@ -1123,6 +1132,15 @@ else
enable_gcc_warnings_advisory=no
fi
+# OS X Lion started deprecating the system openssl. Let's just disable
+# all deprecation warnings on OS X.
+case "$host_os" in
+
+ darwin*)
+ CFLAGS="$CFLAGS -Wno-deprecated-declarations"
+ ;;
+esac
+
# Add some more warnings which we use in development but not in the
# released versions. (Some relevant gcc versions can't handle these.)
if test x$enable_gcc_warnings = xyes || test x$enable_gcc_warnings_advisory = xyes; then
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/findMergedChanges.pl b/contrib/findMergedChanges.pl
index 460424f30..46e070f94 100755
--- a/contrib/findMergedChanges.pl
+++ b/contrib/findMergedChanges.pl
@@ -36,18 +36,22 @@ Suggested application:
EOF
}
+my $target_branch = "origin/release-0.2.2";
+
while (@ARGV and $ARGV[0] =~ /^--/) {
my $flag = shift @ARGV;
if ($flag =~ /^--(weird|merged|unmerged|list)/) {
$look_for_type = $1;
+ } elsif ($flag =~ /^--branch=(\S+)/) {
+ $target_branch = $1;
} else {
die "Unrecognized flag $flag";
}
}
for my $changefile (@ARGV) {
- my $n_merged = nChanges("origin/release-0.2.2", $changefile);
- my $n_postmerged = nChanges("origin/release-0.2.2..origin/master", $changefile);
+ my $n_merged = nChanges($target_branch, $changefile);
+ my $n_postmerged = nChanges("${target_branch}..origin/master", $changefile);
my $type;
if ($n_merged != 0 and $n_postmerged == 0) {
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 b559bdb89..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.1-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 7ff9c5f3c..bc409dc0d 100644
--- a/doc/HACKING
+++ b/doc/HACKING
@@ -426,10 +426,10 @@ interesting and understandable.
first entry or two and the last entry most interesting: they're
the ones that skimmers tend to read.
- 2.4) Clean them up
+ 2.4) Clean them up:
Standard idioms:
- "Fixes bug 9999; Bugfix on 0.3.3.3-alpha."
+ "Fixes bug 9999; bugfix on 0.3.3.3-alpha."
One period after a space.
@@ -446,6 +446,11 @@ interesting and understandable.
Present and imperative tense: not past.
+ Try not to let any given section be longer than about a page. Break up
+ long sections into subsections by some sort of common subtopic. This
+ guideline is especially important when organizing Release Notes for
+ new stable releases.
+
If a given changes stanza showed up in a different release (e.g.
maint-0.2.1), be sure to make the stanzas identical (so people can
distinguish if these are the same change).
@@ -456,7 +461,6 @@ interesting and understandable.
2.7) Run it through fmt to make it pretty.
-
3) Compose a short release blurb to highlight the user-facing
changes. Insert said release blurb into the ChangeLog stanza. If it's
a stable release, add it to the ReleaseNotes file too. If we're adding
@@ -469,18 +473,22 @@ 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 and push the tarball to the website in the dist/ directory. Sign
-and push the git tag.
- (That's either "git tag -u <keyid> tor-0.2.x.y-status", then
- "git push origin tag tor-0.2.x.y-status". To sign the
- tarball, "gpg -ba <the_tarball>". Put the files in
- /srv/www-master.torproject.org/htdocs/dist/ on vescum.)
+7) Sign the tarball, then sign and push the git tag:
+ gpg -ba <the_tarball>
+ git tag -u <keyid> tor-0.2.x.y-status
+ git push origin tag tor-0.2.x.y-status
+
+8) scp the tarball and its sig to the website in the dist/ directory
+(i.e. /srv/www-master.torproject.org/htdocs/dist/ on vescum). Edit
+include/versions.wmi to note the new version. From your website checkout,
+run ./publish to build and publish the website.
-8) Edit include/versions.wmi to note the new version. From your website
-checkout, run ./publish to build and publish the website.
+Try not to delay too much between scp'ing the tarball and running
+./publish -- the website has multiple A records and your scp only sent
+it to one of them.
9) Email Erinn and weasel (cc'ing tor-assistants) that a new tarball
is up. This step should probably change to mailing more packagers.
@@ -492,9 +500,14 @@ box. By convention, we enter the version in the form "Tor:
0.2.2.23-alpha" (or whatever the version is), and we select the date as
the date in the ChangeLog.
-11) Wait up to a day or two (for a development release), or until most
+11) Forward-port the ChangeLog.
+
+12) Update the topic in #tor to reflect the new version.
+
+12) Wait up to a day or two (for a development release), or until most
packages are up (for a stable release), and mail the release blurb and
changelog to tor-talk or tor-announce.
(We might be moving to faster announcements, but don't announce until
the website is at least updated.)
+
diff --git a/doc/Makefile.am b/doc/Makefile.am
index 6cc0ea99f..d8d9fbefc 100644
--- a/doc/Makefile.am
+++ b/doc/Makefile.am
@@ -12,19 +12,21 @@
# part of the source distribution, so that people without asciidoc can
# just use the .1 and .html files.
+regular_mans = tor tor-gencert tor-resolve torify
+all_mans = $(regular_mans) tor-fw-helper
+
if USE_ASCIIDOC
if USE_FW_HELPER
-asciidoc_files = tor tor-gencert tor-resolve torify tor-fw-helper
+nodist_man_MANS = $(all_mans:=.1)
+doc_DATA = $(all_mans:=.html)
else
-asciidoc_files = tor tor-gencert tor-resolve torify
+nodist_man_MANS = $(regular_mans:=.1)
+doc_DATA = $(regular_mans:=.html)
endif
-html_in = $(asciidoc_files:=.html.in)
-man_in = $(asciidoc_files:=.1.in)
-txt_in = $(asciidoc_files:=.1.txt)
-nodist_man_MANS = $(asciidoc_files:=.1)
-doc_DATA = $(asciidoc_files:=.html)
+html_in = $(all_mans:=.html.in)
+man_in = $(all_mans:=.1.in)
+txt_in = $(all_mans:=.1.txt)
else
-asciidoc_files =
html_in =
man_in =
txt_in =
diff --git a/doc/nodefamily_routerset b/doc/nodefamily_routerset
deleted file mode 100644
index 0af62e11f..000000000
--- a/doc/nodefamily_routerset
+++ /dev/null
@@ -1,4 +0,0 @@
- o Minor features
- - The NodeFamily option -- which let you declare that you want to
- consider nodes to be part of a family whether they list themselves
- that way or not -- now allows IP address ranges and country codes.
diff --git a/doc/tor.1.txt b/doc/tor.1.txt
index c37c44c7b..7f9bfbbf9 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
@@ -148,10 +154,11 @@ Other options can be specified either on the command-line (--option
**ControlPort** __PORT__|**auto**::
If set, Tor will accept connections on this port and allow those
connections to control the Tor process using the Tor Control Protocol
- (described in control-spec.txt). Note: unless you also specify one of
- **HashedControlPassword** or **CookieAuthentication**, setting this
- option will
- cause Tor to allow any process on the local host to control it. This
+ (described in control-spec.txt). Note: unless you also specify one or
+ more of **HashedControlPassword** or **CookieAuthentication**,
+ setting this option will cause Tor to allow any process on the local
+ host to control it. (Setting both authentication methods means either
+ method is sufficient to authenticate to Tor.) This
option is required for many Tor controllers; most use the value of 9051.
Set it to "auto" to have Tor pick a port for you. (Default: 0).
@@ -173,15 +180,15 @@ Other options can be specified either on the command-line (--option
the control socket readable and writable by the default GID. (Default: 0)
**HashedControlPassword** __hashed_password__::
- Don't allow any connections on the control port except when the other
- process knows the password whose one-way hash is __hashed_password__. You
+ Allow connections on the control port if they present
+ the password whose one-way hash is __hashed_password__. You
can compute the hash of a password by running "tor --hash-password
__password__". You can provide several acceptable passwords by using more
than one HashedControlPassword line.
**CookieAuthentication** **0**|**1**::
- If this option is set to 1, don't allow any connections on the control port
- except when the connecting process knows the contents of a file named
+ If this option is set to 1, allow connections on the control port
+ when the connecting process knows the contents of a file named
"control_auth_cookie", which Tor will create in its data directory. This
authentication method should only be used on systems with good filesystem
security. (Default: 0)
@@ -478,7 +485,7 @@ CLIENT OPTIONS
--------------
The following options are useful only for clients (that is, if
-**SocksPort** is non-zero):
+**SocksPort**, **TransPort**, **DNSPort**, or **NATDPort** is non-zero):
**AllowInvalidNodes** **entry**|**exit**|**middle**|**introduction**|**rendezvous**|**...**::
If some Tor servers are obviously not working right, the directory
@@ -496,13 +503,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)
@@ -540,15 +551,15 @@ 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.
For example, if you try to connect to a hidden service,
but you have excluded all of the hidden service's introduction points,
Tor will connect to one of them anyway. If you do not want this
behavior, set the StrictNodes option (documented below). +
-+
+ +
Note also that if you are a relay, this (and the other node selection
options below) only affects your own circuits that Tor builds for you.
Clients can still build circuits through you to any node. Controllers
@@ -566,22 +577,22 @@ 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 use as exit node---that is, a
node that delivers traffic for you outside the Tor network. +
-+
+ +
Note that if you list too few nodes here, or if you exclude too many exit
nodes with ExcludeExitNodes, you can degrade functionality. For example,
if none of the exits you list allows traffic on port 80 or 443, you won't
be able to browse the web. +
-+
+ +
Note also that not every circuit is used to deliver traffic outside of
the Tor network. It is normal to see non-exit circuits (such as those
used to connect to hidden services, those that do directory fetches,
those used for relay reachability self-tests, and so on) that end
at a non-exit node. To
keep a node from being used entirely, see ExcludeNodes and StrictNodes. +
-+
+ +
The ExcludeNodes option overrides this option: any node listed in both
ExitNodes and ExcludeNodes is treated as excluded. +
-+
+ +
The .exit address notation, if enabled via AllowDotExit, overrides
this option.
@@ -592,7 +603,7 @@ The following options are useful only for clients (that is, if
circuits except for direct connections to directory servers. The Bridge
option overrides this option; if you have configured bridges and
UseBridges is 1, the Bridges are used as your entry nodes. +
-+
+ +
The ExcludeNodes option overrides this option: any node listed in both
EntryNodes and ExcludeNodes is treated as excluded.
@@ -665,7 +676,7 @@ The following options are useful only for clients (that is, if
(e.g. chat and interactive shells). Circuits for streams that use these
ports will contain only high-uptime nodes, to reduce the chance that a node
will go down before the stream is finished. (Default: 21, 22, 706, 1863,
- 5050, 5190, 5222, 5223, 6667, 6697, 8300)
+ 5050, 5190, 5222, 5223, 6523, 6667, 6697, 8300)
**MapAddress** __address__ __newaddress__::
When a request for address arrives to Tor, it will rewrite it to newaddress
@@ -696,17 +707,49 @@ The following options are useful only for clients (that is, if
the same circuit. Currently, two addresses are "too close" if they lie in
the same /16 range. (Default: 1)
-**SocksPort** __PORT__|**auto**::
- Advertise this port to listen for connections from Socks-speaking
+**SOCKSPort** \['address':]__port__|**auto** [_isolation flags_]::
+ Open this port to listen for connections from SOCKS-speaking
applications. Set this to 0 if you don't want to allow application
connections via SOCKS. Set it to "auto" to have Tor pick a port for
- you. (Default: 9050)
-
-**SocksListenAddress** __IP__[:__PORT__]::
+ you. This directive can be specified multiple times to bind
+ to multiple addresses/ports. (Default: 9050) +
+ +
+ The _isolation flags_ arguments give Tor rules for which streams
+ received on this SOCKSPort are allowed to share circuits with one
+ another. Recognized isolation flags are:
+ **IsolateClientAddr**;;
+ 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 circuits with streams for which different
+ SOCKS authentication was provided. (On by default;
+ you can disable it with **NoIsolateSOCKSAuth**.)
+ **IsolateClientProtocol**;;
+ Don't share circuits with streams using a different protocol.
+ (SOCKS 4, SOCKS 5, TransPort connections, NATDPort connections,
+ and DNSPort requests are all considered to be different protocols.)
+ **IsolateDestPort**;;
+ Don't share circuits with streams targetting a different
+ destination port.
+ **IsolateDestAddr**;;
+ Don't share circuits with streams targetting a different
+ destination address.
+ **SessionGroup=**__INT__;;
+ If no other isolation rules would prevent it, allow streams
+ on this port to share circuits with streams from every other
+ port with the same session group. (By default, streams received
+ on different ports are always isolated from one another.)
+
+**SOCKSListenAddress** __IP__[:__PORT__]::
Bind to this address to listen for connections from Socks-speaking
applications. (Default: 127.0.0.1) You can also specify a port (e.g.
192.168.0.1:9100). This directive can be specified multiple times to bind
- to multiple addresses/ports.
+ to multiple addresses/ports. (DEPRECATED: As of 0.2.3.x-alpha, you can
+ now use multiple SOCKSPort entries, and provide addresses for SOCKSPort
+ entries, so SOCKSListenAddress no longer has a purpose. For backward
+ compatibility, SOCKSListenAddress is only allowed when SOCKSPort is just
+ a port number.)
**SocksPolicy** __policy__,__policy__,__...__::
Set an entrance policy for this server, to limit who can connect to the
@@ -718,6 +761,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
@@ -809,28 +859,44 @@ The following options are useful only for clients (that is, if
operating as a relay, and it will never use the public key step if it
doesn't yet know the onion key of the first hop. (Default: 1)
-**TransPort** __PORT__|**auto**::
- If non-zero, enables transparent proxy support on __PORT__ (by convention,
- 9040). Requires OS support for transparent proxies, such as BSDs' pf or
+**TransPort** \['address':]__port__|**auto** [_isolation flags_]::
+ Open this port to listen for transparent proxy connections. Set this to
+ 0 if you don't want to allow transparent proxy connections. Set the port
+ to "auto" to have Tor pick a port for you. This directive can be
+ specified multiple times to bind to multiple addresses/ports. See
+ SOCKSPort for an explanation of isolation flags. +
+ +
+ TransPort requires OS support for transparent proxies, such as BSDs' pf or
Linux's IPTables. If you're planning to use Tor as a transparent proxy for
a network, you'll want to examine and change VirtualAddrNetwork from the
default setting. You'll also want to set the TransListenAddress option for
- the network you'd like to proxy. Set it to "auto" to have Tor pick a
- port for you. (Default: 0).
+ the network you'd like to proxy. (Default: 0).
**TransListenAddress** __IP__[:__PORT__]::
Bind to this address to listen for transparent proxy connections. (Default:
127.0.0.1). This is useful for exporting a transparent proxy server to an
- entire network.
-
-**NATDPort** __PORT__|**auto**::
- Allow old versions of ipfw (as included in old versions of FreeBSD, etc.)
- to send connections through Tor using the NATD protocol. This option is
- only for people who cannot use TransPort. Set it to "auto" to have Tor
- pick a port for you. (Default: 0)
+ entire network. (DEPRECATED: As of 0.2.3.x-alpha, you can
+ now use multiple TransPort entries, and provide addresses for TransPort
+ entries, so TransListenAddress no longer has a purpose. For backward
+ compatibility, TransListenAddress is only allowed when TransPort is just
+ a port number.)
+
+**NATDPort** \['address':]__port__|**auto** [_isolation flags_]::
+ Open this port to listen for connections from old versions of ipfw (as
+ included in old versions of FreeBSD, etc) using the NATD protocol.
+ Use 0 if you don't want to allow NATD connections. Set the port
+ to "auto" to have Tor pick a port for you. This directive can be
+ specified multiple times to bind to multiple addresses/ports. See
+ SOCKSPort for an explanation of isolation flags. +
+ +
+ This option is only for people who cannot use TransPort. (Default: 0)
**NATDListenAddress** __IP__[:__PORT__]::
- Bind to this address to listen for NATD connections. (Default: 127.0.0.1).
+ Bind to this address to listen for NATD connections. (DEPRECATED: As of
+ 0.2.3.x-alpha, you can now use multiple NATDPort entries, and provide
+ addresses for NATDPort entries, so NATDListenAddress no longer has a
+ purpose. For backward compatibility, NATDListenAddress is only allowed
+ when NATDPort is just a port number.)
**AutomapHostsOnResolve** **0**|**1**::
When this option is enabled, and we get a request to resolve an address
@@ -843,13 +909,19 @@ The following options are useful only for clients (that is, if
A comma-separated list of suffixes to use with **AutomapHostsOnResolve**.
The "." suffix is equivalent to "all addresses." (Default: .exit,.onion).
-**DNSPort** __PORT__|**auto**::
- If non-zero, Tor listens for UDP DNS requests on this port and resolves
- them anonymously. Set it to "auto" to have Tor pick a port for
- you. (Default: 0).
+**DNSPort** \['address':]__port__|**auto** [_isolation flags_]::
+ If non-zero, open this port to listen for UDP DNS requests, and resolve
+ them anonymously. Set the port to "auto" to have Tor pick a port for
+ you. This directive can be specified multiple times to bind to multiple
+ addresses/ports. See SOCKSPort for an explanation of isolation
+ flags. (Default: 0).
**DNSListenAddress** __IP__[:__PORT__]::
- Bind to this address to listen for DNS connections. (Default: 127.0.0.1).
+ Bind to this address to listen for DNS connections. (DEPRECATED: As of
+ 0.2.3.x-alpha, you can now use multiple DNSPort entries, and provide
+ addresses for DNSPort entries, so DNSListenAddress no longer has a
+ purpose. For backward compatibility, DNSListenAddress is only allowed
+ when DNSPort is just a port number.)
**ClientDNSRejectInternalAddresses** **0**|**1**::
If true, Tor does not believe any anonymously retrieved DNS answer that
@@ -890,6 +962,16 @@ The following options are useful only for clients (that is, if
that have the **AllowSingleHopExits** option turned on to build
one-hop Tor connections. (Default: 0)
+**OptimisticData** **0**|**1**|**auto**::
+ When this option is set, and Tor is using an exit node that supports
+ the feature, it will try optimistically to send data to the exit node
+ without waiting for the exit node to report whether the connection
+ succeeded. This can save a round-trip time for protocols like HTTP
+ where the client talks first. If OptimisticData is set to **auto**,
+ Tor will look at the UseOptimisticData parameter in the networkstatus.
+ (Default: auto)
+
+
SERVER OPTIONS
--------------
@@ -1234,7 +1316,7 @@ if DirPort is non-zero):
**MinUptimeHidServDirectoryV2** __N__ **seconds**|**minutes**|**hours**|**days**|**weeks**::
Minimum uptime of a v2 hidden service directory to be accepted as such by
- authoritative directories. (Default: 24 hours)
+ authoritative directories. (Default: 25 hours)
**DirPort** __PORT__|**auto**::
If this option is nonzero, advertise the directory service on this port.
@@ -1338,6 +1420,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:
@@ -1386,6 +1478,11 @@ DIRECTORY AUTHORITY SERVER OPTIONS
that fine-grained information about nodes can be discarded when it hasn't
changed for a given amount of time. (Default: 24 hours)
+**VoteOnHidServDirectoriesV2** **0**|**1**::
+ When this option is set in addition to **AuthoritativeDirectory**, Tor
+ votes on whether to accept relays as hidden service directories.
+ (Default: 1)
+
HIDDEN SERVICE OPTIONS
----------------------
@@ -1394,7 +1491,7 @@ The following options are used to configure a hidden service.
**HiddenServiceDir** __DIRECTORY__::
Store data files for a hidden service in DIRECTORY. Every hidden service
must have a separate directory. You may use this option multiple times to
- specify multiple services.
+ specify multiple services. DIRECTORY must be an existing directory.
**HiddenServicePort** __VIRTPORT__ [__TARGET__]::
Configure a virtual port VIRTPORT for a hidden service. You may use this
diff --git a/src/common/Makefile.am b/src/common/Makefile.am
index 48218491b..2244fe58d 100644
--- a/src/common/Makefile.am
+++ b/src/common/Makefile.am
@@ -1,7 +1,7 @@
noinst_LIBRARIES = libor.a libor-crypto.a libor-event.a
-EXTRA_DIST = common_sha1.i sha256.c
+EXTRA_DIST = common_sha1.i sha256.c Makefile.nmake
#CFLAGS = -Wall -Wpointer-arith -O2
diff --git a/src/common/Makefile.nmake b/src/common/Makefile.nmake
new file mode 100644
index 000000000..c8b598866
--- /dev/null
+++ b/src/common/Makefile.nmake
@@ -0,0 +1,20 @@
+all: libor.lib libor-crypto.lib libor-event.lib
+
+CFLAGS = /I ..\win32 /I ..\..\..\build-alpha\include
+
+LIBOR_OBJECTS = address.obj compat.obj container.obj di_ops.obj \
+ log.obj memarea.obj mempool.obj procmon.obj util.obj \
+ util_codedigest.obj
+
+LIBOR_CRYPTO_OBJECTS = aes.obj crypto.obj torgzip.obj tortls.obj
+
+LIBOR_EVENT_OBJECTS = compat_libevent.obj
+
+libor.lib: $(LIBOR_OBJECTS)
+ lib $(LIBOR_OBJECTS) /out:libor.lib
+
+libor-crypto.lib: $(LIBOR_CRYPTO_OBJECTS)
+ lib $(LIBOR_CRYPTO_OBJECTS) /out:libor-crypto.lib
+
+libor-event.lib: $(LIBOR_EVENT_OBJECTS)
+ lib $(LIBOR_EVENT_OBJECTS) /out:libor-event.lib
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 d0c2d5e15..f40e428cc 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;
}
@@ -958,8 +975,10 @@ fmt_addr(const tor_addr_t *addr)
{
static char buf[TOR_ADDR_BUF_LEN];
if (!addr) return "<null>";
- tor_addr_to_str(buf, addr, sizeof(buf), 0);
- return buf;
+ if (tor_addr_to_str(buf, addr, sizeof(buf), 0))
+ return buf;
+ else
+ return "???";
}
/** Like fmt_addr(), but takes <b>addr</b> as a host-order IPv4
@@ -982,7 +1001,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;
@@ -1010,7 +1029,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;
@@ -1146,6 +1165,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
@@ -1157,7 +1190,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;
@@ -1167,7 +1200,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..359b0264d 100644
--- a/src/common/address.h
+++ b/src/common/address.h
@@ -154,19 +154,19 @@ int tor_addr_is_internal(const tor_addr_t *ip, int for_listening) ATTR_PURE;
/** 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 +181,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 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..9c03b8085 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"
@@ -23,72 +19,21 @@
#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. */
+/* We have 2 strategies for getting AES: Via OpenSSL's AES_encrypt function,
+ * via OpenSSL's EVP_EncryptUpdate function. */
/** 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
-#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) && \
+/* Here we pick which to use, if none is force-defined above */
+#if (!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
- *
- * 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
+#define USE_OPENSSL_EVP
-# 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 */
+#endif
/* Include OpenSSL headers as needed. */
#ifdef USE_OPENSSL_AES
@@ -98,41 +43,6 @@
# 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
-
-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
-
/*======================================================================*/
/* Interface to AES code, and counter implementation */
@@ -143,36 +53,31 @@ struct aes_cnt_cipher {
EVP_CIPHER_CTX key;
#elif defined(USE_OPENSSL_AES)
AES_KEY key;
-#else
- u32 rk[4*(MAXNR+1)];
- int nr;
#endif
-#if !defined(WORDS_BIGENDIAN) || defined(USE_RIJNDAEL_COUNTER_OPTIMIZATION)
+#if !defined(WORDS_BIGENDIAN)
#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;
+ uint8_t pos;
};
#if !defined(USING_COUNTER_VARS)
@@ -194,11 +99,6 @@ _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)
{
@@ -208,9 +108,6 @@ _aes_fill_buf(aes_cnt_cipher_t *cipher)
}
#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
}
@@ -243,9 +140,6 @@ aes_set_key(aes_cnt_cipher_t *cipher, const char *key, int key_bits)
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;
@@ -253,9 +147,8 @@ aes_set_key(aes_cnt_cipher_t *cipher, const char *key, int key_bits)
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;
_aes_fill_buf(cipher);
@@ -275,7 +168,7 @@ aes_free_cipher(aes_cnt_cipher_t *cipher)
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
@@ -377,705 +270,8 @@ 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
_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..b2591942b 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;
diff --git a/src/common/compat.c b/src/common/compat.c
index 1d00e30c4..9a2c9d764 100644
--- a/src/common/compat.c
+++ b/src/common/compat.c
@@ -444,7 +444,7 @@ tor_vasprintf(char **strp, const char *fmt, va_list args)
*
* This function is <em>not</em> timing-safe.
*
- * Requires that nlen be greater than zero.
+ * Requires that <b>nlen</b> be greater than zero.
*/
const void *
tor_memmem(const void *_haystack, size_t hlen,
@@ -870,7 +870,7 @@ socket_accounting_unlock(void)
* Windows, where close()ing a socket doesn't work. Returns 0 on success, -1
* on failure. */
int
-tor_close_socket(int s)
+tor_close_socket(tor_socket_t s)
{
int r = 0;
@@ -923,8 +923,10 @@ tor_close_socket(int s)
/** Helper: if DEBUG_SOCKET_COUNTING is enabled, remember that <b>s</b> is
* now an open socket. */
static INLINE void
-mark_socket_open(int s)
+mark_socket_open(tor_socket_t s)
{
+ /* XXXX This bitarray business will NOT work on windows: sockets aren't
+ small ints there. */
if (s > max_socket) {
if (max_socket == -1) {
open_sockets = bitarray_init_zero(s+128);
@@ -946,16 +948,16 @@ mark_socket_open(int s)
/** @} */
/** As socket(), but counts the number of open sockets. */
-int
+tor_socket_t
tor_open_socket(int domain, int type, int protocol)
{
- int s;
+ tor_socket_t s;
#ifdef SOCK_CLOEXEC
#define LINUX_CLOEXEC_OPEN_SOCKET
type |= SOCK_CLOEXEC;
#endif
s = socket(domain, type, protocol);
- if (s >= 0) {
+ if (SOCKET_OK(s)) {
#if !defined(LINUX_CLOEXEC_OPEN_SOCKET) && defined(FD_CLOEXEC)
fcntl(s, F_SETFD, FD_CLOEXEC);
#endif
@@ -968,17 +970,17 @@ tor_open_socket(int domain, int type, int protocol)
}
/** As socket(), but counts the number of open sockets. */
-int
+tor_socket_t
tor_accept_socket(int sockfd, struct sockaddr *addr, socklen_t *len)
{
- int s;
+ tor_socket_t s;
#if defined(HAVE_ACCEPT4) && defined(SOCK_CLOEXEC)
#define LINUX_CLOEXEC_ACCEPT
s = accept4(sockfd, addr, len, SOCK_CLOEXEC);
#else
s = accept(sockfd, addr, len);
#endif
- if (s >= 0) {
+ if (SOCKET_OK(s)) {
#if !defined(LINUX_CLOEXEC_ACCEPT) && defined(FD_CLOEXEC)
fcntl(s, F_SETFD, FD_CLOEXEC);
#endif
@@ -1004,7 +1006,7 @@ get_n_open_sockets(void)
/** Turn <b>socket</b> into a nonblocking socket.
*/
void
-set_socket_nonblocking(int socket)
+set_socket_nonblocking(tor_socket_t socket)
{
#if defined(MS_WINDOWS)
unsigned long nonblocking = 1;
@@ -1032,7 +1034,7 @@ set_socket_nonblocking(int socket)
**/
/* It would be nicer just to set errno, but that won't work for windows. */
int
-tor_socketpair(int family, int type, int protocol, int fd[2])
+tor_socketpair(int family, int type, int protocol, tor_socket_t fd[2])
{
//don't use win32 socketpairs (they are always bad)
#if defined(HAVE_SOCKETPAIR) && !defined(MS_WINDOWS)
@@ -1066,9 +1068,9 @@ tor_socketpair(int family, int type, int protocol, int fd[2])
* for now, and really, when localhost is down sometimes, we
* have other problems too.
*/
- int listener = -1;
- int connector = -1;
- int acceptor = -1;
+ tor_socket_t listener = -1;
+ tor_socket_t connector = -1;
+ tor_socket_t acceptor = -1;
struct sockaddr_in listen_addr;
struct sockaddr_in connect_addr;
int size;
@@ -1278,7 +1280,8 @@ log_credential_status(void)
/* Read, effective and saved GIDs */
gid_t rgid, egid, sgid;
/* Supplementary groups */
- gid_t sup_gids[NGROUPS_MAX + 1];
+ gid_t *sup_gids = NULL;
+ int sup_gids_size;
/* Number of supplementary groups */
int ngids;
@@ -1324,9 +1327,19 @@ log_credential_status(void)
#endif
/* log supplementary groups */
- if ((ngids = getgroups(NGROUPS_MAX + 1, sup_gids)) < 0) {
+ sup_gids_size = 64;
+ sup_gids = tor_malloc(sizeof(gid_t) * 64);
+ while ((ngids = getgroups(sup_gids_size, sup_gids)) < 0 &&
+ errno == EINVAL &&
+ sup_gids_size < NGROUPS_MAX) {
+ sup_gids_size *= 2;
+ sup_gids = tor_realloc(sup_gids, sizeof(gid_t) * sup_gids_size);
+ }
+
+ if (ngids < 0) {
log_warn(LD_GENERAL, "Error getting supplementary GIDs: %s",
strerror(errno));
+ tor_free(sup_gids);
return -1;
} else {
int i, retval = 0;
@@ -1356,6 +1369,7 @@ log_credential_status(void)
tor_free(cp);
});
smartlist_free(elts);
+ tor_free(sup_gids);
return retval;
}
@@ -1618,7 +1632,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;
@@ -1659,7 +1673,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;
@@ -1719,24 +1733,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 {
@@ -1847,6 +1867,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" },
@@ -1903,7 +1924,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,
@@ -2678,11 +2699,11 @@ in_main_thread(void)
*/
#if defined(MS_WINDOWS)
int
-tor_socket_errno(int sock)
+tor_socket_errno(tor_socket_t sock)
{
int optval, optvallen=sizeof(optval);
int err = WSAGetLastError();
- if (err == WSAEWOULDBLOCK && sock >= 0) {
+ if (err == WSAEWOULDBLOCK && SOCKET_OK(sock)) {
if (getsockopt(sock, SOL_SOCKET, SO_ERROR, (void*)&optval, &optvallen))
return err;
if (optval)
diff --git a/src/common/compat.h b/src/common/compat.h
index a317ea45c..b005dd297 100644
--- a/src/common/compat.h
+++ b/src/common/compat.h
@@ -9,8 +9,12 @@
#include "orconfig.h"
#include "torint.h"
#ifdef MS_WINDOWS
+#ifndef WIN32_WINNT
#define WIN32_WINNT 0x400
+#endif
+#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x400
+#endif
#define WIN32_LEAN_AND_MEAN
#if defined(_MSC_VER) && (_MSC_VER < 1300)
#include <winsock.h>
@@ -41,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
@@ -179,6 +180,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. */
@@ -395,9 +400,18 @@ int tor_fd_seekend(int fd);
typedef int socklen_t;
#endif
-int tor_close_socket(int s);
-int tor_open_socket(int domain, int type, int protocol);
-int tor_accept_socket(int sockfd, struct sockaddr *addr, socklen_t *len);
+#ifdef MS_WINDOWS
+#define tor_socket_t intptr_t
+#define SOCKET_OK(s) ((unsigned)(s) != INVALID_SOCKET)
+#else
+#define tor_socket_t int
+#define SOCKET_OK(s) ((s) >= 0)
+#endif
+
+int tor_close_socket(tor_socket_t s);
+tor_socket_t tor_open_socket(int domain, int type, int protocol);
+tor_socket_t tor_accept_socket(int sockfd, struct sockaddr *addr,
+ socklen_t *len);
int get_n_open_sockets(void);
#define tor_socket_send(s, buf, len, flags) send(s, buf, len, flags)
@@ -469,8 +483,8 @@ int tor_inet_aton(const char *cp, struct in_addr *addr) ATTR_NONNULL((1,2));
const char *tor_inet_ntop(int af, const void *src, char *dst, size_t len);
int tor_inet_pton(int af, const char *src, void *dst);
int tor_lookup_hostname(const char *name, uint32_t *addr) ATTR_NONNULL((1,2));
-void set_socket_nonblocking(int socket);
-int tor_socketpair(int family, int type, int protocol, int fd[2]);
+void set_socket_nonblocking(tor_socket_t socket);
+int tor_socketpair(int family, int type, int protocol, tor_socket_t fd[2]);
int network_init(void);
/* For stupid historical reasons, windows sockets have an independent
@@ -497,7 +511,7 @@ int network_init(void);
((e) == WSAEMFILE || (e) == WSAENOBUFS)
/** Return true if e is EADDRINUSE or the local equivalent. */
#define ERRNO_IS_EADDRINUSE(e) ((e) == WSAEADDRINUSE)
-int tor_socket_errno(int sock);
+int tor_socket_errno(tor_socket_t sock);
const char *tor_socket_strerror(int e);
#else
#define ERRNO_IS_EAGAIN(e) ((e) == EAGAIN)
@@ -608,7 +622,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 e0c7e3a2d..0cedef8d5 100644
--- a/src/common/compat_libevent.c
+++ b/src/common/compat_libevent.c
@@ -19,6 +19,10 @@
#ifdef HAVE_EVENT2_EVENT_H
#include <event2/event.h>
+#include <event2/thread.h>
+#ifdef USE_BUFFEREVENTS
+#include <event2/bufferevent.h>
+#endif
#else
#include <event.h>
#endif
@@ -163,6 +167,17 @@ struct event_base *the_event_base = NULL;
#endif
#endif
+#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)
+{
+ return using_iocp_bufferevents;
+}
+#endif
+
/** Initialize the Libevent library and set up the event base. */
void
tor_libevent_initialize(tor_libevent_cfg *torcfg)
@@ -180,13 +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)
+ 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);
@@ -201,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. */
@@ -219,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. */
@@ -264,7 +326,7 @@ tor_decode_libevent_version(const char *v)
/* Try the new preferred "1.4.11-stable" format.
* Also accept "1.4.14b-stable". */
- fields = sscanf(v, "%u.%u.%u%c%c", &major, &minor, &patchlevel, &c, &e);
+ fields = tor_sscanf(v, "%u.%u.%u%c%c", &major, &minor, &patchlevel, &c, &e);
if (fields == 3 ||
((fields == 4 || fields == 5 ) && (c == '-' || c == '_')) ||
(fields == 5 && TOR_ISALPHA(c) && (e == '-' || e == '_'))) {
@@ -272,7 +334,7 @@ tor_decode_libevent_version(const char *v)
}
/* Try the old "1.3e" format. */
- fields = sscanf(v, "%u.%u%c%c", &major, &minor, &c, &extra);
+ fields = tor_sscanf(v, "%u.%u%c%c", &major, &minor, &c, &extra);
if (fields == 3 && TOR_ISALPHA(c)) {
return V_OLD(major, minor, c);
} else if (fields == 2) {
@@ -581,24 +643,50 @@ 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)
+{
+ struct bufferevent *u;
+ while ((u = bufferevent_get_underlying(bev)) != NULL)
+ bev = u;
+ return bev;
+}
+
+int
+tor_set_bufferevent_rate_limit(struct bufferevent *bev,
+ struct ev_token_bucket_cfg *cfg)
+{
+ return bufferevent_set_rate_limit(tor_get_root_bufferevent(bev), cfg);
+}
+
+int
+tor_add_bufferevent_to_rate_limit_group(struct bufferevent *bev,
+ struct bufferevent_rate_limit_group *g)
+{
+ return bufferevent_add_to_rate_limit_group(tor_get_root_bufferevent(bev), g);
+}
#endif
diff --git a/src/common/compat_libevent.h b/src/common/compat_libevent.h
index ecf25806d..024729717 100644
--- a/src/common/compat_libevent.h
+++ b/src/common/compat_libevent.h
@@ -10,11 +10,14 @@ struct event;
struct event_base;
#ifdef USE_BUFFEREVENTS
struct bufferevent;
+struct ev_token_bucket_cfg;
+struct bufferevent_rate_limit_group;
#endif
#ifdef HAVE_EVENT2_EVENT_H
#include <event2/util.h>
-#else
+#elif !defined(EVUTIL_SOCKET_DEFINED)
+#define EVUTIL_SOCKET_DEFINED
#define evutil_socket_t int
#endif
@@ -59,6 +62,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);
@@ -70,8 +74,12 @@ 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,
+ struct ev_token_bucket_cfg *cfg);
+int tor_add_bufferevent_to_rate_limit_group(struct bufferevent *bev,
+ struct bufferevent_rate_limit_group *g);
#endif
#endif
diff --git a/src/common/container.c b/src/common/container.c
index 8635409d8..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));
}
}
@@ -337,7 +346,8 @@ smartlist_insert(smartlist_t *sl, int idx, void *val)
/**
* Split a string <b>str</b> along all occurrences of <b>sep</b>,
- * adding the split strings, in order, to <b>sl</b>.
+ * appending the (newly allocated) split strings, in order, to
+ * <b>sl</b>. Return the number of strings added to <b>sl</b>.
*
* If <b>flags</b>&amp;SPLIT_SKIP_SPACE is true, remove initial and
* trailing space from each entry.
@@ -346,7 +356,7 @@ smartlist_insert(smartlist_t *sl, int idx, void *val)
* If <b>flags</b>&amp;SPLIT_STRIP_SPACE is true, strip spaces from each
* split string.
*
- * If max>0, divide the string into no more than <b>max</b> pieces. If
+ * If <b>max</b>\>0, divide the string into no more than <b>max</b> pieces. If
* <b>sep</b> is NULL, split on any sequence of horizontal space.
*/
int
diff --git a/src/common/crypto.c b/src/common/crypto.c
index 684ede06a..f2ef83352 100644
--- a/src/common/crypto.c
+++ b/src/common/crypto.c
@@ -13,8 +13,12 @@
#include "orconfig.h"
#ifdef MS_WINDOWS
+#ifndef WIN32_WINNT
#define WIN32_WINNT 0x400
+#endif
+#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x400
+#endif
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <wincrypt.h>
@@ -60,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
@@ -777,6 +779,17 @@ crypto_pk_keysize(crypto_pk_env_t *env)
return (size_t) RSA_size(env->key);
}
+/** Return the size of the public key modulus of <b>env</b>, in bits. */
+int
+crypto_pk_num_bits(crypto_pk_env_t *env)
+{
+ tor_assert(env);
+ tor_assert(env->key);
+ tor_assert(env->key->n);
+
+ return BN_num_bits(env->key->n);
+}
+
/** Increase the reference count of <b>env</b>, and return it.
*/
crypto_pk_env_t *
@@ -1191,9 +1204,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);
@@ -1234,6 +1244,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
@@ -1652,6 +1688,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;
}
@@ -1699,6 +1739,74 @@ 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 */
/** Shared P parameter for our circuit-crypto DH key exchanges. */
@@ -2134,13 +2242,14 @@ crypto_rand(char *to, size_t n)
}
/** Return a pseudorandom integer, chosen uniformly from the values
- * between 0 and <b>max</b>-1. */
+ * between 0 and <b>max</b>-1 inclusive. <b>max</b> must be between 1 and
+ * INT_MAX+1, inclusive. */
int
crypto_rand_int(unsigned int max)
{
unsigned int val;
unsigned int cutoff;
- tor_assert(max < UINT_MAX);
+ tor_assert(max <= ((unsigned int)INT_MAX)+1);
tor_assert(max > 0); /* don't div by 0 */
/* We ignore any values that are >= 'cutoff,' to avoid biasing the
diff --git a/src/common/crypto.h b/src/common/crypto.h
index f28087589..80c10296a 100644
--- a/src/common/crypto.h
+++ b/src/common/crypto.h
@@ -119,6 +119,7 @@ int crypto_pk_write_private_key_to_filename(crypto_pk_env_t *env,
int crypto_pk_check_key(crypto_pk_env_t *env);
int crypto_pk_cmp_keys(crypto_pk_env_t *a, crypto_pk_env_t *b);
size_t crypto_pk_keysize(crypto_pk_env_t *env);
+int crypto_pk_num_bits(crypto_pk_env_t *env);
crypto_pk_env_t *crypto_pk_dup_key(crypto_pk_env_t *orig);
crypto_pk_env_t *crypto_pk_copy_full(crypto_pk_env_t *orig);
int crypto_pk_key_is_private(const crypto_pk_env_t *key);
@@ -149,6 +150,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);
@@ -194,6 +196,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/log.c b/src/common/log.c
index abdce142a..97400623e 100644
--- a/src/common/log.c
+++ b/src/common/log.c
@@ -899,7 +899,7 @@ log_level_to_string(int level)
static const char *domain_list[] = {
"GENERAL", "CRYPTO", "NET", "CONFIG", "FS", "PROTOCOL", "MM",
"HTTP", "APP", "CONTROL", "CIRC", "REND", "BUG", "DIR", "DIRSERV",
- "OR", "EDGE", "ACCT", "HIST", "HANDSHAKE", NULL
+ "OR", "EDGE", "ACCT", "HIST", "HANDSHAKE", "HEARTBEAT", NULL
};
/** Return a bitmask for the log domain for which <b>domain</b> is the name,
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/procmon.c b/src/common/procmon.c
index 8fcc1afb7..5c10e9a22 100644
--- a/src/common/procmon.c
+++ b/src/common/procmon.c
@@ -252,7 +252,7 @@ tor_process_monitor_poll_cb(evutil_socket_t unused1, short unused2,
if (!GetExitCodeProcess(procmon->hproc, &exit_code)) {
char *errmsg = format_win32_error(GetLastError());
log_warn(procmon->log_domain, "Error \"%s\" occurred while polling "
- "handle for monitored process %d; assuming it's dead."
+ "handle for monitored process %d; assuming it's dead.",
errmsg, procmon->pid);
tor_free(errmsg);
its_dead_jim = 1;
@@ -287,12 +287,12 @@ tor_process_monitor_poll_cb(evutil_socket_t unused1, short unused2,
if (!its_dead_jim)
log_info(procmon->log_domain, "Failed to open handle to monitored "
- "process %d, and error code %d (%s) is not 'invalid "
+ "process %d, and error code %lu (%s) is not 'invalid "
"parameter' -- assuming the process is still alive.",
procmon->pid,
- err_code, err_msg);
+ err_code, errmsg);
- tor_free(err_msg);
+ tor_free(errmsg);
}
}
#else
diff --git a/src/common/torgzip.c b/src/common/torgzip.c
index 2937c67de..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"
@@ -43,11 +44,7 @@
#define off64_t int64_t
#endif
-#ifdef _MSC_VER
-#include "..\..\contrib\zlib\zlib.h"
-#else
#include <zlib.h>
-#endif
/** Set to 1 if zlib is a version that supports gzip; set to 0 if it doesn't;
* set to -1 if we haven't checked yet. */
diff --git a/src/common/torint.h b/src/common/torint.h
index 0b5c29adc..af975471f 100644
--- a/src/common/torint.h
+++ b/src/common/torint.h
@@ -111,6 +111,15 @@ typedef signed int int32_t;
typedef unsigned int uint32_t;
#define HAVE_UINT32_T
#endif
+#ifndef UINT16_MAX
+#define UINT16_MAX 0xffffu
+#endif
+#ifndef INT16_MAX
+#define INT16_MAX 0x7fff
+#endif
+#ifndef INT16_MIN
+#define INT16_MIN (-INT16_MAX-1)
+#endif
#ifndef UINT32_MAX
#define UINT32_MAX 0xffffffffu
#endif
diff --git a/src/common/tortls.c b/src/common/tortls.c
index aaf2fdaac..554deb7bd 100644
--- a/src/common/tortls.c
+++ b/src/common/tortls.c
@@ -22,8 +22,12 @@
#include <assert.h>
#ifdef MS_WINDOWS /*wrkard for dtls1.h >= 0.9.8m of "#include <winsock.h>"*/
+ #ifndef WIN32_WINNT
#define WIN32_WINNT 0x400
+ #endif
+ #ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x400
+ #endif
#define WIN32_LEAN_AND_MEAN
#if defined(_MSC_VER) && (_MSC_VER < 1300)
#include <winsock.h>
@@ -47,6 +51,7 @@
#ifdef USE_BUFFEREVENTS
#include <event2/bufferevent_ssl.h>
#include <event2/buffer.h>
+#include <event2/event.h>
#include "compat_libevent.h"
#endif
@@ -92,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
@@ -190,9 +207,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. */
@@ -222,6 +243,40 @@ ssl_state_to_string(int ssl_state)
return buf;
}
+/** Write a description of the current state of <b>tls</b> into the
+ * <b>sz</b>-byte buffer at <b>buf</b>. */
+void
+tor_tls_get_state_description(tor_tls_t *tls, char *buf, size_t sz)
+{
+ const char *ssl_state;
+ const char *tortls_state;
+
+ if (PREDICT_UNLIKELY(!tls || !tls->ssl)) {
+ strlcpy(buf, "(No SSL object)", sz);
+ return;
+ }
+
+ ssl_state = ssl_state_to_string(tls->ssl->state);
+ switch (tls->state) {
+#define CASE(st) case TOR_TLS_ST_##st: tortls_state = " in "#st ; break
+ CASE(HANDSHAKE);
+ CASE(OPEN);
+ CASE(GOTCLOSE);
+ CASE(SENTCLOSE);
+ CASE(CLOSED);
+ CASE(RENEGOTIATE);
+#undef CASE
+ case TOR_TLS_ST_BUFFEREVENT:
+ tortls_state = "";
+ break;
+ default:
+ tortls_state = " in unknown TLS state";
+ break;
+ }
+
+ tor_snprintf(buf, sz, "%s%s", ssl_state, tortls_state);
+}
+
void
tor_tls_log_one_error(tor_tls_t *tls, unsigned long err,
int severity, int domain, const char *doing)
@@ -235,6 +290,22 @@ tor_tls_log_one_error(tor_tls_t *tls, unsigned long err,
addr = tls ? tls->address : NULL;
+ /* Some errors are known-benign, meaning they are the fault of the other
+ * side of the connection. The caller doesn't know this, so override the
+ * priority for those cases. */
+ switch (ERR_GET_REASON(err)) {
+ case SSL_R_HTTP_REQUEST:
+ case SSL_R_HTTPS_PROXY_REQUEST:
+ case SSL_R_RECORD_LENGTH_MISMATCH:
+ case SSL_R_RECORD_TOO_LARGE:
+ case SSL_R_UNKNOWN_PROTOCOL:
+ case SSL_R_UNSUPPORTED_PROTOCOL:
+ severity = LOG_INFO;
+ break;
+ default:
+ break;
+ }
+
msg = (const char*)ERR_reason_error_string(err);
lib = (const char*)ERR_lib_error_string(err);
func = (const char*)ERR_func_error_string(err);
@@ -615,6 +686,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
@@ -623,13 +825,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)
@@ -660,7 +1021,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;
@@ -676,7 +1037,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;
@@ -688,7 +1050,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);
@@ -703,10 +1066,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) {
@@ -728,39 +1093,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 */
@@ -792,27 +1179,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);
@@ -826,6 +1217,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;
@@ -838,12 +1232,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;
}
@@ -899,6 +1297,13 @@ tor_tls_client_is_using_v2_ciphers(const SSL *ssl, const char *address)
return 1;
}
+static void
+tor_tls_debug_state_callback(const SSL *ssl, int type, int val)
+{
+ log_debug(LD_HANDSHAKE, "SSL %p is now in state %s [type=%d,val=%d].",
+ ssl, ssl_state_to_string(ssl->state), type, val);
+}
+
/** 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
@@ -910,6 +1315,9 @@ tor_tls_server_info_callback(const SSL *ssl, int type, int val)
{
tor_tls_t *tls;
(void) val;
+
+ tor_tls_debug_state_callback(ssl, type, val);
+
if (type != SSL_CB_ACCEPT_LOOP)
return;
if (ssl->state != SSL3_ST_SW_SRVR_HELLO_A)
@@ -1096,8 +1504,11 @@ tor_tls_new(int sock, int isServer)
#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);
+ }
/* Not expected to get called. */
tls_log_errors(NULL, LOG_WARN, LD_NET, "creating tor_tls_t object");
@@ -1131,7 +1542,7 @@ tor_tls_set_renegotiate_callback(tor_tls_t *tls,
if (cb) {
SSL_set_info_callback(tls->ssl, tor_tls_server_info_callback);
} else {
- SSL_set_info_callback(tls->ssl, NULL);
+ SSL_set_info_callback(tls->ssl, tor_tls_debug_state_callback);
}
#endif
}
@@ -1501,9 +1912,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;
@@ -1513,9 +1936,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;
@@ -1537,9 +1961,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 */
@@ -1641,34 +2065,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:
@@ -1680,6 +2095,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
@@ -1763,6 +2204,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
@@ -1779,6 +2306,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.
@@ -1825,7 +2382,7 @@ tor_tls_init_bufferevent(tor_tls_t *tls, struct bufferevent *bufev_in,
const enum bufferevent_ssl_state state = receiving ?
BUFFEREVENT_SSL_ACCEPTING : BUFFEREVENT_SSL_CONNECTING;
- if (filter) {
+ if (filter || tor_libevent_using_iocp_bufferevents()) {
/* Grab an extra reference to the SSL, since BEV_OPT_CLOSE_ON_FREE
means that the SSL will get freed too.
@@ -1838,6 +2395,10 @@ tor_tls_init_bufferevent(tor_tls_t *tls, struct bufferevent *bufev_in,
state,
BEV_OPT_DEFER_CALLBACKS|
BEV_OPT_CLOSE_ON_FREE);
+ /* Tell the underlying bufferevent when to accept more data from the SSL
+ filter (only when it's got less than 32K to write), and when to notify
+ the SSL filter that it could write more (when it drops under 24K). */
+ bufferevent_setwatermark(bufev_in, EV_WRITE, 24*1024, 32*1024);
} else {
if (bufev_in) {
evutil_socket_t s = bufferevent_getfd(bufev_in);
diff --git a/src/common/tortls.h b/src/common/tortls.h
index ecb5bd2fb..673f18dfe 100644
--- a/src/common/tortls.h
+++ b/src/common/tortls.h
@@ -17,6 +17,9 @@
/* 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
@@ -48,6 +51,7 @@ typedef struct tor_tls_t tor_tls_t;
#define TOR_TLS_IS_ERROR(rv) ((rv) < TOR_TLS_CLOSE)
const char *tor_tls_err_to_string(int err);
+void tor_tls_get_state_description(tor_tls_t *tls, char *buf, size_t sz);
void tor_tls_free_all(void);
int tor_tls_context_init(int is_public_server,
@@ -62,8 +66,11 @@ void tor_tls_set_renegotiate_callback(tor_tls_t *tls,
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);
@@ -84,8 +91,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.
*/
@@ -103,5 +112,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 717765180..c44a4aa3b 100644
--- a/src/common/util.c
+++ b/src/common/util.c
@@ -14,6 +14,9 @@
#define _GNU_SOURCE
#include "orconfig.h"
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
#define UTIL_PRIVATE
#include "util.h"
#include "torlog.h"
@@ -28,6 +31,7 @@
#include <direct.h>
#include <process.h>
#include <tchar.h>
+#include <Winbase.h>
#else
#include <dirent.h>
#include <pwd.h>
@@ -43,6 +47,7 @@
#include <stdio.h>
#include <string.h>
#include <assert.h>
+#include <signal.h>
#ifdef HAVE_NETINET_IN_H
#include <netinet/in.h>
@@ -68,9 +73,6 @@
#ifdef HAVE_SYS_FCNTL_H
#include <sys/fcntl.h>
#endif
-#ifdef HAVE_FCNTL_H
-#include <fcntl.h>
-#endif
#ifdef HAVE_TIME_H
#include <time.h>
#endif
@@ -88,6 +90,9 @@
#ifdef HAVE_MALLOC_NP_H
#include <malloc_np.h>
#endif
+#ifdef HAVE_SYS_WAIT_H
+#include <sys/wait.h>
+#endif
/* =====
* Memory management
@@ -335,7 +340,13 @@ tor_mathlog(double d)
long
tor_lround(double d)
{
+#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
}
/** Returns floor(log2(u64)). If u64 is 0, (incorrectly) returns 0. */
@@ -412,6 +423,32 @@ round_uint64_to_next_multiple_of(uint64_t number, uint64_t divisor)
return number;
}
+/** Return the number of bits set in <b>v</b>. */
+int
+n_bits_set_u8(uint8_t v)
+{
+ static const int nybble_table[] = {
+ 0, /* 0000 */
+ 1, /* 0001 */
+ 1, /* 0010 */
+ 2, /* 0011 */
+ 1, /* 0100 */
+ 2, /* 0101 */
+ 2, /* 0110 */
+ 3, /* 0111 */
+ 1, /* 1000 */
+ 2, /* 1001 */
+ 2, /* 1010 */
+ 3, /* 1011 */
+ 2, /* 1100 */
+ 3, /* 1101 */
+ 3, /* 1110 */
+ 4, /* 1111 */
+ };
+
+ return nybble_table[v & 15] + nybble_table[v>>4];
+}
+
/* =====
* String manipulation
* ===== */
@@ -495,6 +532,23 @@ tor_strisnonupper(const char *s)
return 1;
}
+/** As strcmp, except that either string may be NULL. The NULL string is
+ * considered to be before any non-NULL string. */
+int
+strcmp_opt(const char *s1, const char *s2)
+{
+ if (!s1) {
+ if (!s2)
+ return 0;
+ else
+ return -1;
+ } else if (!s2) {
+ return 1;
+ } else {
+ return strcmp(s1, s2);
+ }
+}
+
/** Compares the first strlen(s2) characters of s1 with s2. Returns as for
* strcmp.
*/
@@ -717,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)
@@ -1573,7 +1655,7 @@ rate_limit_log(ratelim_t *lim, time_t now)
* was returned by open(). Return the number of bytes written, or -1
* on error. Only use if fd is a blocking fd. */
ssize_t
-write_all(int fd, const char *buf, size_t count, int isSocket)
+write_all(tor_socket_t fd, const char *buf, size_t count, int isSocket)
{
size_t written = 0;
ssize_t result;
@@ -1583,7 +1665,7 @@ write_all(int fd, const char *buf, size_t count, int isSocket)
if (isSocket)
result = tor_socket_send(fd, buf+written, count-written, 0);
else
- result = write(fd, buf+written, count-written);
+ result = write((int)fd, buf+written, count-written);
if (result<0)
return -1;
written += result;
@@ -1597,7 +1679,7 @@ write_all(int fd, const char *buf, size_t count, int isSocket)
* open(). Return the number of bytes read, or -1 on error. Only use
* if fd is a blocking fd. */
ssize_t
-read_all(int fd, char *buf, size_t count, int isSocket)
+read_all(tor_socket_t fd, char *buf, size_t count, int isSocket)
{
size_t numread = 0;
ssize_t result;
@@ -1609,7 +1691,7 @@ read_all(int fd, char *buf, size_t count, int isSocket)
if (isSocket)
result = tor_socket_recv(fd, buf+numread, count-numread, 0);
else
- result = read(fd, buf+numread, count-numread);
+ result = read((int)fd, buf+numread, count-numread);
if (result<0)
return -1;
else if (result == 0)
@@ -1678,15 +1760,23 @@ file_status(const char *fname)
* is group-readable, but in all cases we create the directory mode 0700.
* If CPD_CHECK_MODE_ONLY is set, then we don't alter the directory permissions
* if they are too permissive: we just return -1.
+ * When effective_user is not NULL, check permissions against the given user
+ * and its primary group.
*/
int
-check_private_dir(const char *dirname, cpd_check_t check)
+check_private_dir(const char *dirname, cpd_check_t check,
+ const char *effective_user)
{
int r;
struct stat st;
char *f;
#ifndef MS_WINDOWS
int mask;
+ struct passwd *pw = NULL;
+ uid_t running_uid;
+ gid_t running_gid;
+#else
+ (void)effective_user;
#endif
tor_assert(dirname);
@@ -1725,33 +1815,49 @@ check_private_dir(const char *dirname, cpd_check_t check)
return -1;
}
#ifndef MS_WINDOWS
- if (st.st_uid != getuid()) {
+ if (effective_user) {
+ /* Look up the user and group information.
+ * If we have a problem, bail out. */
+ pw = getpwnam(effective_user);
+ if (pw == NULL) {
+ log_warn(LD_CONFIG, "Error setting configured user: %s not found",
+ effective_user);
+ return -1;
+ }
+ running_uid = pw->pw_uid;
+ running_gid = pw->pw_gid;
+ } else {
+ running_uid = getuid();
+ running_gid = getgid();
+ }
+
+ if (st.st_uid != running_uid) {
struct passwd *pw = NULL;
char *process_ownername = NULL;
- pw = getpwuid(getuid());
+ pw = getpwuid(running_uid);
process_ownername = pw ? tor_strdup(pw->pw_name) : tor_strdup("<unknown>");
pw = getpwuid(st.st_uid);
log_warn(LD_FS, "%s is not owned by this user (%s, %d) but by "
"%s (%d). Perhaps you are running Tor as the wrong user?",
- dirname, process_ownername, (int)getuid(),
+ dirname, process_ownername, (int)running_uid,
pw ? pw->pw_name : "<unknown>", (int)st.st_uid);
tor_free(process_ownername);
return -1;
}
- if ((check & CPD_GROUP_OK) && st.st_gid != getgid()) {
+ if ((check & CPD_GROUP_OK) && st.st_gid != running_gid) {
struct group *gr;
char *process_groupname = NULL;
- gr = getgrgid(getgid());
+ gr = getgrgid(running_gid);
process_groupname = gr ? tor_strdup(gr->gr_name) : tor_strdup("<unknown>");
gr = getgrgid(st.st_gid);
log_warn(LD_FS, "%s is not owned by this group (%s, %d) but by group "
"%s (%d). Are you running Tor as the wrong user?",
- dirname, process_groupname, (int)getgid(),
+ dirname, process_groupname, (int)running_gid,
gr ? gr->gr_name : "<unknown>", (int)st.st_gid);
tor_free(process_groupname);
@@ -2614,6 +2720,30 @@ tor_sscanf(const char *buf, const char *pattern, ...)
return r;
}
+/** Append the string produced by tor_asprintf(<b>pattern</b>, <b>...</b>)
+ * to <b>sl</b>. */
+void
+smartlist_asprintf_add(struct smartlist_t *sl, const char *pattern, ...)
+{
+ va_list ap;
+ va_start(ap, pattern);
+ smartlist_vasprintf_add(sl, pattern, ap);
+ va_end(ap);
+}
+
+/** va_list-based backend of smartlist_asprintf_add. */
+void
+smartlist_vasprintf_add(struct smartlist_t *sl, const char *pattern,
+ va_list args)
+{
+ char *str = NULL;
+
+ tor_vasprintf(&str, pattern, args);
+ tor_assert(str != NULL);
+
+ smartlist_add(sl, str);
+}
+
/** Return a new list containing the filenames in the directory <b>dirname</b>.
* Return NULL on error or if <b>dirname</b> is not a directory.
*/
@@ -2862,6 +2992,105 @@ load_windows_system_library(const TCHAR *library_name)
}
#endif
+/** Format a single argument for being put on a Windows command line.
+ * Returns a newly allocated string */
+static char *
+format_win_cmdline_argument(const char *arg)
+{
+ char *formatted_arg;
+ char need_quotes;
+ const char *c;
+ int i;
+ int bs_counter = 0;
+ /* Backslash we can point to when one is inserted into the string */
+ const char backslash = '\\';
+
+ /* Smartlist of *char */
+ smartlist_t *arg_chars;
+ arg_chars = smartlist_create();
+
+ /* Quote string if it contains whitespace or is empty */
+ need_quotes = (strchr(arg, ' ') || strchr(arg, '\t') || '\0' == arg[0]);
+
+ /* Build up smartlist of *chars */
+ for (c=arg; *c != '\0'; c++) {
+ if ('"' == *c) {
+ /* Double up backslashes preceding a quote */
+ for (i=0; i<(bs_counter*2); i++)
+ smartlist_add(arg_chars, (void*)&backslash);
+ bs_counter = 0;
+ /* Escape the quote */
+ smartlist_add(arg_chars, (void*)&backslash);
+ smartlist_add(arg_chars, (void*)c);
+ } else if ('\\' == *c) {
+ /* Count backslashes until we know whether to double up */
+ bs_counter++;
+ } else {
+ /* Don't double up slashes preceding a non-quote */
+ for (i=0; i<bs_counter; i++)
+ smartlist_add(arg_chars, (void*)&backslash);
+ bs_counter = 0;
+ smartlist_add(arg_chars, (void*)c);
+ }
+ }
+ /* Don't double up trailing backslashes */
+ for (i=0; i<bs_counter; i++)
+ smartlist_add(arg_chars, (void*)&backslash);
+
+ /* Allocate space for argument, quotes (if needed), and terminator */
+ formatted_arg = tor_malloc(sizeof(char) *
+ (smartlist_len(arg_chars) + (need_quotes?2:0) + 1));
+
+ /* Add leading quote */
+ i=0;
+ if (need_quotes)
+ formatted_arg[i++] = '"';
+
+ /* Add characters */
+ SMARTLIST_FOREACH(arg_chars, char*, c,
+ {
+ formatted_arg[i++] = *c;
+ });
+
+ /* Add trailing quote */
+ if (need_quotes)
+ formatted_arg[i++] = '"';
+ formatted_arg[i] = '\0';
+
+ smartlist_free(arg_chars);
+ return formatted_arg;
+}
+
+/** Format a command line for use on Windows, which takes the command as a
+ * string rather than string array. Follows the rules from "Parsing C++
+ * Command-Line Arguments" in MSDN. Algorithm based on list2cmdline in the
+ * Python subprocess module. Returns a newly allocated string */
+char *
+tor_join_win_cmdline(const char *argv[])
+{
+ smartlist_t *argv_list;
+ char *joined_argv;
+ int i;
+
+ /* Format each argument and put the result in a smartlist */
+ argv_list = smartlist_create();
+ for (i=0; argv[i] != NULL; i++) {
+ smartlist_add(argv_list, (void *)format_win_cmdline_argument(argv[i]));
+ }
+
+ /* Join the arguments with whitespace */
+ joined_argv = smartlist_join_strings(argv_list, " ", 0, NULL);
+
+ /* Free the newly allocated arguments, and the smartlist */
+ SMARTLIST_FOREACH(argv_list, char *, arg,
+ {
+ tor_free(arg);
+ });
+ smartlist_free(argv_list);
+
+ return joined_argv;
+}
+
/** Format <b>child_state</b> and <b>saved_errno</b> as a hex string placed in
* <b>hex_errno</b>. Called between fork and _exit, so must be signal-handler
* safe.
@@ -2930,6 +3159,28 @@ 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 process running at PID <b>pid</b>.
+ * Code borrowed from Python's os.kill. */
+int
+tor_terminate_process(pid_t pid)
+{
+#ifdef MS_WINDOWS
+ 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, pid);
+ if (!handle)
+ return -1;
+
+ if (!TerminateProcess(handle, 0))
+ return -1;
+ else
+ return 0;
+#else /* Unix */
+ return kill(pid, SIGTERM);
+#endif
+}
+
#define CHILD_STATE_INIT 0
#define CHILD_STATE_PIPE 1
#define CHILD_STATE_MAXFD 2
@@ -2941,30 +3192,131 @@ 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 the
- * system path will be searched for <b>filename</b>. The strings in
- * <b>argv</b> will be passed as the command line arguments of the child
- * program (following convention, argv[0] should normally be the filename of
- * the executable). The last element of argv must be NULL. If the child
- * program is launched, the PID will be returned and <b>stdout_read</b> and
- * <b>stdout_err</b> will be set to file descriptors from which the stdout
- * and stderr, respectively, output of the child program can be read, and the
- * stdin of the child process shall be set to /dev/null. Otherwise returns
- * -1. Some parts of this code are based on the POSIX subprocess module from
- * Python.
+/** 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>.
+ * On Windows, only the current directory will be searched. Here, to search the
+ * system path (as well as the application directory, current working
+ * directory, and system directories), set filename to NULL.
+ *
+ * The strings in <b>argv</b> will be passed as the command line arguments of
+ * the child program (following convention, argv[0] should normally be the
+ * filename of the executable, and this must be the case if <b>filename</b> is
+ * NULL). The last element of argv must be NULL. A handle to the child process
+ * will be returned in process_handle (which must be non-NULL). Read
+ * process_handle.status to find out if the process was successfully launched.
+ * For convenience, process_handle.status is returned by this function.
+ *
+ * Some parts of this code are based on the POSIX subprocess module from
+ * 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, int *stdout_read,
- int *stderr_read, const char **argv)
+tor_spawn_background(const char *const filename, const char **argv,
+ const char **envp,
+ process_handle_t *process_handle)
{
#ifdef MS_WINDOWS
- (void) filename; (void) stdout_read; (void) stderr_read; (void) argv;
- log_warn(LD_BUG, "not yet implemented on Windows.");
- return -1;
-#else
+ HANDLE stdout_pipe_read = NULL;
+ HANDLE stdout_pipe_write = NULL;
+ HANDLE stderr_pipe_read = NULL;
+ HANDLE stderr_pipe_write = NULL;
+
+ STARTUPINFO siStartInfo;
+ BOOL retval = FALSE;
+
+ SECURITY_ATTRIBUTES saAttr;
+ char *joined_argv;
+
+ (void)envp; // Unused on Windows
+
+ /* process_handle must not be NULL */
+ tor_assert(process_handle != NULL);
+
+ saAttr.nLength = sizeof(SECURITY_ATTRIBUTES);
+ saAttr.bInheritHandle = TRUE;
+ /* TODO: should we set explicit security attributes? (#2046, comment 5) */
+ saAttr.lpSecurityDescriptor = NULL;
+
+ /* Assume failure to start process */
+ memset(process_handle, 0, sizeof(process_handle_t));
+ process_handle->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;
+ }
+ 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;
+ }
+
+ /* Set up pipe for stderr */
+ if (!CreatePipe(&stderr_pipe_read, &stderr_pipe_write, &saAttr, 0)) {
+ log_warn(LD_GENERAL,
+ "Failed to create pipe for stderr communication with child process: %s",
+ format_win32_error(GetLastError()));
+ return process_handle->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;
+ }
+
+ /* Create the child process */
+
+ /* Windows expects argv to be a whitespace delimited string, so join argv up
+ */
+ joined_argv = tor_join_win_cmdline(argv);
+
+ ZeroMemory(&(process_handle->pid), sizeof(PROCESS_INFORMATION));
+ ZeroMemory(&siStartInfo, sizeof(STARTUPINFO));
+ siStartInfo.cb = sizeof(STARTUPINFO);
+ siStartInfo.hStdError = stderr_pipe_write;
+ siStartInfo.hStdOutput = stdout_pipe_write;
+ siStartInfo.hStdInput = NULL;
+ siStartInfo.dwFlags |= STARTF_USESTDHANDLES;
+
+ /* Create the child process */
+
+ retval = CreateProcess(filename, // module name
+ joined_argv, // command line
+ /* TODO: should we set explicit security attributes? (#2046, comment 5) */
+ NULL, // process security attributes
+ NULL, // primary thread security attributes
+ TRUE, // handles are inherited
+ /*(TODO: set CREATE_NEW CONSOLE/PROCESS_GROUP to make GetExitCodeProcess()
+ * work?) */
+ 0, // creation flags
+ NULL, // use parent's environment
+ NULL, // use parent's current directory
+ &siStartInfo, // STARTUPINFO pointer
+ &(process_handle->pid)); // receives PROCESS_INFORMATION
+
+ tor_free(joined_argv);
+
+ if (!retval) {
+ log_warn(LD_GENERAL,
+ "Failed to create child process %s: %s", filename?filename:argv[0],
+ format_win32_error(GetLastError()));
+ } 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;
+ }
+
+ /* TODO: Close pipes on exit */
+
+ return process_handle->status;
+#else // MS_WINDOWS
pid_t pid;
int stdout_pipe[2];
int stderr_pipe[2];
@@ -2982,6 +3334,10 @@ tor_spawn_background(const char *const filename, int *stdout_read,
static int max_fd = -1;
+ /* Assume failure to start */
+ memset(process_handle, 0, sizeof(process_handle_t));
+ process_handle->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 */
error_message_length = strlen(error_message);
@@ -2994,7 +3350,7 @@ tor_spawn_background(const char *const filename, int *stdout_read,
log_warn(LD_GENERAL,
"Failed to set up pipe for stdout communication with child process: %s",
strerror(errno));
- return -1;
+ return process_handle->status;
}
retval = pipe(stderr_pipe);
@@ -3002,7 +3358,7 @@ tor_spawn_background(const char *const filename, int *stdout_read,
log_warn(LD_GENERAL,
"Failed to set up pipe for stderr communication with child process: %s",
strerror(errno));
- return -1;
+ return process_handle->status;
}
child_state = CHILD_STATE_MAXFD;
@@ -3068,7 +3424,10 @@ tor_spawn_background(const char *const filename, int *stdout_read,
/* 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 */
@@ -3081,11 +3440,15 @@ tor_spawn_background(const char *const filename, int *stdout_read,
/* Write the error message. GCC requires that we check the return
value, but there is nothing we can do if it fails */
+ /* TODO: Don't use STDOUT, use a pipe set up just for this purpose */
nbytes = write(STDOUT_FILENO, error_message, error_message_length);
nbytes = write(STDOUT_FILENO, hex_errno, sizeof(hex_errno));
+ (void) nbytes;
+
_exit(255);
- return -1; /* Never reached, but avoids compiler warning */
+ /* Never reached, but avoids compiler warning */
+ return process_handle->status;
}
/* In parent */
@@ -3096,36 +3459,366 @@ tor_spawn_background(const char *const filename, int *stdout_read,
close(stdout_pipe[1]);
close(stderr_pipe[0]);
close(stderr_pipe[1]);
- return -1;
+ return process_handle->status;
}
+ process_handle->pid = pid;
+
+ /* TODO: If the child process forked but failed to exec, waitpid it */
+
/* Return read end of the pipes to caller, and close write end */
- *stdout_read = stdout_pipe[0];
+ process_handle->stdout_pipe = stdout_pipe[0];
retval = close(stdout_pipe[1]);
if (-1 == retval) {
log_warn(LD_GENERAL,
"Failed to close write end of stdout pipe in parent process: %s",
strerror(errno));
- /* Do not return -1, because the child is running, so the parent
- needs to know about the pid in order to reap it later */
}
- *stderr_read = stderr_pipe[0];
+ process_handle->stderr_pipe = stderr_pipe[0];
retval = close(stderr_pipe[1]);
if (-1 == retval) {
log_warn(LD_GENERAL,
"Failed to close write end of stderr pipe in parent process: %s",
strerror(errno));
- /* Do not return -1, because the child is running, so the parent
- needs to know about the pid in order to reap it later */
}
- return pid;
+ 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);
+ /* Open the buffered IO streams */
+ process_handle->stdout_handle = fdopen(process_handle->stdout_pipe, "r");
+ process_handle->stderr_handle = fdopen(process_handle->stderr_pipe, "r");
+
+ return process_handle->status;
+#endif // MS_WINDOWS
+}
+
+/** 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
+ * the process is still running, the function will return
+ * PROCESS_EXIT_RUNNING, and exit_code will be left unchanged. Returns
+ * PROCESS_EXIT_EXITED if the process did exit. If there is a failure,
+ * PROCESS_EXIT_ERROR will be returned and the contents of exit_code (if
+ * non-NULL) will be undefined. N.B. Under *nix operating systems, this will
+ * 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,
+ int block, int *exit_code)
+{
+#ifdef MS_WINDOWS
+ DWORD retval;
+ BOOL success;
+
+ if (block) {
+ /* Wait for the process to exit */
+ 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);
+ if (WAIT_TIMEOUT == retval) {
+ /* Process has not exited */
+ return PROCESS_EXIT_RUNNING;
+ } else if (retval != WAIT_OBJECT_0) {
+ log_warn(LD_GENERAL, "WaitForSingleObject() failed (%d): %s",
+ (int)retval, format_win32_error(GetLastError()));
+ return PROCESS_EXIT_ERROR;
+ }
+ }
+
+ if (exit_code != NULL) {
+ success = GetExitCodeProcess(process_handle.pid.hProcess,
+ (PDWORD)exit_code);
+ if (!success) {
+ log_warn(LD_GENERAL, "GetExitCodeProcess() failed: %s",
+ format_win32_error(GetLastError()));
+ return PROCESS_EXIT_ERROR;
+ }
+ }
+#else
+ int stat_loc;
+ int retval;
+
+ 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));
+ return PROCESS_EXIT_ERROR;
+ }
+
+ if (!WIFEXITED(stat_loc)) {
+ log_warn(LD_GENERAL, "Process %d did not exit normally",
+ process_handle.pid);
+ return PROCESS_EXIT_ERROR;
+ }
+
+ if (exit_code != NULL)
+ *exit_code = WEXITSTATUS(stat_loc);
+#endif // MS_WINDOWS
+
+ return PROCESS_EXIT_EXITED;
+}
+
+#ifdef MS_WINDOWS
+/** Read from a handle <b>h</b> into <b>buf</b>, up to <b>count</b> bytes. If
+ * <b>hProcess</b> is NULL, the function will return immediately if there is
+ * nothing more to read. Otherwise <b>hProcess</b> should be set to the handle
+ * to the process owning the <b>h</b>. In this case, the function will exit
+ * only once the process has exited, or <b>count</b> bytes are read. Returns
+ * the number of bytes read, or -1 on error. */
+ssize_t
+tor_read_all_handle(HANDLE h, char *buf, size_t count,
+ const process_handle_t *process)
+{
+ size_t numread = 0;
+ BOOL retval;
+ DWORD byte_count;
+ BOOL process_exited = FALSE;
+
+ if (count > SIZE_T_CEILING || count > SSIZE_T_MAX)
+ return -1;
+
+ while (numread != count) {
+ /* Check if there is anything to read */
+ retval = PeekNamedPipe(h, NULL, 0, NULL, &byte_count, NULL);
+ if (!retval) {
+ log_warn(LD_GENERAL,
+ "Failed to peek from handle: %s",
+ format_win32_error(GetLastError()));
+ return -1;
+ } else if (0 == byte_count) {
+ /* Nothing available: process exited or it is busy */
+
+ /* Exit if we don't know whether the process is running */
+ if (NULL == process)
+ break;
+
+ /* The process exited and there's nothing left to read from it */
+ if (process_exited)
+ break;
+
+ /* If process is not running, check for output one more time in case
+ it wrote something after the peek was performed. Otherwise keep on
+ waiting for output */
+ tor_assert(process != NULL);
+ byte_count = WaitForSingleObject(process->pid.hProcess, 0);
+ if (WAIT_TIMEOUT != byte_count)
+ process_exited = TRUE;
+
+ continue;
+ }
+
+ /* There is data to read; read it */
+ retval = ReadFile(h, buf+numread, count-numread, &byte_count, NULL);
+ tor_assert(byte_count + numread <= count);
+ if (!retval) {
+ log_warn(LD_GENERAL, "Failed to read from handle: %s",
+ format_win32_error(GetLastError()));
+ return -1;
+ } else if (0 == byte_count) {
+ /* End of file */
+ break;
+ }
+ numread += byte_count;
+ }
+ return (ssize_t)numread;
+}
+#else
+/** Read from a handle <b>h</b> into <b>buf</b>, up to <b>count</b> bytes. If
+ * <b>process</b> is NULL, the function will return immediately if there is
+ * nothing more to read. Otherwise data will be read until end of file, or
+ * <b>count</b> bytes are read. Returns the number of bytes read, or -1 on
+ * error. Sets <b>eof</b> to true if <b>eof</b> is not NULL and the end of the
+ * file has been reached. */
+ssize_t
+tor_read_all_handle(FILE *h, char *buf, size_t count,
+ const process_handle_t *process,
+ int *eof)
+{
+ size_t numread = 0;
+ char *retval;
+
+ if (eof)
+ *eof = 0;
+
+ if (count > SIZE_T_CEILING || count > SSIZE_T_MAX)
+ return -1;
+
+ while (numread != count) {
+ /* Use fgets because that is what we use in log_from_pipe() */
+ retval = fgets(buf+numread, (int)(count-numread), h);
+ if (NULL == retval) {
+ if (feof(h)) {
+ log_debug(LD_GENERAL, "fgets() reached end of file");
+ fclose(h);
+ if (eof)
+ *eof = 1;
+ break;
+ } else {
+ if (EAGAIN == errno) {
+ if (process)
+ continue;
+ else
+ break;
+ } else {
+ log_warn(LD_GENERAL, "fgets() from handle failed: %s",
+ strerror(errno));
+ fclose(h);
+ return -1;
+ }
+ }
+ }
+ tor_assert(retval != NULL);
+ tor_assert(strlen(retval) + numread <= count);
+ numread += strlen(retval);
+ }
+
+ log_debug(LD_GENERAL, "fgets() read %d bytes from handle", (int)numread);
+ return (ssize_t)numread;
+}
+#endif
+
+/** Read from stdout of a process until the process exits. */
+ssize_t
+tor_read_all_from_process_stdout(const process_handle_t *process_handle,
+ char *buf, size_t count)
+{
+#ifdef MS_WINDOWS
+ return tor_read_all_handle(process_handle->stdout_pipe, buf, count,
+ process_handle);
+#else
+ return tor_read_all_handle(process_handle->stdout_handle, buf, count,
+ process_handle, NULL);
#endif
}
+/** Read from stdout of a process until the process exits. */
+ssize_t
+tor_read_all_from_process_stderr(const process_handle_t *process_handle,
+ char *buf, size_t count)
+{
+#ifdef MS_WINDOWS
+ return tor_read_all_handle(process_handle->stderr_pipe, buf, count,
+ process_handle);
+#else
+ return tor_read_all_handle(process_handle->stderr_handle, buf, count,
+ process_handle, NULL);
+#endif
+}
+
+/** Split buf into lines, and add to smartlist. The buffer <b>buf</b> will be
+ * modified. The resulting smartlist will consist of pointers to buf, so there
+ * is no need to free the contents of sl. <b>buf</b> must be a NUL-terminated
+ * string. <b>len</b> should be set to the length of the buffer excluding the
+ * NUL. Non-printable characters (including NUL) will be replaced with "." */
+int
+tor_split_lines(smartlist_t *sl, char *buf, int len)
+{
+ /* Index in buf of the start of the current line */
+ int start = 0;
+ /* Index in buf of the current character being processed */
+ int cur = 0;
+ /* Are we currently in a line */
+ char in_line = 0;
+
+ /* Loop over string */
+ while (cur < len) {
+ /* Loop until end of line or end of string */
+ for (; cur < len; cur++) {
+ if (in_line) {
+ if ('\r' == buf[cur] || '\n' == buf[cur]) {
+ /* End of line */
+ buf[cur] = '\0';
+ /* Point cur to the next line */
+ cur++;
+ /* Line starts at start and ends with a nul */
+ break;
+ } else {
+ if (!TOR_ISPRINT(buf[cur]))
+ buf[cur] = '.';
+ }
+ } else {
+ if ('\r' == buf[cur] || '\n' == buf[cur]) {
+ /* Skip leading vertical space */
+ ;
+ } else {
+ in_line = 1;
+ start = cur;
+ if (!TOR_ISPRINT(buf[cur]))
+ buf[cur] = '.';
+ }
+ }
+ }
+ /* We are at the end of the line or end of string. If in_line is true there
+ * is a line which starts at buf+start and ends at a NUL. cur points to
+ * the character after the NUL. */
+ if (in_line)
+ smartlist_add(sl, (void *)(buf+start));
+ in_line = 0;
+ }
+ return smartlist_len(sl);
+}
+
+#ifdef MS_WINDOWS
+/** Read from stream, and send lines to log at the specified log level.
+ * Returns -1 if there is a error reading, and 0 otherwise.
+ * If the generated stream is flushed more often than on new lines, or
+ * a read exceeds 256 bytes, lines will be truncated. This should be fixed,
+ * along with the corresponding problem on *nix (see bug #2045).
+ */
+static int
+log_from_handle(HANDLE *pipe, int severity)
+{
+ char buf[256];
+ int pos;
+ smartlist_t *lines;
+
+ pos = tor_read_all_handle(pipe, buf, sizeof(buf) - 1, NULL);
+ if (pos < 0) {
+ /* Error */
+ log_warn(LD_GENERAL, "Failed to read data from subprocess");
+ return -1;
+ }
+
+ if (0 == pos) {
+ /* There's nothing to read (process is busy or has exited) */
+ log_debug(LD_GENERAL, "Subprocess had nothing to say");
+ return 0;
+ }
+
+ /* End with a null even if there isn't a \r\n at the end */
+ /* TODO: What if this is a partial line? */
+ buf[pos] = '\0';
+ log_debug(LD_GENERAL, "Subprocess had %d bytes to say", pos);
+
+ /* Split up the buffer */
+ lines = smartlist_create();
+ tor_split_lines(lines, buf, pos);
+
+ /* Log each line */
+ SMARTLIST_FOREACH(lines, char *, line,
+ {
+ log_fn(severity, LD_GENERAL, "Port forwarding helper says: %s", line);
+ });
+ smartlist_free(lines);
+
+ return 0;
+}
+
+#else
+
/** 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
@@ -3136,91 +3829,127 @@ 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) {
+ fclose(stream);
+ return 1;
+ } else if (r == IO_STREAM_EAGAIN) {
+ return 0;
+ } else if (r == IO_STREAM_TERM) {
+ fclose(stream);
+ 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;
}
void
tor_check_port_forwarding(const char *filename, int dir_port, int or_port,
time_t now)
{
-#ifdef MS_WINDOWS
- (void) filename; (void) dir_port; (void) or_port; (void) now;
- (void) tor_spawn_background;
- (void) log_from_pipe;
- log_warn(LD_GENERAL, "Sorry, port forwarding is not yet supported "
- "on windows.");
-#else
/* When fw-helper succeeds, how long do we wait until running it again */
#define TIME_TO_EXEC_FWHELPER_SUCCESS 300
-/* When fw-helper fails, how long do we wait until running it again */
+/* When fw-helper failed to start, how long do we wait until running it again
+ */
#define TIME_TO_EXEC_FWHELPER_FAIL 60
- static int child_pid = -1;
- static FILE *stdout_read = NULL;
- static FILE *stderr_read = NULL;
+ /* 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 time_t time_to_run_helper = 0;
int stdout_status, stderr_status, retval;
const char *argv[10];
@@ -3245,37 +3974,48 @@ 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 (-1 == child_pid &&
+ if (child_handle.status != PROCESS_STATUS_RUNNING &&
time_to_run_helper < now) {
- int fd_out=-1, fd_err=-1;
-
/* Assume tor-fw-helper will succeed, start it later*/
time_to_run_helper = now + TIME_TO_EXEC_FWHELPER_SUCCESS;
- child_pid = tor_spawn_background(filename, &fd_out, &fd_err, argv);
- if (child_pid < 0) {
+#ifdef MS_WINDOWS
+ /* Passing NULL as lpApplicationName makes Windows search for the .exe */
+ tor_spawn_background(NULL, argv, NULL, &child_handle);
+#else
+ tor_spawn_background(filename, argv, NULL, &child_handle);
+#endif
+ if (PROCESS_STATUS_ERROR == child_handle.status) {
log_warn(LD_GENERAL, "Failed to start port forwarding helper %s",
filename);
- child_pid = -1;
+ time_to_run_helper = now + TIME_TO_EXEC_FWHELPER_FAIL;
return;
}
- /* Set stdout/stderr pipes to be non-blocking */
- fcntl(fd_out, F_SETFL, O_NONBLOCK);
- fcntl(fd_err, F_SETFL, O_NONBLOCK);
- /* Open the buffered IO streams */
- stdout_read = fdopen(fd_out, "r");
- stderr_read = fdopen(fd_err, "r");
-
+#ifdef MS_WINDOWS
log_info(LD_GENERAL,
- "Started port forwarding helper (%s) with pid %d", filename, child_pid);
+ "Started port forwarding helper (%s)", filename);
+#else
+ log_info(LD_GENERAL,
+ "Started port forwarding helper (%s) with pid %d", filename,
+ child_handle.pid);
+#endif
}
/* If child is running, read from its stdout and stderr) */
- if (child_pid > 0) {
+ if (PROCESS_STATUS_RUNNING == child_handle.status) {
/* Read from stdout/stderr and log result */
retval = 0;
- stdout_status = log_from_pipe(stdout_read, LOG_INFO, filename, &retval);
- stderr_status = log_from_pipe(stderr_read, LOG_WARN, filename, &retval);
+#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);
+ /* If we got this far (on Windows), the process started */
+ retval = 0;
+#else
+ stdout_status = log_from_pipe(child_handle.stdout_handle,
+ LOG_INFO, filename, &retval);
+ stderr_status = log_from_pipe(child_handle.stderr_handle,
+ LOG_WARN, filename, &retval);
+#endif
if (retval) {
/* There was a problem in the child process */
time_to_run_helper = now + TIME_TO_EXEC_FWHELPER_FAIL;
@@ -3285,9 +4025,22 @@ tor_check_port_forwarding(const char *filename, int dir_port, int or_port,
if (-1 == stdout_status || -1 == stderr_status)
/* There was a failure */
retval = -1;
+#ifdef MS_WINDOWS
+ else if (tor_get_exit_code(child_handle, 0, NULL) !=
+ PROCESS_EXIT_RUNNING) {
+ /* process has exited or there was an error */
+ /* TODO: Do something with the process return value */
+ /* TODO: What if the process output something since
+ * between log_from_handle and tor_get_exit_code? */
+ retval = 1;
+ }
+#else
else if (1 == stdout_status || 1 == stderr_status)
- /* stdout or stderr was closed */
+ /* stdout or stderr was closed, the process probably
+ * exited. It will be reaped by waitpid() in main.c */
+ /* TODO: Do something with the process return value */
retval = 1;
+#endif
else
/* Both are fine */
retval = 0;
@@ -3296,15 +4049,15 @@ 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;
} else {
log_warn(LD_GENERAL, "Failed to read from port forwarding helper");
+ child_handle.status = PROCESS_STATUS_ERROR;
}
/* TODO: The child might not actually be finished (maybe it failed or
closed stdout/stderr), so maybe we shouldn't start another? */
- child_pid = -1;
}
}
-#endif
}
diff --git a/src/common/util.h b/src/common/util.h
index e8d5de2ef..77ed1ca5e 100644
--- a/src/common/util.h
+++ b/src/common/util.h
@@ -160,6 +160,7 @@ uint64_t round_to_power_of_2(uint64_t u64);
unsigned round_to_next_multiple_of(unsigned number, unsigned divisor);
uint32_t round_uint32_to_next_multiple_of(uint32_t number, uint32_t divisor);
uint64_t round_uint64_to_next_multiple_of(uint64_t number, uint64_t divisor);
+int n_bits_set_u8(uint8_t v);
/* Compute the CEIL of <b>a</b> divided by <b>b</b>, for nonnegative <b>a</b>
* and positive <b>b</b>. Works on integer types only. Not defined if a+b can
@@ -174,6 +175,7 @@ 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));
@@ -203,6 +205,8 @@ 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 string_is_C_identifier(const char *string);
+
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;
@@ -218,6 +222,11 @@ int tor_sscanf(const char *buf, const char *pattern, ...)
#endif
;
+void smartlist_asprintf_add(struct smartlist_t *sl, const char *pattern, ...)
+ CHECK_PRINTF(2, 3);
+void smartlist_vasprintf_add(struct smartlist_t *sl, const char *pattern,
+ va_list args);
+
int hex_decode_digit(char c);
void base16_encode(char *dest, size_t destlen, const char *src, size_t srclen);
int base16_decode(char *dest, size_t destlen, const char *src, size_t srclen);
@@ -276,8 +285,18 @@ typedef struct ratelim_t {
char *rate_limit_log(ratelim_t *lim, time_t now);
/* File helpers */
-ssize_t write_all(int fd, const char *buf, size_t count, int isSocket);
-ssize_t read_all(int fd, char *buf, size_t count, int isSocket);
+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. */
@@ -292,7 +311,8 @@ typedef unsigned int cpd_check_t;
#define CPD_CHECK 2
#define CPD_GROUP_OK 4
#define CPD_CHECK_MODE_ONLY 8
-int check_private_dir(const char *dirname, cpd_check_t check);
+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)
typedef struct open_file_t open_file_t;
@@ -340,14 +360,62 @@ void write_pidfile(char *filename);
void tor_check_port_forwarding(const char *filename,
int dir_port, int or_port, time_t now);
+int tor_terminate_process(pid_t pid);
+typedef struct process_handle_s process_handle_t;
+int tor_spawn_background(const char *const filename, const char **argv,
+ const char **envp, process_handle_t *process_handle);
+
+#define SPAWN_ERROR_MESSAGE "ERR: Failed to spawn background process - code "
+
#ifdef MS_WINDOWS
HANDLE load_windows_system_library(const TCHAR *library_name);
#endif
#ifdef UTIL_PRIVATE
/* Prototypes for private functions only used by util.c (and unit tests) */
-int tor_spawn_background(const char *const filename, int *stdout_read,
- int *stderr_read, const char **argv);
+
+/* Values of process_handle_t.status. PROCESS_STATUS_NOTRUNNING must be
+ * 0 because tor_check_port_forwarding depends on this being the initial
+ * statue of the static instance of process_handle_t */
+#define PROCESS_STATUS_NOTRUNNING 0
+#define PROCESS_STATUS_RUNNING 1
+#define PROCESS_STATUS_ERROR -1
+struct process_handle_s {
+ int status;
+#ifdef MS_WINDOWS
+ HANDLE stdout_pipe;
+ HANDLE stderr_pipe;
+ PROCESS_INFORMATION pid;
+#else
+ int stdout_pipe;
+ int stderr_pipe;
+ FILE *stdout_handle;
+ FILE *stderr_handle;
+ pid_t pid;
+#endif // MS_WINDOWS
+};
+
+/* 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 block, int *exit_code);
+int tor_split_lines(struct smartlist_t *sl, char *buf, int len);
+#ifdef MS_WINDOWS
+ssize_t tor_read_all_handle(HANDLE h, char *buf, size_t count,
+ const process_handle_t *process);
+#else
+ssize_t tor_read_all_handle(FILE *h, char *buf, size_t count,
+ const process_handle_t *process,
+ int *eof);
+#endif
+ssize_t tor_read_all_from_process_stdout(
+ const process_handle_t *process_handle, char *buf, size_t count);
+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[]);
+
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 465c13be7..9ada6a301 100644
--- a/src/config/geoip
+++ b/src/config/geoip
@@ -1,4 +1,4 @@
-# Last updated based on May 1 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
@@ -36,7 +36,8 @@
18087936,18153471,TH
18153472,18219007,JP
18219008,18350079,IN
-18350080,18939903,CN
+18350080,18874367,CN
+18874368,18939903,HK
18939904,19005439,JP
19005440,19136511,TW
19136512,19202047,HK
@@ -67,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
@@ -78,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
@@ -104,17 +112,45 @@
34928384,34928639,DE
34928640,34930687,EU
34930688,34938879,DE
-34938880,34952703,EU
-34952704,34953215,ES
+34938880,34947071,FR
+34947072,34953215,EU
34953216,34954751,AT
34954752,34955263,NL
34955264,34959359,AT
34959360,34963455,NL
34963456,34992127,EU
34992128,34993151,NL
-34993152,34993663,EU
+34993152,34993663,FR
34993664,34993919,AT
-34993920,35127295,EU
+34993920,34994175,DE
+34994176,34995711,FR
+34995712,34995967,EU
+34995968,34996223,NL
+34996224,34999295,EU
+34999296,35001343,GB
+35001344,35002367,FR
+35002368,35008511,EU
+35008512,35009023,FR
+35009024,35010303,EU
+35010304,35010559,BE
+35010560,35011583,FR
+35011584,35020799,EU
+35020800,35037183,GB
+35037184,35054079,FR
+35054080,35054591,SE
+35054592,35055103,EU
+35055104,35055359,ES
+35055360,35055615,EU
+35055616,35055871,GB
+35055872,35056127,NL
+35056128,35059199,EU
+35059200,35059711,GB
+35059712,35060735,EU
+35060736,35061247,GB
+35061248,35061759,FR
+35061760,35090431,EU
+35090432,35094527,GR
+35094528,35127295,EU
35127296,35651583,GB
35651584,36700159,IT
36700160,36962303,AE
@@ -196,7 +232,9 @@
135603200,135604223,CA
135604224,135606783,US
135606784,135607039,CA
-135607040,152305663,US
+135607040,135847935,US
+135847936,135851263,CA
+135851264,152305663,US
152305664,152338431,GB
152338432,167772159,US
184549376,201405503,US
@@ -205,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
@@ -221,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
@@ -270,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
@@ -300,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
@@ -319,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
@@ -359,20 +399,20 @@
209845144,209845151,DE
209845152,209867103,US
209867104,209867111,CA
-209867112,209868927,US
-209868928,209869055,IR
-209869056,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,210784767,US
-210784768,210786303,BO
+210439568,210458623,US
+210458624,210458631,PR
+210458632,210785023,US
+210785024,210785575,BO
+210785576,210785583,US
+210785584,210785599,BO
+210785600,210785663,US
+210785664,210786303,BO
210786304,210970847,US
210970848,210970855,PR
210970856,211051199,US
@@ -381,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
@@ -393,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
@@ -453,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
@@ -462,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
@@ -489,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
@@ -514,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
@@ -596,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
@@ -610,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
@@ -622,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
@@ -646,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
@@ -679,7 +716,6 @@
234951680,234952703,HK
234952704,234954751,JP
234954752,234971135,NZ
-234971136,234979327,IN
234979328,235012095,MY
235012096,235077631,AU
235077632,235143167,JP
@@ -697,7 +733,6 @@
241602560,241604607,MY
241604608,241605631,ID
241605632,241606655,CN
-241606656,241614847,IN
241614848,241623039,JP
241623040,241627135,IN
241627136,241631231,HK
@@ -751,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
@@ -771,7 +812,8 @@
405979136,405995519,PR
406003712,406011903,US
406011904,406028287,BS
-406028288,406126591,US
+406028288,406110207,US
+406110208,406142975,CA
406142976,406147071,US
406147072,406151167,CA
406159360,406175743,US
@@ -790,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
@@ -806,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
@@ -855,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
@@ -866,8 +912,9 @@
412688384,412704767,US
412704768,412708863,CA
412708864,412909567,US
-412909568,412917759,CA
+412909568,412942335,CA
412942336,412946431,US
+412975104,413007871,CA
413007872,413908991,US
413908992,413925375,PR
413925376,415760383,US
@@ -880,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
@@ -928,7 +974,6 @@
452997120,453001215,IN
453001216,453009407,AU
453009408,453017599,BD
-453017600,453050367,JP
453050368,453115903,KR
453115904,453246975,VN
453246976,453509119,IN
@@ -977,7 +1022,6 @@
459292672,459293695,NZ
459293696,459297791,JP
459297792,459298815,IN
-459298816,459299839,PK
459300864,459309055,SG
459309056,459325439,KR
459325440,459333631,AU
@@ -995,7 +1039,6 @@
459542528,459544575,HK
459544576,459545599,AU
459545600,459547647,JP
-459547648,459548671,CN
459548672,459550719,TH
459550720,459554815,JP
459554816,459571199,TW
@@ -1187,6 +1230,7 @@
520318976,520323071,ES
520323072,520325119,CH
520325120,520327167,FR
+520327168,520329215,DE
520329216,520331263,SE
520331264,520339455,IT
520339456,520343551,UA
@@ -1194,10 +1238,25 @@
520355840,520421375,ES
520421376,520486911,AT
520486912,520488959,NL
-520488960,520491007,IT
+520488960,520489983,IT
+520489984,520491007,RU
520491008,520493567,GB
-520493568,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
@@ -1205,6 +1264,7 @@
520552448,520554495,NL
520554496,520556543,GB
520556544,520560639,FI
+520560640,520562687,TR
520562688,520564735,PL
520564736,520566783,IE
520566784,520568831,CH
@@ -1212,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
@@ -1225,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
@@ -1236,8 +1301,14 @@
520882176,520884223,IT
520884224,520888319,MK
520888320,520896511,DE
-520896512,520898559,BE
-520898560,520912895,GB
+520896512,520897023,BE
+520897024,520897151,LU
+520897152,520897791,BE
+520897792,520897807,LU
+520897808,520898559,BE
+520898560,520902655,GB
+520902656,520902784,NL
+520902785,520912895,GB
520912896,520945663,UA
520945664,520947711,GB
520947712,520949759,SE
@@ -1267,6 +1338,7 @@
521101312,521103359,IT
521103360,521105407,GB
521105408,521107455,IS
+521107456,521109503,FI
521109504,521142271,SI
521142272,521404415,DE
521404416,521535487,NL
@@ -1278,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
@@ -1323,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
@@ -1359,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
@@ -1378,7 +1459,9 @@
522715136,522717183,IR
522717184,522719231,RU
522719232,522721279,UA
-522721280,522739711,RU
+522721280,522741759,RU
+522741760,522743807,UA
+522743808,522747903,RU
522747904,522780671,UA
522780672,522782719,RU
522782720,522784767,UA
@@ -1428,7 +1511,12 @@
523010048,523014143,IL
523014144,523018239,ES
523018240,523022335,IT
-523022336,523026431,RU
+523022336,523024639,RU
+523024640,523024895,GB
+523024896,523025407,RU
+523025408,523025663,UA
+523025664,523025919,CH
+523025920,523026431,NL
523026432,523030527,TR
523030528,523034623,FR
523034624,523038719,SE
@@ -1468,7 +1556,45 @@
528605184,528613375,UA
528613376,528637951,RU
528637952,528642047,PL
-528642048,528646143,RU
+528642048,528654335,RU
+528654336,528656383,SK
+528656384,528658431,CZ
+528658432,528662527,IR
+528662528,528664575,RU
+528664576,528666623,BY
+528666624,528668671,RU
+528668672,528670719,PL
+528670720,528674815,CH
+528674816,528676863,RO
+528676864,528678911,RU
+528678912,528680959,MD
+528680960,528683007,RO
+528683008,528689151,UA
+528689152,528691199,RO
+528691200,528695295,PL
+528695296,528699391,UA
+528699392,528703487,RU
+528703488,528715775,UA
+528715776,528719871,RU
+528719872,528721919,RO
+528721920,528723967,PL
+528723968,528726015,ES
+528726016,528736255,RU
+528736256,528740351,SK
+528740352,528742399,IT
+528742400,528744447,RU
+528744448,528746495,GB
+528746496,528748543,RO
+528748544,528752639,CZ
+528752640,528760831,RO
+528760832,528762879,PL
+528762880,528764927,AM
+528764928,528769023,RO
+528769024,528793599,RU
+528793600,528795647,RO
+528795648,528797695,NL
+528797696,528805887,RU
+528805888,528809983,RO
528809984,528812031,PL
528812032,528814079,CZ
528814080,528816127,PL
@@ -1478,24 +1604,46 @@
528836608,528838655,RU
528838656,528840703,UA
528840704,528842751,RU
-528875520,528887807,RU
+528842752,528859135,CH
+528859136,528861183,RO
+528861184,528863231,RU
+528863232,528867327,KZ
+528867328,528887807,RU
528887808,528891903,PL
528891904,528900095,UA
528900096,528902143,SK
528902144,528908287,UA
+528908288,528926719,RU
+528926720,528928767,NL
+528928768,528930815,UA
+528930816,528932863,CZ
+528932864,528941055,RU
+528941056,528943103,RO
+528943104,528945151,RU
+528945152,528949247,PL
+528949248,528965631,RU
+528965632,528982015,UA
+528982016,528984063,PL
+528984064,528986111,RO
+528986112,528988159,UA
+528988160,528990207,RO
+528990208,528994303,PL
+528994304,528996351,UZ
+528996352,528998399,LT
+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
@@ -1510,9 +1658,11 @@
529844736,529845247,UA
529845248,529846271,UZ
529846272,529846783,UA
-529846784,529849343,RU
-529849344,529855487,CZ
-529855488,529857535,RU
+529846784,529848319,RU
+529848320,529855487,CZ
+529855488,529856511,RU
+529856512,529857279,CZ
+529857280,529857535,KZ
529857536,529858559,UA
529858560,529924095,NL
529924096,529989631,DE
@@ -1528,10 +1678,14 @@
530972672,531103743,SA
531103744,531169279,IL
531169280,531177471,KZ
-531177472,531183615,GB
+531177472,531179519,GB
+531179520,531181567,FR
+531181568,531183615,GB
531183616,531185663,NL
531185664,531193855,TR
-531193856,531195903,IE
+531193856,531194303,IE
+531194304,531194335,IR
+531194336,531195903,IE
531195904,531197951,IT
531197952,531199999,GB
531200000,531202047,RU
@@ -1539,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
@@ -1549,22 +1704,29 @@
531263488,531265535,RU
531265536,531267583,GB
531267584,531275775,UA
-531275776,531277823,LT
+531275776,531276799,US
+531276800,531277311,GB
+531277312,531277823,US
531277824,531279871,RU
+531279872,531281919,CZ
531281920,531283967,RU
531283968,531292159,DE
531292160,531333119,AZ
531333120,531333599,NL
531333600,531333631,RU
-531333632,531334399,NL
-531334400,531334655,SE
-531334656,531335167,US
+531333632,531334143,NL
+531334144,531334207,US
+531334208,531334399,NL
+531334400,531334463,US
+531334464,531334527,NL
+531334528,531335167,US
531335168,531337215,IT
531337216,531339263,CH
531339264,531341311,AL
531341312,531349503,KZ
531349504,531351551,RU
531351552,531355647,NL
+531355648,531357695,IR
531357696,531361791,HU
531361792,531365887,CH
531365888,531366399,DE
@@ -1573,15 +1735,23 @@
531369984,531371007,CH
531371008,531371519,US
531371520,531372031,JP
-531372032,531398655,CH
+531372032,531380223,CH
+531380224,531398655,DE
531398656,531400703,RU
531400704,531402751,UA
531402752,531404799,LU
531404800,531406847,FI
-531406848,531415039,IM
531415040,531423231,RU
-531423232,531425279,NO
-531425280,531431423,GB
+531423232,531423487,GB
+531423488,531425279,NO
+531425280,531425325,FR
+531425326,531425327,GB
+531425328,531425391,FR
+531425392,531426303,GB
+531426304,531426431,FR
+531426432,531426559,GB
+531426560,531426623,FR
+531426624,531431423,GB
531431424,531496959,RO
531496960,531628031,PL
531628032,531660799,TR
@@ -1590,6 +1760,7 @@
531695616,531697663,LT
531697664,531699711,GB
531699712,531701759,CZ
+531701760,531703807,NL
531703808,531705855,IT
531705856,531707903,ES
531707904,531709951,GR
@@ -1607,7 +1778,9 @@
532185088,532201471,IR
532201472,532211711,RU
532211712,532212223,LU
-532212224,532221951,RU
+532212224,532212479,RU
+532212480,532212991,UA
+532212992,532221951,RU
532221952,532223999,IT
532224000,532226047,NO
532226048,532234239,GB
@@ -1632,7 +1805,8 @@
532328448,532330495,PS
532330496,532332543,CZ
532332544,532340735,PL
-532340736,532348927,GB
+532340736,532340991,US
+532340992,532348927,GB
532348928,532365311,PL
532365312,532373503,DE
532373504,532375551,RU
@@ -1642,7 +1816,10 @@
532414464,532676607,IT
532676608,532692991,GE
532692992,532701183,CZ
-532703232,532705279,RU
+532701184,532703231,GB
+532703232,532704511,RU
+532704512,532704767,IN
+532704768,532705279,RU
532705280,532709375,NL
532709376,532725759,RU
532725760,532729855,SE
@@ -1681,22 +1858,565 @@
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,533331967,FR
+533266432,533266435,US
+533266436,533266439,CN
+533266440,533266443,JP
+533266444,533266447,DE
+533266448,533266451,FR
+533266452,533266455,GB
+533266456,533266459,BR
+533266460,533266463,IT
+533266464,533266467,CA
+533266468,533266471,IN
+533266472,533266475,RU
+533266476,533266479,ES
+533266480,533266483,AU
+533266484,533266487,MX
+533266488,533266491,KR
+533266492,533266495,NL
+533266496,533266499,TR
+533266500,533266503,ID
+533266504,533266507,CH
+533266508,533266511,PL
+533266512,533266515,BE
+533266516,533266519,SE
+533266520,533266523,SA
+533266524,533266527,TW
+533266528,533266531,SJ
+533266532,533266535,AT
+533266536,533266539,AR
+533266540,533266543,ZA
+533266544,533266547,IR
+533266548,533266551,TH
+533266552,533266555,DK
+533266556,533266559,GR
+533266560,533266563,AE
+533266564,533266567,VE
+533266568,533266571,CO
+533266572,533266575,FI
+533266576,533266579,MV
+533266580,533266583,PT
+533266584,533266587,HK
+533266588,533266591,SG
+533266592,533266595,EG
+533266596,533266599,NG
+533266600,533266603,IL
+533266604,533266607,IE
+533266608,533266611,CL
+533266612,533266615,CZ
+533266616,533266619,PH
+533266620,533266623,PK
+533266624,533266627,RO
+533266628,533266631,DZ
+533266632,533266635,PE
+533266636,533266639,NZ
+533266640,533266643,KZ
+533266644,533266647,UA
+533266648,533266651,KW
+533266652,533266655,QA
+533266656,533266687,DE
+533266688,533266691,HU
+533266692,533266695,BD
+533266696,533266699,VN
+533266700,533266703,MA
+533266704,533266707,SK
+533266708,533266711,AO
+533266712,533266715,IQ
+533266716,533266719,LY
+533266720,533266723,SD
+533266724,533266727,EC
+533266728,533266731,HR
+533266732,533266735,SY
+533266736,533266739,OM
+533266740,533266743,BY
+533266744,533266747,LU
+533266748,533266751,AZ
+533266752,533266755,DO
+533266756,533266759,LK
+533266760,533266763,SI
+533266764,533266767,FR
+533266768,533266771,BG
+533266772,533266775,TN
+533266776,533266779,GT
+533266780,533266783,UY
+533266784,533266787,LB
+533266788,533266791,UZ
+533266792,533266795,RS
+533266796,533266799,LT
+533266800,533266803,MM
+533266804,533266807,CR
+533266808,533266811,KE
+533266812,533266815,ET
+533266816,533266819,YE
+533266820,533266823,PA
+533266824,533266827,JO
+533266828,533266831,LV
+533266832,533266835,CY
+533266836,533266839,TZ
+533266840,533266843,CI
+533266844,533266847,CM
+533266848,533266851,SV
+533266852,533266855,BH
+533266856,533266859,TT
+533266860,533266863,EE
+533266864,533266867,BO
+533266868,533266871,GH
+533266872,533266875,PY
+533266876,533266879,UG
+533266880,533266883,AF
+533266884,533266887,BA
+533266888,533266891,ZM
+533266892,533266895,HN
+533266896,533266899,NP
+533266900,533266903,GQ
+533266904,533266907,JM
+533266908,533266911,IS
+533266912,533266943,DE
+533266944,533266947,SN
+533266948,533266951,CD
+533266952,533266955,GA
+533266956,533266959,US
+533266960,533266963,BN
+533266964,533266967,CG
+533266968,533266971,AL
+533266972,533266975,NA
+533266976,533266979,KH
+533266980,533266983,GE
+533266984,533266987,MK
+533266988,533266991,MU
+533266992,533266995,ML
+533266996,533266999,AM
+533267000,533267003,PG
+533267004,533267007,BF
+533267008,533267011,MG
+533267012,533267015,MT
+533267016,533267019,TD
+533267020,533267023,BS
+533267024,533267027,HT
+533267028,533267031,BJ
+533267032,533267035,NI
+533267036,533267039,LS
+533267040,533267043,MN
+533267044,533267047,RW
+533267048,533267051,NE
+533267052,533267055,TJ
+533267056,533267059,ZW
+533267060,533267063,MD
+533267064,533267067,MW
+533267068,533267071,KG
+533267072,533267075,GN
+533267076,533267079,BB
+533267080,533267083,ME
+533267084,533267087,MR
+533267088,533267091,SR
+533267092,533267095,SZ
+533267096,533267099,FJ
+533267100,533267103,TG
+533267104,533267107,ER
+533267108,533267111,GY
+533267112,533267115,CF
+533267116,533267119,SL
+533267120,533267123,LS
+533267124,533267127,CV
+533267128,533267131,BI
+533267132,533267135,MV
+533267136,533267139,BZ
+533267140,533267143,BT
+533267144,533267147,DJ
+533267148,533267151,AG
+533267152,533267155,GM
+533267156,533267159,LC
+533267160,533267163,LR
+533267164,533267167,SC
+533267168,533267199,DE
+533267200,533267423,US
+533267424,533267455,DE
+533267456,533267679,CN
+533267680,533267711,DE
+533267712,533267935,JP
+533267936,533268223,DE
+533268224,533268447,FR
+533268448,533268479,DE
+533268480,533268703,GB
+533268704,533268735,DE
+533268736,533268959,BR
+533268960,533268991,DE
+533268992,533269215,IT
+533269216,533269247,DE
+533269248,533269471,CA
+533269472,533269503,DE
+533269504,533269727,IN
+533269728,533269759,DE
+533269760,533269983,ES
+533269984,533270015,DE
+533270016,533270239,AU
+533270240,533270271,DE
+533270272,533270495,KR
+533270496,533270527,DE
+533270528,533270751,NL
+533270752,533270783,DE
+533270784,533271039,DK
+533271040,533271295,EE
+533271296,533271551,FO
+533271552,533271807,GE
+533271808,533272063,FR
+533272064,533272319,DE
+533272320,533272575,GI
+533272576,533272831,GR
+533272832,533273087,GL
+533273088,533273343,GG
+533273344,533273599,VA
+533273600,533273855,HU
+533273856,533274111,IS
+533274112,533274367,IR
+533274368,533274623,IQ
+533274624,533274879,IE
+533274880,533275135,IM
+533275136,533275391,IL
+533275392,533275647,IT
+533275648,533275903,JE
+533275904,533276159,JO
+533276160,533276415,KZ
+533276416,533276671,KW
+533276672,533276927,KG
+533276928,533277183,LV
+533277184,533277439,LB
+533277440,533277695,LI
+533277696,533277951,LT
+533277952,533278207,LU
+533278208,533278463,MT
+533278464,533278719,MC
+533278720,533278975,ME
+533278976,533279231,NL
+533279232,533279487,NO
+533279488,533279743,OM
+533279744,533279999,PS
+533280000,533280255,PL
+533280256,533280511,PT
+533280512,533280767,RO
+533280768,533281023,RU
+533281024,533281279,SM
+533281280,533281535,SA
+533281536,533281791,RS
+533281792,533282047,SK
+533282048,533282303,SI
+533282304,533282559,ES
+533282560,533282815,SE
+533282816,533283071,CH
+533283072,533283327,SY
+533283328,533283583,TJ
+533283584,533283839,TR
+533283840,533284095,TM
+533284096,533284351,UA
+533284352,533284607,AE
+533284608,533284863,GB
+533284864,533285119,UZ
+533285120,533285375,YE
+533285376,533285631,AX
+533285632,533285887,AL
+533285888,533286143,AD
+533286144,533286399,AM
+533286400,533286655,AT
+533286656,533286911,AZ
+533286912,533287167,BH
+533287168,533287423,BY
+533287424,533287679,BE
+533287680,533287935,BA
+533287936,533288191,BG
+533288192,533288447,HR
+533288448,533288703,CY
+533288704,533288959,CZ
+533288960,533289215,DK
+533289216,533289471,EE
+533289472,533289727,FO
+533289728,533289983,GE
+533289984,533290239,FR
+533290240,533290495,DE
+533290496,533290751,GI
+533290752,533291007,GR
+533291008,533291263,GL
+533291264,533291519,GG
+533291520,533291775,VA
+533291776,533292031,HU
+533292032,533292287,IS
+533292288,533292543,IR
+533292544,533292799,IQ
+533292800,533293055,IE
+533293056,533293311,IM
+533293312,533293567,IL
+533293568,533293823,IT
+533293824,533294079,JE
+533294080,533294335,JO
+533294336,533294591,KZ
+533294592,533294847,KW
+533294848,533295103,KG
+533295104,533295359,LV
+533295360,533295615,LB
+533295616,533295871,LI
+533295872,533296127,LT
+533296128,533296383,LU
+533296384,533296639,MT
+533296640,533296895,MC
+533296896,533297151,ME
+533297152,533297407,NL
+533297408,533297663,NO
+533297664,533297919,OM
+533297920,533298175,PT
+533298176,533298431,RO
+533298432,533298687,RU
+533298688,533298943,SM
+533298944,533299199,SA
+533299200,533299455,RS
+533299456,533299711,SK
+533299712,533299967,SI
+533299968,533300223,ES
+533300224,533300479,SE
+533300480,533300735,CH
+533300736,533300991,SY
+533300992,533301247,TJ
+533301248,533301503,TM
+533301504,533301759,UA
+533301760,533302015,AE
+533302016,533302271,GB
+533302272,533302527,UZ
+533302528,533302783,AX
+533302784,533303039,AL
+533303040,533303295,AD
+533303296,533303551,AM
+533303552,533303807,AT
+533303808,533304063,AZ
+533304064,533304319,BH
+533304320,533304575,BY
+533304576,533304831,BE
+533304832,533305087,BA
+533305088,533305343,BG
+533305344,533305599,HR
+533305600,533305855,FR
+533305856,533306111,CZ
+533306112,533306367,FR
+533306368,533306623,EE
+533306624,533306879,FO
+533306880,533307135,GE
+533307136,533307391,FR
+533307392,533307647,DE
+533307648,533307903,GI
+533307904,533308159,GR
+533308160,533308415,GL
+533308416,533308671,GG
+533308672,533308927,VA
+533308928,533309183,HU
+533309184,533309439,IS
+533309440,533309695,IR
+533309696,533309951,IQ
+533309952,533310207,IE
+533310208,533310463,IM
+533310464,533310719,IL
+533310720,533310975,IT
+533310976,533311231,JE
+533311232,533311487,JO
+533311488,533311743,KZ
+533311744,533311999,KW
+533312000,533312255,KG
+533312256,533312511,LV
+533312512,533312767,LB
+533312768,533313023,LI
+533313024,533313279,LT
+533313280,533313535,LU
+533313536,533313791,MT
+533313792,533314047,MC
+533314048,533314303,ME
+533314304,533314559,NL
+533314560,533314815,NO
+533314816,533315071,OM
+533315072,533315327,PT
+533315328,533315583,RO
+533315584,533315839,RU
+533315840,533316095,SM
+533316096,533316351,SA
+533316352,533316607,RS
+533316608,533316863,SK
+533316864,533317119,SI
+533317120,533317375,ES
+533317376,533317631,SE
+533317632,533317887,CH
+533317888,533318143,SY
+533318144,533318399,TJ
+533318400,533318655,TR
+533318656,533318911,TM
+533318912,533319167,UA
+533319168,533319423,AE
+533319424,533319679,GB
+533319680,533319935,UZ
+533319936,533320191,YE
+533320192,533320447,AX
+533320448,533320703,AL
+533320704,533320959,AD
+533320960,533321215,AM
+533321216,533321471,AT
+533321472,533321727,AZ
+533321728,533321983,BH
+533321984,533322495,BE
+533322496,533331967,FR
533331968,533397503,UA
533397504,533463039,KW
533463040,533479423,RU
+533479424,533481471,DE
533481472,533483519,NO
533483520,533485567,FR
+533485568,533487615,LU
533487616,533491711,RU
533491712,533495807,DE
533495808,533503999,NL
+533504000,533512191,RU
533512192,533528575,ME
533528576,533594111,GB
533594112,533659647,TR
-536870912,539624567,US
+533659648,533676031,CZ
+533676032,533680127,RU
+533680128,533682175,TR
+533682176,533684223,ES
+533684224,533692415,IT
+533692416,533725183,RU
+533725184,533807103,SE
+533807104,533811199,LT
+533811200,533815295,DE
+533815296,533815296,TR
+533815297,533816319,CY
+533816320,533816320,TR
+533816321,533817343,CY
+533817344,533817344,TR
+533817345,533819391,CY
+533819392,533823487,DE
+533823488,533823551,CD
+533823552,533823552,BE
+533823553,533823612,CD
+533823613,533823616,BE
+533823617,533823644,CD
+533823645,533823648,BE
+533823649,533823660,CD
+533823661,533823664,BE
+533823665,533823676,CD
+533823677,533823680,BE
+533823681,533823692,CD
+533823693,533823696,BE
+533823697,533823708,CD
+533823709,533823712,BE
+533823713,533823724,CD
+533823725,533825535,BE
+533825536,533831679,IS
+533831680,533835775,DE
+533835776,533837823,SE
+533837824,533839871,DE
+533839872,533856255,IS
+533856256,533858303,FR
+533858304,533859343,HU
+533859344,533859351,SK
+533859352,533860351,HU
+533860352,533861375,DE
+533861376,533862399,NL
+533862400,533864447,GB
+533864448,533889023,TR
+533889024,533891071,GB
+533891072,533893119,RU
+533893120,533895167,ES
+533895168,533897215,TR
+533897216,533899263,DE
+533899264,533901311,RU
+533901312,533905407,IL
+533905408,533913599,RU
+533913600,533915647,ES
+533915648,533919743,GB
+533919744,533921791,SE
+533921792,533954559,RU
+533954560,533962751,BG
+533962752,533964799,GB
+533964800,533966847,NO
+533966848,533968895,DE
+533968896,533970943,ES
+533970944,533987327,SE
+533987328,534118399,DE
+534118400,534151167,KW
+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
+534257408,534257663,PL
+534257664,534259711,SE
+534259712,534261759,CH
+534261760,534263807,GB
+534263808,534265855,PL
+534265856,534282239,CY
+534282240,534284287,IT
+534284288,534286335,SE
+534286336,534288383,LU
+534288384,534290431,IT
+534290432,534296575,RU
+534296576,534298623,BA
+534298624,534306815,HR
+534306816,534308863,SE
+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
+534546432,534548479,DE
+534548480,534550527,PL
+534550528,534560767,RU
+534560768,534609919,GB
+534609920,534642687,ES
+534642688,534646783,CZ
+534646784,534648831,PL
+534648832,534650879,CH
+534650880,534652927,RU
+534652928,534654975,AL
+534654976,534659583,GB
+534659584,534661119,CZ
+534661120,534663167,US
+534663168,534675455,ES
+534675456,534691839,GB
+534691840,534693887,FR
+534693888,534700031,GB
+534700032,534708223,JO
+534708224,534740991,TR
+534740992,534749183,BA
+534749184,534753279,NL
+534753280,534757375,PS
+534757376,534761471,KZ
+534761472,534765567,BA
+534765568,534767615,UA
+534767616,534769663,HU
+534769664,534773759,IT
+534773760,536870911,DE
+536870912,539623999,US
+539624000,539624031,NL
+539624032,539624567,US
539624568,539624575,IE
539624576,539624703,US
539624704,539624735,GB
@@ -1787,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
@@ -1845,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
@@ -1859,7 +2582,6 @@
620232704,620494847,CN
620494848,620625919,NP
620625920,620691455,CN
-620756992,624951295,EU
637534208,644067391,US
644067392,644067455,CA
644067456,644835071,US
@@ -1878,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
@@ -1986,6 +2709,15 @@
692922368,692924415,NG
692924416,692928511,ZA
692928512,692930559,GH
+692930560,692932607,UG
+692932608,692934655,CM
+692934656,692936703,BW
+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
@@ -1998,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
@@ -2050,6 +2782,29 @@
693045248,693046271,KE
693046272,693047295,ZW
693047296,693049343,ZA
+693050368,693051391,ZW
+693051392,693052415,BW
+693052416,693054463,ZA
+693054464,693055487,BI
+693055488,693056511,GQ
+693056512,693057535,NA
+693057536,693058559,ZW
+693058560,693059583,SC
+693059584,693060607,NG
+693060608,693061631,TZ
+693061632,693064703,ZA
+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
@@ -2156,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
@@ -2178,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
@@ -2198,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
@@ -2247,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
@@ -2523,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
@@ -2533,7 +3294,9 @@
772057728,772057735,IT
772057736,772076095,DE
772076096,772076103,IT
-772076104,772145151,DE
+772076104,772076127,DE
+772076128,772076159,EG
+772076160,772145151,DE
772145152,772210687,ES
772210688,772276223,IE
772276224,772341759,RU
@@ -2569,11 +3332,13 @@
772837376,772839423,KZ
772839424,772841471,CH
772841472,772843519,GB
-772843520,772844287,IT
-772844288,772844543,US
-772844544,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
@@ -2622,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
@@ -2633,7 +3400,6 @@
772950016,772952063,ES
772952064,772954111,GB
772954112,772958207,FR
-772958208,772960255,PL
772960256,772962303,GB
772962304,772966399,FR
772966400,772968447,IT
@@ -2680,9 +3446,11 @@
773048320,773050367,LV
773050368,773052415,IE
773052416,773054463,NL
-773054464,773055487,AL
-773055488,773055743,RS
-773055744,773056511,AL
+773054464,773054655,AL
+773054656,773054719,RS
+773054720,773055487,AL
+773055488,773056255,RS
+773056256,773056511,AL
773056512,773058559,IT
773058560,773060607,BE
773060608,773062655,DK
@@ -2690,13 +3458,17 @@
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,773074943,DE
+773070848,773071231,DE
+773071232,773071263,NA
+773071264,773073279,DE
+773073280,773073343,ES
+773073344,773074943,DE
773074944,773079039,PL
773079040,773083135,RU
773083136,773087231,IT
@@ -2713,31 +3485,42 @@
773128192,773132287,DE
773132288,773134335,IT
773134336,773134847,CH
-773134848,773135359,IT
-773135360,773135871,CH
-773135872,773136383,IT
+773134848,773136383,IT
773136384,773140479,DK
773140480,773144575,CY
773144576,773148671,RU
773148672,773152767,IR
773152768,773153791,SE
773153792,773154815,US
-773154816,773156863,SE
-773156864,773160447,FR
-773160448,773160703,ES
-773160704,773165055,FR
-773165056,773168127,NL
-773168128,773168639,US
-773168640,773168895,NL
-773168896,773169151,US
-773169152,773169375,NL
-773169376,773169407,BE
-773169408,773171343,NL
+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,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,773173247,NL
+773172352,773172479,NL
+773172480,773172607,GB
+773172608,773172735,BE
+773172736,773173247,NL
773173248,773177343,IT
773177344,773181439,FR
773181440,773185535,PL
@@ -2755,8 +3538,7 @@
773234688,773238783,PL
773238784,773242879,NL
773242880,773246975,FR
-773246976,773247999,EE
-773248000,773251071,US
+773246976,773251071,EE
773251072,773255167,AZ
773255168,773259263,RU
773259264,773263359,SI
@@ -2784,7 +3566,9 @@
773597184,773599231,BE
773599232,773601279,GB
773601280,773603327,LV
-773603328,773605375,UA
+773603328,773603839,UA
+773603840,773603855,HK
+773603856,773605375,UA
773605376,773607423,IR
773607424,773609471,DE
773609472,773611519,RU
@@ -2796,18 +3580,21 @@
773621760,773623807,PS
773623808,773625855,SE
773625856,773627903,IS
-773627904,773629951,TR
+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
773646336,773648383,TR
773648384,773650431,PL
773650432,773652479,GB
-773652480,773654527,SK
+773652480,773653759,SK
+773653760,773653775,CZ
+773653776,773654527,SK
773654528,773656575,RU
773656576,773658623,PL
773658624,773660671,DE
@@ -2822,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
@@ -2838,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
@@ -2849,8 +3634,7 @@
773709824,773711871,CZ
773711872,773713919,RU
773713920,773715967,NL
-773715968,773716479,EE
-773716480,773716991,SE
+773715968,773716991,SE
773716992,773718015,US
773718016,773720063,DE
773720064,773722111,GB
@@ -2860,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
@@ -2875,25 +3661,30 @@
773763072,773765119,TR
773765120,773767167,NL
773767168,773769215,GB
-773769216,773771263,SE
+773769216,773771263,FR
773771264,773773311,DK
773773312,773775359,IT
773775360,773777407,IQ
773777408,773779455,CZ
-773779456,773781503,ME
-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
@@ -2925,7 +3716,8 @@
773898240,773906431,PS
773906432,773922815,GB
773922816,773931007,UA
-773931008,773939199,FR
+773931008,773934591,DE
+773934592,773939199,FR
773939200,773947391,CZ
773947392,773955583,GB
773955584,773963775,FR
@@ -2934,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
@@ -3053,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
@@ -3065,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
@@ -3114,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
@@ -3128,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
@@ -3137,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
@@ -3154,251 +3948,73 @@
774162174,774162176,VA
774162177,774162181,LK
774162182,774162186,IE
-774162187,774168575,VA
+774162187,774162196,EH
+774162197,774162206,NA
+774162207,774162216,CX
+774162217,774162226,LA
+774162227,774162236,GB
+774162237,774162246,CH
+774162247,774162266,US
+774162267,774162276,PT
+774162277,774162286,AE
+774162287,774162296,IO
+774162297,774162306,GU
+774162307,774162316,RE
+774162317,774162326,TK
+774162327,774162336,CV
+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
+774162463,774162472,SR
+774162473,774162483,PT
+774162484,774162492,CK
+774162493,774162502,KI
+774162503,774162512,NU
+774162513,774162522,TO
+774162523,774162532,CL
+774162533,774162542,TF
+774162543,774162552,GG
+774162553,774162562,LR
+774162563,774162572,MQ
+774162573,774162582,YT
+774162583,774162592,NC
+774162593,774162602,NG
+774162603,774162627,US
+774162628,774162637,GB
+774162638,774162642,NF
+774162643,774162687,US
+774162688,774162688,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,774217791,GB
-774217792,774217823,US
-774217824,774217855,AE
-774217856,774217919,US
-774217920,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,GR
-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,774219871,GB
-774219872,774219887,CN
-774219888,774219895,RU
-774219896,774219903,LK
-774219904,774219967,US
-774219968,774220031,CN
-774220032,774220159,GB
-774220160,774220191,US
-774220192,774220207,GB
-774220208,774220223,CN
-774220224,774220287,GB
-774220288,774220543,CN
-774220544,774221055,GB
-774221056,774221311,US
-774221312,774221567,CN
-774221568,774221823,US
-774221824,774222079,GB
-774222080,774222335,US
-774222336,774222463,GB
-774222464,774222495,CN
-774222496,774222511,FI
-774222512,774222527,CN
-774222528,774222591,GB
-774222592,774222655,CN
-774222656,774222719,GB
-774222720,774222783,CN
-774222784,774222847,GB
-774222848,774222863,UA
-774222864,774222879,TR
-774222880,774222895,US
-774222896,774222911,GB
-774222912,774222943,MA
-774222944,774222951,GB
-774222952,774222967,CN
-774222968,774222975,GB
-774222976,774223039,CN
-774223040,774223071,IT
-774223072,774223103,CN
-774223104,774223119,UA
-774223120,774223151,CN
-774223152,774223167,TR
-774223168,774223215,GB
-774223216,774223231,BE
-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,774223423,TR
-774223424,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,TR
-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,TR
-774225648,774225663,UA
-774225664,774225671,LK
-774225672,774225679,RU
-774225680,774225687,GB
-774225688,774225695,CA
-774225696,774225727,GB
-774225728,774225743,LT
-774225744,774225791,GB
-774225792,774225807,UA
-774225808,774225823,GB
-774225824,774225855,US
-774225856,774225919,IN
+774217728,774225919,GB
774225920,774234111,UA
774234112,774242303,IT
774242304,774258687,RU
774258688,774266879,SA
774266880,774275071,RU
-774275072,774275327,GB
-774275328,774283263,IR
-774283264,774291455,GB
+774275072,774283007,IR
+774283008,774291455,GB
774291456,774299647,NL
774299648,774307839,DE
774307840,774324223,RU
@@ -3420,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
@@ -3435,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
@@ -3537,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
@@ -3549,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
@@ -3560,16 +4181,18 @@
778666392,778666399,PL
778666400,778666479,FR
778666480,778666495,DE
-778666496,778666751,FR
+778666496,778666751,BE
778666752,778666783,CZ
778666784,778666815,FR
778666816,778666847,GB
-778666848,778666863,FR
+778666848,778666863,PT
778666864,778666871,GB
778666872,778666879,IE
778666880,778666967,FR
778666968,778666975,PL
-778666976,778667279,FR
+778666976,778667007,FR
+778667008,778667263,GB
+778667264,778667279,FR
778667280,778667287,IE
778667288,778667291,NL
778667292,778667295,CH
@@ -3585,11 +4208,13 @@
778667416,778667423,FR
778667424,778667455,LT
778667456,778667471,DE
-778667472,778667479,FR
+778667472,778667475,PL
+778667476,778667479,DE
778667480,778667483,GB
778667484,778667487,NL
778667488,778667491,PL
-778667492,778667499,FR
+778667492,778667495,CH
+778667496,778667499,DE
778667500,778667503,GB
778667504,778667839,FR
778667840,778667855,PL
@@ -3607,7 +4232,7 @@
778667932,778667935,CZ
778667936,778667943,FR
778667944,778667947,DE
-778667948,778667951,LT
+778667948,778667951,IE
778667952,778667967,GB
778667968,778667999,FR
778668000,778668019,DE
@@ -3626,40 +4251,48 @@
778668500,778668503,FR
778668504,778668507,ES
778668508,778668511,PT
-778668512,778668515,GB
-778668516,778668527,PL
-778668528,778668543,NL
-778668544,778668559,FR
+778668512,778668527,PL
+778668528,778668535,IT
+778668536,778668539,DE
+778668540,778668543,FR
+778668544,778668559,GB
778668560,778668567,IT
778668568,778668575,PL
778668576,778668607,FR
778668608,778668615,IE
778668616,778668619,PL
-778668620,778668623,GB
-778668624,778668639,FR
+778668620,778668639,FR
778668640,778668671,PL
778668672,778668703,NL
-778668704,778668719,FR
+778668704,778668707,PL
+778668708,778668711,ES
+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
-778669108,778669119,GB
+778669108,778669111,GB
+778669112,778669119,NL
778669120,778669151,FI
-778669152,778669183,FR
-778669184,778669191,DE
-778669192,778669199,FR
+778669152,778669183,PT
+778669184,778669199,FR
778669200,778669207,PL
778669208,778669211,CH
778669212,778669215,ES
-778669216,778669247,GB
+778669216,778669219,CH
+778669220,778669223,FI
+778669224,778669231,NL
+778669232,778669247,PL
778669248,778669295,FR
778669296,778669303,PL
778669304,778669439,FR
778669440,778669447,GB
778669448,778669451,PL
-778669452,778669455,FI
+778669452,778669455,NL
778669456,778669471,FR
778669472,778669503,CZ
778669504,778669535,ES
@@ -3671,20 +4304,20 @@
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
778669856,778669887,FR
778669888,778669903,PL
-778669904,778669919,FR
-778669920,778669935,BE
+778669904,778669935,FR
778669936,778669943,DE
778669944,778669951,CH
778669952,778669959,NL
@@ -3694,19 +4327,24 @@
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
778670216,778670223,FR
778670224,778670239,PL
778670240,778670243,PT
-778670244,778670247,PL
+778670244,778670247,DE
778670248,778670255,CZ
778670256,778670291,FR
778670292,778670295,NL
@@ -3719,10 +4357,11 @@
778670356,778670359,FR
778670360,778670383,DE
778670384,778670387,PL
-778670388,778670395,GB
-778670396,778670399,CZ
+778670388,778670391,NL
+778670392,778670395,CZ
+778670396,778670399,GB
778670400,778670407,PL
-778670408,778670411,GB
+778670408,778670411,DE
778670412,778670415,NL
778670416,778670431,FR
778670432,778670435,NL
@@ -3746,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
@@ -3801,7 +4441,8 @@
778672568,778672639,FR
778672640,778672703,DE
778672704,778672767,CH
-778672768,778672803,FR
+778672768,778672799,PL
+778672800,778672803,FR
778672804,778672807,DE
778672808,778672811,PL
778672812,778672815,ES
@@ -3809,15 +4450,960 @@
778672820,778672823,PL
778672824,778672831,DE
778672832,778672851,FR
-778672852,778672879,PL
-778672880,778672887,IT
-778672888,778672891,PL
+778672852,778672891,PL
778672892,778672911,FR
778672912,778672919,PL
778672920,778672923,FR
778672924,778672927,ES
778672928,778672959,DE
-778672960,778698751,FR
+778672960,778673071,FR
+778673072,778673079,DE
+778673080,778673083,ES
+778673084,778673087,PT
+778673088,778673119,FR
+778673120,778673151,ES
+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
+778673280,778673343,FR
+778673344,778673359,PL
+778673360,778673391,GB
+778673392,778673407,FR
+778673408,778673663,PL
+778673664,778673711,FR
+778673712,778673715,CH
+778673716,778673719,NL
+778673720,778673723,PT
+778673724,778673727,PL
+778673728,778673823,FR
+778673824,778673839,ES
+778673840,778673843,FR
+778673844,778673855,DE
+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
+778674388,778674391,BE
+778674392,778674395,CH
+778674396,778674399,PT
+778674400,778674431,FR
+778674432,778674435,PL
+778674436,778674439,ES
+778674440,778674447,PL
+778674448,778674451,IT
+778674452,778674455,PL
+778674456,778674459,IT
+778674460,778674463,FI
+778674464,778674471,CH
+778674472,778674475,BE
+778674476,778674479,CH
+778674480,778674487,FR
+778674488,778674491,CZ
+778674492,778674495,PL
+778674496,778674499,CZ
+778674500,778674503,DE
+778674504,778674507,PL
+778674508,778674511,NL
+778674512,778674527,FR
+778674528,778674531,DE
+778674532,778674535,ES
+778674536,778674539,PT
+778674540,778674543,PL
+778674544,778674623,DE
+778674624,778674635,PL
+778674636,778674639,ES
+778674640,778674975,FR
+778674976,778674979,BE
+778674980,778674983,DE
+778674984,778674999,FR
+778675000,778675003,FI
+778675004,778675007,GB
+778675008,778675039,ES
+778675040,778675071,FR
+778675072,778675075,DE
+778675076,778675079,IT
+778675080,778675087,ES
+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
+778675232,778675235,GB
+778675236,778675243,PL
+778675244,778675247,DE
+778675248,778675359,FR
+778675360,778675363,DE
+778675364,778675367,BE
+778675368,778675371,CH
+778675372,778675375,CZ
+778675376,778675439,FR
+778675440,778675443,DE
+778675444,778675447,FR
+778675448,778675451,PL
+778675452,778675455,DE
+778675456,778675459,PL
+778675460,778675463,FR
+778675464,778675471,ES
+778675472,778675475,BE
+778675476,778675479,ES
+778675480,778675483,CH
+778675484,778675487,PT
+778675488,778675495,PL
+778675496,778675499,DE
+778675500,778675503,PL
+778675504,778675507,DE
+778675508,778675511,GB
+778675512,778675519,PL
+778675520,778675551,ES
+778675552,778675599,FR
+778675600,778675615,GB
+778675616,778675619,PL
+778675620,778675623,ES
+778675624,778675631,PL
+778675632,778675639,ES
+778675640,778675647,DE
+778675648,778675687,FR
+778675688,778675691,ES
+778675692,778675695,FR
+778675696,778675711,NL
+778675712,778675839,FR
+778675840,778675843,FI
+778675844,778675847,FR
+778675848,778675855,PL
+778675856,778675859,GB
+778675860,778675863,IE
+778675864,778675867,DE
+778675868,778675871,FI
+778675872,778675887,FR
+778675888,778675891,ES
+778675892,778675895,FR
+778675896,778675903,PL
+778675904,778675907,CH
+778675908,778675911,CZ
+778675912,778675915,NL
+778675916,778675935,DE
+778675936,778675943,ES
+778675944,778676095,FR
+778676096,778676099,DE
+778676100,778676103,CZ
+778676104,778676111,GB
+778676112,778676127,IT
+778676128,778676131,ES
+778676132,778676135,CZ
+778676136,778676139,DE
+778676140,778676143,PL
+778676144,778676159,DE
+778676160,778676187,FR
+778676188,778676191,BE
+778676192,778676207,IT
+778676208,778676211,GB
+778676212,778676215,ES
+778676216,778676219,FR
+778676220,778676223,GB
+778676224,778676415,FR
+778676416,778676423,ES
+778676424,778676427,PL
+778676428,778676439,FR
+778676440,778676443,PL
+778676444,778676447,CH
+778676448,778676463,FR
+778676464,778676479,PL
+778676480,778676543,NL
+778676544,778676575,PT
+778676576,778676579,FR
+778676580,778676583,DE
+778676584,778676587,BE
+778676588,778676591,DE
+778676592,778676607,FR
+778676608,778676611,PL
+778676612,778676615,PT
+778676616,778676619,BE
+778676620,778676623,FR
+778676624,778676631,PL
+778676632,778676635,FR
+778676636,778676639,DE
+778676640,778676655,ES
+778676656,778676687,FR
+778676688,778676691,ES
+778676692,778676703,PL
+778676704,778676719,FR
+778676720,778676723,GB
+778676724,778676727,PT
+778676728,778676731,PL
+778676732,778676735,IT
+778676736,778676743,PL
+778676744,778676747,CH
+778676748,778676751,CZ
+778676752,778676767,ES
+778676768,778676771,PL
+778676772,778676775,ES
+778676776,778676779,PL
+778676780,778676799,FR
+778676800,778676803,GB
+778676804,778676807,IT
+778676808,778676811,FI
+778676812,778676815,IE
+778676816,778676823,LT
+778676824,778676827,GB
+778676828,778676847,FR
+778676848,778676851,NL
+778676852,778676855,LT
+778676856,778676859,IE
+778676860,778676863,DE
+778676864,778676991,PL
+778676992,778676999,FR
+778677000,778677007,PL
+778677008,778677023,FR
+778677024,778677055,DE
+778677056,778677075,FR
+778677076,778677079,DE
+778677080,778677083,IT
+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,778677215,GB
+778677216,778677247,PL
+778677248,778677503,FR
+778677504,778677507,IE
+778677508,778677511,FR
+778677512,778677515,IT
+778677516,778677519,GB
+778677520,778677523,FR
+778677524,778677527,DE
+778677528,778677531,BE
+778677532,778677535,PT
+778677536,778677543,FI
+778677544,778677547,ES
+778677548,778677551,FR
+778677552,778677559,PL
+778677560,778677567,ES
+778677568,778677695,FR
+778677696,778677727,PT
+778677728,778677823,FR
+778677824,778677839,NL
+778677840,778677855,PL
+778677856,778677859,ES
+778677860,778677863,LT
+778677864,778677871,IT
+778677872,778677875,PL
+778677876,778677879,GB
+778677880,778677883,LT
+778677884,778677887,BE
+778677888,778677903,ES
+778677904,778677919,FR
+778677920,778677923,CH
+778677924,778677927,PT
+778677928,778677935,PL
+778677936,778677939,FR
+778677940,778677947,BE
+778677948,778677951,DE
+778677952,778677967,FR
+778677968,778677983,GB
+778677984,778677999,FR
+778678000,778678003,BE
+778678004,778678007,PL
+778678008,778678011,GB
+778678012,778678015,FR
+778678016,778678019,PL
+778678020,778678023,DE
+778678024,778678027,ES
+778678028,778678031,FR
+778678032,778678047,PL
+778678048,778678115,FR
+778678116,778678119,ES
+778678120,778678127,IT
+778678128,778678143,FR
+778678144,778678159,GB
+778678160,778678163,PL
+778678164,778678167,BE
+778678168,778678191,PL
+778678192,778678207,FR
+778678208,778678271,PL
+778678272,778678783,DE
+778678784,778678799,FR
+778678800,778678803,PL
+778678804,778678807,GB
+778678808,778678815,FR
+778678816,778678831,PL
+778678832,778678835,FR
+778678836,778678839,BE
+778678840,778678847,IT
+778678848,778678851,FR
+778678852,778678855,ES
+778678856,778678859,CZ
+778678860,778678863,GB
+778678864,778678871,PL
+778678872,778678875,ES
+778678876,778678879,NL
+778678880,778678895,FR
+778678896,778678903,GB
+778678904,778678911,PL
+778678912,778678919,FR
+778678920,778678927,ES
+778678928,778678943,BE
+778678944,778678959,PL
+778678960,778678967,FR
+778678968,778678975,GB
+778678976,778679007,FR
+778679008,778679023,PL
+778679024,778679031,GB
+778679032,778679035,FR
+778679036,778679055,PL
+778679056,778679071,BE
+778679072,778679103,ES
+778679104,778679123,PL
+778679124,778679127,FR
+778679128,778679151,DE
+778679152,778679167,FR
+778679168,778679199,ES
+778679200,778679215,FR
+778679216,778679231,PT
+778679232,778679263,ES
+778679264,778679267,IT
+778679268,778679271,FR
+778679272,778679279,PL
+778679280,778679295,PT
+778679296,778679495,FR
+778679496,778679519,PL
+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,778679711,GB
+778679712,778679807,FR
+778679808,778679823,IT
+778679824,778679843,PL
+778679844,778679847,DE
+778679848,778679855,FR
+778679856,778679871,DE
+778679872,778679903,PL
+778679904,778679907,ES
+778679908,778679911,FR
+778679912,778679915,ES
+778679916,778679919,FR
+778679920,778679935,GB
+778679936,778680079,FR
+778680080,778680087,GB
+778680088,778680091,IT
+778680092,778680111,PL
+778680112,778680127,ES
+778680128,778680151,PL
+778680152,778680155,ES
+778680156,778680159,BE
+778680160,778680175,PT
+778680176,778680183,ES
+778680184,778680199,IT
+778680200,778680203,NL
+778680204,778680207,PL
+778680208,778680227,FR
+778680228,778680231,IE
+778680232,778680239,GB
+778680240,778680255,PL
+778680256,778680271,IT
+778680272,778680279,BE
+778680280,778680287,PL
+778680288,778680319,DE
+778680320,778680447,GB
+778680448,778680451,PT
+778680452,778680455,IE
+778680456,778680471,FR
+778680472,778680479,BE
+778680480,778680559,FR
+778680560,778680575,ES
+778680576,778680639,NL
+778680640,778680647,DE
+778680648,778680671,ES
+778680672,778680679,FR
+778680680,778680683,PL
+778680684,778680687,DE
+778680688,778680767,FR
+778680768,778680831,BE
+778680832,778680895,IT
+778680896,778680959,CH
+778680960,778681023,DE
+778681024,778681087,FI
+778681088,778681151,GB
+778681152,778681215,PL
+778681216,778681235,FR
+778681236,778681239,ES
+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,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
+778681436,778681439,ES
+778681440,778681455,GB
+778681456,778681459,NL
+778681460,778681463,PL
+778681464,778681471,ES
+778681472,778681475,DE
+778681476,778681479,PT
+778681480,778681503,FR
+778681504,778681507,ES
+778681508,778681511,FR
+778681512,778681515,PL
+778681516,778681523,ES
+778681524,778681527,FR
+778681528,778681531,PL
+778681532,778681535,IT
+778681536,778681543,FR
+778681544,778681547,GB
+778681548,778681551,PT
+778681552,778681583,FR
+778681584,778681587,PL
+778681588,778681591,FR
+778681592,778681595,LT
+778681596,778681599,GB
+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,FR
+778681728,778682111,GB
+778682112,778682115,IT
+778682116,778682119,PL
+778682120,778682123,CH
+778682124,778682127,FR
+778682128,778682143,IE
+778682144,778682175,CH
+778682176,778682195,IT
+778682196,778682199,NL
+778682200,778682203,PL
+778682204,778682207,PT
+778682208,778682239,FR
+778682240,778682243,BE
+778682244,778682247,DE
+778682248,778682295,FR
+778682296,778682303,PL
+778682304,778682331,FR
+778682332,778682335,NL
+778682336,778682351,IT
+778682352,778682367,GB
+778682368,778690559,FR
+778690560,778690591,DE
+778690592,778690623,FR
+778690624,778690639,PL
+778690640,778690655,IT
+778690656,778690687,PT
+778690688,778690703,PL
+778690704,778690723,FR
+778690724,778690727,GB
+778690728,778690751,FR
+778690752,778690783,DE
+778690784,778690815,FR
+778690816,778690879,ES
+778690880,778690927,FR
+778690928,778690931,PL
+778690932,778690935,ES
+778690936,778690943,IT
+778690944,778690959,GB
+778690960,778690975,PL
+778690976,778690983,PT
+778690984,778690991,BE
+778690992,778690999,IT
+778691000,778691003,PT
+778691004,778691007,GB
+778691008,778691039,FR
+778691040,778691043,PL
+778691044,778691047,ES
+778691048,778691051,PL
+778691052,778691055,PT
+778691056,778691063,NL
+778691064,778691067,LT
+778691068,778691359,FR
+778691360,778691583,PT
+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,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,778691987,BE
+778691988,778691991,IT
+778691992,778691999,FR
+778692000,778692015,PL
+778692016,778692031,IE
+778692032,778692039,DE
+778692040,778692063,PL
+778692064,778692095,CH
+778692096,778692099,PL
+778692100,778692103,DE
+778692104,778692107,CH
+778692108,778692115,PL
+778692116,778692127,FR
+778692128,778692143,NL
+778692144,778692159,DE
+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
+778692640,778692651,FR
+778692652,778692671,PL
+778692672,778692679,DE
+778692680,778692683,ES
+778692684,778692703,FR
+778692704,778692723,PL
+778692724,778692735,FR
+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,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,IE
+778692880,778692883,PL
+778692884,778692887,FR
+778692888,778692891,PL
+778692892,778692895,GB
+778692896,778692911,FR
+778692912,778692927,NL
+778692928,778692959,DE
+778692960,778692967,FR
+778692968,778692971,LT
+778692972,778692975,PT
+778692976,778692983,DE
+778692984,778692991,FR
+778692992,778693023,GB
+778693024,778693027,PL
+778693028,778693031,ES
+778693032,778693035,FR
+778693036,778693039,DE
+778693040,778693055,PT
+778693056,778693059,CH
+778693060,778693063,PL
+778693064,778693067,CZ
+778693068,778693071,IT
+778693072,778693075,GB
+778693076,778693079,PL
+778693080,778693087,FR
+778693088,778693091,IE
+778693092,778693095,FR
+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,778693183,FR
+778693184,778693223,PL
+778693224,778693227,FR
+778693228,778693231,IT
+778693232,778693235,DE
+778693236,778693239,PL
+778693240,778693243,ES
+778693244,778693247,PL
+778693248,778693279,FR
+778693280,778693295,IT
+778693296,778693327,FR
+778693328,778693391,GB
+778693392,778693423,FR
+778693424,778693439,ES
+778693440,778693455,FR
+778693456,778693459,DE
+778693460,778693511,FR
+778693512,778693515,CZ
+778693516,778693567,FR
+778693568,778693599,BE
+778693600,778693631,NL
+778693632,778693663,FR
+778693664,778693679,NL
+778693680,778693695,DE
+778693696,778693759,IE
+778693760,778693763,NL
+778693764,778693767,ES
+778693768,778693771,PL
+778693772,778693775,FR
+778693776,778693791,IT
+778693792,778693799,ES
+778693800,778693807,FR
+778693808,778693823,PL
+778693824,778693839,PT
+778693840,778693855,FR
+778693856,778693887,DE
+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
@@ -4034,8 +5620,7 @@
780713984,780714239,CR
780714240,780714495,CU
780714496,780714751,CV
-780714752,780715007,FR
-780715008,780715263,CY
+780714752,780715263,CY
780715264,780715519,CZ
780715520,780715775,DE
780715776,780716031,DJ
@@ -4094,7 +5679,13 @@
780729600,780729855,JM
780729856,780730111,JO
780730112,780730367,JP
-780730368,780795903,IE
+780730368,780779519,IE
+780779520,780783615,NL
+780783616,780785663,GB
+780785664,780787711,DE
+780787712,780791807,FR
+780791808,780793855,SE
+780793856,780795903,DE
780795904,780861439,RU
780861440,780926975,HU
780926976,780992511,CH
@@ -4163,14 +5754,9 @@
781711360,781713407,UA
781713408,781844479,SA
781844480,781975551,TR
-781975552,782106623,GB
782106624,782254079,RU
782254080,782270463,UA
-782270464,782305791,RU
-782305792,782306303,RO
-782306304,782310399,RU
-782310400,782310911,RO
-782310912,782319615,RU
+782270464,782319615,RU
782319616,782335999,ME
782336000,782352383,RU
782352384,782368767,SY
@@ -4178,8 +5764,12 @@
782385152,782401535,SE
782401536,782417919,FR
782417920,782434303,AM
-782434304,782450175,SI
-782450176,782450687,BA
+782434304,782449151,SI
+782449152,782449407,HR
+782449408,782449663,SI
+782449664,782449695,BA
+782449696,782449919,SI
+782449920,782450687,BA
782450688,782467071,DE
782467072,782483455,RU
782483456,782499839,FI
@@ -4195,9 +5785,17 @@
782664448,782664703,LU
782664704,782664704,GB
782664705,782665471,NL
-782665472,782667519,GB
+782665472,782666495,US
+782666496,782666751,GB
+782666752,782667007,US
+782667008,782667519,RU
782667520,782667775,LU
-782667776,782680063,GB
+782667776,782668287,FR
+782668288,782668799,RU
+782668800,782669567,NL
+782669568,782669823,GB
+782669824,782671871,DE
+782671872,782680063,GB
782680064,782696447,RU
782696448,782712831,DE
782712832,782729215,RU
@@ -4278,8 +5876,8 @@
783689728,783691775,FR
783691776,783693823,BY
783693824,783694623,GB
-783694624,783694655,FR
-783694656,783695871,GB
+783694624,783694687,FR
+783694688,783695871,GB
783695872,783697919,TR
783697920,783699967,FR
783699968,783702015,UA
@@ -4364,7 +5962,7 @@
785645568,785711103,NO
785711104,785776639,SY
785776640,785842175,RO
-785842176,785907711,DE
+785842176,785907711,PL
785907712,785973247,BY
785973248,786038783,MK
786038784,786104319,FR
@@ -4413,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
@@ -4460,8 +6060,10 @@
786788352,786792447,CZ
786792448,786796543,RU
786796544,786800639,PL
-786800640,786800895,US
-786800896,786804735,UA
+786800640,786801023,US
+786801024,786801151,UA
+786801152,786801663,US
+786801664,786804735,UA
786804736,786808831,RU
786808832,786812927,BG
786812928,786817023,RU
@@ -4494,6 +6096,7 @@
786939904,786941951,FI
786941952,786943999,CH
786944000,786946047,RU
+786946048,786948095,FR
786948096,786950143,UA
786950144,786952191,DE
786952192,786952703,NE
@@ -4522,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
@@ -4541,7 +6152,8 @@
787173376,787175423,KZ
787175424,787177471,SA
787177472,787179519,RS
-787179520,787183615,DE
+787179520,787179775,CH
+787179776,787183615,DE
787183616,787185663,PL
787185664,787187711,GG
787187712,787189759,IT
@@ -4570,7 +6182,22 @@
787333120,787349503,DE
787349504,787365887,BG
787365888,787382271,PL
-787382272,787398655,FR
+787382272,787382527,GP
+787382528,787382783,FR
+787382784,787383039,GP
+787383040,787383295,FR
+787383296,787383551,GP
+787383552,787384063,FR
+787384064,787384319,GP
+787384320,787386623,FR
+787386624,787387391,MQ
+787387392,787387647,FR
+787387648,787388671,MQ
+787388672,787390463,FR
+787390464,787390719,MQ
+787390720,787394559,FR
+787394560,787395071,GF
+787395072,787398655,FR
787398656,787415039,PL
787415040,787431423,BA
787431424,787447807,SE
@@ -4582,7 +6209,7 @@
787578880,787611647,AM
787611648,787644415,RU
787644416,787677183,PL
-787677184,787679231,CZ
+787677184,787679231,GB
787679232,787681279,CY
787681280,787683327,IQ
787683328,787685375,NL
@@ -4600,14 +6227,22 @@
787709952,787724287,RU
787724288,787726335,UA
787726336,787742719,RU
-787742720,787775487,NL
+787742720,787758847,NL
+787758848,787759871,GB
+787759872,787760895,NL
+787760896,787761919,DE
+787761920,787762943,NL
+787762944,787763967,ES
+787763968,787775487,NL
787775488,787808255,DE
787808256,787841023,IR
787841024,787843071,RU
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
@@ -4617,11 +6252,27 @@
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
-788004864,788013055,GB
+788004864,788005375,GB
+788005376,788006399,BE
+788006400,788006911,IT
+788006912,788007423,FR
+788007424,788007935,DE
+788007936,788008447,US
+788008448,788008959,SG
+788008960,788009471,IN
+788009472,788009983,ES
+788009984,788010495,HK
+788010496,788011007,AU
+788011008,788011519,CN
+788011520,788012031,AR
+788012032,788012543,CA
+788012544,788013055,RU
788013056,788021247,IR
788021248,788029439,SI
788029440,788045823,GB
@@ -4661,7 +6312,9 @@
788283392,788291583,GB
788291584,788295679,TR
788295680,788299775,RU
-788299776,788303871,LV
+788299776,788301823,LV
+788301824,788302079,LT
+788302080,788303871,LV
788303872,788307967,IT
788307968,788312063,RU
788312064,788316159,FR
@@ -4712,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
@@ -4735,8 +6387,14 @@
788502528,788504575,IE
788504576,788506623,FR
788506624,788508671,CH
-788508672,788509183,FR
-788509184,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
@@ -4808,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
@@ -4891,12 +6551,12 @@
839095808,839096063,CA
839096064,839101695,US
839101696,839102207,CA
-839102208,839103999,US
-839104000,839104255,CA
-839104256,839110143,US
-839110144,839110399,CA
-839110400,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
@@ -4905,14 +6565,54 @@
840278016,840282111,CA
840282112,840294399,US
840294400,840298495,CA
-840298496,843055103,US
+840298496,842530895,US
+842530896,842530903,IL
+842530904,842531443,US
+842531444,842531447,GB
+842531448,842531519,US
+842531520,842531523,MX
+842531524,842531603,US
+842531604,842531605,ES
+842531606,842531659,US
+842531660,842531661,IN
+842531662,842534251,US
+842534252,842534255,NO
+842534256,842534335,US
+842534336,842534339,ES
+842534340,842535159,US
+842535160,842535167,IS
+842535168,842535839,US
+842535840,842535847,MX
+842535848,842541693,US
+842541694,842541695,ZA
+842541696,842541723,US
+842541724,842541725,CA
+842541726,842542399,US
+842542400,842542407,NZ
+842542408,842542415,US
+842542416,842542423,NZ
+842542424,842542431,JO
+842542432,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,845414399,CA
-845545472,846200831,US
-847249408,855638015,US
+845283328,845545471,CA
+845545472,846442495,US
+846442496,846446591,CA
+846446592,855638015,US
855638016,872415231,GB
872415232,889192447,US
889192448,905969663,DE
@@ -5360,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
@@ -5384,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
@@ -5407,21 +7103,17 @@
1040467088,1040467103,DE
1040467104,1040467135,FR
1040467136,1040467151,DE
-1040467152,1040467583,EU
-1040467584,1040467647,FR
-1040467648,1040467759,EU
-1040467760,1040467823,FR
+1040467152,1040467759,EU
+1040467760,1040467767,FR
+1040467768,1040467775,EU
+1040467776,1040467823,FR
1040467824,1040467935,EU
1040467936,1040467951,FR
1040467952,1040467967,EU
1040467968,1040468095,FR
-1040468096,1040468159,EU
-1040468160,1040468223,FR
-1040468224,1040468231,EU
+1040468096,1040468231,EU
1040468232,1040468255,FR
-1040468256,1040468263,EU
-1040468264,1040468287,FR
-1040468288,1040468415,EU
+1040468256,1040468415,EU
1040468416,1040468479,FR
1040468480,1040468607,EU
1040468608,1040468735,DE
@@ -5434,23 +7126,29 @@
1040469248,1040469279,FR
1040469280,1040469311,EU
1040469312,1040469343,FR
-1040469344,1040469375,EU
-1040469376,1040469567,FR
+1040469344,1040469439,EU
+1040469440,1040469471,FR
+1040469472,1040469503,EU
+1040469504,1040469567,FR
1040469568,1040469631,EU
1040469632,1040469695,FR
1040469696,1040469727,EU
1040469728,1040469759,FR
1040469760,1040469903,EU
1040469904,1040469919,FR
-1040469920,1040469967,EU
-1040469968,1040469999,FR
+1040469920,1040469983,EU
+1040469984,1040469999,FR
1040470000,1040470271,EU
1040470272,1040470335,DE
1040470336,1040470399,EU
1040470400,1040470431,DE
1040470432,1040471487,EU
1040471488,1040471519,NL
-1040471520,1040474111,EU
+1040471520,1040472575,EU
+1040472576,1040472831,DE
+1040472832,1040473071,EU
+1040473072,1040473087,DE
+1040473088,1040474111,EU
1040474112,1040482303,CZ
1040482304,1040515071,BE
1040515072,1040547839,GB
@@ -5474,14 +7172,14 @@
1040982632,1040982639,DE
1040982640,1040982943,A2
1040982944,1040982951,DK
-1040982952,1040983807,A2
-1040983808,1040983815,NG
-1040983816,1040984143,A2
-1040984144,1040984151,NG
-1040984152,1040990207,A2
+1040982952,1040984199,A2
+1040984200,1040984203,TZ
+1040984204,1040984215,A2
+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
@@ -5499,7 +7197,6 @@
1041253376,1041268735,RU
1041268736,1041301503,NO
1041301504,1041367039,IE
-1041367040,1041498111,GB
1041498112,1041563647,SE
1041563648,1041596415,PL
1041596416,1041629183,NL
@@ -5549,9 +7246,9 @@
1041699768,1041699807,GB
1041699808,1041700423,FR
1041700424,1041700535,GB
-1041700536,1041700551,FR
-1041700552,1041700607,GB
-1041700608,1041700983,FR
+1041700536,1041700583,FR
+1041700584,1041700591,GB
+1041700592,1041700983,FR
1041700984,1041700991,GB
1041700992,1041701175,FR
1041701176,1041701183,GB
@@ -5577,27 +7274,31 @@
1041702320,1041702335,GB
1041702336,1041702351,FR
1041702352,1041702399,GB
-1041702400,1041703575,FR
-1041703576,1041703583,GB
-1041703584,1041703783,FR
-1041703784,1041703791,GB
-1041703792,1041704119,FR
+1041702400,1041702751,FR
+1041702752,1041702759,GB
+1041702760,1041703639,FR
+1041703640,1041703647,GB
+1041703648,1041703975,FR
+1041703976,1041703983,GB
+1041703984,1041704119,FR
1041704120,1041704127,GB
1041704128,1041704159,FR
1041704160,1041704175,GB
-1041704176,1041704255,FR
-1041704256,1041704263,GB
-1041704264,1041704407,FR
+1041704176,1041704207,FR
+1041704208,1041704215,GB
+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
@@ -5619,8 +7320,8 @@
1041705392,1041705439,GB
1041705440,1041705447,FR
1041705448,1041705455,GB
-1041705456,1041705471,FR
-1041705472,1041705479,GB
+1041705456,1041705463,FR
+1041705464,1041705479,GB
1041705480,1041705487,FR
1041705488,1041705519,GB
1041705520,1041705631,FR
@@ -5647,11 +7348,7 @@
1041706112,1041706143,GB
1041706144,1041706191,FR
1041706192,1041706239,GB
-1041706240,1041706359,FR
-1041706360,1041706367,GB
-1041706368,1041706447,FR
-1041706448,1041706463,GB
-1041706464,1041706479,FR
+1041706240,1041706479,FR
1041706480,1041706487,GB
1041706488,1041706791,FR
1041706792,1041706799,GB
@@ -5667,15 +7364,15 @@
1041707408,1041707415,GB
1041707416,1041707455,FR
1041707456,1041707463,GB
-1041707464,1041707487,FR
-1041707488,1041707495,GB
+1041707464,1041707479,FR
+1041707480,1041707495,GB
1041707496,1041707503,FR
1041707504,1041707519,GB
1041707520,1041707559,FR
1041707560,1041707583,GB
1041707584,1041707631,FR
-1041707632,1041707639,GB
-1041707640,1041707679,FR
+1041707632,1041707647,GB
+1041707648,1041707679,FR
1041707680,1041707687,GB
1041707688,1041707807,FR
1041707808,1041707815,GB
@@ -5733,9 +7430,7 @@
1041710008,1041710015,GB
1041710016,1041710047,FR
1041710048,1041710055,GB
-1041710056,1041710343,FR
-1041710344,1041710367,GB
-1041710368,1041710391,FR
+1041710056,1041710391,FR
1041710392,1041710407,GB
1041710408,1041710431,FR
1041710432,1041710455,GB
@@ -5745,13 +7440,13 @@
1041710496,1041710511,GB
1041710512,1041710535,FR
1041710536,1041710543,GB
-1041710544,1041710559,FR
-1041710560,1041710583,GB
+1041710544,1041710551,FR
+1041710552,1041710583,GB
1041710584,1041710719,FR
1041710720,1041710727,GB
1041710728,1041710735,FR
-1041710736,1041710743,GB
-1041710744,1041710775,FR
+1041710736,1041710751,GB
+1041710752,1041710775,FR
1041710776,1041710783,GB
1041710784,1041711431,FR
1041711432,1041711439,GB
@@ -5764,8 +7459,8 @@
1041711600,1041711943,FR
1041711944,1041711951,GB
1041711952,1041712415,FR
-1041712416,1041712431,GB
-1041712432,1041712975,FR
+1041712416,1041712423,GB
+1041712424,1041712975,FR
1041712976,1041712983,GB
1041712984,1041713095,FR
1041713096,1041713103,GB
@@ -5785,37 +7480,35 @@
1041714096,1041714103,GB
1041714104,1041714111,FR
1041714112,1041714175,GB
-1041714176,1041714631,FR
-1041714632,1041714639,GB
-1041714640,1041714655,FR
-1041714656,1041714687,GB
-1041714688,1041714775,FR
-1041714776,1041714783,GB
-1041714784,1041714815,FR
+1041714176,1041714511,FR
+1041714512,1041714519,GB
+1041714520,1041714663,FR
+1041714664,1041714687,GB
+1041714688,1041714815,FR
1041714816,1041714847,GB
1041714848,1041714855,FR
1041714856,1041714879,GB
1041714880,1041714911,FR
1041714912,1041714919,GB
-1041714920,1041714999,FR
-1041715000,1041715015,GB
+1041714920,1041715007,FR
+1041715008,1041715015,GB
1041715016,1041715079,FR
1041715080,1041715087,GB
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
@@ -5831,11 +7524,7 @@
1041716048,1041716095,GB
1041716096,1041716111,FR
1041716112,1041716223,GB
-1041716224,1041716231,FR
-1041716232,1041716239,GB
-1041716240,1041716311,FR
-1041716312,1041716319,GB
-1041716320,1041716439,FR
+1041716224,1041716439,FR
1041716440,1041716447,GB
1041716448,1041716503,FR
1041716504,1041716511,GB
@@ -5861,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
@@ -5905,11 +7596,9 @@
1041719229,1041719231,GB
1041719232,1041719247,FR
1041719248,1041719263,GB
-1041719264,1041719683,FR
-1041719684,1041719687,GB
-1041719688,1041719703,FR
-1041719704,1041719711,GB
-1041719712,1041719743,FR
+1041719264,1041719567,FR
+1041719568,1041719583,GB
+1041719584,1041719743,FR
1041719744,1041719759,GB
1041719760,1041719887,FR
1041719888,1041719903,GB
@@ -5917,7 +7606,11 @@
1041719920,1041719935,GB
1041719936,1041720015,FR
1041720016,1041720031,GB
-1041720032,1041720551,FR
+1041720032,1041720487,FR
+1041720488,1041720511,GB
+1041720512,1041720527,FR
+1041720528,1041720535,GB
+1041720536,1041720551,FR
1041720552,1041720559,GB
1041720560,1041720567,FR
1041720568,1041720607,GB
@@ -5925,7 +7618,9 @@
1041720632,1041720639,GB
1041720640,1041720687,FR
1041720688,1041720703,GB
-1041720704,1041720903,FR
+1041720704,1041720831,FR
+1041720832,1041720839,GB
+1041720840,1041720903,FR
1041720904,1041720927,GB
1041720928,1041721039,FR
1041721040,1041721055,GB
@@ -5937,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
@@ -5965,7 +7660,9 @@
1041722984,1041723007,GB
1041723008,1041723047,FR
1041723048,1041723135,GB
-1041723136,1041723359,FR
+1041723136,1041723167,FR
+1041723168,1041723175,GB
+1041723176,1041723359,FR
1041723360,1041723391,GB
1041723392,1041723655,FR
1041723656,1041723775,GB
@@ -5974,12 +7671,10 @@
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,1041724535,FR
-1041724536,1041724543,GB
-1041724544,1041724671,FR
+1041724520,1041724671,FR
1041724672,1041724927,GB
1041724928,1041725015,FR
1041725016,1041725023,GB
@@ -6011,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
@@ -6125,9 +7822,7 @@
1041735568,1041735583,GB
1041735584,1041735615,FR
1041735616,1041735663,GB
-1041735664,1041736247,FR
-1041736248,1041736255,GB
-1041736256,1041736375,FR
+1041735664,1041736375,FR
1041736376,1041736383,GB
1041736384,1041736423,FR
1041736424,1041736455,GB
@@ -6151,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
@@ -6163,8 +7858,12 @@
1041737456,1041737463,GB
1041737464,1041737487,FR
1041737488,1041737495,GB
-1041737496,1041737583,FR
-1041737584,1041737599,GB
+1041737496,1041737503,FR
+1041737504,1041737511,GB
+1041737512,1041737535,FR
+1041737536,1041737567,GB
+1041737568,1041737591,FR
+1041737592,1041737599,GB
1041737600,1041737607,FR
1041737608,1041737615,GB
1041737616,1041737647,FR
@@ -6187,9 +7886,7 @@
1041738160,1041738167,GB
1041738168,1041738215,FR
1041738216,1041738223,GB
-1041738224,1041738503,FR
-1041738504,1041738511,GB
-1041738512,1041738519,FR
+1041738224,1041738519,FR
1041738520,1041738543,GB
1041738544,1041738551,FR
1041738552,1041738559,GB
@@ -6202,22 +7899,20 @@
1041738616,1041738663,FR
1041738664,1041738671,GB
1041738672,1041738703,FR
-1041738704,1041738711,GB
-1041738712,1041738735,FR
+1041738704,1041738719,GB
+1041738720,1041738735,FR
1041738736,1041738751,GB
1041738752,1041739079,FR
1041739080,1041739087,GB
1041739088,1041739167,FR
-1041739168,1041739207,GB
-1041739208,1041739215,FR
-1041739216,1041739231,GB
+1041739168,1041739231,GB
1041739232,1041739295,FR
1041739296,1041739299,BE
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
@@ -6228,9 +7923,13 @@
1041739744,1041739751,GB
1041739752,1041740031,FR
1041740032,1041740039,GB
-1041740040,1041740135,FR
+1041740040,1041740103,FR
+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
@@ -6242,17 +7941,19 @@
1041740672,1041740687,GB
1041740688,1041740703,FR
1041740704,1041740719,GB
-1041740720,1041741063,FR
+1041740720,1041740807,FR
+1041740808,1041740831,GB
+1041740832,1041741063,FR
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
@@ -6260,7 +7961,9 @@
1041741664,1041741679,GB
1041741680,1041741687,FR
1041741688,1041741823,GB
-1041741824,1041742183,FR
+1041741824,1041742087,FR
+1041742088,1041742095,GB
+1041742096,1041742183,FR
1041742184,1041742191,GB
1041742192,1041742223,FR
1041742224,1041742239,GB
@@ -6298,15 +8001,17 @@
1041743744,1041743759,GB
1041743760,1041743767,FR
1041743768,1041743775,GB
-1041743776,1041743791,FR
-1041743792,1041743799,GB
+1041743776,1041743783,FR
+1041743784,1041743799,GB
1041743800,1041743807,FR
1041743808,1041743823,GB
1041743824,1041743831,FR
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
@@ -6318,11 +8023,15 @@
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
-1041744640,1041744919,FR
+1041744640,1041744895,FR
+1041744896,1041744911,GB
+1041744912,1041744919,FR
1041744920,1041744927,GB
1041744928,1041744943,FR
1041744944,1041744951,GB
@@ -6344,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
@@ -6364,7 +8071,9 @@
1041745656,1041745663,GB
1041745664,1041745751,FR
1041745752,1041745767,GB
-1041745768,1041745855,FR
+1041745768,1041745791,FR
+1041745792,1041745799,GB
+1041745800,1041745855,FR
1041745856,1041745871,GB
1041745872,1041745887,FR
1041745888,1041745959,GB
@@ -6396,8 +8105,8 @@
1041749808,1041749815,GB
1041749816,1041749839,FR
1041749840,1041749855,GB
-1041749856,1041749967,FR
-1041749968,1041749983,GB
+1041749856,1041749959,FR
+1041749960,1041749983,GB
1041749984,1041749999,FR
1041750000,1041750007,GB
1041750008,1041750527,FR
@@ -6408,13 +8117,19 @@
1041750744,1041750751,GB
1041750752,1041750775,FR
1041750776,1041750783,GB
-1041750784,1041751351,FR
+1041750784,1041750831,FR
+1041750832,1041750839,GB
+1041750840,1041751303,FR
+1041751304,1041751311,GB
+1041751312,1041751351,FR
1041751352,1041751359,GB
1041751360,1041751567,FR
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
@@ -6621,7 +8336,9 @@
1042889216,1042889471,DE
1042889472,1042889983,NL
1042889984,1042890119,GB
-1042890120,1042890239,NL
+1042890120,1042890127,NL
+1042890128,1042890143,GB
+1042890144,1042890239,NL
1042890240,1042890495,GB
1042890496,1042890751,FR
1042890752,1042890815,GB
@@ -6645,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
@@ -6677,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
@@ -6696,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
@@ -6732,9 +8454,7 @@
1043466576,1043466583,NL
1043466584,1043466607,GB
1043466608,1043466887,NL
-1043466888,1043466895,GB
-1043466896,1043466911,NL
-1043466912,1043466927,GB
+1043466888,1043466927,GB
1043466928,1043466943,NL
1043466944,1043466991,GB
1043466992,1043467007,NL
@@ -6764,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
@@ -6800,12 +8520,8 @@
1043469376,1043469399,NL
1043469400,1043469439,GB
1043469440,1043469559,NL
-1043469560,1043469663,GB
-1043469664,1043469679,NL
-1043469680,1043469695,GB
-1043469696,1043469727,NL
-1043469728,1043469823,GB
-1043469824,1043469843,NL
+1043469560,1043469567,GB
+1043469568,1043469843,NL
1043469844,1043469847,GB
1043469848,1043469919,NL
1043469920,1043469939,GB
@@ -6827,17 +8543,27 @@
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,1043474487,DE
+1043474048,1043474455,DE
+1043474456,1043474463,GB
+1043474464,1043474487,DE
1043474488,1043474495,GB
-1043474496,1043475591,DE
+1043474496,1043474499,DE
+1043474500,1043474503,GB
+1043474504,1043475591,DE
1043475592,1043475711,GB
1043475712,1043475887,DE
1043475888,1043475919,GB
@@ -6845,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
@@ -6853,23 +8583,114 @@
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
1043480352,1043480359,GB
1043480360,1043480363,DE
1043480364,1043480575,GB
-1043480576,1043488767,CH
+1043480576,1043480687,CH
+1043480688,1043480695,GB
+1043480696,1043480831,CH
+1043480832,1043481855,GB
+1043481856,1043482007,CH
+1043482008,1043482015,GB
+1043482016,1043482079,CH
+1043482080,1043482623,GB
+1043482624,1043482647,CH
+1043482648,1043482667,GB
+1043482668,1043482671,CH
+1043482672,1043482687,GB
+1043482688,1043482719,CH
+1043482720,1043482735,GB
+1043482736,1043482759,CH
+1043482760,1043482783,GB
+1043482784,1043482791,CH
+1043482792,1043482807,GB
+1043482808,1043482895,CH
+1043482896,1043482911,GB
+1043482912,1043482951,CH
+1043482952,1043482959,GB
+1043482960,1043482975,CH
+1043482976,1043482995,GB
+1043482996,1043483039,CH
+1043483040,1043483047,GB
+1043483048,1043483059,CH
+1043483060,1043483063,GB
+1043483064,1043483103,CH
+1043483104,1043483111,GB
+1043483112,1043483231,CH
+1043483232,1043483235,GB
+1043483236,1043483279,CH
+1043483280,1043483295,GB
+1043483296,1043483311,CH
+1043483312,1043483319,GB
+1043483320,1043483327,CH
+1043483328,1043483335,GB
+1043483336,1043483343,CH
+1043483344,1043483359,GB
+1043483360,1043483391,CH
+1043483392,1043483655,GB
+1043483656,1043483679,CH
+1043483680,1043483687,GB
+1043483688,1043483759,CH
+1043483760,1043483775,GB
+1043483776,1043483839,CH
+1043483840,1043483871,GB
+1043483872,1043483911,CH
+1043483912,1043484159,GB
+1043484160,1043484191,CH
+1043484192,1043484199,GB
+1043484200,1043484215,CH
+1043484216,1043484223,GB
+1043484224,1043484351,CH
+1043484352,1043484383,GB
+1043484384,1043484431,CH
+1043484432,1043484463,GB
+1043484464,1043484551,CH
+1043484552,1043484559,GB
+1043484560,1043484575,CH
+1043484576,1043484583,GB
+1043484584,1043484623,CH
+1043484624,1043484631,GB
+1043484632,1043484671,CH
+1043484672,1043484679,GB
+1043484680,1043484751,CH
+1043484752,1043484767,GB
+1043484768,1043484799,CH
+1043484800,1043484927,GB
+1043484928,1043484935,CH
+1043484936,1043484943,GB
+1043484944,1043484959,CH
+1043484960,1043484991,GB
+1043484992,1043485055,CH
+1043485056,1043485191,GB
+1043485192,1043485195,CH
+1043485196,1043485439,GB
+1043485440,1043485567,CH
+1043485568,1043485695,GB
+1043485696,1043486239,CH
+1043486240,1043486463,GB
+1043486464,1043486487,CH
+1043486488,1043486719,GB
+1043486720,1043486723,CH
+1043486724,1043486975,GB
+1043486976,1043487039,CH
+1043487040,1043487055,GB
+1043487056,1043487103,CH
+1043487104,1043487231,GB
+1043487232,1043487443,CH
+1043487444,1043487447,GB
+1043487448,1043487455,CH
+1043487456,1043487487,GB
+1043487488,1043487623,CH
+1043487624,1043487631,GB
+1043487632,1043487679,CH
+1043487680,1043487743,GB
+1043487744,1043487751,CH
+1043487752,1043488767,GB
1043488768,1043496959,DE
1043496960,1043497055,FR
1043497056,1043497079,GB
@@ -6973,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
@@ -7305,13 +9128,17 @@
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
1044580608,1044580735,GB
1044580736,1044580767,DE
-1044580768,1044586495,GB
+1044580768,1044580863,GB
+1044580864,1044581119,DE
+1044581120,1044586495,GB
1044586496,1044587007,DE
1044587008,1044587519,GB
1044587520,1044587775,DE
@@ -7337,8 +9164,12 @@
1044592192,1044592255,DE
1044592256,1044592639,GB
1044592640,1044592655,DE
-1044592656,1044592831,GB
-1044592832,1044594431,DE
+1044592656,1044592671,GB
+1044592672,1044592703,DE
+1044592704,1044592831,GB
+1044592832,1044593151,DE
+1044593152,1044593663,GB
+1044593664,1044594431,DE
1044594432,1044625407,GB
1044625408,1044625463,DE
1044625464,1044625471,GB
@@ -7346,29 +9177,30 @@
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,1044631871,DE
-1044631872,1044631951,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
1044638464,1044638719,DE
-1044638720,1044639743,GB
+1044638720,1044638975,GB
+1044638976,1044639231,DE
+1044639232,1044639743,GB
1044639744,1044642303,DE
1044642304,1044642815,GB
1044642816,1044643327,DE
@@ -7457,7 +9289,9 @@
1044930928,1044930967,BE
1044930968,1044930975,FR
1044930976,1044930979,GB
-1044930980,1044931375,BE
+1044930980,1044931343,BE
+1044931344,1044931359,GB
+1044931360,1044931375,BE
1044931376,1044931391,GB
1044931392,1044931407,BE
1044931408,1044931439,GB
@@ -7508,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
@@ -7533,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
@@ -7555,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
@@ -7567,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
@@ -7600,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
@@ -7661,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
@@ -7713,17 +9555,21 @@
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,1045168127,DE
+1045161056,1045161087,DE
+1045161088,1045161119,IN
+1045161120,1045161151,SC
+1045161152,1045168127,DE
1045168128,1045233663,RU
1045233664,1045241855,GB
1045241856,1045250047,IT
@@ -7774,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
@@ -7798,9 +9642,7 @@
1045742116,1045742175,GB
1045742176,1045742191,SE
1045742192,1045742335,GB
-1045742336,1045742339,SE
-1045742340,1045742343,GB
-1045742344,1045742351,SE
+1045742336,1045742351,SE
1045742352,1045742367,GB
1045742368,1045742383,SE
1045742384,1045742395,GB
@@ -7809,25 +9651,26 @@
1045742480,1045742487,SE
1045742488,1045742575,GB
1045742576,1045742623,SE
-1045742624,1045742719,GB
-1045742720,1045742759,SE
+1045742624,1045742751,GB
+1045742752,1045742759,SE
1045742760,1045742831,GB
1045742832,1045742839,SE
1045742840,1045742847,GB
-1045742848,1045742975,SE
-1045742976,1045743031,GB
+1045742848,1045742983,SE
+1045742984,1045742991,GB
+1045742992,1045743007,SE
+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
@@ -7837,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
@@ -7896,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
@@ -7950,8 +9794,8 @@
1046323200,1046327151,ES
1046327152,1046327155,FR
1046327156,1046331391,ES
-1046331392,1046331455,DE
-1046331456,1046331647,EU
+1046331392,1046331519,DE
+1046331520,1046331647,EU
1046331648,1046331679,DE
1046331680,1046331743,EU
1046331744,1046331775,DE
@@ -7959,7 +9803,8 @@
1046331840,1046331871,DE
1046331872,1046332159,EU
1046332160,1046332415,FR
-1046332416,1046333439,EU
+1046332416,1046332447,DE
+1046332448,1046333439,EU
1046333440,1046333695,DE
1046333696,1046334719,EU
1046334720,1046334975,DE
@@ -7972,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
@@ -8036,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
@@ -8067,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
@@ -8348,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
@@ -8422,15 +10267,16 @@
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,1046898943,BE
1046898944,1046899167,EU
1046899168,1046904831,BE
-1046904832,1046908927,SK
+1046904832,1046906879,SK
+1046906880,1046908927,IR
1046908928,1046910975,SE
1046910976,1046913023,IT
1046913024,1046921215,NO
@@ -8477,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
@@ -8490,19 +10338,13 @@
1047527424,1047535615,BE
1047535616,1047551999,DE
1047552000,1047560191,RU
-1047560192,1047560875,DE
-1047560876,1047560879,AU
-1047560880,1047561159,DE
-1047561160,1047561167,AU
-1047561168,1047561367,DE
-1047561368,1047561371,CN
-1047561372,1047561747,DE
+1047560192,1047561151,DE
+1047561152,1047561159,AT
+1047561160,1047561747,DE
1047561748,1047561751,ES
1047561752,1047561887,DE
1047561888,1047561891,US
-1047561892,1047563227,DE
-1047563228,1047563231,CH
-1047563232,1047563287,DE
+1047561892,1047563287,DE
1047563288,1047563295,CH
1047563296,1047563303,DE
1047563304,1047563311,CH
@@ -8527,9 +10369,13 @@
1047563468,1047563471,CH
1047563472,1047565131,DE
1047565132,1047565135,GB
-1047565136,1047565311,DE
-1047565312,1047565315,CH
-1047565316,1047566363,DE
+1047565136,1047565343,DE
+1047565344,1047565359,CH
+1047565360,1047565503,DE
+1047565504,1047565507,CZ
+1047565508,1047565839,DE
+1047565840,1047565887,CH
+1047565888,1047566363,DE
1047566364,1047566367,CH
1047566368,1047566403,DE
1047566404,1047566415,CH
@@ -8553,8 +10399,7 @@
1047566560,1047566563,CH
1047566564,1047566847,DE
1047566848,1047566851,AT
-1047566852,1047566867,DE
-1047566868,1047566871,AT
+1047566852,1047566871,DE
1047566872,1047566879,CH
1047566880,1047566891,DE
1047566892,1047566903,CH
@@ -8575,17 +10420,19 @@
1047567048,1047567063,DE
1047567064,1047567067,CH
1047567068,1047567071,BE
-1047567072,1047567119,DE
+1047567072,1047567075,NL
+1047567076,1047567079,DE
+1047567080,1047567083,NL
+1047567084,1047567119,DE
1047567120,1047567127,CH
-1047567128,1047567147,DE
+1047567128,1047567143,DE
+1047567144,1047567147,CH
1047567148,1047567151,BE
1047567152,1047567159,CH
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
@@ -8603,8 +10450,10 @@
1047567452,1047567455,AT
1047567456,1047567459,CH
1047567460,1047567463,DE
-1047567464,1047567467,CH
-1047567468,1047567495,DE
+1047567464,1047567471,CH
+1047567472,1047567475,DE
+1047567476,1047567483,CH
+1047567484,1047567495,DE
1047567496,1047567499,CH
1047567500,1047567535,DE
1047567536,1047567539,CH
@@ -8622,9 +10471,7 @@
1047567748,1047567751,CH
1047567752,1047567755,LU
1047567756,1047567759,CH
-1047567760,1047567799,DE
-1047567800,1047567803,CH
-1047567804,1047567823,DE
+1047567760,1047567823,DE
1047567824,1047567839,CH
1047567840,1047567847,DE
1047567848,1047567851,CH
@@ -8633,10 +10480,12 @@
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,1047568059,CH
+1047568048,1047568051,CH
+1047568052,1047568055,DE
+1047568056,1047568059,CH
1047568060,1047568159,DE
1047568160,1047568163,CH
1047568164,1047568187,DE
@@ -8665,18 +10514,19 @@
1047740416,1047740431,US
1047740432,1047740447,DE
1047740448,1047740463,IT
-1047740464,1047740543,EU
+1047740464,1047740479,SE
+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
@@ -8687,9 +10537,7 @@
1047789568,1047806031,AT
1047806032,1047806047,IT
1047806048,1047822335,AT
-1047822336,1047834895,DE
-1047834896,1047834903,CY
-1047834904,1047838719,DE
+1047822336,1047838719,DE
1047838720,1047846911,DK
1047846912,1047855103,SE
1047855104,1047863295,DE
@@ -8701,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
@@ -8740,18 +10590,22 @@
1048576000,1048584191,DE
1048584192,1048592383,IL
1048592384,1048600575,IT
-1048600576,1048602623,UA
-1048602624,1048603135,EE
-1048603136,1048604671,UA
+1048600576,1048604671,UA
1048604672,1048604687,EE
-1048604688,1048604743,UA
-1048604744,1048604759,EE
+1048604688,1048604751,UA
+1048604752,1048604759,EE
1048604760,1048604927,UA
-1048604928,1048605079,LT
-1048605080,1048607231,UA
-1048607232,1048607247,EE
-1048607248,1048607487,UA
-1048607488,1048607519,EE
+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,1048607519,EE
1048607520,1048607743,UA
1048607744,1048607759,EE
1048607760,1048607775,UA
@@ -8861,9 +10715,7 @@
1048852040,1048852047,DE
1048852048,1048852335,NL
1048852336,1048852343,DE
-1048852344,1048852807,NL
-1048852808,1048852815,DE
-1048852816,1048852871,NL
+1048852344,1048852871,NL
1048852872,1048852879,DE
1048852880,1048853127,NL
1048853128,1048853135,DE
@@ -9207,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
@@ -9459,24 +11313,20 @@
1049002240,1049002623,EU
1049002624,1049002751,DE
1049002752,1049003263,EU
-1049003264,1049004291,DE
-1049004292,1049004351,EU
+1049003264,1049004287,DE
+1049004288,1049004351,EU
1049004352,1049004415,DE
1049004416,1049004543,EU
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
1049009568,1049009583,EU
1049009584,1049009615,DE
-1049009616,1049009623,EU
-1049009624,1049009631,DE
-1049009632,1049009647,EU
+1049009616,1049009647,EU
1049009648,1049009662,DE
1049009663,1049009663,EU
1049009664,1049012223,DE
@@ -9498,16 +11348,18 @@
1049017984,1049018047,GE
1049018048,1049020127,DE
1049020128,1049020135,FR
-1049020136,1049026559,DE
+1049020136,1049021343,DE
+1049021344,1049021375,US
+1049021376,1049026559,DE
1049026560,1049026815,EU
1049026816,1049031871,DE
1049031872,1049031903,EU
1049031904,1049032143,DE
1049032144,1049032167,EU
1049032168,1049032171,DE
-1049032172,1049032175,EU
-1049032176,1049032287,DE
-1049032288,1049032295,EU
+1049032172,1049032191,EU
+1049032192,1049032291,DE
+1049032292,1049032295,EU
1049032296,1049032383,DE
1049032384,1049032399,EU
1049032400,1049032623,DE
@@ -9523,7 +11375,9 @@
1049231360,1049296895,DE
1049296896,1049362431,EG
1049362432,1049362623,DE
-1049362624,1049362943,GB
+1049362624,1049362687,GB
+1049362688,1049362815,DE
+1049362816,1049362943,GB
1049362944,1049362959,DE
1049362960,1049363071,GB
1049363072,1049363135,DE
@@ -9549,7 +11403,9 @@
1049369600,1049369935,DE
1049369936,1049369983,GB
1049369984,1049370047,DE
-1049370048,1049370175,GB
+1049370048,1049370111,GB
+1049370112,1049370143,DE
+1049370144,1049370175,GB
1049370176,1049370255,DE
1049370256,1049370367,GB
1049370368,1049370623,DE
@@ -9621,12 +11477,9 @@
1049739264,1049755647,NL
1049755648,1049757383,DE
1049757384,1049757391,IT
-1049757392,1049757599,DE
-1049757600,1049757631,LU
-1049757632,1049757647,DE
+1049757392,1049757647,DE
1049757648,1049757663,CA
-1049757664,1049757671,BA
-1049757672,1049758063,DE
+1049757664,1049758063,DE
1049758064,1049758071,PL
1049758072,1049758095,DE
1049758096,1049758103,ES
@@ -9636,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
@@ -9705,9 +11560,7 @@
1049785000,1049785007,AT
1049785008,1049787135,DE
1049787136,1049787391,PL
-1049787392,1049790207,DE
-1049790208,1049790463,LU
-1049790464,1049794559,DE
+1049787392,1049794559,DE
1049794560,1049795583,CH
1049795584,1049817151,DE
1049817152,1049817159,PL
@@ -9946,7 +11799,9 @@
1051949952,1051983871,AT
1051983872,1051986687,EU
1051986688,1051986943,DE
-1051986944,1051991807,EU
+1051986944,1051990015,EU
+1051990016,1051991039,DE
+1051991040,1051991807,EU
1051991808,1051991935,DE
1051991936,1051992063,EU
1051992064,1051994639,DE
@@ -10027,7 +11882,9 @@
1052004000,1052004671,EU
1052004672,1052004687,DE
1052004688,1052004703,EU
-1052004704,1052004759,DE
+1052004704,1052004735,DE
+1052004736,1052004751,EU
+1052004752,1052004759,DE
1052004760,1052004767,EU
1052004768,1052004783,DE
1052004784,1052004815,EU
@@ -10105,7 +11962,9 @@
1052013964,1052014015,EU
1052014016,1052014079,DE
1052014080,1052014111,EU
-1052014112,1052014303,DE
+1052014112,1052014239,DE
+1052014240,1052014271,EU
+1052014272,1052014303,DE
1052014304,1052015367,EU
1052015368,1052015375,DE
1052015376,1052015423,EU
@@ -10157,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
@@ -10167,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
@@ -10872,7 +12731,8 @@
1052426328,1052426495,PT
1052426496,1052426511,EU
1052426512,1052426527,FR
-1052426528,1052427263,EU
+1052426528,1052426751,EU
+1052426752,1052427263,NL
1052427264,1052427839,CH
1052427840,1052427855,GB
1052427856,1052427871,IT
@@ -11064,7 +12924,9 @@
1052507584,1052507647,EU
1052507648,1052507775,GB
1052507776,1052507903,EU
-1052507904,1052596447,GB
+1052507904,1052581087,GB
+1052581088,1052581103,GE
+1052581104,1052596447,GB
1052596448,1052596463,IT
1052596464,1052621951,GB
1052621952,1052622015,IE
@@ -11103,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
@@ -11126,22 +12992,26 @@
1053297040,1053297055,IT
1053297056,1053297071,EU
1053297072,1053297135,IT
-1053297136,1053297143,EU
-1053297144,1053297151,IT
-1053297152,1053298175,EU
+1053297136,1053298175,EU
1053298176,1053299199,CH
1053299200,1053299711,EU
-1053299712,1053300159,GB
+1053299712,1053300031,GB
+1053300032,1053300095,EU
+1053300096,1053300103,GB
+1053300104,1053300111,EU
+1053300112,1053300159,GB
1053300160,1053300223,EU
1053300224,1053300735,GB
1053300736,1053300991,CH
1053300992,1053301023,FR
1053301024,1053301039,EU
-1053301040,1053301063,FR
-1053301064,1053301071,EU
+1053301040,1053301055,FR
+1053301056,1053301071,EU
1053301072,1053301135,FR
1053301136,1053301167,EU
-1053301168,1053301295,FR
+1053301168,1053301279,FR
+1053301280,1053301287,EU
+1053301288,1053301295,FR
1053301296,1053301303,EU
1053301304,1053301359,FR
1053301360,1053301367,EU
@@ -11168,15 +13038,15 @@
1053305952,1053306111,EU
1053306112,1053306879,GR
1053306880,1053307903,EU
-1053307904,1053307951,GB
-1053307952,1053307959,EU
-1053307960,1053308095,GB
-1053308096,1053308159,EU
-1053308160,1053308543,GB
+1053307904,1053307943,GB
+1053307944,1053307959,EU
+1053307960,1053308543,GB
1053308544,1053308671,EU
-1053308672,1053308767,GB
-1053308768,1053308799,EU
-1053308800,1053308863,GB
+1053308672,1053308703,GB
+1053308704,1053308767,EU
+1053308768,1053308831,GB
+1053308832,1053308839,EU
+1053308840,1053308863,GB
1053308864,1053308927,EU
1053308928,1053308991,ZA
1053308992,1053309183,EU
@@ -11194,19 +13064,17 @@
1053312912,1053312927,EU
1053312928,1053312959,DK
1053312960,1053313023,EU
-1053313024,1053313343,GB
-1053313344,1053313407,EU
-1053313408,1053313599,GB
-1053313600,1053313663,EU
-1053313664,1053313671,GB
-1053313672,1053313679,EU
-1053313680,1053313791,GB
+1053313024,1053313471,GB
+1053313472,1053313479,EU
+1053313480,1053313791,GB
1053313792,1053313919,EU
1053313920,1053314047,GB
1053314048,1053314063,EU
1053314064,1053314079,CZ
1053314080,1053315071,EU
-1053315072,1053317119,GB
+1053315072,1053316719,GB
+1053316720,1053316727,EU
+1053316728,1053317119,GB
1053317120,1053317295,ZA
1053317296,1053317375,EU
1053317376,1053317631,GB
@@ -11214,15 +13082,18 @@
1053318144,1053318655,GB
1053318656,1053318911,FI
1053318912,1053318927,EU
-1053318928,1053318951,FI
-1053318952,1053318959,EE
-1053318960,1053318975,EU
+1053318928,1053318935,FI
+1053318936,1053318943,EU
+1053318944,1053318951,FI
+1053318952,1053318975,EU
1053318976,1053319007,FI
1053319008,1053319167,EU
1053319168,1053320191,DE
1053320192,1053320223,EU
1053320224,1053320319,DE
-1053320320,1053326335,EU
+1053320320,1053320447,EU
+1053320448,1053320703,DE
+1053320704,1053326335,EU
1053326336,1053326399,BE
1053326400,1053326431,EU
1053326432,1053326447,GB
@@ -11231,9 +13102,7 @@
1053326464,1053326527,EU
1053326528,1053326543,BE
1053326544,1053326559,EU
-1053326560,1053326567,BE
-1053326568,1053326575,EU
-1053326576,1053326847,BE
+1053326560,1053326847,BE
1053326848,1053327103,FI
1053327104,1053327359,DK
1053327360,1053327871,EU
@@ -11287,8 +13156,8 @@
1053337088,1053337119,ZA
1053337120,1053337127,EU
1053337128,1053337183,ZA
-1053337184,1053337599,EU
-1053337600,1053337631,CH
+1053337184,1053337607,EU
+1053337608,1053337631,CH
1053337632,1053337855,EU
1053337856,1053338111,ZA
1053338112,1053338623,FI
@@ -11310,16 +13179,18 @@
1053340416,1053340479,EU
1053340480,1053340511,NL
1053340512,1053340671,EU
-1053340672,1053341695,GB
+1053340672,1053341567,GB
+1053341568,1053341575,EU
+1053341576,1053341695,GB
1053341696,1053343743,EU
1053343744,1053344255,FI
-1053344256,1053344511,EU
-1053344512,1053344767,BG
-1053344768,1053345279,EU
+1053344256,1053345279,EU
1053345280,1053345375,PK
1053345376,1053345407,EU
1053345408,1053345471,PK
-1053345472,1053348639,EU
+1053345472,1053347839,EU
+1053347840,1053348351,NL
+1053348352,1053348639,EU
1053348640,1053348655,PT
1053348656,1053349119,EU
1053349120,1053349631,NL
@@ -11332,20 +13203,18 @@
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
-1053352192,1053353023,EU
-1053353024,1053353031,IE
-1053353032,1053353103,EU
+1053352192,1053353103,EU
1053353104,1053353119,IE
1053353120,1053353135,EU
1053353136,1053353215,IE
1053353216,1053353223,GB
-1053353224,1053353255,IE
-1053353256,1053353263,EU
+1053353224,1053353247,IE
+1053353248,1053353263,EU
1053353264,1053353279,IE
1053353280,1053353983,EU
1053353984,1053354239,IL
@@ -11357,7 +13226,9 @@
1053354752,1053354831,IL
1053354832,1053354855,EU
1053354856,1053354863,IL
-1053354864,1053354911,EU
+1053354864,1053354871,EU
+1053354872,1053354879,IL
+1053354880,1053354911,EU
1053354912,1053355007,IL
1053355008,1053360127,EU
1053360128,1053364223,ES
@@ -11385,7 +13256,7 @@
1053687808,1053702635,DE
1053702636,1053702639,GB
1053702640,1053753343,DE
-1053753344,1053818879,RU
+1053753344,1053818879,NL
1053818880,1053819391,DE
1053819392,1053819423,EU
1053819424,1053819439,DE
@@ -11452,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
@@ -11543,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
@@ -11559,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
@@ -11657,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
@@ -11788,8 +13663,7 @@
1055253056,1055253087,ES
1055253088,1055256447,EU
1055256448,1055256463,ES
-1055256464,1055260671,EU
-1055260672,1055326207,SE
+1055256464,1055326207,EU
1055326208,1055334399,RU
1055334400,1055342591,IE
1055342592,1055358975,RO
@@ -11815,11 +13689,7 @@
1055490048,1055522815,PL
1055522816,1055588351,NL
1055588352,1055653887,BE
-1055653888,1055681055,FI
-1055681056,1055681071,SE
-1055681072,1055709919,FI
-1055709920,1055709935,AX
-1055709936,1055784959,FI
+1055653888,1055784959,FI
1055784960,1055850495,NL
1055850496,1055916031,GB
1055916032,1055924223,RS
@@ -12075,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
@@ -12097,13 +13974,17 @@
1066311680,1066315775,CA
1066315776,1066332159,US
1066332160,1066336255,CA
-1066336256,1066344447,US
+1066336256,1066352639,US
1066352640,1066369023,JM
1066369024,1066584063,US
1066584064,1066586111,PE
1066586112,1066604927,US
1066604928,1066604959,CA
-1066604960,1067473471,US
+1066604960,1066606295,US
+1066606296,1066606303,GB
+1066606304,1066831071,US
+1066831072,1066831087,JP
+1066831088,1067473471,US
1067473472,1067473535,CA
1067473536,1067474751,US
1067474752,1067474767,NL
@@ -12268,7 +14149,9 @@
1071309696,1071309727,HK
1071309728,1071318783,US
1071318784,1071319039,IN
-1071319040,1071362079,US
+1071319040,1071321487,US
+1071321488,1071321503,HK
+1071321504,1071362079,US
1071362080,1071362111,HK
1071362112,1071362207,US
1071362208,1071362239,HK
@@ -12276,7 +14159,17 @@
1071472640,1071476735,CA
1071476736,1071477247,US
1071477248,1071480831,CA
-1071480832,1071985631,US
+1071480832,1071488447,US
+1071488448,1071488479,HK
+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
@@ -12359,7 +14252,8 @@
1072931584,1072931839,SY
1072931840,1072932607,CA
1072932608,1072932863,NG
-1072932864,1072934399,CA
+1072932864,1072933887,US
+1072933888,1072934399,CA
1072934400,1072934655,US
1072934656,1072934783,CA
1072934784,1072934847,AU
@@ -12415,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
@@ -12574,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
@@ -12687,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
@@ -12800,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
@@ -12827,11 +14718,13 @@
1075972352,1075973887,US
1075973888,1075974143,CA
1075974144,1075975167,US
-1075975168,1075976031,CA
-1075976032,1075976063,US
-1075976064,1075976127,CA
-1075976128,1075976191,US
-1075976192,1075976511,CA
+1075975168,1075975679,CA
+1075975680,1075975815,US
+1075975816,1075976175,CA
+1075976176,1075976191,US
+1075976192,1075976447,CA
+1075976448,1075976479,US
+1075976480,1075976511,CA
1075976512,1075976543,US
1075976544,1075976647,CA
1075976648,1075976655,US
@@ -12858,8 +14751,8 @@
1075982600,1075982607,NZ
1075982608,1075982655,CA
1075982656,1075982671,MX
-1075982672,1075982687,CA
-1075982688,1075982703,US
+1075982672,1075982695,CA
+1075982696,1075982703,US
1075982704,1075982751,CA
1075982752,1075982783,MX
1075982784,1075982815,US
@@ -12892,9 +14785,7 @@
1075991672,1075991679,CA
1075991680,1075992319,US
1075992320,1075992447,GB
-1075992448,1075993087,US
-1075993088,1075993103,CA
-1075993104,1075994607,US
+1075992448,1075994607,US
1075994608,1075994623,BE
1075994624,1075995007,CA
1075995008,1075995023,VG
@@ -12956,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
@@ -12973,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
@@ -12993,9 +14884,7 @@
1076007248,1076007263,US
1076007264,1076007947,CA
1076007948,1076007951,US
-1076007952,1076007967,CA
-1076007968,1076007983,US
-1076007984,1076008063,CA
+1076007952,1076008063,CA
1076008064,1076008191,US
1076008192,1076009631,CA
1076009632,1076009639,US
@@ -13010,7 +14899,9 @@
1076012237,1076012237,IN
1076012238,1076013094,US
1076013095,1076013095,IN
-1076013096,1076024307,US
+1076013096,1076018303,US
+1076018304,1076018367,BR
+1076018368,1076024307,US
1076024308,1076024315,CA
1076024316,1076026023,US
1076026024,1076026031,CA
@@ -13021,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
@@ -13043,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
@@ -13082,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
@@ -13126,7 +15021,17 @@
1076049920,1076050175,IL
1076050176,1076174847,US
1076174848,1076178943,BM
-1076178944,1076183039,US
+1076178944,1076179161,US
+1076179162,1076179163,IN
+1076179164,1076179196,US
+1076179197,1076179198,IN
+1076179199,1076180201,US
+1076180202,1076180222,PK
+1076180223,1076180795,US
+1076180796,1076180799,IN
+1076180800,1076181236,US
+1076181237,1076181237,CA
+1076181238,1076183039,US
1076183040,1076183071,IN
1076183072,1076183231,US
1076183232,1076183295,CA
@@ -13151,9 +15056,7 @@
1076185440,1076185471,IT
1076185472,1076185503,US
1076185504,1076185535,DO
-1076185536,1076185599,US
-1076185600,1076185855,MY
-1076185856,1076185919,US
+1076185536,1076185919,US
1076185920,1076185951,CA
1076185952,1076185983,US
1076185984,1076186015,PK
@@ -13195,9 +15098,7 @@
1076190144,1076190175,BE
1076190176,1076190207,IN
1076190208,1076190463,CA
-1076190464,1076190655,US
-1076190656,1076190719,CA
-1076190720,1076190783,US
+1076190464,1076190783,US
1076190784,1076190815,CA
1076190816,1076190847,IN
1076190848,1076190913,US
@@ -13991,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
@@ -14163,28 +16059,52 @@
1077936598,1077936601,CA
1077936602,1077936605,TH
1077936606,1077936609,JO
-1077936610,1077936621,US
+1077936610,1077936613,US
+1077936614,1077936617,UY
+1077936618,1077936621,US
1077936622,1077936622,AU
1077936623,1077936630,US
1077936631,1077936634,PE
1077936635,1077936638,CA
1077936639,1077936645,US
1077936646,1077936649,HK
-1077936650,1077936695,US
+1077936650,1077936653,CA
+1077936654,1077936667,US
+1077936668,1077936671,CA
+1077936672,1077936683,US
+1077936684,1077936684,HU
+1077936685,1077936691,US
+1077936692,1077936695,IT
1077936696,1077936699,OM
-1077936700,1077936759,US
+1077936700,1077936703,TH
+1077936704,1077936707,RS
+1077936708,1077936742,US
+1077936743,1077936743,BE
+1077936744,1077936759,US
1077936760,1077936763,GB
-1077936764,1077936771,US
+1077936764,1077936767,UA
+1077936768,1077936771,US
1077936772,1077936775,IT
-1077936776,1077936818,US
+1077936776,1077936789,US
+1077936790,1077936793,NG
+1077936794,1077936797,AU
+1077936798,1077936801,SI
+1077936802,1077936805,IT
+1077936806,1077936818,US
1077936819,1077936822,RS
-1077936823,1077936834,US
+1077936823,1077936826,TH
+1077936827,1077936834,US
1077936835,1077936838,VE
1077936839,1077936846,US
1077936847,1077936850,PK
-1077936851,1077936854,US
+1077936851,1077936854,GB
1077936855,1077936859,IN
-1077936860,1077936891,US
+1077936860,1077936871,US
+1077936872,1077936875,LV
+1077936876,1077936879,CA
+1077936880,1077936883,IT
+1077936884,1077936887,CO
+1077936888,1077936891,US
1077936892,1077936892,OM
1077936893,1077936913,US
1077936914,1077936917,ES
@@ -14323,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
@@ -14378,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
@@ -14472,7 +16391,8 @@
1077938802,1077938805,US
1077938806,1077938809,DK
1077938810,1077938813,HK
-1077938814,1077938831,US
+1077938814,1077938829,US
+1077938830,1077938831,ES
1077938832,1077938835,CA
1077938836,1077938848,US
1077938849,1077938852,IT
@@ -14527,12 +16447,20 @@
1077939211,1077939218,US
1077939219,1077939219,NL
1077939220,1077939223,CA
-1077939224,1077939240,US
+1077939224,1077939228,BR
+1077939229,1077939240,US
1077939241,1077939244,NL
1077939245,1077939251,US
1077939252,1077939255,BR
1077939256,1077939259,FR
-1077939260,1077939304,US
+1077939260,1077939263,US
+1077939264,1077939267,MY
+1077939268,1077939284,US
+1077939285,1077939288,ES
+1077939289,1077939292,US
+1077939293,1077939296,IT
+1077939297,1077939300,CA
+1077939301,1077939304,US
1077939305,1077939308,GB
1077939309,1077939321,US
1077939322,1077939329,CA
@@ -14549,15 +16477,25 @@
1077939388,1077939391,PK
1077939392,1077939395,US
1077939396,1077939399,SE
-1077939400,1077939415,US
+1077939400,1077939410,US
+1077939411,1077939414,CN
+1077939415,1077939415,US
1077939416,1077939423,BE
-1077939424,1077939491,US
+1077939424,1077939439,US
+1077939440,1077939443,IS
+1077939444,1077939447,US
+1077939448,1077939451,IN
+1077939452,1077939491,US
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
@@ -14572,44 +16510,136 @@
1077939828,1077939837,PT
1077939838,1077939895,US
1077939896,1077939899,GB
-1077939900,1077939973,US
+1077939900,1077939959,US
+1077939960,1077939963,CA
+1077939964,1077939973,US
1077939974,1077939977,CL
1077939978,1077939981,US
1077939982,1077939985,MU
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,1077940285,US
+1077940077,1077940133,US
+1077940134,1077940137,IN
+1077940138,1077940285,US
1077940286,1077940289,AU
1077940290,1077940378,US
1077940379,1077940382,PK
-1077940383,1077942394,US
-1077942395,1077942398,CA
-1077942399,1077942493,US
+1077940383,1077942289,US
+1077942290,1077942290,CN
+1077942291,1077942310,US
+1077942311,1077942314,AU
+1077942315,1077942342,US
+1077942343,1077942346,CN
+1077942347,1077942363,US
+1077942364,1077942367,AU
+1077942368,1077942390,US
+1077942391,1077942398,CA
+1077942399,1077942411,US
+1077942412,1077942415,CA
+1077942416,1077942427,US
+1077942428,1077942431,CA
+1077942432,1077942435,SG
+1077942436,1077942443,US
+1077942444,1077942447,IN
+1077942448,1077942456,US
+1077942457,1077942461,CN
+1077942462,1077942485,US
+1077942486,1077942489,SG
+1077942490,1077942493,US
1077942494,1077942497,MX
1077942498,1077942501,VN
1077942502,1077942505,IN
1077942506,1077942509,GB
1077942510,1077942513,AE
-1077942514,1077942572,US
+1077942514,1077942535,US
+1077942536,1077942539,AU
+1077942540,1077942543,IN
+1077942544,1077942544,US
+1077942545,1077942559,CN
+1077942560,1077942572,US
1077942573,1077942576,CA
-1077942577,1077942600,US
+1077942577,1077942580,CN
+1077942581,1077942600,US
1077942601,1077942604,PE
-1077942605,1077942620,US
+1077942605,1077942608,CO
+1077942609,1077942612,JP
+1077942613,1077942616,US
+1077942617,1077942620,MX
1077942621,1077942624,BD
-1077942625,1077942746,US
+1077942625,1077942636,US
+1077942637,1077942640,AU
+1077942641,1077942656,US
+1077942657,1077942660,CA
+1077942661,1077942672,US
+1077942673,1077942676,AU
+1077942677,1077942718,US
+1077942719,1077942722,CA
+1077942723,1077942746,US
1077942747,1077942750,GB
-1077942751,1077943045,US
+1077942751,1077942754,MY
+1077942755,1077942758,UA
+1077942759,1077942762,US
+1077942763,1077942766,AU
+1077942767,1077942770,SG
+1077942771,1077942813,US
+1077942814,1077942817,OM
+1077942818,1077942850,US
+1077942851,1077942854,CN
+1077942855,1077942858,ID
+1077942859,1077942867,US
+1077942868,1077942871,CA
+1077942872,1077942889,US
+1077942890,1077942893,ES
+1077942894,1077942922,US
+1077942923,1077942926,ZA
+1077942927,1077942930,CA
+1077942931,1077942943,US
+1077942944,1077942947,CA
+1077942948,1077942960,US
+1077942961,1077942964,OM
+1077942965,1077942972,US
+1077942973,1077942976,CA
+1077942977,1077942984,US
+1077942985,1077942988,IN
+1077942989,1077942992,NZ
+1077942993,1077943024,US
+1077943025,1077943028,AU
+1077943029,1077943038,TH
+1077943039,1077943045,US
1077943046,1077943053,FI
-1077943054,1077943109,US
+1077943054,1077943096,US
+1077943097,1077943100,AU
+1077943101,1077943104,US
+1077943105,1077943108,CN
+1077943109,1077943109,US
1077943110,1077943110,CN
-1077943111,1077943187,US
-1077943188,1077943191,CA
-1077943192,1077943313,US
+1077943111,1077943139,US
+1077943140,1077943143,IN
+1077943144,1077943175,US
+1077943176,1077943179,DO
+1077943180,1077943183,AU
+1077943184,1077943191,CA
+1077943192,1077943224,US
+1077943225,1077943228,MY
+1077943229,1077943242,US
+1077943243,1077943246,IN
+1077943247,1077943247,US
+1077943248,1077943251,PK
+1077943252,1077943270,US
+1077943271,1077943274,BD
+1077943275,1077943279,US
+1077943280,1077943283,CN
+1077943284,1077943287,SG
+1077943288,1077943291,TH
+1077943292,1077943313,US
1077943314,1077943314,BE
-1077943315,1077943378,US
+1077943315,1077943318,CN
+1077943319,1077943378,US
1077943379,1077943379,CZ
1077943380,1077943406,US
1077943407,1077943410,AU
@@ -14730,7 +16760,12 @@
1077968840,1077977087,US
1077977088,1077985279,CA
1077985280,1077993471,US
-1077993472,1078001663,CA
+1077993472,1077993727,CA
+1077993728,1077993983,GB
+1077993984,1077994751,US
+1077994752,1077995007,CA
+1077995008,1077997055,US
+1077997056,1078001663,CA
1078001664,1078067199,US
1078067200,1078071295,BS
1078071296,1078075391,CA
@@ -14829,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
@@ -14871,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
@@ -15011,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
@@ -15238,9 +17269,7 @@
1079381568,1079381599,US
1079381600,1079381631,WS
1079381632,1079381759,CA
-1079381760,1079382015,US
-1079382016,1079382527,CA
-1079382528,1079383039,US
+1079381760,1079383039,US
1079383040,1079383295,VG
1079383296,1079383807,US
1079383808,1079384063,MH
@@ -15250,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
@@ -15296,7 +17323,9 @@
1079400768,1079400831,US
1079400832,1079401215,CA
1079401216,1079401471,US
-1079401472,1079403775,CA
+1079401472,1079403263,CA
+1079403264,1079403519,US
+1079403520,1079403775,CA
1079403776,1079403807,US
1079403808,1079403903,CA
1079403904,1079403935,US
@@ -15319,22 +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,1079414783,CA
-1079414784,1079415039,US
+1079413344,1079413535,CA
+1079413536,1079413567,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
@@ -15563,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
@@ -15626,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
@@ -15710,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
@@ -15833,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
@@ -15857,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
@@ -15881,9 +17943,7 @@
1081912576,1081912639,DE
1081912640,1081927135,US
1081927136,1081927143,GB
-1081927144,1081955839,US
-1081955840,1081956095,CA
-1081956096,1081966871,US
+1081927144,1081966871,US
1081966872,1081966879,AS
1081966880,1082091263,US
1082091264,1082091271,CN
@@ -15905,7 +17965,21 @@
1082344785,1082344786,HN
1082344787,1082345733,US
1082345734,1082345737,CA
-1082345738,1082348319,US
+1082345738,1082346510,US
+1082346511,1082346514,IN
+1082346515,1082347740,US
+1082347741,1082347744,IN
+1082347745,1082347760,US
+1082347761,1082347763,MX
+1082347764,1082347882,US
+1082347883,1082347886,IN
+1082347887,1082347892,US
+1082347893,1082347896,IN
+1082347897,1082348005,US
+1082348006,1082348009,IN
+1082348010,1082348115,US
+1082348116,1082348123,CA
+1082348124,1082348319,US
1082348320,1082348327,GB
1082348328,1082348335,US
1082348336,1082348351,GB
@@ -15943,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
@@ -16102,9 +18180,7 @@
1085685670,1085685685,CA
1085685686,1085698199,US
1085698200,1085698207,AS
-1085698208,1085823775,US
-1085823776,1085823807,DE
-1085823808,1085849599,US
+1085698208,1085849599,US
1085849600,1085857791,CA
1085857792,1085915135,US
1085915136,1085923327,PR
@@ -16156,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
@@ -16169,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
@@ -16393,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
@@ -16595,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
@@ -16658,9 +18749,9 @@
1093054080,1093054095,GB
1093054096,1093054127,US
1093054128,1093054143,FR
-1093054144,1093054175,US
-1093054176,1093054191,CA
-1093054192,1093055487,US
+1093054144,1093054287,US
+1093054288,1093054303,GB
+1093054304,1093055487,US
1093055488,1093055871,AR
1093055872,1093056095,US
1093056096,1093056127,SY
@@ -16668,16 +18759,14 @@
1093056144,1093056159,SY
1093056160,1093056167,US
1093056168,1093056175,RO
-1093056176,1093056319,US
-1093056320,1093056335,CA
-1093056336,1093056447,US
+1093056176,1093056447,US
1093056448,1093056463,FR
1093056464,1093056479,CA
1093056480,1093056511,US
1093056512,1093056519,GB
1093056520,1093056591,US
-1093056592,1093056607,CA
-1093056608,1093056959,US
+1093056592,1093056599,CA
+1093056600,1093056959,US
1093056960,1093056975,SA
1093056976,1093057103,US
1093057104,1093057119,JP
@@ -16715,8 +18804,8 @@
1093110272,1093110527,US
1093110528,1093110783,CA
1093110784,1093110815,US
-1093110816,1093110831,CA
-1093110832,1093110911,US
+1093110816,1093110847,CA
+1093110848,1093110911,US
1093110912,1093110927,CA
1093110928,1093110935,US
1093110936,1093111039,CA
@@ -16746,7 +18835,9 @@
1093113128,1093113135,CA
1093113136,1093113151,US
1093113152,1093113183,CA
-1093113184,1093113407,US
+1093113184,1093113375,US
+1093113376,1093113379,CA
+1093113380,1093113407,US
1093113408,1093113423,CA
1093113424,1093113479,US
1093113480,1093113487,CA
@@ -16957,8 +19048,7 @@
1093723648,1093724415,BB
1093724416,1093725183,VC
1093725184,1093730303,BB
-1093730304,1093730559,US
-1093730560,1093730815,HK
+1093730304,1093730815,US
1093730816,1093731071,A1
1093731072,1093733887,US
1093733888,1093734143,A1
@@ -16968,8 +19058,8 @@
1093737424,1093737431,GB
1093737432,1093740095,US
1093740096,1093740159,JP
-1093740160,1093740167,US
-1093740168,1093740191,CN
+1093740160,1093740183,US
+1093740184,1093740191,CN
1093740192,1093740231,US
1093740232,1093740239,CN
1093740240,1093740247,US
@@ -17498,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
@@ -17524,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
@@ -17568,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
@@ -17812,7 +19908,14 @@
1102488124,1102488163,IN
1102488164,1102488284,US
1102488285,1102488315,IN
-1102488316,1102494332,US
+1102488316,1102494223,US
+1102494224,1102494227,AU
+1102494228,1102494262,US
+1102494263,1102494279,AU
+1102494280,1102494292,US
+1102494293,1102494297,GB
+1102494298,1102494301,CA
+1102494302,1102494332,US
1102494333,1102494378,AU
1102494379,1102495519,US
1102495520,1102495527,AU
@@ -17948,7 +20051,9 @@
1106349600,1106349607,UM
1106349608,1106428959,US
1106428960,1106428975,UM
-1106428976,1106443623,US
+1106428976,1106441615,US
+1106441616,1106441623,A2
+1106441624,1106443623,US
1106443624,1106443631,CA
1106443632,1106469695,US
1106469696,1106469759,CO
@@ -17970,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
@@ -17995,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
@@ -18100,7 +20203,9 @@
1108492288,1108500479,ZA
1108500480,1108525055,US
1108525056,1108541439,CA
-1108541440,1109245981,US
+1108541440,1108862271,US
+1108862272,1108862335,LT
+1108862336,1109245981,US
1109245982,1109245993,GB
1109245994,1109246021,US
1109246022,1109246029,AU
@@ -18375,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
@@ -18409,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
@@ -18516,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
@@ -18543,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
@@ -18651,9 +20772,17 @@
1116027136,1116027903,A2
1116027904,1116041791,US
1116041792,1116041807,CA
-1116041808,1116158463,US
+1116041808,1116154575,US
+1116154576,1116154591,AE
+1116154592,1116158271,US
+1116158272,1116158335,CA
+1116158336,1116158463,US
1116158464,1116158495,AU
-1116158496,1116168191,US
+1116158496,1116158623,US
+1116158624,1116158719,CA
+1116158720,1116159519,US
+1116159520,1116159535,BR
+1116159536,1116168191,US
1116168192,1116169311,CA
1116169312,1116169327,US
1116169328,1116175103,CA
@@ -18865,7 +20994,9 @@
1117195992,1117195999,A2
1117196000,1117198591,US
1117198592,1117198847,CA
-1117198848,1117274111,US
+1117198848,1117221823,US
+1117221824,1117221831,GB
+1117221832,1117274111,US
1117274112,1117282303,CA
1117282304,1117299615,US
1117299616,1117299623,GB
@@ -18918,9 +21049,7 @@
1117814824,1117814831,CN
1117814832,1117815295,US
1117815296,1117815551,CN
-1117815552,1117816831,US
-1117816832,1117816959,CN
-1117816960,1117817919,US
+1117815552,1117817919,US
1117817920,1117817983,CA
1117817984,1117818495,US
1117818496,1117818623,IT
@@ -18937,9 +21066,7 @@
1117829376,1117829631,GR
1117829632,1117831359,US
1117831360,1117831423,A2
-1117831424,1117832191,US
-1117832192,1117832447,IT
-1117832448,1117978623,US
+1117831424,1117978623,US
1117978624,1117979503,CA
1117979504,1117979519,US
1117979520,1117982639,CA
@@ -19019,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
@@ -19029,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
@@ -19124,7 +21249,9 @@
1118156320,1118156335,PE
1118156336,1118156399,US
1118156400,1118156415,VE
-1118156416,1118156607,US
+1118156416,1118156543,US
+1118156544,1118156559,UY
+1118156560,1118156607,US
1118156608,1118156623,ES
1118156624,1118156703,US
1118156704,1118156719,DK
@@ -19165,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
@@ -19174,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
@@ -19200,7 +21328,9 @@
1118793824,1118793839,CA
1118793840,1118793935,US
1118793936,1118793951,ES
-1118793952,1118794287,US
+1118793952,1118793967,US
+1118793968,1118793983,HT
+1118793984,1118794287,US
1118794288,1118794303,BR
1118794304,1118794799,US
1118794800,1118794815,PR
@@ -19213,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
@@ -19397,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
@@ -19551,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
@@ -19817,13 +21949,19 @@
1120315136,1120315391,US
1120315392,1120321535,CA
1120321536,1120346111,US
-1120346112,1120350207,CA
+1120346112,1120347039,CA
+1120347040,1120347055,US
+1120347056,1120347135,CA
+1120347136,1120347391,US
+1120347392,1120347527,CA
+1120347528,1120347535,US
+1120347536,1120347591,CA
+1120347592,1120347607,US
+1120347608,1120350207,CA
1120350208,1120370687,US
1120370688,1120371199,CA
1120371200,1120371455,US
-1120371456,1120371487,CA
-1120371488,1120371503,US
-1120371504,1120371511,CA
+1120371456,1120371511,CA
1120371512,1120371519,US
1120371520,1120371647,CA
1120371648,1120371651,US
@@ -19859,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
@@ -19888,7 +22026,11 @@
1120380032,1120380095,CA
1120380096,1120380127,US
1120380128,1120380131,CA
-1120380132,1120380415,US
+1120380132,1120380223,US
+1120380224,1120380239,CA
+1120380240,1120380263,US
+1120380264,1120380271,CA
+1120380272,1120380415,US
1120380416,1120380431,VG
1120380432,1120380447,CA
1120380448,1120380479,US
@@ -19896,9 +22038,7 @@
1120380640,1120380655,US
1120380656,1120380659,CA
1120380660,1120380663,US
-1120380664,1120380671,CA
-1120380672,1120380927,US
-1120380928,1120381055,CA
+1120380664,1120381055,CA
1120381056,1120381071,US
1120381072,1120381087,PA
1120381088,1120381095,US
@@ -20048,41 +22188,56 @@
1120743424,1120743679,KN
1120743680,1120744447,US
1120744448,1120744703,KN
-1120744704,1120854015,US
+1120744704,1120826367,US
+1120826368,1120826623,CA
+1120826624,1120846431,US
+1120846432,1120846463,CA
+1120846464,1120854015,US
1120854016,1120862207,CA
1120862208,1120870399,US
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
@@ -20093,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
@@ -20133,12 +22288,14 @@
1121247568,1121247583,MT
1121247584,1121247591,CY
1121247592,1121247615,CA
-1121247616,1121247631,PA
+1121247616,1121247631,BZ
1121247632,1121247639,AW
1121247640,1121247647,VG
1121247648,1121247663,US
1121247664,1121247695,BZ
-1121247696,1121247743,CA
+1121247696,1121247711,CA
+1121247712,1121247719,AN
+1121247720,1121247743,CA
1121247744,1121247775,BZ
1121247776,1121247823,CA
1121247824,1121247855,AG
@@ -20152,7 +22309,7 @@
1121248064,1121248079,AG
1121248080,1121248095,CA
1121248096,1121248111,AG
-1121248112,1121248127,CA
+1121248112,1121248127,AN
1121248128,1121248135,MT
1121248136,1121248159,CA
1121248160,1121248255,AG
@@ -20219,36 +22376,38 @@
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
1121251600,1121251607,CA
1121251608,1121251615,BZ
1121251616,1121251647,NL
-1121251648,1121251663,CA
+1121251648,1121251655,BZ
+1121251656,1121251663,CA
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,1121251871,CA
+1121251856,1121251863,AN
+1121251864,1121251871,BZ
1121251872,1121251887,VG
1121251888,1121251895,CY
1121251896,1121251903,CA
@@ -20612,13 +22771,15 @@
1122092800,1122093055,CA
1122093056,1122093807,US
1122093808,1122093815,HK
-1122093816,1122101071,US
-1122101072,1122101079,CA
-1122101080,1122101111,US
-1122101112,1122101119,CA
-1122101120,1122101431,US
+1122093816,1122101127,US
+1122101128,1122101135,SE
+1122101136,1122101375,US
+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
@@ -20720,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
@@ -20923,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
@@ -21004,7 +23174,8 @@
1125455616,1125455871,A2
1125455872,1125456131,US
1125456132,1125456135,NO
-1125456136,1125456151,US
+1125456136,1125456139,A2
+1125456140,1125456151,US
1125456152,1125456155,NL
1125456156,1125456163,US
1125456164,1125456167,NO
@@ -21028,8 +23199,8 @@
1125456420,1125474303,US
1125474304,1125478399,CA
1125478400,1125479199,US
-1125479200,1125479231,BR
-1125479232,1125493127,US
+1125479200,1125479255,BR
+1125479256,1125493127,US
1125493128,1125493135,CA
1125493136,1125498879,US
1125498880,1125508095,CA
@@ -21068,9 +23239,17 @@
1125541488,1125541503,US
1125541504,1125541543,CA
1125541544,1125541551,CN
-1125541552,1125543543,CA
+1125541552,1125541807,CA
+1125541808,1125541815,US
+1125541816,1125541951,CA
+1125541952,1125541959,BM
+1125541960,1125543543,CA
1125543544,1125543551,US
-1125543552,1125543935,CA
+1125543552,1125543687,CA
+1125543688,1125543695,US
+1125543696,1125543887,CA
+1125543888,1125543903,US
+1125543904,1125543935,CA
1125543936,1125545983,US
1125548032,1125548291,CA
1125548292,1125548351,US
@@ -21091,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
@@ -21212,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
@@ -21974,7 +24167,9 @@
1137376384,1137376463,CA
1137376464,1137376479,US
1137376480,1137376511,CA
-1137376512,1137377311,US
+1137376512,1137376639,US
+1137376640,1137376703,CA
+1137376704,1137377311,US
1137377312,1137377327,DE
1137377328,1137383455,US
1137383456,1137383471,DE
@@ -21987,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
@@ -22207,7 +24404,9 @@
1137785856,1137786111,HU
1137786112,1137795071,US
1137795072,1137799167,A2
-1137799168,1137840127,US
+1137799168,1137803519,US
+1137803520,1137803775,CA
+1137803776,1137840127,US
1137840128,1137840383,CA
1137840384,1137843711,US
1137843712,1137843775,NO
@@ -22263,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
@@ -22397,12 +24598,18 @@
1138271088,1138271103,TN
1138271104,1138337167,US
1138337168,1138337183,GB
-1138337184,1138417663,US
+1138337184,1138337199,US
+1138337200,1138337207,SG
+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,1138425855,US
+1138421792,1138422271,US
+1138422272,1138422527,DE
+1138422528,1138425855,US
1138425856,1138427519,KN
1138427520,1138427647,US
1138427648,1138429951,KN
@@ -22455,8 +24662,7 @@
1138454528,1138454543,BR
1138454544,1138454591,US
1138454592,1138454599,CA
-1138454600,1138458111,US
-1138458112,1138458127,BR
+1138454600,1138458127,US
1138458128,1138458143,AU
1138458144,1138458159,IN
1138458160,1138458239,US
@@ -22495,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
@@ -22513,13 +24721,21 @@
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,1138655695,US
+1138655618,1138655629,US
+1138655630,1138655637,EG
+1138655638,1138655695,US
1138655696,1138655703,MX
1138655704,1138655715,US
1138655716,1138655723,GB
-1138655724,1138655841,US
+1138655724,1138655817,US
+1138655818,1138655825,MX
+1138655826,1138655841,US
1138655842,1138655849,CN
1138655850,1138655899,US
1138655900,1138655911,MX
@@ -22535,12 +24751,16 @@
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,1138657123,US
+1138656754,1138656909,US
+1138656910,1138656917,IN
+1138656918,1138657101,US
+1138657102,1138657109,IN
+1138657110,1138657123,US
1138657124,1138657131,EG
1138657132,1138657173,US
1138657174,1138657181,EG
@@ -22561,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
@@ -22569,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
@@ -22579,15 +24802,18 @@
1138659643,1138659650,ID
1138659651,1138659673,US
1138659674,1138659681,MA
-1138659682,1138659705,US
+1138659682,1138659697,US
+1138659698,1138659705,ID
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
@@ -22598,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
@@ -22629,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
@@ -22655,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
@@ -22668,17 +24894,20 @@
1138661670,1138661677,IN
1138661678,1138661713,US
1138661714,1138661721,EG
-1138661722,1138661761,US
+1138661722,1138661729,US
+1138661730,1138661737,ID
+1138661738,1138661761,US
1138661762,1138661769,ID
1138661770,1138661777,MA
1138661778,1138661821,US
1138661822,1138661829,MA
1138661830,1138661913,US
1138661914,1138661954,EG
-1138661955,1138661985,US
-1138661986,1138661993,EG
-1138661994,1138662057,US
-1138662058,1138662107,EG
+1138661955,1138662057,US
+1138662058,1138662089,EG
+1138662090,1138662097,ID
+1138662098,1138662105,US
+1138662106,1138662107,EG
1138662108,1138662169,US
1138662170,1138662233,EG
1138662234,1138662273,US
@@ -22700,8 +24929,8 @@
1138662794,1138662801,ID
1138662802,1138662841,US
1138662842,1138662849,GB
-1138662850,1138663037,US
-1138663038,1138663166,GB
+1138662850,1138663021,US
+1138663022,1138663166,GB
1138663167,1138712575,US
1138712576,1138713583,CA
1138713584,1138713599,MY
@@ -22742,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
@@ -22766,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
@@ -22778,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
@@ -22800,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
@@ -22821,8 +25046,8 @@
1145333864,1145333871,EG
1145333872,1145333879,US
1145333880,1145333903,CN
-1145333904,1145334143,US
-1145334144,1145334167,CN
+1145333904,1145334151,US
+1145334152,1145334167,CN
1145334168,1145334175,US
1145334176,1145334223,CN
1145334224,1145334231,US
@@ -22840,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
@@ -22849,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
@@ -22925,15 +25154,17 @@
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
1157670432,1157670463,CA
1157670464,1157713663,US
1157713664,1157713791,CA
-1157713792,1157755247,US
+1157713792,1157753087,US
+1157753088,1157753343,GB
+1157753344,1157755247,US
1157755248,1157755263,GR
1157755264,1157758207,US
1157758208,1157758463,RU
@@ -23219,8 +25450,12 @@
1158732885,1158736241,US
1158736242,1158736249,IN
1158736250,1158774783,US
-1158774784,1158791167,CA
-1158791168,1158799359,BM
+1158774784,1158776947,CA
+1158776948,1158776951,US
+1158776952,1158791167,CA
+1158791168,1158794239,BM
+1158794240,1158794495,US
+1158794496,1158799359,BM
1158799360,1158807551,CA
1158807552,1158940823,US
1158940824,1158940831,ES
@@ -23240,9 +25475,7 @@
1158942272,1158942279,IE
1158942280,1158942311,US
1158942312,1158942319,CA
-1158942320,1158943271,US
-1158943272,1158943279,TH
-1158943280,1158943423,US
+1158942320,1158943423,US
1158943424,1158943431,PK
1158943432,1158943535,US
1158943536,1158943543,CA
@@ -23267,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
@@ -23339,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
@@ -23370,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
@@ -23396,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
@@ -23433,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
@@ -23500,7 +25738,9 @@
1158966888,1158966895,EG
1158966896,1158966911,US
1158966912,1158966919,MX
-1158966920,1158966991,US
+1158966920,1158966959,US
+1158966960,1158966967,MX
+1158966968,1158966991,US
1158966992,1158966999,CA
1158967000,1158967263,US
1158967264,1158967279,TH
@@ -23561,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
@@ -23571,15 +25814,15 @@
1159274496,1159274751,GB
1159274752,1159276799,US
1159276800,1159277055,A2
-1159277056,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
@@ -23638,7 +25881,9 @@
1159517120,1159517151,CA
1159517152,1159517183,US
1159517184,1159517327,CA
-1159517328,1159517439,US
+1159517328,1159517343,US
+1159517344,1159517359,CA
+1159517360,1159517439,US
1159517440,1159517599,CA
1159517600,1159517631,US
1159517632,1159517663,CA
@@ -23663,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
@@ -23781,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
@@ -23900,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
@@ -24092,6 +26339,7 @@
1161314160,1161363455,US
1161363456,1161367551,CA
1161367552,1161416703,US
+1161416704,1161420799,CA
1161420800,1161421151,AG
1161421152,1161421167,MS
1161421168,1161421311,AG
@@ -24136,22 +26384,26 @@
1161625600,1161627663,US
1161627664,1161627679,SE
1161627680,1161627687,US
-1161627688,1161627695,HR
+1161627688,1161627695,SI
1161627696,1161627703,US
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
-1161627808,1161627815,HR
+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
@@ -24159,14 +26411,15 @@
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
1161628664,1161628671,AR
1161628672,1161629199,US
-1161629200,1161629207,SI
-1161629208,1161629215,HR
+1161629200,1161629215,SI
1161629216,1161629223,US
1161629224,1161629231,GB
1161629232,1161629239,US
@@ -24177,39 +26430,49 @@
1161629344,1161629375,FI
1161629376,1161629383,CA
1161629384,1161629391,AR
-1161629392,1161629399,IE
+1161629392,1161629399,GB
1161629400,1161629407,IL
1161629408,1161629415,GB
-1161629416,1161629423,HR
-1161629424,1161629439,MY
+1161629416,1161629423,SI
+1161629424,1161629431,US
+1161629432,1161629439,MY
1161629440,1161629519,US
1161629520,1161629527,GB
1161629528,1161629535,MY
-1161629536,1161629567,GB
-1161629568,1161629583,US
+1161629536,1161629583,US
1161629584,1161629599,GB
-1161629600,1161629615,HR
-1161629616,1161629695,US
+1161629600,1161629607,PL
+1161629608,1161629615,US
+1161629616,1161629631,GB
+1161629632,1161629663,US
+1161629664,1161629671,AU
+1161629672,1161629695,US
1161629696,1161629951,PL
-1161629952,1161630263,US
+1161629952,1161630223,US
+1161630224,1161630231,NL
+1161630232,1161630247,US
+1161630248,1161630255,HR
+1161630256,1161630263,NL
1161630264,1161630271,AR
1161630272,1161630335,US
-1161630336,1161630343,PL
-1161630344,1161630367,US
+1161630336,1161630343,AR
+1161630344,1161630351,IL
+1161630352,1161630367,US
1161630368,1161630375,GB
1161630376,1161630383,US
1161630384,1161630391,AR
-1161630392,1161630399,US
-1161630400,1161630431,GB
-1161630432,1161630727,US
-1161630728,1161630735,EG
-1161630736,1161630743,AU
+1161630392,1161630431,GB
+1161630432,1161630439,US
+1161630440,1161630447,HR
+1161630448,1161630455,US
+1161630456,1161630463,NL
+1161630464,1161630727,US
+1161630728,1161630735,PL
+1161630736,1161630743,US
1161630744,1161630751,GB
1161630752,1161630767,US
1161630768,1161630775,IL
-1161630776,1161630791,US
-1161630792,1161630799,AR
-1161630800,1161630807,US
+1161630776,1161630807,US
1161630808,1161630815,BG
1161630816,1161630823,US
1161630824,1161630831,GB
@@ -24223,14 +26486,12 @@
1161630944,1161630951,US
1161630952,1161630959,TR
1161630960,1161630967,US
-1161630968,1161630975,IL
+1161630968,1161630975,CZ
1161630976,1161630983,US
1161630984,1161630991,CA
1161630992,1161630999,US
1161631000,1161631007,AU
-1161631008,1161631015,IL
-1161631016,1161631031,US
-1161631032,1161631039,CZ
+1161631008,1161631039,US
1161631040,1161631047,GB
1161631048,1161631055,IN
1161631056,1161631079,US
@@ -24246,7 +26507,9 @@
1161631200,1161631207,US
1161631208,1161631215,AR
1161631216,1161631223,GB
-1161631224,1161631471,US
+1161631224,1161631431,US
+1161631432,1161631439,KW
+1161631440,1161631471,US
1161631472,1161631479,AR
1161631480,1161631495,US
1161631496,1161631503,CA
@@ -24257,10 +26520,10 @@
1161631544,1161631551,BR
1161631552,1161631591,US
1161631592,1161631599,BR
-1161631600,1161631631,US
+1161631600,1161631623,US
+1161631624,1161631631,KW
1161631632,1161631639,BR
-1161631640,1161631647,US
-1161631648,1161631655,AU
+1161631640,1161631655,US
1161631656,1161631663,AR
1161631664,1161631703,US
1161631704,1161631711,NL
@@ -24273,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
@@ -24295,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
@@ -24370,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
@@ -24458,14 +26730,14 @@
1161650864,1161650879,US
1161650880,1161650895,GB
1161650896,1161650927,US
-1161650928,1161650935,HR
+1161650928,1161650935,SI
1161650936,1161650943,US
1161650944,1161650951,SI
1161650952,1161650967,US
1161650968,1161650975,SI
1161650976,1161651055,US
1161651056,1161651071,PL
-1161651072,1161651079,HR
+1161651072,1161651079,SI
1161651080,1161651095,US
1161651096,1161651103,HR
1161651104,1161651135,GB
@@ -24507,7 +26779,7 @@
1161653760,1161653791,US
1161653792,1161653799,SI
1161653800,1161653831,US
-1161653832,1161653839,HR
+1161653832,1161653839,SI
1161653840,1161653847,US
1161653848,1161653855,SI
1161653856,1161653887,US
@@ -24516,7 +26788,8 @@
1161654240,1161654247,GB
1161654248,1161654263,US
1161654264,1161654271,SI
-1161654272,1161657615,US
+1161654272,1161657607,US
+1161657608,1161657615,NE
1161657616,1161657623,CA
1161657624,1161657679,US
1161657680,1161657695,PL
@@ -24541,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
@@ -24653,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
@@ -24805,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
@@ -24851,26 +27130,28 @@
1163403264,1163407359,US
1163407360,1163411455,CA
1163411456,1163468799,US
-1163468800,1163472895,PR
+1163468800,1163469055,PR
+1163469056,1163469311,US
+1163469312,1163472895,PR
1163472896,1163477695,US
1163477696,1163477727,JP
-1163477728,1163526143,US
-1163526144,1163526463,CA
-1163526464,1163526655,US
+1163477728,1163478047,US
+1163478048,1163478063,JP
+1163478064,1163526143,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,1163527775,CA
-1163527776,1163527791,US
+1163527136,1163527783,CA
+1163527784,1163527791,US
1163527792,1163529215,CA
1163529216,1163530239,US
-1163530240,1163530399,CA
-1163530400,1163530431,US
+1163530240,1163530415,CA
+1163530416,1163530431,US
1163530432,1163530639,CA
1163530640,1163530655,US
1163530656,1163530839,CA
@@ -24883,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
@@ -24979,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
@@ -25009,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
@@ -25041,8 +27320,8 @@
1163562232,1163562239,US
1163562240,1163563007,CA
1163563008,1163564031,US
-1163564032,1163564799,CA
-1163564800,1163566047,US
+1163564032,1163565055,CA
+1163565056,1163566047,US
1163566048,1163566079,CA
1163566080,1163567103,US
1163567104,1163568127,CA
@@ -25051,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
@@ -25113,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
@@ -25134,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
@@ -25147,18 +27426,38 @@
1163876472,1163876479,PA
1163876480,1163878399,US
1163878400,1163878407,CN
-1163878408,1167321959,US
+1163878408,1167319111,US
+1167319112,1167319119,ZA
+1167319120,1167319255,US
+1167319256,1167319263,CA
+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
-1167322704,1167323823,US
+1167322704,1167323543,US
+1167323544,1167323551,CA
+1167323552,1167323823,US
1167323824,1167323831,IN
-1167323832,1167324287,US
+1167323832,1167324047,US
+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
@@ -25168,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
@@ -25202,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
@@ -25242,7 +27545,9 @@
1168954016,1168954047,IN
1168954048,1168954075,US
1168954076,1168954079,CA
-1168954080,1168955647,US
+1168954080,1168954623,US
+1168954624,1168954687,IN
+1168954688,1168955647,US
1168955648,1168956159,CA
1168956160,1168957439,US
1168957440,1168958047,CA
@@ -25257,10 +27562,13 @@
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,1168960543,US
+1168958480,1168958495,US
+1168958496,1168958559,IN
+1168958560,1168960543,US
1168960544,1168960591,CA
1168960592,1168960607,US
1168960608,1168960623,CA
@@ -25330,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
@@ -25340,7 +27647,16 @@
1170466784,1170466815,US
1170466816,1170467839,IL
1170467840,1170468351,DO
-1170468352,1170472959,US
+1170468352,1170469055,US
+1170469056,1170469071,VG
+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
@@ -25357,43 +27673,42 @@
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
-1170539782,1170539842,US
+1170539779,1170539779,SC
+1170539780,1170539780,US
+1170539781,1170539781,PR
+1170539782,1170539841,US
+1170539842,1170539842,BD
1170539843,1170539843,MY
1170539844,1170539910,US
1170539911,1170539911,KH
1170539912,1170539969,US
1170539970,1170539970,KH
-1170539971,1170539971,TR
-1170539972,1170540036,US
+1170539971,1170540036,US
1170540037,1170540037,TR
1170540038,1170540038,US
1170540039,1170540039,PH
1170540040,1170540096,US
-1170540097,1170540097,CN
-1170540098,1170540098,TR
+1170540097,1170540098,TR
1170540099,1170540105,US
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
@@ -25402,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
@@ -25418,17 +27732,24 @@
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,1170544127,US
+1170540618,1170542863,US
+1170542864,1170542871,CN
+1170542872,1170543747,US
+1170543748,1170543751,PR
+1170543752,1170544127,US
1170544128,1170544191,CN
-1170544192,1170544199,US
+1170544192,1170544195,US
+1170544196,1170544199,BD
1170544200,1170544207,TR
1170544208,1170544239,US
1170544240,1170544247,CN
@@ -25441,27 +27762,28 @@
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,1170552959,US
+1170545600,1170552607,US
+1170552608,1170552611,CN
+1170552612,1170552959,US
1170552960,1170553023,CN
1170553024,1170553087,US
1170553088,1170553151,GB
-1170553152,1170553231,US
-1170553232,1170553247,TR
-1170553248,1170553279,US
+1170553152,1170553279,US
1170553280,1170553407,CN
1170553408,1170553423,US
1170553424,1170553427,CN
@@ -25474,19 +27796,20 @@
1170553600,1170553603,TR
1170553604,1170553615,US
1170553616,1170553619,SA
-1170553620,1170553631,TR
+1170553620,1170553623,TR
+1170553624,1170553627,US
+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
@@ -25499,7 +27822,9 @@
1170554496,1170554683,US
1170554684,1170554687,TR
1170554688,1170573375,US
-1170573376,1170573439,RU
+1170573376,1170573391,RU
+1170573392,1170573392,US
+1170573393,1170573439,RU
1170573440,1175977983,US
1175977984,1176068167,CA
1176068168,1176068175,US
@@ -25516,7 +27841,11 @@
1176108560,1176502271,CA
1176502272,1176512151,US
1176512152,1176512159,GB
-1176512160,1176513879,US
+1176512160,1176512703,US
+1176512704,1176512711,ZA
+1176512712,1176513479,US
+1176513480,1176513487,CA
+1176513488,1176513879,US
1176513880,1176513887,GB
1176513888,1176514271,US
1176514272,1176514303,IN
@@ -25543,20 +27872,27 @@
1176620488,1176620511,US
1176620512,1176620743,CA
1176620744,1176620783,US
-1176620784,1176620967,CA
+1176620784,1176620863,CA
+1176620864,1176620879,US
+1176620880,1176620967,CA
1176620968,1176620975,US
1176620976,1176620991,CA
1176620992,1176620999,US
1176621000,1176621599,CA
1176621600,1176621631,US
-1176621632,1176621679,CA
-1176621680,1176621823,US
-1176621824,1176621855,CA
-1176621856,1176621887,US
-1176621888,1176621951,CA
-1176621952,1176622079,US
+1176621632,1176621695,CA
+1176621696,1176621727,US
+1176621728,1176621759,CA
+1176621760,1176621823,US
+1176621824,1176621871,CA
+1176621872,1176621887,US
+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
@@ -25577,7 +27913,9 @@
1176629520,1176629535,NZ
1176629536,1176629631,CA
1176629632,1176629727,US
-1176629728,1176631295,CA
+1176629728,1176630271,CA
+1176630272,1176631039,US
+1176631040,1176631295,CA
1176631296,1176631551,NL
1176631552,1176662015,US
1176662016,1176666111,CA
@@ -25592,10 +27930,12 @@
1176682688,1176684383,US
1176684384,1176684399,DE
1176684400,1176686591,US
-1176686592,1176686599,PK
+1176686592,1176686599,BR
1176686600,1176686623,US
1176686624,1176686631,IL
-1176686632,1176686719,US
+1176686632,1176686639,US
+1176686640,1176686647,DE
+1176686648,1176686719,US
1176686720,1176686751,CA
1176686752,1176686847,US
1176686848,1176687103,AN
@@ -25770,7 +28110,12 @@
1176695328,1176695335,CA
1176695336,1176695359,US
1176695360,1176695391,JP
-1176695392,1176695647,US
+1176695392,1176695487,US
+1176695488,1176695519,AU
+1176695520,1176695551,FR
+1176695552,1176695583,CA
+1176695584,1176695615,US
+1176695616,1176695647,HR
1176695648,1176695655,GB
1176695656,1176695663,US
1176695664,1176695671,HR
@@ -25822,7 +28167,10 @@
1176770816,1176770831,US
1176770832,1176770847,BR
1176770848,1176770851,BM
-1176770852,1176771327,US
+1176770852,1176770919,US
+1176770920,1176770927,BR
+1176770928,1176770935,DO
+1176770936,1176771327,US
1176771328,1176771583,KR
1176771584,1176771895,US
1176771896,1176771903,AE
@@ -25852,10 +28200,8 @@
1177053696,1177053951,GB
1177053952,1177059327,US
1177059328,1177061375,CA
-1177061376,1177062399,US
-1177062400,1177074943,CA
-1177074944,1177075199,US
-1177075200,1177075455,CA
+1177061376,1177062143,US
+1177062144,1177075455,CA
1177075456,1177164255,US
1177164256,1177164263,CA
1177164264,1177164415,US
@@ -25866,7 +28212,11 @@
1177164928,1177164943,CA
1177164944,1177165311,US
1177165312,1177165823,CA
-1177165824,1177168223,US
+1177165824,1177167743,US
+1177167744,1177167751,LB
+1177167752,1177167839,US
+1177167840,1177167847,IL
+1177167848,1177168223,US
1177168224,1177168231,IE
1177168232,1177175199,US
1177175200,1177175231,CZ
@@ -25898,6 +28248,10 @@
1192296448,1192361983,CA
1192361984,1192427519,US
1192427520,1192460287,CA
+1192464384,1192468479,US
+1192468480,1192476671,CA
+1192476672,1192488959,US
+1192488960,1192493055,CA
1192493056,1207975935,US
1207975936,1207980031,CA
1207980032,1208008703,US
@@ -26008,7 +28362,9 @@
1208196608,1208196615,CA
1208196616,1208196703,US
1208196704,1208196719,CA
-1208196720,1208197023,US
+1208196720,1208196951,US
+1208196952,1208196959,ZA
+1208196960,1208197023,US
1208197024,1208197031,CR
1208197032,1208197135,US
1208197136,1208197167,MY
@@ -26153,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
@@ -26287,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
@@ -26329,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
@@ -26344,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
@@ -26370,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
@@ -26394,7 +28755,9 @@
1208586448,1208586455,TR
1208586456,1208586526,US
1208586527,1208586536,TR
-1208586537,1208586589,US
+1208586537,1208586573,US
+1208586574,1208586581,MX
+1208586582,1208586589,LK
1208586590,1208586597,NZ
1208586598,1208586662,US
1208586663,1208586670,GB
@@ -26411,14 +28774,16 @@
1208586957,1208586957,US
1208586958,1208586973,GB
1208586974,1208586976,US
-1208586977,1208586992,GB
+1208586977,1208586980,GB
+1208586981,1208586988,US
+1208586989,1208586992,GB
1208586993,1208587025,US
1208587026,1208587033,NZ
1208587034,1208587045,US
1208587046,1208587053,IN
-1208587054,1208587075,US
-1208587076,1208587083,EG
-1208587084,1208587169,US
+1208587054,1208587087,US
+1208587088,1208587095,LK
+1208587096,1208587169,US
1208587170,1208587177,MX
1208587178,1208587187,US
1208587188,1208587195,EG
@@ -26438,7 +28803,9 @@
1208587419,1208587426,TR
1208587427,1208587427,US
1208587428,1208587443,GB
-1208587444,1208587479,US
+1208587444,1208587450,US
+1208587451,1208587458,IN
+1208587459,1208587479,US
1208587480,1208587487,LK
1208587488,1208587488,US
1208587489,1208587504,GB
@@ -26483,7 +28850,8 @@
1208588729,1208588760,GB
1208588761,1208588771,US
1208588772,1208588779,GB
-1208588780,1208588861,US
+1208588780,1208588853,US
+1208588854,1208588861,IN
1208588862,1208588869,PE
1208588870,1208588953,US
1208588954,1208588961,TR
@@ -26491,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
@@ -26507,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
@@ -26690,18 +29072,17 @@
1209270584,1209270607,US
1209270608,1209270611,KR
1209270612,1209270615,CN
-1209270616,1209270783,US
-1209270784,1209270787,TR
-1209270788,1209271067,US
+1209270616,1209271067,US
1209271068,1209271071,VN
1209271072,1209271083,US
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
@@ -26722,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
@@ -26753,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
@@ -26761,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
@@ -26792,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
@@ -26810,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
@@ -26826,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
@@ -26878,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
@@ -26890,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
@@ -26946,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
@@ -26958,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
@@ -26968,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
@@ -27006,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
@@ -27024,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
@@ -27122,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
@@ -27141,7 +29529,9 @@
1209893520,1209904959,US
1209904960,1209904975,GB
1209904976,1209917439,US
-1209917440,1209925631,CA
+1209917440,1209918367,CA
+1209918368,1209918399,US
+1209918400,1209925631,CA
1209925632,1210057039,US
1210057040,1210057047,JM
1210057048,1210057055,US
@@ -27302,9 +29692,7 @@
1210070504,1210070511,CA
1210070512,1210070631,US
1210070632,1210070639,MX
-1210070640,1210070703,US
-1210070704,1210070711,GB
-1210070712,1210070799,US
+1210070640,1210070799,US
1210070800,1210070807,AU
1210070808,1210070863,US
1210070864,1210070871,BH
@@ -27349,7 +29737,9 @@
1210081336,1210081343,CR
1210081344,1210081559,US
1210081560,1210081567,PK
-1210081568,1210081823,US
+1210081568,1210081599,US
+1210081600,1210081615,AU
+1210081616,1210081823,US
1210081824,1210081831,MX
1210081832,1210081839,US
1210081840,1210081847,MX
@@ -27585,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
@@ -27862,9 +30254,9 @@
1211039088,1211039103,RU
1211039104,1211039503,US
1211039504,1211039519,A2
-1211039520,1211039551,US
-1211039552,1211039567,BM
-1211039568,1211039679,US
+1211039520,1211039647,US
+1211039648,1211039663,AR
+1211039664,1211039679,US
1211039680,1211039695,BR
1211039696,1211236351,US
1211236352,1211269119,PR
@@ -27984,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
@@ -28161,14 +30557,106 @@
1247070816,1247070831,CA
1247070832,1247072719,US
1247072720,1247072735,NL
-1247072736,1248864255,US
+1247072736,1247481855,US
+1247481856,1247481863,CN
+1247481864,1247481871,CO
+1247481872,1247481879,TR
+1247481880,1247481887,US
+1247481888,1247481903,CN
+1247481904,1247481911,BO
+1247481912,1247481927,CN
+1247481928,1247481951,US
+1247481952,1247481967,CN
+1247481968,1247481983,US
+1247481984,1247482015,GB
+1247482016,1247482047,CN
+1247482048,1247482063,CA
+1247482064,1247482071,BO
+1247482072,1247482079,US
+1247482080,1247482175,CN
+1247482176,1247482239,US
+1247482240,1247482255,GB
+1247482256,1247482319,CN
+1247482320,1247482335,US
+1247482336,1247482351,CN
+1247482352,1247482367,US
+1247482368,1247482383,GB
+1247482384,1247482543,CN
+1247482544,1247482551,US
+1247482552,1247482559,CN
+1247482560,1247482567,US
+1247482568,1247482583,CN
+1247482584,1247482607,US
+1247482608,1247482623,CN
+1247482624,1247482687,US
+1247482688,1247482751,CA
+1247482752,1247482815,US
+1247482816,1247482879,CN
+1247482880,1247482927,US
+1247482928,1247482951,BO
+1247482952,1247482967,US
+1247482968,1247482975,CN
+1247482976,1247483015,US
+1247483016,1247483039,CN
+1247483040,1247483047,CA
+1247483048,1247483079,US
+1247483080,1247483095,CN
+1247483096,1247483111,US
+1247483112,1247483119,CN
+1247483120,1247483647,US
+1247483648,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,1247485471,CN
+1247485472,1247485479,US
+1247485480,1247485543,CN
+1247485544,1247485615,US
+1247485616,1247485623,CN
+1247485624,1247485631,US
+1247485632,1247485639,CN
+1247485640,1247485647,US
+1247485648,1247485951,CN
+1247485952,1248864255,US
1248864256,1248866303,CA
1248866304,1248885759,US
1248885760,1248886783,CA
-1248886784,1248899071,US
+1248886784,1248887871,US
+1248887872,1248887903,GB
+1248887904,1248887935,US
+1248887936,1248887943,CA
+1248887944,1248888055,US
+1248888056,1248888063,BR
+1248888064,1248888631,US
+1248888632,1248888639,CA
+1248888640,1248888671,US
+1248888672,1248888687,GB
+1248888688,1248888703,US
+1248888704,1248888711,BR
+1248888712,1248897263,US
+1248897264,1248897271,FR
+1248897272,1248899071,US
1248899072,1248900095,CA
-1248900096,1248913407,US
-1248913408,1248915455,GP
+1248900096,1248902143,US
+1248902144,1248903167,CA
+1248903168,1248903695,US
+1248903696,1248903711,ZA
+1248903712,1248903775,US
+1248903776,1248903791,FR
+1248903792,1248913407,US
+1248913408,1248915455,MF
1248915456,1248919551,US
1248919552,1248920575,CA
1248920576,1248921599,US
@@ -28189,7 +30677,9 @@
1249019904,1249020927,CA
1249020928,1249026423,US
1249026424,1249026431,CA
-1249026432,1249026703,US
+1249026432,1249026455,US
+1249026456,1249026463,ES
+1249026464,1249026703,US
1249026704,1249026711,ZA
1249026712,1249026719,CA
1249026720,1249026767,US
@@ -28222,7 +30712,10 @@
1249029120,1249030143,CA
1249030144,1249036287,US
1249036288,1249037311,TC
-1249037312,1249040383,CA
+1249037312,1249037343,US
+1249037344,1249037359,CA
+1249037360,1249038335,US
+1249038336,1249040383,CA
1249040384,1249046527,US
1249046528,1249047551,BM
1249047552,1249050623,US
@@ -28234,7 +30727,8 @@
1249092608,1249099775,US
1249099776,1249101823,CA
1249101824,1249102847,PR
-1249102848,1249103871,CA
+1249102848,1249103103,US
+1249103104,1249103871,CA
1249103872,1249103887,TW
1249103888,1249103951,US
1249103952,1249103967,TW
@@ -28250,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
@@ -28278,13 +30770,9 @@
1249180032,1249180095,TW
1249180096,1249191935,US
1249191936,1249193983,CA
-1249193984,1249195263,US
-1249195264,1249195275,CA
-1249195276,1249195519,US
-1249195520,1249195551,CA
-1249195552,1249195775,US
-1249195776,1249195807,CA
-1249195808,1249203199,US
+1249193984,1249195007,US
+1249195008,1249196031,CA
+1249196032,1249203199,US
1249203200,1249204223,GD
1249204224,1249210367,US
1249210368,1249212415,KY
@@ -28292,12 +30780,60 @@
1249217536,1249218559,CA
1249218560,1249221887,US
1249221888,1249222655,RO
-1249222656,1249236991,US
+1249222656,1249227007,US
+1249227008,1249227071,CY
+1249227072,1249227135,VG
+1249227136,1249227167,US
+1249227168,1249227199,VG
+1249227200,1249227263,HK
+1249227264,1249227519,VG
+1249227520,1249228031,US
+1249228032,1249228063,CZ
+1249228064,1249228095,US
+1249228096,1249228223,UA
+1249228224,1249228239,CZ
+1249228240,1249228287,US
+1249228288,1249228351,SC
+1249228352,1249229007,US
+1249229008,1249229008,CA
+1249229009,1249229087,US
+1249229088,1249229095,CA
+1249229096,1249229216,US
+1249229217,1249229217,CA
+1249229218,1249229289,US
+1249229290,1249229291,CA
+1249229292,1249229591,US
+1249229592,1249229599,ES
+1249229600,1249236991,US
1249236992,1249239039,KY
1249239040,1249245183,US
1249245184,1249247231,CA
-1249247232,1249256447,US
-1249256448,1249257471,CA
+1249247232,1249253583,US
+1249253584,1249253591,VA
+1249253592,1249256447,US
+1249256448,1249256500,CA
+1249256501,1249256542,GB
+1249256543,1249256713,CA
+1249256714,1249256773,US
+1249256774,1249256835,CA
+1249256836,1249256836,US
+1249256837,1249256839,CA
+1249256840,1249256868,US
+1249256869,1249256988,CA
+1249256989,1249256998,US
+1249256999,1249256999,CA
+1249257000,1249257009,LB
+1249257010,1249257017,CA
+1249257018,1249257042,US
+1249257043,1249257052,CA
+1249257053,1249257062,US
+1249257063,1249257121,CA
+1249257122,1249257131,LB
+1249257132,1249257348,CA
+1249257349,1249257412,US
+1249257413,1249257437,CA
+1249257438,1249257470,US
+1249257471,1249257471,CA
1249257472,1249260543,US
1249260544,1249261567,CA
1249261568,1249272831,US
@@ -28306,11 +30842,19 @@
1249310720,1249311743,CA
1249311744,1249312767,US
1249312768,1249313791,CA
-1249313792,1249335295,US
+1249313792,1249324799,US
+1249324800,1249325055,IN
+1249325056,1249335295,US
1249335296,1249337343,CA
1249337344,1249359871,US
1249359872,1249361919,CA
-1249361920,1249384447,US
+1249361920,1249381503,US
+1249381504,1249381519,DE
+1249381520,1249381759,US
+1249381760,1249381775,DE
+1249381776,1249382287,US
+1249382288,1249382303,DE
+1249382304,1249384447,US
1249384448,1249386495,PR
1249386496,1249391615,US
1249391616,1249392639,CA
@@ -28328,11 +30872,15 @@
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
-1249486848,1249506303,US
+1249486848,1249492735,US
+1249492736,1249492991,CA
+1249492992,1249506303,US
1249506304,1249507327,CA
1249507328,1249522687,US
1249522688,1249523711,CA
@@ -28340,16 +30888,20 @@
1249531904,1249533951,GD
1249533952,1249542143,US
1249542144,1249544191,CA
-1249544192,1249562623,US
+1249544192,1249550367,US
+1249550368,1249550375,HK
+1249550376,1249562623,US
1249562624,1249564671,CA
1249564672,1249568319,US
1249568320,1249568327,NL
1249568328,1249571839,US
1249571840,1249572863,CA
1249572864,1249577087,US
-1249577088,1249577279,CA
-1249577280,1249577343,US
-1249577344,1249577480,CA
+1249577088,1249577232,CA
+1249577233,1249577343,US
+1249577344,1249577403,CA
+1249577404,1249577468,US
+1249577469,1249577480,CA
1249577481,1249577545,US
1249577546,1249577730,CA
1249577731,1249577794,US
@@ -28429,15 +30981,17 @@
1254604192,1254604199,IE
1254604200,1254621183,US
1254621184,1254629375,CA
-1254629376,1254704383,US
+1254629376,1254688511,US
+1254688512,1254688543,CA
+1254688544,1254704383,US
1254704384,1254704639,PH
1254704640,1254704903,US
1254704904,1254704911,PH
1254704912,1254713359,US
1254713360,1254713407,CA
-1254713408,1254725119,US
-1254725120,1254725151,GB
-1254725152,1254924687,US
+1254713408,1254752191,US
+1254752192,1254752207,CH
+1254752208,1254924687,US
1254924688,1254924703,RO
1254924704,1254948927,US
1254948928,1254948935,SG
@@ -28450,9 +31004,7 @@
1254950208,1254950671,US
1254950672,1254950679,RU
1254950680,1254950687,CA
-1254950688,1254950719,US
-1254950720,1254950727,SG
-1254950728,1254950751,US
+1254950688,1254950751,US
1254950752,1254950759,IL
1254950760,1254950767,US
1254950768,1254950775,GR
@@ -28545,7 +31097,9 @@
1254954664,1254954671,GB
1254954672,1254954887,US
1254954888,1254954895,IL
-1254954896,1254955599,US
+1254954896,1254955103,US
+1254955104,1254955111,GB
+1254955112,1254955599,US
1254955600,1254955607,GB
1254955608,1254955735,US
1254955736,1254955743,GB
@@ -28676,7 +31230,9 @@
1254964344,1254964351,PR
1254964352,1254964391,US
1254964392,1254964399,AU
-1254964400,1254964799,US
+1254964400,1254964639,US
+1254964640,1254964671,AU
+1254964672,1254964799,US
1254964800,1254964815,CA
1254964816,1254964927,US
1254964928,1254964943,CA
@@ -28723,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
@@ -28815,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
@@ -28981,14 +31536,11 @@
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,1255059407,CA
-1255059408,1255059423,AR
-1255059424,1255060159,US
+1255059360,1255059391,CA
+1255059392,1255060159,US
1255060160,1255060191,NL
1255060192,1255060607,US
1255060608,1255060623,AN
@@ -29004,25 +31556,25 @@
1255061984,1255062015,CA
1255062016,1255062463,US
1255062464,1255062527,PA
-1255062528,1255062591,US
-1255062592,1255062607,CA
-1255062608,1255062847,US
+1255062528,1255062847,US
1255062848,1255062863,CA
1255062864,1255063551,US
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,1255274495,US
+1255266304,1255274047,US
+1255274048,1255274079,GB
+1255274080,1255274495,US
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
@@ -29034,17 +31586,21 @@
1255746800,1255746815,BB
1255746816,1255750239,US
1255750240,1255750271,AU
-1255750272,1255753215,US
-1255753216,1255753471,GB
-1255753472,1255768063,US
+1255750272,1255756799,US
+1255756800,1255756815,CA
+1255756816,1255768063,US
1255768064,1255768575,CA
1255768576,1255770367,US
1255770368,1255770623,CA
-1255770624,1255780351,US
-1255780352,1255782399,CA
-1255782400,1255796743,US
-1255796744,1255796751,GB
-1255796752,1255972863,US
+1255770624,1255776431,US
+1255776432,1255776439,LB
+1255776440,1255784959,US
+1255784960,1255784967,BE
+1255784968,1255788511,US
+1255788512,1255788543,BE
+1255788544,1255792127,US
+1255792128,1255792383,IL
+1255792384,1255972863,US
1255972864,1255981055,CA
1255981056,1256001535,US
1256001536,1256005631,CA
@@ -29062,15 +31618,15 @@
1263264000,1263264127,CA
1263264128,1263264305,US
1263264306,1263264321,PK
-1263264322,1263266623,US
+1263264322,1263264511,US
+1263264512,1263264767,CA
+1263264768,1263266623,US
1263266624,1263266655,CA
1263266656,1263267327,US
1263267328,1263267583,CA
1263267584,1263267647,US
1263267648,1263267679,CA
-1263267680,1263267711,US
-1263267712,1263267775,CA
-1263267776,1263267839,US
+1263267680,1263267839,US
1263267840,1263268191,CA
1263268192,1263268275,US
1263268276,1263268340,CA
@@ -29095,10 +31651,27 @@
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,1266107759,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,1264984791,US
+1264984792,1264984799,CA
+1264984800,1264984807,AF
+1264984808,1266107759,US
1266107760,1266107775,UM
1266107776,1266147327,US
1266147328,1266155519,CA
@@ -29469,7 +32042,13 @@
1275920080,1275920095,CA
1275920096,1279262719,US
1279262720,1279787007,CA
-1279787008,1279848447,US
+1279787008,1279828567,US
+1279828568,1279828575,CA
+1279828576,1279828615,US
+1279828616,1279828623,CA
+1279828624,1279829711,US
+1279829712,1279829759,FR
+1279829760,1279848447,US
1279848448,1279852543,PR
1279852544,1279921919,US
1279921920,1279922047,IE
@@ -29500,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
@@ -29578,16 +32159,22 @@
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
1279962944,1279962975,CN
-1279962976,1279963935,US
+1279962976,1279963135,US
+1279963136,1279963391,IN
+1279963392,1279963935,US
1279963936,1279963967,CA
1279963968,1279965183,US
1279965184,1279966207,CA
@@ -29652,7 +32239,9 @@
1279980072,1279980079,BV
1279980080,1279980127,CA
1279980128,1279980135,US
-1279980136,1279981567,CA
+1279980136,1279980159,CA
+1279980160,1279980287,US
+1279980288,1279981567,CA
1279981568,1279981823,US
1279981824,1279981855,VG
1279981856,1279982778,US
@@ -29875,13 +32464,14 @@
1296236800,1296237055,GB
1296237056,1296237311,FR
1296237312,1296237567,US
-1296237568,1296237823,NL
+1296237568,1296237823,FR
1296237824,1296238079,ES
1296238080,1296238591,DE
1296238592,1296239103,NL
1296239104,1296239231,FR
1296239232,1296239359,NL
-1296239360,1296240127,FR
+1296239360,1296239615,DE
+1296239616,1296240127,FR
1296240128,1296241151,BE
1296241152,1296241407,IT
1296241408,1296242175,NL
@@ -29904,15 +32494,17 @@
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
1296248384,1296248447,IT
1296248448,1296248575,US
1296248576,1296248703,IE
-1296248704,1296249855,FR
+1296248704,1296248959,FR
+1296248960,1296249024,DE
+1296249025,1296249855,FR
1296249856,1296249887,US
1296249888,1296249951,FR
1296249952,1296250015,DE
@@ -29921,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
@@ -29936,9 +32528,14 @@
1296251328,1296251359,IE
1296251360,1296251391,DE
1296251392,1296251775,NL
-1296251776,1296252039,FR
+1296251776,1296251903,DE
+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
@@ -29955,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
@@ -29963,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
@@ -29977,7 +32574,7 @@
1296252840,1296252847,DE
1296252848,1296252855,GB
1296252856,1296252871,IE
-1296252872,1296252879,BE
+1296252872,1296252879,FR
1296252880,1296252887,DE
1296252888,1296252895,IE
1296252896,1296252911,BE
@@ -29992,13 +32589,13 @@
1296258048,1296258303,TW
1296258304,1296259071,NL
1296259072,1296259583,US
-1296259584,1296259839,FR
+1296259584,1296259839,DE
1296259840,1296260351,NL
1296260352,1296260607,US
1296260608,1296262143,DE
1296262144,1296262399,FR
1296262400,1296262655,US
-1296262656,1296262911,CA
+1296262656,1296262911,FR
1296262912,1296263935,US
1296263936,1296263943,FR
1296263944,1296263999,US
@@ -30048,9 +32645,7 @@
1296465920,1296466239,NG
1296466240,1296466303,NO
1296466304,1296466335,BF
-1296466336,1296466367,NO
-1296466368,1296466383,AO
-1296466384,1296466399,NO
+1296466336,1296466399,NO
1296466400,1296466415,AO
1296466416,1296466431,NG
1296466432,1296466447,TZ
@@ -30065,21 +32660,18 @@
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,1296472351,NO
-1296472352,1296472383,NG
+1296469248,1296472383,NO
1296472384,1296472415,BI
1296472416,1296473087,NO
1296473088,1296474623,LT
1296474624,1296476159,US
-1296476160,1296480255,LT
-1296480256,1296482303,NO
+1296476160,1296479743,LT
+1296479744,1296482303,NO
1296482304,1296498687,LT
1296498688,1296531455,BG
1296531456,1296564223,MT
@@ -30172,9 +32764,7 @@
1296678152,1296678159,A2
1296678160,1296678215,NG
1296678216,1296678223,A2
-1296678224,1296678319,NG
-1296678320,1296678327,A2
-1296678328,1296678351,NG
+1296678224,1296678351,NG
1296678352,1296678367,A2
1296678368,1296678415,NG
1296678416,1296678431,A2
@@ -30187,7 +32777,10 @@
1296678792,1296678831,NG
1296678832,1296678839,A2
1296678840,1296678911,NG
-1296678912,1296680959,SA
+1296678912,1296680191,SA
+1296680192,1296680447,AE
+1296680448,1296680703,KW
+1296680704,1296680959,SA
1296680960,1296683007,ES
1296683008,1296685055,IE
1296685056,1296687103,TR
@@ -30232,8 +32825,7 @@
1296754688,1296756735,DE
1296756736,1296758783,FR
1296758784,1296760831,RS
-1296760832,1296762879,GB
-1296762880,1296764927,RU
+1296760832,1296764927,RU
1296764928,1296769023,AT
1296769024,1296771071,TR
1296771072,1296773119,LT
@@ -30246,7 +32838,7 @@
1296785408,1296787455,IE
1296787456,1296789503,GB
1296789504,1296791551,CH
-1296791552,1296793599,NL
+1296791552,1296793599,GB
1296793600,1296795647,RU
1296795648,1296795903,NL
1296795904,1296797695,GB
@@ -30424,7 +33016,6 @@
1298110464,1298112511,ES
1298112512,1298114559,IE
1298114560,1298116607,IT
-1298116608,1298118655,RU
1298118656,1298120703,AM
1298120704,1298122751,CZ
1298122752,1298124799,RU
@@ -30432,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
@@ -30449,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
@@ -30484,9 +33090,7 @@
1299026112,1299026127,ES
1299026128,1299026251,CH
1299026252,1299026263,PT
-1299026264,1299032063,CH
-1299032064,1299032319,NL
-1299032320,1299038207,CH
+1299026264,1299038207,CH
1299038208,1299054591,FI
1299054592,1299070975,SE
1299070976,1299075071,SA
@@ -30520,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
@@ -30712,8 +33318,16 @@
1307803648,1307807743,DK
1307807744,1307811839,SE
1307811840,1307815935,NL
-1307815936,1307819791,BE
-1307819792,1307820031,EU
+1307815936,1307816191,EU
+1307816192,1307816447,GB
+1307816448,1307818239,EU
+1307818240,1307818495,GB
+1307818496,1307818751,DE
+1307818752,1307819007,ES
+1307819008,1307819263,DE
+1307819264,1307819519,NL
+1307819520,1307819775,BE
+1307819776,1307820031,IT
1307820032,1307824127,ES
1307824128,1307828223,HU
1307828224,1307830128,NL
@@ -30788,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
@@ -30813,7 +33427,7 @@
1308035584,1308035839,AE
1308035840,1308036095,GB
1308036096,1308036351,SE
-1308036352,1308036607,HU
+1308036352,1308036607,BE
1308036608,1308036863,ES
1308036864,1308037119,FR
1308037120,1308041215,UA
@@ -30826,17 +33440,16 @@
1308073984,1308078079,RU
1308078080,1308078879,NL
1308078880,1308078911,FR
-1308078912,1308079519,NL
-1308079520,1308079535,DE
-1308079536,1308080127,NL
+1308078912,1308079807,NL
+1308079808,1308079823,SC
+1308079824,1308080127,NL
1308080128,1308082175,RU
1308082176,1308084223,GB
1308084224,1308086271,RS
1308086272,1308088319,RU
1308088320,1308090367,UA
1308090368,1308092415,SK
-1308092416,1308094463,RU
-1308094464,1308096511,KW
+1308092416,1308096511,RU
1308096512,1308098559,RS
1308098560,1308360703,NL
1308360704,1308622847,PL
@@ -31104,22 +33717,26 @@
1311256576,1311258623,FR
1311258624,1311262719,GB
1311262720,1311262975,FR
-1311262976,1311263247,CH
-1311263248,1311263263,FR
-1311263264,1311263359,CH
+1311262976,1311263359,CH
1311263360,1311263375,FR
1311263376,1311263407,CH
1311263408,1311263423,BE
1311263424,1311263615,CH
-1311263616,1311263743,FR
-1311263744,1311263871,CH
-1311263872,1311264767,FR
+1311263616,1311263679,FR
+1311263680,1311263871,CH
+1311263872,1311263999,FR
+1311264000,1311264119,CH
+1311264120,1311264127,FR
+1311264128,1311264191,CH
+1311264192,1311264767,FR
1311264768,1311266815,RU
1311266816,1311268863,FR
1311268864,1311270911,BE
1311270912,1311272959,RU
1311272960,1311275007,GB
-1311275008,1311277055,FR
+1311275008,1311276671,FR
+1311276672,1311276703,RU
+1311276704,1311277055,FR
1311277056,1311279103,IT
1311279104,1311280127,BG
1311280128,1311280383,MK
@@ -31218,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
@@ -31375,9 +33994,13 @@
1315774264,1315774423,UA
1315774424,1315774431,NA
1315774432,1315774463,UA
-1315774464,1315782655,RU
+1315774464,1315778559,RU
+1315778560,1315780607,AZ
+1315780608,1315782655,DE
1315782656,1315786751,AM
-1315786752,1315790847,FR
+1315786752,1315790592,FR
+1315790593,1315790593,IT
+1315790594,1315790847,FR
1315790848,1315794943,RS
1315794944,1315803135,RU
1315803136,1315807231,KZ
@@ -31419,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
@@ -31431,23 +34056,27 @@
1317011456,1317044223,BG
1317044224,1317076991,CZ
1317076992,1317109759,BE
-1317109760,1317113855,GB
+1317109760,1317113103,GB
+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,1317137663,GB
+1317135872,1317136895,GB
+1317136896,1317137151,EE
+1317137152,1317137183,GB
+1317137184,1317137215,CH
+1317137216,1317137663,GB
1317137664,1317137919,SE
1317137920,1317140095,GB
1317140096,1317140223,US
@@ -31505,10 +34134,10 @@
1317650096,1317650135,IE
1317650136,1317650143,GB
1317650144,1317650431,IE
-1317650432,1317666815,RU
-1317666816,1317666823,IQ
+1317650432,1317666815,PT
+1317666816,1317666823,A2
1317666824,1317666831,CD
-1317666832,1317666839,NG
+1317666832,1317666839,A2
1317666840,1317666855,GH
1317666856,1317666863,A2
1317666864,1317666871,GH
@@ -31533,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
@@ -31547,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
@@ -31558,19 +34188,19 @@
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
1317667760,1317667767,FR
1317667768,1317667775,ZA
1317667776,1317667783,US
-1317667784,1317667799,NG
+1317667784,1317667791,AO
+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
@@ -31587,8 +34217,7 @@
1317668280,1317668303,A2
1317668304,1317668311,UG
1317668312,1317668319,IQ
-1317668320,1317668343,A2
-1317668344,1317668351,AO
+1317668320,1317668351,A2
1317668352,1317668359,NG
1317668360,1317668367,SL
1317668368,1317668391,A2
@@ -31597,7 +34226,7 @@
1317668408,1317668415,GH
1317668416,1317668447,NG
1317668448,1317668455,SL
-1317668456,1317668463,NG
+1317668456,1317668463,A2
1317668464,1317668471,AO
1317668472,1317668479,NG
1317668480,1317668487,A2
@@ -31620,7 +34249,9 @@
1317668632,1317668639,A2
1317668640,1317668655,NG
1317668656,1317668671,A2
-1317668672,1317668703,NG
+1317668672,1317668687,NG
+1317668688,1317668695,A2
+1317668696,1317668703,NG
1317668704,1317668727,A2
1317668728,1317668735,NG
1317668736,1317668767,A2
@@ -31633,16 +34264,14 @@
1317668848,1317668855,NG
1317668856,1317668863,A2
1317668864,1317668871,LR
-1317668872,1317668911,A2
-1317668912,1317668919,NG
-1317668920,1317668959,A2
+1317668872,1317668959,A2
1317668960,1317668991,UG
1317668992,1317668999,A2
1317669000,1317669007,CD
1317669008,1317669015,NG
1317669016,1317669055,A2
-1317669056,1317669071,NG
-1317669072,1317669095,A2
+1317669056,1317669063,NG
+1317669064,1317669095,A2
1317669096,1317669103,NG
1317669104,1317669111,A2
1317669112,1317669119,NG
@@ -31656,9 +34285,7 @@
1317669960,1317669983,A2
1317669984,1317669991,LR
1317669992,1317669999,NG
-1317670000,1317670007,A2
-1317670008,1317670015,NG
-1317670016,1317670063,A2
+1317670000,1317670063,A2
1317670064,1317670103,NG
1317670104,1317670135,A2
1317670136,1317670143,NG
@@ -31678,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
@@ -31692,13 +34319,12 @@
1317670648,1317670655,NG
1317670656,1317670663,AO
1317670664,1317670679,A2
-1317670680,1317670695,NG
-1317670696,1317670711,A2
+1317670680,1317670703,NG
+1317670704,1317670711,A2
1317670712,1317670719,GH
1317670720,1317670727,A2
1317670728,1317670735,GH
-1317670736,1317670759,A2
-1317670760,1317670767,NG
+1317670736,1317670767,A2
1317670768,1317670775,GH
1317670776,1317670783,A2
1317670784,1317670791,GH
@@ -31711,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,NG
+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
@@ -31736,20 +34364,22 @@
1317671440,1317671447,ZW
1317671448,1317671487,NG
1317671488,1317671527,A2
-1317671528,1317671543,NG
-1317671544,1317671551,GH
+1317671528,1317671535,NG
+1317671536,1317671543,LR
+1317671544,1317671551,A2
1317671552,1317671567,NG
1317671568,1317671583,A2
1317671584,1317671591,NG
1317671592,1317671607,A2
1317671608,1317671615,GH
1317671616,1317671647,A2
-1317671648,1317671679,NG
+1317671648,1317671671,NG
+1317671672,1317671679,AO
1317671680,1317671687,LR
1317671688,1317671719,A2
1317671720,1317671727,NG
1317671728,1317671759,A2
-1317671760,1317671767,IQ
+1317671760,1317671767,AO
1317671768,1317671783,A2
1317671784,1317671807,NG
1317671808,1317671823,CI
@@ -31765,14 +34395,13 @@
1317671920,1317671927,NG
1317671928,1317671935,A2
1317671936,1317672447,GA
-1317672448,1317672463,A2
+1317672448,1317672455,A2
+1317672456,1317672463,GA
1317672464,1317672471,NG
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
@@ -31787,21 +34416,19 @@
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
-1317672872,1317672887,A2
-1317672888,1317672895,NG
-1317672896,1317672903,A2
+1317672872,1317672903,A2
1317672904,1317672919,CI
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
@@ -31825,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
@@ -31883,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
@@ -31916,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
@@ -31935,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
@@ -31948,12 +34571,11 @@
1317675488,1317675503,A2
1317675504,1317675511,NG
1317675512,1317675535,A2
-1317675536,1317675543,NG
+1317675536,1317675543,UG
1317675544,1317675551,IQ
1317675552,1317675559,NG
1317675560,1317675567,NA
-1317675568,1317675583,A2
-1317675584,1317675591,LR
+1317675568,1317675591,A2
1317675592,1317675607,NG
1317675608,1317675623,A2
1317675624,1317675639,NG
@@ -31970,40 +34592,43 @@
1317675744,1317675751,GH
1317675752,1317675759,NG
1317675760,1317675775,GH
-1317675776,1317675783,NG
-1317675784,1317675799,A2
+1317675776,1317675791,A2
+1317675792,1317675799,CD
1317675800,1317675807,GB
-1317675808,1317675823,A2
-1317675824,1317675847,NG
-1317675848,1317675855,A2
+1317675808,1317675815,NG
+1317675816,1317675823,A2
+1317675824,1317675839,NG
+1317675840,1317675847,A2
+1317675848,1317675855,TD
1317675856,1317675863,NG
1317675864,1317675887,A2
1317675888,1317675895,CD
-1317675896,1317675911,A2
+1317675896,1317675903,A2
+1317675904,1317675911,UG
1317675912,1317675919,NG
1317675920,1317675927,UG
-1317675928,1317675943,A2
-1317675944,1317675951,UG
-1317675952,1317675975,NG
-1317675976,1317675983,A2
-1317675984,1317675991,ML
+1317675928,1317675935,LR
+1317675936,1317675951,A2
+1317675952,1317675959,NG
+1317675960,1317675967,A2
+1317675968,1317675975,NG
+1317675976,1317675991,A2
1317675992,1317675999,NG
-1317676000,1317676007,GN
+1317676000,1317676007,A2
1317676008,1317676015,GH
1317676016,1317676023,SD
1317676024,1317676031,GQ
-1317676032,1317676039,A2
-1317676040,1317676047,CD
-1317676048,1317676055,A2
+1317676032,1317676039,NG
+1317676040,1317676055,A2
1317676056,1317676063,NG
-1317676064,1317676079,A2
+1317676064,1317676071,GH
+1317676072,1317676079,NG
1317676080,1317676087,AO
1317676088,1317676095,NG
1317676096,1317676103,CM
1317676104,1317676111,NG
1317676112,1317676119,CM
-1317676120,1317676127,A2
-1317676128,1317676135,NG
+1317676120,1317676135,A2
1317676136,1317676143,CM
1317676144,1317676151,NG
1317676152,1317676159,CM
@@ -32013,7 +34638,7 @@
1317676192,1317676207,SD
1317676208,1317676215,A2
1317676216,1317676223,NG
-1317676224,1317676231,A2
+1317676224,1317676231,GH
1317676232,1317676239,NG
1317676240,1317676247,SD
1317676248,1317676255,NG
@@ -32022,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
@@ -32030,17 +34655,16 @@
1317676584,1317676591,NG
1317676592,1317676599,AO
1317676600,1317676607,UG
-1317676608,1317676615,NG
-1317676616,1317676639,A2
-1317676640,1317676647,LR
+1317676608,1317676631,A2
+1317676632,1317676639,NG
+1317676640,1317676647,CD
1317676648,1317676655,A2
1317676656,1317676671,NG
1317676672,1317676687,A2
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
@@ -32054,20 +34678,20 @@
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,1317676991,NG
-1317676992,1317676999,LR
+1317676984,1317676999,NG
1317677000,1317677007,IQ
-1317677008,1317677015,CD
-1317677016,1317677023,A2
+1317677008,1317677023,A2
1317677024,1317677039,NG
1317677040,1317677047,A2
1317677048,1317677055,NG
1317677056,1317677063,UG
-1317677064,1317677071,A2
+1317677064,1317677071,TD
1317677072,1317677079,NG
1317677080,1317677087,UG
1317677088,1317677095,A2
@@ -32081,7 +34705,8 @@
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
@@ -32106,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
@@ -32121,8 +34747,8 @@
1317678008,1317678015,NG
1317678016,1317678047,A2
1317678048,1317678055,IQ
-1317678056,1317678079,A2
-1317678080,1317678095,NG
+1317678056,1317678087,A2
+1317678088,1317678095,NG
1317678096,1317678103,GQ
1317678104,1317678111,NG
1317678112,1317678127,A2
@@ -32140,14 +34766,16 @@
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
1317678312,1317678319,SD
1317678320,1317678327,NG
1317678328,1317678335,A2
-1317678336,1317678343,NG
+1317678336,1317678343,AO
1317678344,1317678351,A2
1317678352,1317678359,CD
1317678360,1317678367,NG
@@ -32157,18 +34785,16 @@
1317678392,1317678399,A2
1317678400,1317678407,ML
1317678408,1317678415,A2
-1317678416,1317678439,NG
+1317678416,1317678431,NG
+1317678432,1317678439,A2
1317678440,1317678447,CD
1317678448,1317678455,A2
1317678456,1317678463,CD
-1317678464,1317678471,NG
-1317678472,1317678479,AO
+1317678464,1317678479,A2
1317678480,1317678487,CD
1317678488,1317678495,ML
-1317678496,1317678503,A2
-1317678504,1317678527,NG
-1317678528,1317678543,A2
-1317678544,1317678551,CD
+1317678496,1317678535,A2
+1317678536,1317678551,CD
1317678552,1317678559,ML
1317678560,1317678567,NG
1317678568,1317678575,CD
@@ -32179,12 +34805,13 @@
1317679632,1317679639,NG
1317679640,1317679647,ZW
1317679648,1317679655,CD
-1317679656,1317679663,A2
+1317679656,1317679663,NG
1317679664,1317679671,AO
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
@@ -32192,12 +34819,21 @@
1317679768,1317679775,A2
1317679776,1317679799,NG
1317679800,1317679807,A2
-1317679808,1317679847,NG
-1317679848,1317679855,A2
-1317679856,1317679871,NG
-1317679872,1317681183,A2
-1317681184,1317681191,NG
-1317681192,1317683199,A2
+1317679808,1317679815,AO
+1317679816,1317679831,NG
+1317679832,1317679839,A2
+1317679840,1317679847,NG
+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
@@ -32206,11 +34842,7 @@
1317685504,1317685631,BE
1317685632,1317686303,DE
1317686304,1317686319,NL
-1317686320,1317686335,DE
-1317686336,1317686399,NL
-1317686400,1317695743,DE
-1317695744,1317695999,CH
-1317696000,1317698559,DE
+1317686320,1317698559,DE
1317698560,1317698687,NL
1317698688,1317699583,DE
1317699584,1317715967,RU
@@ -32243,7 +34875,10 @@
1317836864,1317836927,CY
1317836928,1317836991,NL
1317836992,1317837007,GB
-1317837008,1317838943,NL
+1317837008,1317837023,RU
+1317837024,1317837567,NL
+1317837568,1317837823,US
+1317837824,1317838943,NL
1317838944,1317838959,GB
1317838960,1317838975,NL
1317838976,1317839103,GI
@@ -32255,7 +34890,8 @@
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,1317841855,CY
@@ -32269,7 +34905,9 @@
1317843424,1317843455,PR
1317843456,1317843519,NL
1317843520,1317843583,GI
-1317843584,1317843967,NL
+1317843584,1317843647,US
+1317843648,1317843839,NL
+1317843840,1317843967,SC
1317843968,1317844223,MY
1317844224,1317847039,NL
1317847040,1317863423,RU
@@ -32280,18 +34918,22 @@
1317928960,1317945343,BG
1317945344,1317965047,AT
1317965048,1317965055,DE
-1317965056,1317978111,AT
+1317965056,1317977407,AT
+1317977408,1317977415,MT
+1317977416,1317978111,AT
1317978112,1317994495,RU
-1317994496,1317995519,NL
-1317995520,1317996095,DE
+1317994496,1317995007,NL
+1317995008,1317996095,DE
1317996096,1317996287,NL
-1317996288,1317998079,DE
-1317998080,1317998591,NL
-1317998592,1318000383,DE
+1317996288,1317998207,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
@@ -32339,16 +34981,14 @@
1318708624,1318708627,GB
1318708628,1318708639,FR
1318708640,1318708647,GB
-1318708648,1318708683,FR
-1318708684,1318708687,GB
-1318708688,1318708723,FR
-1318708724,1318708731,GB
-1318708732,1318708735,FR
+1318708648,1318708735,FR
1318708736,1318708991,GB
1318708992,1318711647,FR
1318711648,1318711663,IT
-1318711664,1318713855,FR
-1318713856,1318714111,CH
+1318711664,1318712983,FR
+1318712984,1318712991,GB
+1318712992,1318713855,FR
+1318713856,1318714111,GB
1318714112,1318715390,FR
1318715391,1318715391,GB
1318715392,1318723583,BG
@@ -32373,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
@@ -32382,9 +35022,10 @@
1318936576,1318944767,DK
1318944768,1318956287,CZ
1318956288,1318957055,PL
-1318957056,1318958847,CZ
-1318958848,1318961151,PL
-1318961152,1318969343,NL
+1318957056,1318958079,CZ
+1318958080,1318960895,PL
+1318960896,1318961151,CZ
+1318961152,1318969343,GB
1318969344,1318977535,RU
1318977536,1318985727,LT
1318985728,1319001087,GB
@@ -32404,11 +35045,7 @@
1319043072,1319051263,FR
1319051264,1319059455,UA
1319059456,1319067647,PL
-1319067648,1319069776,DE
-1319069777,1319069823,CN
-1319069824,1319070217,DE
-1319070218,1319070254,CN
-1319070255,1319070271,DE
+1319067648,1319070271,DE
1319070272,1319070335,PT
1319070336,1319070463,RU
1319070464,1319070975,DE
@@ -32426,8 +35063,7 @@
1319075200,1319075327,RU
1319075328,1319075455,DE
1319075456,1319075583,RU
-1319075584,1319075664,DE
-1319075665,1319075711,CN
+1319075584,1319075711,DE
1319075712,1319075839,RU
1319075840,1319084031,BG
1319084032,1319092223,KW
@@ -32453,7 +35089,6 @@
1331832832,1331834879,IT
1331834880,1331836927,BY
1331836928,1331838975,FR
-1331838976,1331841023,GR
1331841024,1331843071,CZ
1331843072,1331845119,GB
1331845120,1331847167,RU
@@ -32472,7 +35107,7 @@
1331873792,1331879935,RU
1331879936,1331881983,DE
1331881984,1331883007,GB
-1331883008,1331883263,SE
+1331883008,1331883263,SL
1331883264,1331886079,GB
1331886080,1331888127,RU
1331888128,1331890175,SE
@@ -32503,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
@@ -32519,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
@@ -32535,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
@@ -32567,7 +35204,10 @@
1332412416,1332477951,GR
1332477952,1332609023,ES
1332609024,1332613119,PL
-1332613120,1332629503,UA
+1332613120,1332617215,UA
+1332617216,1332621311,CZ
+1332621312,1332625407,UA
+1332625408,1332629503,RU
1332629504,1332633599,DE
1332633600,1332637695,UA
1332637696,1332641791,BG
@@ -32690,14 +35330,17 @@
1334645248,1334647807,IQ
1334647808,1334648063,LB
1334648064,1334648319,IQ
-1334648320,1334648831,A2
-1334648832,1334651391,GB
-1334651392,1334651647,NL
+1334648320,1334648575,DE
+1334648576,1334648831,A2
+1334648832,1334651455,GB
+1334651456,1334651647,NL
1334651648,1334651903,FR
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
@@ -32730,8 +35373,16 @@
1334725632,1334726143,SE
1334726144,1334726655,NL
1334726656,1334729983,RU
-1334729984,1334730015,KZ
-1334730016,1334730239,RU
+1334729984,1334730027,KZ
+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
@@ -32745,9 +35396,9 @@
1334730544,1334730579,KZ
1334730580,1334730583,RU
1334730584,1334730667,KZ
-1334730668,1334730679,RU
-1334730680,1334730751,KZ
-1334730752,1334734847,RU
+1334730668,1334730671,RU
+1334730672,1334730743,KZ
+1334730744,1334734847,RU
1334734848,1334738943,LT
1334738944,1334743039,CH
1334743040,1334747135,CZ
@@ -32816,7 +35467,7 @@
1336614912,1336616959,GB
1336616960,1336619007,ES
1336619008,1336621055,AL
-1336621056,1336623103,IT
+1336621056,1336623103,DE
1336623104,1336625151,BE
1336625152,1336625823,IE
1336625824,1336625839,GB
@@ -32863,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
@@ -32964,10 +35617,7 @@
1346431744,1346431999,KZ
1346432000,1346433023,FR
1346433024,1346439167,NL
-1346439168,1346440447,ES
-1346440448,1346440463,NL
-1346440464,1346440479,ES
-1346440480,1346441215,NL
+1346439168,1346441215,ES
1346441216,1346445311,RU
1346445312,1346449407,DE
1346449408,1346453503,NO
@@ -32987,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
@@ -33024,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
@@ -33070,11 +35728,16 @@
1346699756,1346699756,LI
1346699757,1346699767,GB
1346699768,1346699775,US
-1346699776,1346700575,GB
+1346699776,1346699839,GB
+1346699840,1346699871,HK
+1346699872,1346699875,GB
+1346699876,1346699879,IL
+1346699880,1346699887,US
+1346699888,1346700575,GB
1346700576,1346700591,VG
1346700592,1346700607,GB
-1346700608,1346700623,US
-1346700624,1346700847,GB
+1346700608,1346700639,US
+1346700640,1346700847,GB
1346700848,1346700855,US
1346700856,1346701183,GB
1346701184,1346701215,GR
@@ -33084,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
@@ -33093,9 +35760,12 @@
1346704512,1346704575,GB
1346704576,1346704639,US
1346704640,1346704767,LI
-1346704768,1346705247,GB
+1346704768,1346704895,US
+1346704896,1346705247,GB
1346705248,1346705279,US
-1346705280,1346707455,GB
+1346705280,1346705407,GB
+1346705408,1346705535,US
+1346705536,1346707455,GB
1346707456,1346711551,DE
1346711552,1346715647,AZ
1346715648,1346723839,NL
@@ -33117,7 +35787,9 @@
1346793472,1346797567,IT
1346797568,1346801663,IL
1346801664,1346805759,SE
-1346805760,1346818047,DE
+1346805760,1346806031,DE
+1346806032,1346806047,CH
+1346806048,1346818047,DE
1346818048,1346822143,FR
1346822144,1346826239,RU
1346826240,1346830335,RS
@@ -33165,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
@@ -33194,12 +35852,13 @@
1347092480,1347096575,IR
1347096576,1347100671,SE
1347100672,1347108863,AT
-1347108864,1347112959,GB
+1347108864,1347111423,GB
+1347111424,1347111455,US
+1347111456,1347112959,GB
1347112960,1347117055,RU
1347117056,1347121151,FI
1347121152,1347125247,CH
1347125248,1347129343,RU
-1347129344,1347133439,GB
1347133440,1347141631,EG
1347141632,1347145727,CH
1347145728,1347146239,GB
@@ -33212,7 +35871,9 @@
1347148288,1347148543,GB
1347148544,1347148799,IN
1347148800,1347149055,NO
-1347149056,1347149823,IN
+1347149056,1347149311,GB
+1347149312,1347149567,DE
+1347149568,1347149823,IN
1347149824,1347153919,HU
1347153920,1347158015,AT
1347158016,1347162111,CH
@@ -33265,8 +35926,8 @@
1347244032,1347245311,GB
1347245312,1347245567,US
1347245568,1347247359,GB
-1347247360,1347247871,RU
-1347247872,1347248127,US
+1347247360,1347247839,RU
+1347247840,1347248127,US
1347248128,1347248863,SE
1347248864,1347248864,FI
1347248865,1347249343,SE
@@ -33282,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
@@ -33290,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
@@ -33376,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
@@ -33398,24 +36061,12 @@
1347379200,1347383295,NL
1347383296,1347384111,EE
1347384112,1347384115,FI
-1347384116,1347384703,EE
-1347384704,1347384831,US
-1347384832,1347385063,EE
-1347385064,1347385071,RU
-1347385072,1347385215,EE
-1347385216,1347385343,US
-1347385344,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
1347387016,1347387215,EE
-1347387216,1347387219,DE
+1347387216,1347387219,NZ
1347387220,1347387224,EE
1347387225,1347387228,DE
1347387229,1347387391,EE
@@ -33433,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
@@ -33471,8 +36124,7 @@
1347505408,1347505663,DE
1347505664,1347506175,ES
1347506176,1347506431,GB
-1347506432,1347510271,FR
-1347510272,1347518463,ES
+1347506432,1347518463,ES
1347518464,1347522559,AT
1347522560,1347526655,LB
1347526656,1347527967,FI
@@ -33532,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
@@ -33577,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
@@ -33602,13 +36242,16 @@
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
-1347855072,1347855079,EU
-1347855080,1347855103,DE
+1347854912,1347855023,DE
+1347855024,1347855039,EU
+1347855040,1347855071,DE
+1347855072,1347855087,EU
+1347855088,1347855103,DE
1347855104,1347855359,CH
1347855360,1347855935,DE
1347855936,1347855943,EU
@@ -33620,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
@@ -33636,11 +36283,13 @@
1347858576,1347858623,EU
1347858624,1347858631,DE
1347858632,1347858639,EU
-1347858640,1347859351,DE
+1347858640,1347859335,DE
+1347859336,1347859343,EU
+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
@@ -33655,7 +36304,9 @@
1347861800,1347861823,DE
1347861824,1347861943,EU
1347861944,1347861951,DE
-1347861952,1347862111,EU
+1347861952,1347862007,EU
+1347862008,1347862015,CH
+1347862016,1347862111,EU
1347862112,1347862143,DE
1347862144,1347862303,EU
1347862304,1347862431,DE
@@ -33677,7 +36328,11 @@
1347919872,1347923967,DE
1347923968,1347928063,CZ
1347928064,1347932159,RU
-1347932160,1347936255,SK
+1347932160,1347932639,SK
+1347932640,1347932655,PL
+1347932656,1347932663,SK
+1347932664,1347932667,PL
+1347932668,1347936255,SK
1347936256,1347940351,FR
1347940352,1347944447,BA
1347944448,1347948543,DZ
@@ -33693,16 +36348,12 @@
1347978032,1347978039,NG
1347978040,1347978191,A2
1347978192,1347978199,NG
-1347978200,1347978239,A2
-1347978240,1347978255,MW
-1347978256,1347978263,A2
+1347978200,1347978263,A2
1347978264,1347978271,NG
-1347978272,1347978287,A2
-1347978288,1347978295,NG
-1347978296,1347978303,A2
-1347978304,1347978327,NG
-1347978328,1347978343,A2
-1347978344,1347978359,NG
+1347978272,1347978319,A2
+1347978320,1347978327,NG
+1347978328,1347978351,A2
+1347978352,1347978359,NG
1347978360,1347978375,A2
1347978376,1347978407,NG
1347978408,1347978447,A2
@@ -33725,22 +36376,15 @@
1347979232,1347979247,NG
1347979248,1347979375,A2
1347979376,1347979399,NG
-1347979400,1347979567,A2
-1347979568,1347979575,NG
-1347979576,1347979583,A2
+1347979400,1347979583,A2
1347979584,1347979591,NG
1347979592,1347979743,A2
1347979744,1347979751,NG
1347979752,1347980111,A2
1347980112,1347980127,GN
-1347980128,1347980167,A2
-1347980168,1347980175,NG
-1347980176,1347980223,A2
-1347980224,1347980271,NG
+1347980128,1347980271,A2
1347980272,1347980279,DK
-1347980280,1347980543,A2
-1347980544,1347980559,DK
-1347980560,1347981007,A2
+1347980280,1347981007,A2
1347981008,1347981015,NG
1347981016,1347981023,A2
1347981024,1347981031,NG
@@ -33771,8 +36415,8 @@
1347984216,1347984415,A2
1347984416,1347984423,NG
1347984424,1347984719,A2
-1347984720,1347984735,NG
-1347984736,1347984879,A2
+1347984720,1347984727,NG
+1347984728,1347984879,A2
1347984880,1347984895,NG
1347984896,1347984959,A2
1347984960,1347984991,NG
@@ -33843,8 +36487,8 @@
1348219360,1348219391,DE
1348219392,1348219647,US
1348219648,1348219903,DE
-1348219904,1348220415,LB
-1348220416,1348220687,DE
+1348219904,1348219967,CA
+1348219968,1348220687,DE
1348220688,1348220703,SA
1348220704,1348220711,DE
1348220712,1348220735,SA
@@ -34003,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
@@ -34038,9 +36684,9 @@
1352149856,1352149871,SE
1352149872,1352277535,DE
1352277536,1352277567,IT
-1352277568,1352287399,DE
-1352287400,1352287407,NL
-1352287408,1352402791,DE
+1352277568,1352304639,DE
+1352304640,1352304895,CH
+1352304896,1352402791,DE
1352402792,1352402799,BE
1352402800,1352404599,DE
1352404600,1352404607,NL
@@ -34075,8 +36721,8 @@
1353258416,1353258423,DK
1353258424,1353258495,SE
1353258496,1353258503,GB
-1353258504,1353258527,SE
-1353258528,1353258559,GB
+1353258504,1353258519,SE
+1353258520,1353258559,GB
1353258560,1353258639,SE
1353258640,1353258783,GB
1353258784,1353258807,SE
@@ -34091,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,1353268575,BE
-1353268576,1353268583,GB
-1353268584,1353269247,BE
+1353268480,1353268599,BE
+1353268600,1353268607,GB
+1353268608,1353269007,BE
+1353269008,1353269015,GB
+1353269016,1353269223,BE
+1353269224,1353269231,FR
+1353269232,1353269247,BE
1353269248,1353270527,GB
1353270528,1353270783,IE
1353270784,1353271295,GB
@@ -34103,22 +36755,19 @@
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,1353272127,ES
-1353272128,1353272135,GB
-1353272136,1353272245,ES
+1353272056,1353272071,GB
+1353272072,1353272199,ES
+1353272200,1353272207,GB
+1353272208,1353272245,ES
1353272246,1353272247,GB
1353272248,1353272691,ES
1353272692,1353272695,GB
1353272696,1353272807,ES
1353272808,1353272815,GB
-1353272816,1353272887,ES
-1353272888,1353272895,GB
-1353272896,1353273343,ES
+1353272816,1353273343,ES
1353273344,1353273631,BE
1353273632,1353273639,ES
1353273640,1353273711,BE
@@ -34127,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
@@ -34143,24 +36794,28 @@
1353280120,1353280127,GB
1353280128,1353280143,IT
1353280144,1353280151,GB
-1353280152,1353280671,IT
-1353280672,1353280679,GB
-1353280680,1353281023,IT
+1353280152,1353280191,IT
+1353280192,1353280199,GB
+1353280200,1353280287,IT
+1353280288,1353280295,GB
+1353280296,1353280463,IT
+1353280464,1353280479,GB
+1353280480,1353280567,IT
+1353280568,1353280575,GB
+1353280576,1353281023,IT
1353281024,1353281535,BE
1353281536,1353282047,GB
-1353282048,1353282159,IT
+1353282048,1353282103,IT
+1353282104,1353282111,GB
+1353282112,1353282159,IT
1353282160,1353282167,GB
1353282168,1353282215,IT
1353282216,1353282223,GB
1353282224,1353282559,IT
1353282560,1353283071,GB
1353283072,1353283327,IT
-1353283328,1353287327,GB
-1353287328,1353287359,IE
-1353287360,1353287679,GB
-1353287680,1353287935,IE
-1353287936,1353287943,GB
-1353287944,1353288031,IE
+1353283328,1353287679,GB
+1353287680,1353288031,IE
1353288032,1353288063,GB
1353288064,1353288151,IE
1353288152,1353288159,GB
@@ -34185,12 +36840,16 @@
1353288896,1353288959,IE
1353288960,1353288975,GB
1353288976,1353288991,IE
-1353288992,1353289087,GB
+1353288992,1353288999,GB
+1353289000,1353289023,IE
+1353289024,1353289031,NL
+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
@@ -34205,7 +36864,9 @@
1353290928,1353290935,IE
1353290936,1353293351,GB
1353293352,1353293355,IT
-1353293356,1353297151,GB
+1353293356,1353295471,GB
+1353295472,1353295479,IE
+1353295480,1353297151,GB
1353297152,1353297183,IE
1353297184,1353298687,GB
1353298688,1353298695,SE
@@ -34216,18 +36877,27 @@
1353298752,1353298815,SE
1353298816,1353298831,PT
1353298832,1353298839,SE
-1353298840,1353298879,GB
-1353298880,1353298881,SE
+1353298840,1353298847,IE
+1353298848,1353298863,SE
+1353298864,1353298871,GB
+1353298872,1353298881,SE
1353298882,1353298887,GB
-1353298888,1353299647,SE
+1353298888,1353299503,SE
+1353299504,1353299511,GB
+1353299512,1353299647,SE
1353299648,1353299839,GB
1353299840,1353299847,SE
1353299848,1353299863,GB
-1353299864,1353300079,SE
-1353300080,1353300095,PT
-1353300096,1353300103,GB
+1353299864,1353299919,SE
+1353299920,1353299927,GB
+1353299928,1353299951,SE
+1353299952,1353299967,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
@@ -34235,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
@@ -34249,21 +36921,25 @@
1353310336,1353310463,GB
1353310464,1353310479,ES
1353310480,1353310487,GB
-1353310488,1353310559,ES
-1353310560,1353310575,GB
-1353310576,1353310599,ES
+1353310488,1353310599,ES
1353310600,1353310607,DE
1353310608,1353310719,ES
-1353310720,1353311175,IT
+1353310720,1353311071,IT
+1353311072,1353311079,GB
+1353311080,1353311135,IT
+1353311136,1353311143,GB
+1353311144,1353311175,IT
1353311176,1353311183,ES
-1353311184,1353311214,IT
-1353311215,1353311215,GB
-1353311216,1353311231,IT
+1353311184,1353311231,IT
1353311232,1353312255,GB
1353312256,1353312767,CH
1353312768,1353312815,IT
1353312816,1353312823,GB
-1353312824,1353313191,IT
+1353312824,1353312879,IT
+1353312880,1353312887,GB
+1353312888,1353312999,IT
+1353313000,1353313007,GB
+1353313008,1353313191,IT
1353313192,1353313199,GB
1353313200,1353313279,IT
1353313280,1353313791,IE
@@ -34312,7 +36988,15 @@
1353956864,1353968639,IL
1353968640,1353968895,A2
1353968896,1353970431,IL
-1353970432,1353970687,A2
+1353970432,1353970543,A2
+1353970544,1353970547,IL
+1353970548,1353970571,A2
+1353970572,1353970575,IL
+1353970576,1353970579,A2
+1353970580,1353970587,IL
+1353970588,1353970623,A2
+1353970624,1353970639,IL
+1353970640,1353970687,A2
1353970688,1353973759,IL
1353973760,1354235903,IT
1354235904,1354301439,KW
@@ -34325,17 +37009,16 @@
1354662144,1354662151,AT
1354662152,1354662463,DE
1354662464,1354662527,AT
-1354662528,1354662591,ES
-1354662592,1354664743,DE
-1354664744,1354664751,IT
+1354662528,1354662943,DE
+1354662944,1354662975,AT
+1354662976,1354664743,DE
+1354664744,1354664751,AT
1354664752,1354664759,DE
1354664760,1354664767,IT
-1354664768,1354665215,DE
-1354665216,1354665247,ES
-1354665248,1354665923,DE
+1354664768,1354665923,DE
1354665924,1354665927,AT
1354665928,1354665943,DE
-1354665944,1354665951,IT
+1354665944,1354665951,AT
1354665952,1354666639,DE
1354666640,1354666650,FI
1354666651,1354666687,DE
@@ -34442,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
@@ -34455,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
@@ -34523,10 +37206,17 @@
1357358592,1357358847,DE
1357358848,1357359103,PL
1357359104,1357359999,ES
-1357360000,1357360031,GB
-1357360032,1357360127,EU
-1357360128,1357360279,GB
-1357360280,1357360383,EU
+1357360000,1357360015,GB
+1357360016,1357360023,IT
+1357360024,1357360031,BE
+1357360032,1357360271,GB
+1357360272,1357360279,FR
+1357360280,1357360287,GB
+1357360288,1357360319,IN
+1357360320,1357360335,GB
+1357360336,1357360343,BE
+1357360344,1357360351,LU
+1357360352,1357360383,GB
1357360384,1357360639,ES
1357360640,1357360895,GB
1357360896,1357361151,DE
@@ -34551,7 +37241,10 @@
1357366864,1357366879,ES
1357366880,1357366911,EU
1357366912,1357366927,GB
-1357366928,1357366975,EU
+1357366928,1357366943,EU
+1357366944,1357366959,GB
+1357366960,1357366967,BE
+1357366968,1357366975,FR
1357366976,1357367295,GB
1357367296,1357367551,FR
1357367552,1357367807,EU
@@ -34606,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
@@ -34624,7 +37319,7 @@
1357876384,1357876391,RU
1357876392,1357876399,PL
1357876400,1357876407,DE
-1357876408,1357876415,EU
+1357876408,1357876415,GB
1357876416,1357876479,PL
1357876480,1357876495,SE
1357876496,1357876543,EU
@@ -34641,7 +37336,7 @@
1357878528,1357878591,AT
1357878592,1357878655,PL
1357878656,1357878719,DE
-1357878720,1357878783,EU
+1357878720,1357878783,NL
1357878784,1357879807,DE
1357879808,1357879871,RU
1357879872,1357879935,DE
@@ -34656,21 +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,1357883551,FR
-1357883552,1357883583,EU
-1357883584,1357883727,FR
-1357883728,1357883759,EU
+1357883536,1357883543,FR
+1357883544,1357883583,EU
+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
@@ -34683,13 +37380,17 @@
1357884936,1357884943,GB
1357884944,1357884959,FR
1357884960,1357884991,RU
-1357884992,1357885183,FR
-1357885184,1357885215,EU
+1357884992,1357885055,EU
+1357885056,1357885119,FR
+1357885120,1357885183,EU
+1357885184,1357885191,SE
+1357885192,1357885199,ES
+1357885200,1357885215,EU
1357885216,1357885247,ES
1357885248,1357885439,DE
1357885440,1357885695,FR
1357885696,1357885951,DE
-1357885952,1357886463,FR
+1357885952,1357886463,EU
1357886464,1357887487,US
1357887488,1357888511,FR
1357888512,1357889023,DE
@@ -34703,12 +37404,13 @@
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
1357891680,1357891711,GB
-1357891712,1357891839,FI
+1357891712,1357891839,SE
1357891840,1357892095,GB
1357892096,1357892111,DE
1357892112,1357892127,ES
@@ -34721,7 +37423,7 @@
1357892200,1357892207,NL
1357892208,1357892215,SE
1357892216,1357892223,US
-1357892224,1357892351,FI
+1357892224,1357892351,FR
1357892352,1357893119,NL
1357893120,1357893375,SE
1357893376,1357893407,EU
@@ -34729,26 +37431,44 @@
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
-1357899020,1357899023,EU
+1357898752,1357899015,DE
+1357899016,1357899019,EU
+1357899020,1357899023,NL
1357899024,1357899039,DE
1357899040,1357899047,EU
1357899048,1357899063,DE
1357899064,1357899071,EU
1357899072,1357899199,DE
-1357899200,1357899279,EU
+1357899200,1357899263,EU
+1357899264,1357899267,DE
+1357899268,1357899275,FR
+1357899276,1357899279,NL
1357899280,1357899287,RU
-1357899288,1357899327,EU
-1357899328,1357899391,PL
-1357899392,1357899551,EU
+1357899288,1357899527,EU
+1357899528,1357899535,BR
+1357899536,1357899543,CZ
+1357899544,1357899551,EU
1357899552,1357899567,AT
1357899568,1357899647,EU
1357899648,1357899775,GB
1357899776,1357900287,DE
-1357900288,1357900351,EU
+1357900288,1357900319,EU
+1357900320,1357900327,FR
+1357900328,1357900351,EU
1357900352,1357900415,CH
1357900416,1357900543,SE
1357900544,1357900799,NL
@@ -34761,7 +37481,7 @@
1357903872,1357904383,EU
1357904384,1357904895,DE
1357904896,1357905407,GB
-1357905408,1357905663,FR
+1357905408,1357905663,SE
1357905664,1357905919,NL
1357905920,1357910015,LT
1357910016,1357914111,GR
@@ -34798,7 +37518,9 @@
1357989384,1357989647,GB
1357989648,1357989655,FR
1357989656,1357989663,GB
-1357989664,1357989703,FR
+1357989664,1357989671,FR
+1357989672,1357989679,BE
+1357989680,1357989703,FR
1357989704,1357989711,GB
1357989712,1357989727,FR
1357989728,1357989743,GB
@@ -34807,7 +37529,8 @@
1357989784,1357989791,GB
1357989792,1357989807,FR
1357989808,1357989823,GB
-1357989824,1357989839,FR
+1357989824,1357989831,NL
+1357989832,1357989839,FR
1357989840,1357989847,GB
1357989848,1357989887,FR
1357989888,1357991679,GB
@@ -34890,10 +37613,8 @@
1358223672,1358223687,DE
1358223688,1358223695,GB
1358223696,1358223719,DE
-1358223720,1358223783,GB
-1358223784,1358223791,DE
-1358223792,1358223807,GB
-1358223808,1358223843,DE
+1358223720,1358223815,GB
+1358223816,1358223843,DE
1358223844,1358223871,GB
1358223872,1358223887,NL
1358223888,1358223895,DE
@@ -34905,8 +37626,8 @@
1358223940,1358223975,DE
1358223976,1358223991,NL
1358223992,1358223999,DE
-1358224000,1358224079,NL
-1358224080,1358224511,DE
+1358224000,1358224087,NL
+1358224088,1358224511,DE
1358224512,1358224519,BE
1358224520,1358224611,DE
1358224612,1358224651,BE
@@ -34915,26 +37636,29 @@
1358224728,1358224959,DE
1358224960,1358225127,IT
1358225128,1358225135,DE
-1358225136,1358225143,IT
-1358225144,1358225151,DE
-1358225152,1358225183,IT
+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
-1358230116,1358230119,ES
-1358230120,1358230383,DE
+1358230116,1358230383,DE
1358230384,1358230391,TR
1358230392,1358230399,CH
1358230400,1358232863,DE
-1358232864,1358232879,IT
-1358232880,1358232903,DE
+1358232864,1358232867,IT
+1358232868,1358232903,DE
1358232904,1358232911,CH
1358232912,1358233599,DE
1358233600,1358237695,ES
-1358237696,1358241791,FR
+1358237696,1358239231,FR
+1358239232,1358239487,CH
+1358239488,1358239743,FR
+1358239744,1358239999,CH
+1358240000,1358240255,FR
+1358240256,1358240319,CH
+1358240320,1358241791,FR
1358241792,1358241823,BE
1358241824,1358241951,FR
1358241952,1358241983,BE
@@ -35083,13 +37807,22 @@
1358475264,1358479359,GB
1358479360,1358483455,LI
1358483456,1358487551,FR
-1358487552,1358487711,SE
+1358487552,1358487689,SE
+1358487690,1358487691,RU
+1358487692,1358487693,RO
+1358487694,1358487695,PL
+1358487696,1358487697,HU
+1358487698,1358487699,BG
+1358487700,1358487701,ES
+1358487702,1358487711,SE
1358487712,1358487727,US
1358487728,1358487999,FR
-1358488000,1358488223,SE
+1358488000,1358488191,SE
+1358488192,1358488223,GB
1358488224,1358488239,US
1358488240,1358488255,FR
-1358488256,1358488479,SE
+1358488256,1358488447,SE
+1358488448,1358488479,GB
1358488480,1358488495,US
1358488496,1358488511,FR
1358488512,1358491647,SE
@@ -35135,14 +37868,14 @@
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
1358668480,1358668495,GB
-1358668496,1358668535,PT
-1358668536,1358668543,GB
-1358668544,1358668799,PT
+1358668496,1358668799,PT
1358668800,1358668807,GB
1358668808,1358668927,PT
1358668928,1358668959,ES
@@ -35150,19 +37883,23 @@
1358669352,1358669359,GB
1358669360,1358669463,PT
1358669464,1358669471,GB
-1358669472,1358669503,PT
-1358669504,1358669519,GB
-1358669520,1358669543,PT
+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
1358670024,1358670183,PT
1358670184,1358670191,GB
1358670192,1358670943,PT
-1358670944,1358670959,GB
-1358670960,1358671415,PT
+1358670944,1358670951,FR
+1358670952,1358671047,PT
+1358671048,1358671055,ES
+1358671056,1358671095,PT
+1358671096,1358671103,GB
+1358671104,1358671415,PT
1358671416,1358671423,GB
1358671424,1358671431,PT
1358671432,1358671439,GB
@@ -35207,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
@@ -35219,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
@@ -35250,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
@@ -35295,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
@@ -35305,7 +38045,14 @@
1358876672,1358880767,LV
1358880768,1358884863,GB
1358884864,1358888959,SE
-1358888960,1358893055,DE
+1358888960,1358889599,DE
+1358889600,1358889631,IN
+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
@@ -35385,8 +38132,7 @@
1358903968,1358903983,CA
1358903984,1358903999,NG
1358904000,1358904032,ZA
-1358904033,1358904063,NG
-1358904064,1358904071,A2
+1358904033,1358904071,A2
1358904072,1358904095,US
1358904096,1358904103,A2
1358904104,1358904119,US
@@ -35398,8 +38144,8 @@
1358904168,1358904175,US
1358904176,1358904191,A2
1358904192,1358904199,NG
-1358904200,1358904262,US
-1358904263,1358904295,A2
+1358904200,1358904255,US
+1358904256,1358904295,A2
1358904296,1358904311,NG
1358904312,1358904551,A2
1358904552,1358904559,IL
@@ -35425,7 +38171,8 @@
1358905232,1358905247,GN
1358905248,1358905279,US
1358905280,1358905295,A2
-1358905296,1358905311,LR
+1358905296,1358905303,LR
+1358905304,1358905311,A2
1358905312,1358905327,US
1358905328,1358905343,A2
1358905344,1358909439,UA
@@ -35448,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
@@ -35519,8 +38266,8 @@
1359467488,1359467495,DE
1359467496,1359467647,US
1359467648,1359467775,DE
-1359467776,1359467823,US
-1359467824,1359467903,DE
+1359467776,1359467855,US
+1359467856,1359467903,DE
1359467904,1359468063,US
1359468064,1359468575,DE
1359468576,1359468583,SG
@@ -35530,7 +38277,8 @@
1359468672,1359468695,SG
1359468696,1359468711,DE
1359468712,1359468751,SG
-1359468752,1359468863,DE
+1359468752,1359468759,AU
+1359468760,1359468863,DE
1359468864,1359468879,SG
1359468880,1359468927,DE
1359468928,1359469055,SG
@@ -35599,7 +38347,8 @@
1360056320,1360060415,SA
1360060416,1360064511,LT
1360064512,1360068607,GE
-1360068608,1360076799,RU
+1360068608,1360072703,RU
+1360072704,1360076799,CH
1360076800,1360084991,NL
1360084992,1360089087,GB
1360089088,1360093183,AZ
@@ -35667,26 +38416,30 @@
1360257024,1360259447,DK
1360259448,1360259451,US
1360259452,1360265215,DK
-1360265216,1360269311,GB
+1360265216,1360265983,NL
+1360265984,1360267007,GB
+1360267008,1360268031,SE
+1360268032,1360268287,FR
+1360268288,1360269311,GB
1360269312,1360273407,KG
1360273408,1360281599,GB
1360281600,1360281727,NL
1360281728,1360281855,ES
-1360281856,1360282751,NL
+1360281856,1360282111,NL
+1360282112,1360282239,ES
+1360282240,1360282751,NL
1360282752,1360282783,GB
-1360282784,1360285695,NL
+1360282784,1360285183,NL
+1360285184,1360285335,ES
+1360285336,1360285343,NL
+1360285344,1360285375,ES
+1360285376,1360285695,NL
1360285696,1360289791,DE
1360289792,1360293887,RU
1360293888,1360302079,DE
1360302080,1360306175,EE
1360306176,1360310271,RU
-1360310272,1360312319,GG
-1360312320,1360312575,GB
-1360312576,1360312831,GG
-1360312832,1360313087,GB
-1360313088,1360313343,GG
-1360313344,1360313599,GB
-1360313600,1360314367,GG
+1360310272,1360314367,JE
1360314368,1360318463,RU
1360318464,1360322559,FR
1360322560,1360326655,FI
@@ -35725,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
@@ -35764,12 +38515,15 @@
1360621568,1360625663,ES
1360625664,1360626687,DE
1360626688,1360627199,LB
-1360627200,1360627455,DE
-1360627456,1360627743,LB
+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
@@ -35868,9 +38622,7 @@
1360894976,1360894983,IT
1360894984,1360895999,CH
1360896000,1360900095,QA
-1360900096,1360904335,IT
-1360904336,1360904343,GB
-1360904344,1360905039,IT
+1360900096,1360905039,IT
1360905040,1360905055,GB
1360905056,1360905391,IT
1360905392,1360905407,GB
@@ -35895,29 +38647,14 @@
1360957440,1360961535,DE
1360961536,1360965631,UA
1360965632,1360977919,RU
-1360977920,1360987391,CZ
-1360987392,1360987455,GB
-1360987456,1360987535,CZ
-1360987536,1360987927,GB
-1360987928,1360987935,CZ
+1360977920,1360986111,CZ
+1360986112,1360987935,GB
1360987936,1360987983,SK
-1360987984,1360987999,CZ
-1360988000,1360988039,GB
-1360988040,1360988047,CZ
-1360988048,1360988055,GB
+1360987984,1360988055,GB
1360988056,1360988063,SK
-1360988064,1360988079,CZ
-1360988080,1360989951,GB
-1360989952,1360990079,CZ
-1360990080,1360990207,GB
+1360988064,1360990207,GB
1360990208,1360990463,CZ
-1360990464,1360990719,GB
-1360990720,1360990975,CZ
-1360990976,1360991487,GB
-1360991488,1360991743,CZ
-1360991744,1360991999,GB
-1360992000,1360992255,SK
-1360992256,1360994303,GB
+1360990464,1360994303,GB
1360994304,1360998399,CZ
1360998400,1361002495,FI
1361002496,1361006591,GB
@@ -36081,7 +38818,7 @@
1361036596,1361036599,GI
1361036600,1361036607,IQ
1361036608,1361036611,GI
-1361036612,1361036615,IQ
+1361036612,1361036615,NL
1361036616,1361036623,GB
1361036624,1361036631,IQ
1361036632,1361036635,GR
@@ -36259,7 +38996,7 @@
1361038320,1361038335,US
1361038336,1361039359,NL
1361039360,1361043455,PL
-1361043456,1361051647,NO
+1361043456,1361051647,IR
1361051648,1362100223,ES
1362100224,1362395135,FR
1362395136,1362395183,CH
@@ -36454,9 +39191,19 @@
1365004064,1365004287,GB
1365004288,1365008383,FR
1365008384,1365012479,CH
-1365012480,1365015927,FR
+1365012480,1365012735,FR
+1365012736,1365013503,US
+1365013504,1365013631,FR
+1365013632,1365015551,US
+1365015552,1365015839,FR
+1365015840,1365015919,US
+1365015920,1365015927,DE
1365015928,1365015935,ES
-1365015936,1365016575,FR
+1365015936,1365016063,US
+1365016064,1365016079,FR
+1365016080,1365016095,US
+1365016096,1365016111,FR
+1365016112,1365016575,US
1365016576,1365020671,ES
1365020672,1365024767,CZ
1365024768,1365027839,DE
@@ -36556,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
@@ -36589,7 +39334,8 @@
1365204992,1365209087,CZ
1365209088,1365213183,BE
1365213184,1365217279,RU
-1365217280,1365217567,GB
+1365217280,1365217551,GB
+1365217552,1365217567,US
1365217568,1365217575,PT
1365217576,1365217591,GB
1365217592,1365217599,EG
@@ -36612,8 +39358,8 @@
1365217872,1365217879,BD
1365217880,1365217919,US
1365217920,1365217927,DK
-1365217928,1365217967,BD
-1365217968,1365217975,GB
+1365217928,1365217951,BD
+1365217952,1365217975,GB
1365217976,1365217983,US
1365217984,1365217991,DK
1365217992,1365218023,US
@@ -36661,7 +39407,7 @@
1365219104,1365219111,SA
1365219112,1365219119,GB
1365219120,1365219135,US
-1365219136,1365219143,SA
+1365219136,1365219143,GB
1365219144,1365219159,US
1365219160,1365219167,CA
1365219168,1365219183,ES
@@ -36811,6 +39557,19 @@
1369559040,1369563135,RU
1369563136,1369567231,PL
1369567232,1369571327,BG
+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
@@ -36819,7 +39578,9 @@
1370062848,1370095615,DE
1370095616,1370128383,GB
1370128384,1370161151,SE
-1370161152,1370187775,NL
+1370161152,1370170367,NL
+1370170368,1370170399,US
+1370170400,1370187775,NL
1370187776,1370188031,GR
1370188032,1370193919,NL
1370193920,1370226687,GB
@@ -36978,7 +39739,11 @@
1372147712,1372151807,BE
1372151808,1372152823,DE
1372152824,1372152831,GB
-1372152832,1372159999,DE
+1372152832,1372156063,DE
+1372156064,1372156095,GB
+1372156096,1372156719,DE
+1372156720,1372156735,GB
+1372156736,1372159999,DE
1372160000,1372164095,GB
1372164096,1372166863,DE
1372166864,1372166879,US
@@ -36999,10 +39764,8 @@
1372589824,1372618751,IT
1372618752,1372651519,GB
1372651520,1372684287,FI
-1372684288,1372684415,DE
-1372684416,1372684543,EU
-1372684544,1372685567,DE
-1372685568,1372685655,EU
+1372684288,1372685631,DE
+1372685632,1372685655,EU
1372685656,1372685663,DE
1372685664,1372685695,EU
1372685696,1372685823,DE
@@ -37041,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
@@ -37055,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
@@ -37066,17 +39831,11 @@
1372702992,1372703271,EU
1372703272,1372703323,DE
1372703324,1372703327,EU
-1372703328,1372703407,DE
-1372703408,1372703423,EU
+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
@@ -37139,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
@@ -37181,16 +39938,20 @@
1382177984,1382178303,LI
1382178304,1382179247,DE
1382179248,1382179279,GB
-1382179280,1382182327,DE
-1382182328,1382182335,GB
-1382182336,1382182547,DE
+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
1382182912,1382183167,LI
-1382183168,1382187007,DE
+1382183168,1382183423,CH
+1382183424,1382183935,LI
+1382183936,1382185031,DE
+1382185032,1382185039,SK
+1382185040,1382187007,DE
1382187008,1382191871,ES
1382191872,1382192127,VE
1382192128,1382203391,ES
@@ -37207,9 +39968,7 @@
1382211072,1382211199,DE
1382211200,1382211583,EU
1382211584,1382211711,FR
-1382211712,1382211839,EU
-1382211840,1382212095,FR
-1382212096,1382212223,EU
+1382211712,1382212223,EU
1382212224,1382212239,FR
1382212240,1382212607,EU
1382212608,1382212863,FR
@@ -37283,10 +40042,22 @@
1383097088,1383097343,ES
1383097344,1383098111,GB
1383098112,1383098367,DE
-1383098368,1383099135,GB
-1383099136,1383099151,DE
-1383099152,1383099391,GB
-1383099392,1383099903,DE
+1383098368,1383098879,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
+1383099696,1383099711,GB
+1383099712,1383099903,DE
1383099904,1383100415,FR
1383100416,1383100831,GB
1383100832,1383100847,IE
@@ -37301,7 +40072,9 @@
1383104024,1383104255,GB
1383104256,1383104511,FR
1383104512,1383112703,JE
-1383112704,1383120895,GE
+1383112704,1383114751,LB
+1383114752,1383116799,GB
+1383116800,1383120895,RU
1383120896,1383129031,IT
1383129032,1383129039,ES
1383129040,1383129087,IT
@@ -37386,7 +40159,9 @@
1383440384,1383448575,RU
1383448576,1383456767,RS
1383456768,1383464959,UA
-1383464960,1383473151,US
+1383464960,1383469055,BA
+1383469056,1383471103,UA
+1383471104,1383473151,SE
1383473152,1383481343,DE
1383481344,1383481599,GB
1383481600,1383481615,US
@@ -37398,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
@@ -37427,16 +40200,13 @@
1383596032,1384120319,FR
1384120320,1384153087,NG
1384153088,1384185855,FI
-1384185856,1384189055,DE
-1384189056,1384189183,CH
+1384185856,1384189183,DE
1384189184,1384189439,AT
1384189440,1384190463,DE
1384190464,1384190719,NL
1384190720,1384190975,DE
1384190976,1384191231,DK
-1384191232,1384191359,DE
-1384191360,1384191423,AT
-1384191424,1384191999,DE
+1384191232,1384191999,DE
1384192000,1384192191,NL
1384192192,1384192255,DE
1384192256,1384192511,NL
@@ -37501,21 +40271,13 @@
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
-1384795328,1384796351,FR
-1384796352,1384796415,IT
-1384796416,1384799807,FR
+1384795328,1384799807,FR
1384799808,1384799871,CH
-1384799872,1384801023,FR
-1384801024,1384801087,SM
-1384801088,1384802495,FR
-1384802496,1384802559,IT
-1384802560,1384808447,FR
+1384799872,1384808447,FR
1384808448,1384808479,BE
1384808480,1384808735,EU
1384808736,1384808799,BE
@@ -37624,8 +40386,8 @@
1385275392,1385283583,IT
1385283584,1385285631,DE
1385285632,1385287679,GB
-1385287680,1385289727,IS
-1385289728,1385291775,NO
+1385287680,1385291648,IS
+1385291649,1385291775,GB
1385291776,1385299967,TR
1385299968,1385308159,BG
1385308160,1385309439,BE
@@ -37653,6 +40415,7 @@
1385480192,1385488383,NL
1385488384,1385496575,GB
1385496576,1385504767,SI
+1385504768,1385512959,IT
1385512960,1385521151,DE
1385521152,1385529343,AT
1385529344,1385537535,RU
@@ -37683,7 +40446,8 @@
1385564104,1385564111,IE
1385564112,1385564159,EU
1385564160,1385564231,HU
-1385564232,1385564383,EU
+1385564232,1385564239,AT
+1385564240,1385564383,EU
1385564384,1385564671,HU
1385564672,1385565183,EU
1385565184,1385565439,ES
@@ -37701,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
@@ -37711,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
@@ -37779,8 +40542,8 @@
1387790336,1388314623,IT
1388314624,1388322815,AT
1388322816,1388331007,SI
-1388331008,1388338176,NL
-1388338177,1388338178,FR
+1388331008,1388338175,NL
+1388338176,1388338178,FR
1388338179,1388338180,GB
1388338181,1388338182,DE
1388338183,1388338186,NL
@@ -37800,15 +40563,15 @@
1388388960,1388388967,NG
1388388968,1388389151,IT
1388389152,1388389167,NG
-1388389168,1388389447,IT
-1388389448,1388389455,NG
-1388389456,1388389567,IT
+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,1388396543,IT
+1388394496,1388396031,IT
+1388396032,1388396287,NG
+1388396288,1388396543,IT
1388396544,1388404735,LV
1388404736,1388412927,UA
1388412928,1388421119,RU
@@ -37826,11 +40589,11 @@
1388519424,1388527615,NL
1388527616,1388535807,DE
1388535808,1388543999,GB
-1388544000,1388546191,IE
-1388546192,1388546201,GB
-1388546202,1388547583,IE
-1388547584,1388547839,GB
-1388547840,1388547935,IE
+1388544000,1388546066,IE
+1388546067,1388546069,GB
+1388546070,1388546159,IE
+1388546160,1388546167,GB
+1388546168,1388547935,IE
1388547936,1388547951,GB
1388547952,1388552191,IE
1388552192,1388560383,GB
@@ -37858,9 +40621,7 @@
1388587616,1388587631,EU
1388587632,1388588415,GB
1388588416,1388588543,EU
-1388588544,1388588575,US
-1388588576,1388588783,EU
-1388588784,1388588799,US
+1388588544,1388588799,US
1388588800,1388589823,GB
1388589824,1388590079,EU
1388590080,1388590127,FR
@@ -37902,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
@@ -37912,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
@@ -37935,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
@@ -37972,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
@@ -37986,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
@@ -38000,15 +40747,19 @@
1388743088,1388743099,GB
1388743100,1388743343,IE
1388743344,1388743351,GB
-1388743352,1388743443,IE
+1388743352,1388743359,IE
+1388743360,1388743375,GB
+1388743376,1388743443,IE
1388743444,1388743451,GB
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
@@ -38022,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,1388747551,IE
-1388747552,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
@@ -38074,9 +40821,7 @@
1388765184,1388773375,GB
1388773376,1388781567,NO
1388781568,1388789759,ES
-1388789760,1388791519,NL
-1388791520,1388791527,GB
-1388791528,1388794943,NL
+1388789760,1388794943,NL
1388794944,1388794959,GB
1388794960,1388795343,NL
1388795344,1388795359,GB
@@ -38091,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
@@ -38118,23 +40863,17 @@
1389199616,1389199647,IR
1389199648,1389200383,A2
1389200384,1389200639,AE
-1389200640,1389203391,A2
-1389203392,1389203455,IR
-1389203456,1389203487,IQ
-1389203488,1389203519,A2
-1389203520,1389203551,IQ
+1389200640,1389201919,A2
+1389201920,1389202175,AF
+1389202176,1389203551,A2
1389203552,1389203567,LB
-1389203568,1389203583,A2
-1389203584,1389203615,IQ
-1389203616,1389203743,A2
+1389203568,1389203743,A2
1389203744,1389203775,IQ
1389203776,1389203967,A2
1389203968,1389203999,LY
1389204000,1389204223,A2
1389204224,1389204255,IQ
-1389204256,1389204287,A2
-1389204288,1389204303,SA
-1389204304,1389204799,A2
+1389204256,1389204799,A2
1389204800,1389204863,IQ
1389204864,1389204879,A2
1389204880,1389204895,IQ
@@ -38143,46 +40882,35 @@
1389205504,1389205631,A2
1389205632,1389205759,DE
1389205760,1389205791,A2
-1389205792,1389205935,IR
-1389205936,1389205999,A2
-1389206000,1389206015,IR
-1389206016,1389206047,IQ
-1389206048,1389206143,A2
+1389205792,1389205919,IR
+1389205920,1389206143,A2
1389206144,1389206175,LY
1389206176,1389206271,A2
1389206272,1389206656,IR
-1389206657,1389206719,A2
-1389206720,1389206783,IR
+1389206657,1389206783,A2
1389206784,1389207039,DE
-1389207040,1389207295,LB
-1389207296,1389207359,A2
-1389207360,1389207391,SA
+1389207040,1389207391,A2
1389207392,1389207423,IR
1389207424,1389207487,DE
1389207488,1389207519,A2
1389207520,1389207551,IR
-1389207552,1389209087,A2
-1389209088,1389209343,IR
-1389209344,1389209887,A2
+1389207552,1389209887,A2
1389209888,1389209903,IQ
-1389209904,1389210127,A2
-1389210128,1389210207,IQ
-1389210208,1389210223,A2
-1389210224,1389210255,IR
-1389210256,1389210271,A2
+1389209904,1389210143,A2
+1389210144,1389210207,IQ
+1389210208,1389210271,A2
1389210272,1389210303,IQ
-1389210304,1389210335,IR
-1389210336,1389210623,A2
+1389210304,1389210623,A2
1389210624,1389210655,IQ
-1389210656,1389210687,IR
+1389210656,1389210687,A2
1389210688,1389210719,IQ
1389210720,1389210767,A2
1389210768,1389210783,IQ
1389210784,1389210815,A2
-1389210816,1389210879,IQ
-1389210880,1389211135,A2
-1389211136,1389211183,IQ
-1389211184,1389211199,A2
+1389210816,1389210863,IQ
+1389210864,1389211135,A2
+1389211136,1389211151,IQ
+1389211152,1389211199,A2
1389211200,1389211263,IQ
1389211264,1389211343,A2
1389211344,1389211359,LY
@@ -38194,20 +40922,15 @@
1389211520,1389211535,IQ
1389211536,1389211567,A2
1389211568,1389211647,IQ
-1389211648,1389211719,A2
-1389211720,1389211727,IR
-1389211728,1389212159,A2
+1389211648,1389212159,A2
1389212160,1389212415,KW
1389212416,1389212671,A2
1389212672,1389212767,IQ
1389212768,1389212927,A2
1389212928,1389212991,IR
-1389212992,1389213055,A2
-1389213056,1389213087,IR
+1389212992,1389213087,A2
1389213088,1389213119,IQ
-1389213120,1389213183,A2
-1389213184,1389213199,IQ
-1389213200,1389213207,A2
+1389213120,1389213207,A2
1389213208,1389213215,LY
1389213216,1389213311,A2
1389213312,1389213343,LY
@@ -38217,82 +40940,25 @@
1389217792,1389218047,A2
1389218048,1389218303,AE
1389218304,1389219839,AF
-1389219840,1389220095,A2
-1389220096,1389220143,SA
-1389220144,1389220191,A2
+1389219840,1389220191,A2
1389220192,1389220207,IQ
-1389220208,1389220223,IR
-1389220224,1389220479,A2
-1389220480,1389220495,IQ
-1389220496,1389220575,A2
-1389220576,1389220591,IQ
-1389220592,1389220607,A2
-1389220608,1389220639,SA
-1389220640,1389220671,A2
-1389220672,1389220687,IQ
-1389220688,1389220703,SA
-1389220704,1389220735,A2
-1389220736,1389220751,IQ
-1389220752,1389220767,SA
-1389220768,1389220895,A2
-1389220896,1389220927,SA
-1389220928,1389220959,A2
-1389220960,1389220975,IQ
-1389220976,1389221119,A2
-1389221120,1389221631,LY
-1389221632,1389221887,A2
-1389221888,1389222399,SA
-1389222400,1389222495,A2
+1389220208,1389220911,A2
+1389220912,1389220927,SA
+1389220928,1389222495,A2
1389222496,1389222511,SA
1389222512,1389222543,A2
1389222544,1389222559,LY
1389222560,1389222591,SA
-1389222592,1389222607,IQ
-1389222608,1389222687,A2
-1389222688,1389222703,IR
-1389222704,1389222719,SA
-1389222720,1389222751,IQ
-1389222752,1389222799,A2
-1389222800,1389222815,SA
-1389222816,1389222847,A2
-1389222848,1389222879,SA
-1389222880,1389222911,A2
-1389222912,1389223167,SA
-1389223168,1389223175,LY
-1389223176,1389223183,A2
-1389223184,1389223215,SA
-1389223216,1389223231,A2
-1389223232,1389223263,SA
-1389223264,1389223327,IQ
-1389223328,1389223423,A2
-1389223424,1389223471,SA
-1389223472,1389223487,IQ
-1389223488,1389223519,LY
-1389223520,1389223679,A2
+1389222592,1389223679,A2
1389223680,1389224191,DE
-1389224192,1389224447,SA
-1389224448,1389224511,IR
-1389224512,1389224543,A2
-1389224544,1389224559,IR
-1389224560,1389224575,SA
-1389224576,1389225215,A2
-1389225216,1389225471,SA
-1389225472,1389225535,A2
-1389225536,1389225599,IQ
+1389224192,1389225583,A2
+1389225584,1389225599,IQ
1389225600,1389225983,A2
1389225984,1389226239,AE
1389226240,1389226495,A2
1389226496,1389227775,AE
1389227776,1389227791,IQ
-1389227792,1389227839,A2
-1389227840,1389227855,SA
-1389227856,1389228031,A2
-1389228032,1389228047,IQ
-1389228048,1389228063,A2
-1389228064,1389228079,IQ
-1389228080,1389228303,A2
-1389228304,1389228319,IQ
-1389228320,1389228351,A2
+1389227792,1389228351,A2
1389228352,1389228415,AE
1389228416,1389228479,LB
1389228480,1389229055,A2
@@ -38336,7 +41002,7 @@
1389265592,1389265598,CG
1389265599,1389265599,A2
1389265600,1389265639,US
-1389265640,1389265663,SO
+1389265640,1389265663,A2
1389265664,1389265791,ZA
1389265792,1389265807,A2
1389265808,1389265823,CA
@@ -38375,8 +41041,8 @@
1389269160,1389269183,A2
1389269184,1389269215,NG
1389269216,1389269247,A2
-1389269248,1389269376,NG
-1389269377,1389269759,A2
+1389269248,1389269375,NG
+1389269376,1389269759,A2
1389269760,1389269887,CD
1389269888,1389270015,A2
1389270016,1389270079,CD
@@ -38390,8 +41056,7 @@
1389272064,1389272191,NO
1389272192,1389272223,GB
1389272224,1389272319,A2
-1389272320,1389272447,AE
-1389272448,1389272575,GB
+1389272320,1389272575,AE
1389272576,1389272831,A2
1389272832,1389272959,ZA
1389272960,1389273087,FR
@@ -38400,8 +41065,7 @@
1389273600,1389273855,MG
1389273856,1389274111,NG
1389274112,1389274367,A2
-1389274368,1389274383,US
-1389274384,1389274399,SA
+1389274368,1389274399,US
1389274400,1389274431,GH
1389274432,1389274494,US
1389274495,1389274495,A2
@@ -38428,13 +41092,10 @@
1389277952,1389278207,A2
1389278208,1389278463,SN
1389278464,1389278719,MX
-1389278720,1389278847,DE
-1389278848,1389278975,NG
-1389278976,1389279103,MX
-1389279104,1389279231,NG
+1389278720,1389278975,DE
+1389278976,1389279231,MX
1389279232,1389279487,US
-1389279488,1389279615,TZ
-1389279616,1389279743,NG
+1389279488,1389279743,TZ
1389279744,1389279999,LR
1389280000,1389280255,CI
1389280256,1389280511,A2
@@ -38449,38 +41110,33 @@
1389283328,1389283583,LR
1389283584,1389283711,A2
1389283712,1389283839,ZA
-1389283840,1389284351,A2
-1389284352,1389286399,TZ
-1389286400,1389287423,A2
+1389283840,1389287423,A2
1389287424,1389287551,US
1389287552,1389287679,A2
1389287680,1389287935,DK
1389287936,1389288447,US
1389288448,1389289471,GN
-1389289472,1389290495,GB
+1389289472,1389290495,NO
1389290496,1389290751,US
1389290752,1389291007,FR
1389291008,1389291519,A2
-1389291520,1389291855,US
-1389291856,1389292031,A2
+1389291520,1389292031,US
1389292032,1389292799,GH
1389292800,1389293055,MG
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,1389295887,ZA
-1389295888,1389295935,A2
-1389295936,1389295967,SN
-1389295968,1389295999,A2
-1389296000,1389296063,US
+1389295616,1389295871,ZA
+1389295872,1389296063,US
1389296064,1389296383,A2
1389296384,1389296447,AD
1389296448,1389296639,A2
-1389296640,1389297408,US
-1389297409,1389297663,A2
+1389296640,1389297151,TZ
+1389297152,1389297663,A2
1389297664,1389330431,UA
1389330432,1389363199,DE
1389363200,1389379583,CZ
@@ -38518,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
@@ -38530,13 +41184,17 @@
1389562368,1389563135,IT
1389563136,1389563391,DE
1389563392,1389563647,IT
-1389563648,1389563903,DE
+1389563648,1389563903,US
1389563904,1389564159,IT
1389564160,1389564415,DE
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
@@ -38618,6 +41276,7 @@
1398886400,1398888447,CH
1398888448,1398890495,GB
1398890496,1398892543,DK
+1398892544,1398894591,RU
1398894592,1398896639,DE
1398896640,1398898687,CH
1398898688,1398931455,ES
@@ -38637,7 +41296,7 @@
1398972416,1398972671,IE
1398972672,1398973695,NL
1398973696,1398973951,AT
-1398973952,1398974207,IE
+1398973952,1398974207,US
1398974208,1398979327,NL
1398979328,1398979583,US
1398979584,1398979839,GB
@@ -38670,18 +41329,18 @@
1399848960,1400111103,FR
1400111104,1400373247,NL
1400373248,1400705279,DE
-1400705280,1400706047,EU
-1400706048,1400708095,DE
-1400708096,1400709119,EU
-1400709120,1400710143,DE
-1400710144,1400710399,EU
+1400705280,1400705791,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
@@ -38705,7 +41364,9 @@
1401264128,1401264903,DE
1401264904,1401265151,EU
1401265152,1401265919,DE
-1401265920,1401266175,EU
+1401265920,1401265951,EU
+1401265952,1401265983,DE
+1401265984,1401266175,EU
1401266176,1401273599,DE
1401273600,1401273727,EU
1401273728,1401274367,DE
@@ -38790,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
@@ -38807,45 +41475,100 @@
1401667584,1401683967,IT
1401683968,1401684067,SE
1401684068,1401684071,NO
-1401684072,1401684479,SE
+1401684072,1401684075,DE
+1401684076,1401684479,SE
1401684480,1401684511,DK
-1401684512,1401684543,SE
+1401684512,1401684515,DE
+1401684516,1401684543,SE
1401684544,1401684607,DK
1401684608,1401684671,SE
1401684672,1401684703,DK
1401684704,1401684731,SE
1401684732,1401684735,DK
1401684736,1401684755,NO
-1401684756,1401684767,SE
+1401684756,1401684759,SE
+1401684760,1401684763,DE
+1401684764,1401684767,SE
1401684768,1401684895,NO
-1401684896,1401686015,SE
+1401684896,1401684995,SE
+1401684996,1401684999,DE
+1401685000,1401686015,SE
1401686016,1401686059,GB
-1401686060,1401686063,SE
+1401686060,1401686063,DE
1401686064,1401686143,GB
1401686144,1401686223,SE
1401686224,1401686271,GB
1401686272,1401686287,NL
-1401686288,1401686335,SE
+1401686288,1401686291,DE
+1401686292,1401686335,SE
1401686336,1401686399,NL
1401686400,1401686911,SE
1401686912,1401686927,DE
-1401686928,1401691519,SE
+1401686928,1401686943,SE
+1401686944,1401686947,DE
+1401686948,1401691519,SE
1401691520,1401691535,DE
1401691536,1401695263,SE
1401695264,1401695267,GB
1401695268,1401695271,SE
1401695272,1401695275,GB
-1401695276,1401697815,SE
+1401695276,1401695279,DE
+1401695280,1401697815,SE
1401697816,1401697823,DE
1401697824,1401698223,SE
1401698224,1401698227,GB
-1401698228,1401708543,SE
+1401698228,1401698231,DE
+1401698232,1401703951,SE
+1401703952,1401703955,DE
+1401703956,1401704511,SE
+1401704512,1401704515,DE
+1401704516,1401705983,SE
+1401705984,1401705987,DE
+1401705988,1401708287,SE
+1401708288,1401708543,DE
1401708544,1401709055,FR
1401709056,1401709311,SE
1401709312,1401709567,GB
-1401709568,1401714047,SE
+1401709568,1401711615,SE
+1401711616,1401711647,GB
+1401711648,1401711679,DE
+1401711680,1401711711,NL
+1401711712,1401711743,ES
+1401711744,1401711775,DK
+1401711776,1401711807,IT
+1401711808,1401711839,US
+1401711840,1401711871,NL
+1401711872,1401711903,GB
+1401711904,1401711935,DE
+1401711936,1401711967,NL
+1401711968,1401711999,ES
+1401712000,1401712031,DK
+1401712032,1401712063,CH
+1401712064,1401712095,FR
+1401712096,1401712127,NL
+1401712128,1401712159,GB
+1401712160,1401712191,DE
+1401712192,1401712223,SE
+1401712224,1401712255,ES
+1401712256,1401712287,DK
+1401712288,1401712319,SE
+1401712320,1401712351,IT
+1401712352,1401712383,DE
+1401712384,1401712415,GB
+1401712416,1401712447,DE
+1401712448,1401712479,NL
+1401712480,1401712511,ES
+1401712512,1401712543,SE
+1401712544,1401712575,US
+1401712576,1401712607,GB
+1401712608,1401712639,NL
+1401712640,1401712895,SE
+1401712896,1401713151,DE
+1401713152,1401714047,SE
1401714048,1401714063,FR
-1401714064,1401715455,SE
+1401714064,1401715403,SE
+1401715404,1401715407,DE
+1401715408,1401715455,SE
1401715456,1401715459,US
1401715460,1401717759,SE
1401717760,1401718015,NL
@@ -38854,7 +41577,10 @@
1401719952,1401719955,GB
1401719956,1401719959,SE
1401719960,1401719963,GB
-1401719964,1401727743,SE
+1401719964,1401719967,DE
+1401719968,1401726783,SE
+1401726784,1401726787,DE
+1401726788,1401727743,SE
1401727744,1401727999,GB
1401728000,1401728335,SE
1401728336,1401728351,NL
@@ -38891,7 +41617,9 @@
1401745984,1401745999,NL
1401746000,1401746015,ES
1401746016,1401746019,GB
-1401746020,1401746175,SE
+1401746020,1401746023,SE
+1401746024,1401746027,DE
+1401746028,1401746175,SE
1401746176,1401746191,DK
1401746192,1401746215,SE
1401746216,1401746223,BG
@@ -38901,7 +41629,8 @@
1401746272,1401746279,GB
1401746280,1401746283,SE
1401746284,1401746287,US
-1401746288,1401746431,SE
+1401746288,1401746291,DE
+1401746292,1401746431,SE
1401746432,1401746447,NL
1401746448,1401746467,SE
1401746468,1401746471,NL
@@ -38910,12 +41639,15 @@
1401746488,1401746495,SE
1401746496,1401746511,NL
1401746512,1401746527,ES
-1401746528,1401746623,SE
+1401746528,1401746531,DE
+1401746532,1401746623,SE
1401746624,1401746639,DE
1401746640,1401746655,SE
1401746656,1401746687,IE
1401746688,1401746703,NO
-1401746704,1401746751,SE
+1401746704,1401746719,SE
+1401746720,1401746723,DE
+1401746724,1401746751,SE
1401746752,1401746767,NL
1401746768,1401746783,ES
1401746784,1401746879,SE
@@ -38925,22 +41657,27 @@
1401746960,1401747007,SE
1401747008,1401747023,NL
1401747024,1401747039,ES
-1401747040,1401747135,SE
+1401747040,1401747043,DE
+1401747044,1401747135,SE
1401747136,1401747151,DE
1401747152,1401747199,SE
1401747200,1401747215,IT
1401747216,1401747235,SE
1401747236,1401747239,US
-1401747240,1401747279,SE
-1401747280,1401747295,ES
-1401747296,1401747391,SE
+1401747240,1401747243,DE
+1401747244,1401747247,SE
+1401747248,1401747263,ES
+1401747264,1401747391,SE
1401747392,1401747407,DE
1401747408,1401747423,GB
-1401747424,1401747487,SE
+1401747424,1401747439,ES
+1401747440,1401747487,SE
1401747488,1401747495,DK
1401747496,1401747499,SE
1401747500,1401747503,GB
-1401747504,1401747647,SE
+1401747504,1401747583,SE
+1401747584,1401747587,DE
+1401747588,1401747647,SE
1401747648,1401747663,DE
1401747664,1401747711,SE
1401747712,1401747967,FR
@@ -39010,7 +41747,7 @@
1401927680,1401929727,NL
1401929728,1401931775,RU
1401931776,1401933823,UA
-1401933824,1401935871,PL
+1401933824,1401935871,DE
1401935872,1401937919,FI
1401937920,1401939967,GB
1401939968,1401942015,UA
@@ -39099,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
@@ -39116,9 +41855,13 @@
1403574784,1403575039,IT
1403575040,1403576063,SE
1403576064,1403576319,DE
-1403576320,1403580159,SE
+1403576320,1403578879,SE
+1403578880,1403579135,DK
+1403579136,1403580159,SE
1403580160,1403580415,GB
-1403580416,1403584511,SE
+1403580416,1403581951,SE
+1403581952,1403582207,US
+1403582208,1403584511,SE
1403584512,1403600895,DE
1403600896,1403601519,FR
1403601520,1403601535,MC
@@ -39219,9 +41962,8 @@
1403994112,1404010495,AT
1404010496,1404026879,PL
1404026880,1404043263,ES
-1404043264,1404045311,EE
-1404045312,1404051455,SE
-1404051456,1404059647,KZ
+1404043264,1404051455,EE
+1404051456,1404059647,HR
1404059648,1404076031,NO
1404076032,1404084223,DE
1404084224,1404092415,NO
@@ -39244,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
@@ -39308,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
@@ -39390,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
@@ -39418,7 +42185,8 @@
1406964928,1406967295,DE
1406967296,1406967327,GB
1406967328,1406967343,NL
-1406967344,1406967807,DE
+1406967344,1406967359,GB
+1406967360,1406967807,DE
1406967808,1406975999,RU
1406976000,1406984191,IE
1406984192,1407000575,RU
@@ -39443,11 +42211,21 @@
1407123456,1407131647,SE
1407131648,1407139839,NL
1407139840,1407148031,DE
-1407148032,1407152263,GB
+1407148032,1407148295,GB
+1407148296,1407148303,SE
+1407148304,1407149695,GB
+1407149696,1407149759,CY
+1407149760,1407149791,SE
+1407149792,1407151615,GB
+1407151616,1407151871,SE
+1407151872,1407152259,GB
+1407152260,1407152263,IE
1407152264,1407152287,US
1407152288,1407152903,GB
1407152904,1407152927,NL
-1407152928,1407154711,GB
+1407152928,1407154623,GB
+1407154624,1407154631,SE
+1407154632,1407154711,GB
1407154712,1407154719,SE
1407154720,1407156223,GB
1407156224,1407164415,LV
@@ -39466,8 +42244,7 @@
1407516728,1407516735,NG
1407516736,1407516743,UG
1407516744,1407516751,LR
-1407516752,1407516759,SL
-1407516760,1407516767,A2
+1407516752,1407516767,A2
1407516768,1407516775,AO
1407516776,1407516783,A2
1407516784,1407516791,NG
@@ -39480,10 +42257,13 @@
1407516872,1407516879,A2
1407516880,1407516895,NG
1407516896,1407516911,A2
-1407516912,1407516951,NG
+1407516912,1407516927,NG
+1407516928,1407516935,A2
+1407516936,1407516951,NG
1407516952,1407516959,A2
1407516960,1407516967,NG
-1407516968,1407516983,A2
+1407516968,1407516975,A2
+1407516976,1407516983,GN
1407516984,1407516991,KE
1407516992,1407516999,CD
1407517000,1407517023,A2
@@ -39491,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
@@ -39499,9 +42281,8 @@
1407517184,1407517311,GB
1407517312,1407517383,A2
1407517384,1407517391,CD
-1407517392,1407517415,A2
-1407517416,1407517423,NG
-1407517424,1407517431,ZW
+1407517392,1407517423,A2
+1407517424,1407517431,US
1407517432,1407517439,NG
1407517440,1407517695,A2
1407517696,1407517887,NG
@@ -39524,9 +42305,9 @@
1407518176,1407518183,A2
1407518184,1407518199,NG
1407518200,1407518207,AE
-1407518208,1407518215,ZW
-1407518216,1407518239,A2
-1407518240,1407518255,NG
+1407518208,1407518215,LR
+1407518216,1407518231,A2
+1407518232,1407518255,NG
1407518256,1407518263,CD
1407518264,1407518269,GH
1407518270,1407518335,A2
@@ -39535,10 +42316,8 @@
1407518352,1407518359,A2
1407518360,1407518367,NG
1407518368,1407518375,ZA
-1407518376,1407518383,CD
-1407518384,1407518391,A2
-1407518392,1407518399,CD
-1407518400,1407518831,A2
+1407518376,1407518383,AO
+1407518384,1407518831,A2
1407518832,1407518847,NG
1407518848,1407518911,FR
1407518912,1407518943,NG
@@ -39565,7 +42344,7 @@
1407519160,1407519167,AO
1407519168,1407519175,A2
1407519176,1407519183,SL
-1407519184,1407519191,UG
+1407519184,1407519191,A2
1407519192,1407519199,CD
1407519200,1407519207,A2
1407519208,1407519215,TG
@@ -39576,8 +42355,8 @@
1407519752,1407519759,NG
1407519760,1407519767,CD
1407519768,1407519775,GN
-1407519776,1407519783,A2
-1407519784,1407519791,IQ
+1407519776,1407519783,CG
+1407519784,1407519791,A2
1407519792,1407519799,NG
1407519800,1407519815,A2
1407519816,1407519823,NG
@@ -39590,14 +42369,16 @@
1407519872,1407519879,IL
1407519880,1407519887,NG
1407519888,1407519895,CD
-1407519896,1407519903,GN
+1407519896,1407519903,A2
1407519904,1407519911,NG
-1407519912,1407519919,GN
-1407519920,1407519959,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
@@ -39610,7 +42391,7 @@
1407520112,1407520119,A2
1407520120,1407520127,NE
1407520128,1407520135,GN
-1407520136,1407520143,A2
+1407520136,1407520143,CD
1407520144,1407520151,GN
1407520152,1407520152,A2
1407520153,1407520159,GN
@@ -39620,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
@@ -39635,8 +42418,8 @@
1407520424,1407520439,A2
1407520440,1407520447,CD
1407520448,1407520463,NG
-1407520464,1407520519,A2
-1407520520,1407520527,CD
+1407520464,1407520511,A2
+1407520512,1407520527,CD
1407520528,1407520543,NG
1407520544,1407520551,A2
1407520552,1407520559,NG
@@ -39647,25 +42430,25 @@
1407520600,1407520607,A2
1407520608,1407520615,AO
1407520616,1407520623,A2
-1407520624,1407520655,NG
+1407520624,1407520647,NG
+1407520648,1407520655,ML
1407520656,1407520663,GA
1407520664,1407520687,A2
1407520688,1407520695,NG
1407520696,1407520711,A2
1407520712,1407520719,NG
-1407520720,1407520727,A2
-1407520728,1407520735,AO
+1407520720,1407520735,A2
1407520736,1407520743,LR
1407520744,1407520751,NG
-1407520752,1407520759,A2
+1407520752,1407520759,BF
1407520760,1407520767,CD
1407520768,1407520775,TZ
-1407520776,1407520783,CD
+1407520776,1407520783,A2
1407520784,1407520791,SD
1407520792,1407520799,ZA
1407520800,1407520807,A2
1407520808,1407520815,MU
-1407520816,1407520823,A2
+1407520816,1407520823,ZW
1407520824,1407520831,CI
1407520832,1407520839,SO
1407520840,1407520847,A2
@@ -39700,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
@@ -39718,17 +42501,27 @@
1407521416,1407521423,LR
1407521424,1407521535,A2
1407521536,1407521709,NG
-1407521710,1407522319,A2
+1407521710,1407521711,A2
+1407521712,1407521727,NG
+1407521728,1407521735,A2
+1407521736,1407521751,NG
+1407521752,1407521759,A2
+1407521760,1407521767,NG
+1407521768,1407521783,A2
+1407521784,1407521791,NG
+1407521792,1407522319,A2
1407522320,1407522327,TG
1407522328,1407522335,A2
1407522336,1407522351,SO
1407522352,1407522359,CD
-1407522360,1407522367,FR
-1407522368,1407522383,GQ
-1407522384,1407522391,A2
+1407522360,1407522367,A2
+1407522368,1407522375,GQ
+1407522376,1407522391,A2
1407522392,1407522407,NG
1407522408,1407522415,ZW
-1407522416,1407522439,A2
+1407522416,1407522423,SD
+1407522424,1407522431,A2
+1407522432,1407522439,ZM
1407522440,1407522455,UG
1407522456,1407522463,ML
1407522464,1407522471,A2
@@ -39737,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
@@ -39749,16 +42541,14 @@
1407522592,1407522599,UG
1407522600,1407522607,ZM
1407522608,1407522615,AO
-1407522616,1407522623,A2
-1407522624,1407522631,NG
+1407522616,1407522631,A2
1407522632,1407522639,MW
1407522640,1407522647,GQ
1407522648,1407522655,NG
-1407522656,1407522663,CI
-1407522664,1407522671,A2
+1407522656,1407522671,A2
1407522672,1407522679,ZM
-1407522680,1407522687,IQ
-1407522688,1407522695,NG
+1407522680,1407522687,SD
+1407522688,1407522695,A2
1407522696,1407522703,GL
1407522704,1407522711,NG
1407522712,1407522719,BJ
@@ -39768,7 +42558,8 @@
1407522744,1407522751,NG
1407522752,1407522767,ZM
1407522768,1407522775,A2
-1407522776,1407522791,NG
+1407522776,1407522783,TD
+1407522784,1407522791,ZW
1407522792,1407522799,A2
1407522800,1407522807,NG
1407522808,1407522815,A2
@@ -39780,23 +42571,29 @@
1407522856,1407522863,ZW
1407522864,1407522871,TZ
1407522872,1407522879,IQ
-1407522880,1407522895,A2
+1407522880,1407522887,MU
+1407522888,1407522895,A2
1407522896,1407522903,UG
1407522904,1407522911,KE
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,1407522991,A2
+1407522976,1407522983,CD
+1407522984,1407522991,A2
1407522992,1407522999,CD
-1407523000,1407523007,A2
-1407523008,1407523015,NG
+1407523000,1407523015,A2
1407523016,1407523023,KE
-1407523024,1407523079,A2
-1407523080,1407523088,NG
+1407523024,1407523031,MU
+1407523032,1407523047,A2
+1407523048,1407523055,NG
+1407523056,1407523063,MU
+1407523064,1407523071,A2
+1407523072,1407523079,CD
+1407523080,1407523087,A2
+1407523088,1407523088,NG
1407523089,1407523103,A2
1407523104,1407523111,UG
1407523112,1407523119,ZW
@@ -39808,15 +42605,15 @@
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
1407523248,1407523255,A2
-1407523256,1407523271,NG
+1407523256,1407523263,NG
+1407523264,1407523271,A2
1407523272,1407523279,US
-1407523280,1407523287,MZ
+1407523280,1407523287,ZW
1407523288,1407523295,NG
1407523296,1407523303,GR
1407523304,1407523311,NG
@@ -39824,33 +42621,50 @@
1407523328,1407523335,MW
1407523336,1407523351,A2
1407523352,1407523359,LU
-1407523360,1407523367,ZW
-1407523368,1407523391,A2
-1407523392,1407523455,ZW
-1407523456,1407523519,MW
+1407523360,1407523455,A2
+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
1407523584,1407523591,IQ
-1407523592,1407523839,A2
-1407523840,1407524351,MW
+1407523592,1407523607,A2
+1407523608,1407523615,IQ
+1407523616,1407523623,A2
+1407523624,1407523655,IQ
+1407523656,1407523663,A2
+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,CM
+1407524616,1407524623,CD
1407524624,1407524631,ZA
1407524632,1407524639,NG
1407524640,1407524647,KE
1407524648,1407524655,CD
-1407524656,1407524663,NG
+1407524656,1407524663,ZW
1407524664,1407524671,CD
1407524672,1407524679,A2
1407524680,1407524687,LR
1407524688,1407524703,MZ
-1407524704,1407524727,A2
+1407524704,1407524711,A2
+1407524712,1407524719,ZW
+1407524720,1407524727,A2
1407524728,1407524735,NG
-1407524736,1407524759,A2
+1407524736,1407524743,A2
+1407524744,1407524751,ZW
+1407524752,1407524759,A2
1407524760,1407524767,CM
1407524768,1407524775,BW
1407524776,1407524783,A2
@@ -39860,13 +42674,17 @@
1407524840,1407524847,LR
1407524848,1407524855,A2
1407524856,1407524863,CD
-1407524864,1407524887,A2
+1407524864,1407524879,A2
+1407524880,1407524887,ZW
1407524888,1407524895,TZ
1407524896,1407524903,LR
-1407524904,1407524935,A2
+1407524904,1407524911,A2
+1407524912,1407524919,ZW
+1407524920,1407524927,ZA
+1407524928,1407524935,A2
1407524936,1407524943,GR
-1407524944,1407524951,A2
-1407524952,1407524959,CM
+1407524944,1407524951,ZW
+1407524952,1407524959,UG
1407524960,1407524967,TZ
1407524968,1407524975,NG
1407524976,1407524983,CD
@@ -39874,17 +42692,17 @@
1407524992,1407524999,TZ
1407525000,1407525007,A2
1407525008,1407525015,TZ
-1407525016,1407525023,BI
+1407525016,1407525023,UG
1407525024,1407525031,NG
1407525032,1407525039,IL
1407525040,1407525047,ZA
1407525048,1407525055,NG
1407525056,1407525063,ZA
-1407525064,1407525071,A2
-1407525072,1407525079,NG
+1407525064,1407525071,SO
+1407525072,1407525079,CD
1407525080,1407525087,A2
1407525088,1407525095,MW
-1407525096,1407525103,A2
+1407525096,1407525103,ZW
1407525104,1407525111,NG
1407525112,1407525119,ZA
1407525120,1407525127,A2
@@ -39915,17 +42733,38 @@
1407525432,1407525471,A2
1407525472,1407525479,UG
1407525480,1407525487,CD
-1407525488,1407525543,A2
+1407525488,1407525503,A2
+1407525504,1407525511,UG
+1407525512,1407525543,A2
1407525544,1407525551,KE
-1407525552,1407526711,A2
+1407525552,1407525559,VG
+1407525560,1407525567,A2
+1407525568,1407525575,CD
+1407525576,1407525583,LR
+1407525584,1407525607,A2
+1407525608,1407525615,CD
+1407525616,1407525623,A2
+1407525624,1407525631,SO
+1407525632,1407525639,A2
+1407525640,1407525679,IQ
+1407525680,1407525695,A2
+1407525696,1407525703,IQ
+1407525704,1407525719,A2
+1407525720,1407525727,IQ
+1407525728,1407525751,A2
+1407525752,1407525759,IQ
+1407525760,1407525775,A2
+1407525776,1407525783,IQ
+1407525784,1407526711,A2
1407526712,1407526719,GN
-1407526720,1407529023,A2
+1407526720,1407528959,A2
+1407528960,1407528991,SO
+1407528992,1407529023,A2
1407529024,1407529087,NG
-1407529088,1407529103,A2
-1407529104,1407529111,NG
-1407529112,1407529143,A2
-1407529144,1407529151,ZW
-1407529152,1407529175,A2
+1407529088,1407529095,SO
+1407529096,1407529103,A2
+1407529104,1407529111,SO
+1407529112,1407529175,A2
1407529176,1407529183,SO
1407529184,1407529191,NG
1407529192,1407529207,A2
@@ -39936,28 +42775,28 @@
1407531552,1407531559,SD
1407531560,1407531567,A2
1407531568,1407531575,CD
-1407531576,1407531583,A2
+1407531576,1407531583,GQ
1407531584,1407531591,CD
1407531592,1407531599,A2
-1407531600,1407531607,NG
-1407531608,1407531631,CD
+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
-1407531712,1407531719,A2
-1407531720,1407531735,CD
+1407531704,1407531711,SD
+1407531712,1407531735,CD
1407531736,1407531743,ZW
1407531744,1407531751,A2
1407531752,1407531759,GQ
1407531760,1407531767,ZW
1407531768,1407531775,SD
1407531776,1407532543,A2
-1407532544,1407532551,UG
+1407532544,1407532551,SO
1407532552,1407532559,AO
1407532560,1407532583,A2
1407532584,1407532591,ZW
@@ -39973,13 +42812,13 @@
1407533056,1407533311,NG
1407533312,1407533327,AO
1407533328,1407533343,A2
-1407533344,1407533359,NG
-1407533360,1407533375,A2
+1407533344,1407533375,NG
1407533376,1407533407,CD
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
@@ -39989,16 +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,1407534079,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
@@ -40025,8 +42866,7 @@
1407535632,1407535639,SD
1407535640,1407535647,CD
1407535648,1407535655,NG
-1407535656,1407535663,GB
-1407535664,1407535671,A2
+1407535656,1407535671,A2
1407535672,1407535679,SD
1407535680,1407535687,GN
1407535688,1407535695,A2
@@ -40035,16 +42875,15 @@
1407535712,1407535719,GB
1407535720,1407535735,A2
1407535736,1407535743,NG
-1407535744,1407535751,SD
+1407535744,1407535751,A2
1407535752,1407535759,GB
-1407535760,1407535775,A2
-1407535776,1407535783,GN
-1407535784,1407535815,A2
+1407535760,1407535799,A2
+1407535800,1407535807,NG
+1407535808,1407535815,A2
1407535816,1407535823,NG
-1407535824,1407535831,GB
-1407535832,1407535847,A2
+1407535824,1407535847,A2
1407535848,1407535855,CD
-1407535856,1407535863,SD
+1407535856,1407535863,GB
1407535864,1407536127,A2
1407536128,1407536639,GA
1407536640,1407536895,CD
@@ -40076,21 +42915,20 @@
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,1407537399,A2
-1407537400,1407537407,BF
-1407537408,1407537415,A2
-1407537416,1407537423,GH
-1407537424,1407537431,A2
-1407537432,1407537447,NG
+1407537384,1407537431,A2
+1407537432,1407537439,NG
+1407537440,1407537447,LR
1407537448,1407537455,UG
1407537456,1407537463,AO
1407537464,1407537479,A2
@@ -40100,14 +42938,12 @@
1407537512,1407537519,LR
1407537520,1407537543,A2
1407537544,1407537551,AO
-1407537552,1407537559,A2
-1407537560,1407537567,NG
-1407537568,1407537575,A2
-1407537576,1407537599,NG
-1407537600,1407537607,A2
+1407537552,1407537575,A2
+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
@@ -40118,8 +42954,7 @@
1407537856,1407537863,NG
1407537864,1407537871,TG
1407537872,1407537879,IQ
-1407537880,1407537895,A2
-1407537896,1407537903,IQ
+1407537880,1407537903,A2
1407537904,1407537911,TG
1407537912,1407537927,A2
1407537928,1407537935,SL
@@ -40130,18 +42965,18 @@
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
-1407538096,1407538103,CD
-1407538104,1407538111,A2
+1407538096,1407538111,A2
1407538112,1407538119,LR
1407538120,1407538127,NG
1407538128,1407538143,A2
@@ -40206,25 +43041,26 @@
1407539736,1407539743,NG
1407539744,1407539751,A2
1407539752,1407539759,NG
-1407539760,1407539767,GH
+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,1407539967,A2
+1407539952,1407539959,LR
+1407539960,1407539967,A2
1407539968,1407539975,CD
1407539976,1407540055,A2
1407540056,1407540063,NG
@@ -40238,7 +43074,68 @@
1407540160,1407540167,CD
1407540168,1407540199,A2
1407540200,1407540215,CD
-1407540216,1407541471,A2
+1407540216,1407540223,A2
+1407540224,1407540231,AO
+1407540232,1407540247,NG
+1407540248,1407540255,A2
+1407540256,1407540263,CD
+1407540264,1407540271,A2
+1407540272,1407540279,LR
+1407540280,1407540287,NG
+1407540288,1407540295,CD
+1407540296,1407540303,NG
+1407540304,1407540311,AO
+1407540312,1407540319,A2
+1407540320,1407540327,CD
+1407540328,1407540343,A2
+1407540344,1407540351,CF
+1407540352,1407540359,TD
+1407540360,1407540367,A2
+1407540368,1407540375,LR
+1407540376,1407540383,A2
+1407540384,1407540391,NG
+1407540392,1407540415,A2
+1407540416,1407540423,NG
+1407540424,1407540431,A2
+1407540432,1407540439,CI
+1407540440,1407540447,A2
+1407540448,1407540455,LR
+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,1407540567,CD
+1407540568,1407540591,A2
+1407540592,1407540599,GN
+1407540600,1407540607,A2
+1407540608,1407540615,CD
+1407540616,1407540623,SD
+1407540624,1407540655,A2
+1407540656,1407540663,CD
+1407540664,1407540695,A2
+1407540696,1407540703,NG
+1407540704,1407540767,A2
+1407540768,1407540775,NG
+1407540776,1407540991,A2
+1407540992,1407540999,CD
+1407541000,1407541023,A2
+1407541024,1407541031,LR
+1407541032,1407541039,NG
+1407541040,1407541047,A2
+1407541048,1407541055,NG
+1407541056,1407541063,A2
+1407541064,1407541071,NG
+1407541072,1407541095,A2
+1407541096,1407541103,GQ
+1407541104,1407541175,A2
+1407541176,1407541183,NG
+1407541184,1407541191,A2
+1407541192,1407541199,NG
+1407541200,1407541471,A2
1407541472,1407541495,NG
1407541496,1407541535,A2
1407541536,1407541543,CM
@@ -40275,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
@@ -40290,22 +43187,32 @@
1407543280,1407543287,NG
1407543288,1407545855,A2
1407545856,1407545863,CI
-1407545864,1407545895,A2
+1407545864,1407545871,A2
+1407545872,1407545879,CD
+1407545880,1407545887,A2
+1407545888,1407545895,NG
1407545896,1407545903,CD
-1407545904,1407545951,A2
-1407545952,1407545959,NG
+1407545904,1407545911,A2
+1407545912,1407545927,NG
+1407545928,1407545935,A2
+1407545936,1407545943,ZA
+1407545944,1407545951,A2
+1407545952,1407545959,BJ
1407545960,1407545967,A2
1407545968,1407545975,GQ
-1407545976,1407545983,A2
-1407545984,1407545991,MU
-1407545992,1407546367,A2
+1407545976,1407545991,A2
+1407545992,1407545999,GN
+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
@@ -40318,8 +43225,7 @@
1407547240,1407547255,SL
1407547256,1407547263,A2
1407547264,1407547271,SL
-1407547272,1407547279,NG
-1407547280,1407547303,A2
+1407547272,1407547303,A2
1407547304,1407547311,SL
1407547312,1407547327,NG
1407547328,1407547335,A2
@@ -40342,38 +43248,44 @@
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,1407548927,A2
-1407548928,1407548943,NG
-1407548944,1407548967,A2
+1407548720,1407548767,A2
+1407548768,1407548775,CD
+1407548776,1407548927,A2
+1407548928,1407548959,NG
+1407548960,1407548967,A2
1407548968,1407548975,CM
-1407548976,1407548983,NG
+1407548976,1407548983,A2
1407548984,1407548991,CD
1407548992,1407549039,A2
1407549040,1407549047,NG
1407549048,1407549055,A2
1407549056,1407549063,NG
-1407549064,1407549071,A2
+1407549064,1407549071,GA
1407549072,1407549079,NG
-1407549080,1407549127,A2
-1407549128,1407549135,NG
-1407549136,1407549183,A2
-1407549184,1407549439,GE
+1407549080,1407549087,A2
+1407549088,1407549095,LR
+1407549096,1407549119,A2
+1407549120,1407549127,LR
+1407549128,1407549143,A2
+1407549144,1407549159,LR
+1407549160,1407549167,A2
+1407549168,1407549183,NG
+1407549184,1407549439,A2
1407549440,1407582207,RU
1407582208,1407614975,PL
1407614976,1407680511,ES
-1407680512,1407680591,FR
-1407680592,1407680607,GB
-1407680608,1407680639,FR
-1407680640,1407681023,GB
-1407681024,1407681087,ES
-1407681088,1407681279,GB
-1407681280,1407681291,ES
+1407680512,1407680695,FR
+1407680696,1407680703,GB
+1407680704,1407680831,FR
+1407680832,1407681023,GB
+1407681024,1407681291,ES
1407681292,1407681295,GB
-1407681296,1407681503,ES
-1407681504,1407681535,GB
+1407681296,1407681535,ES
1407681536,1407681639,FR
1407681640,1407681983,GB
1407681984,1407681999,ES
@@ -40383,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
@@ -40405,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
@@ -40431,8 +43345,14 @@
1407712208,1407712223,FR
1407712224,1407712767,GB
1407712768,1407712831,DE
-1407712832,1407712887,GB
-1407712888,1407713279,DE
+1407712832,1407712895,GB
+1407712896,1407712911,DE
+1407712912,1407712919,GB
+1407712920,1407712959,DE
+1407712960,1407712975,GB
+1407712976,1407713239,DE
+1407713240,1407713247,GB
+1407713248,1407713279,DE
1407713280,1407778815,NL
1407778816,1407844351,SE
1407844352,1407909887,RU
@@ -40527,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
@@ -40545,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
@@ -40625,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
@@ -40705,14 +43615,9 @@
1410036992,1410037247,LB
1410037248,1410037759,A2
1410037760,1410038015,US
-1410038016,1410039807,A2
-1410039808,1410041855,AE
-1410041856,1410042815,A2
+1410038016,1410042815,A2
1410042816,1410042831,US
-1410042832,1410043903,A2
-1410043904,1410044415,JO
-1410044416,1410044927,A2
-1410044928,1410045183,VG
+1410042832,1410045183,A2
1410045184,1410045439,IQ
1410045440,1410045695,LB
1410045696,1410071815,A2
@@ -40728,9 +43633,7 @@
1410212864,1410213119,GB
1410213120,1410234839,FR
1410234840,1410234847,A2
-1410234848,1410250551,FR
-1410250552,1410250559,GB
-1410250560,1410258527,FR
+1410234848,1410258527,FR
1410258528,1410258535,ES
1410258536,1410261007,FR
1410261008,1410261015,GB
@@ -40747,7 +43650,9 @@
1410267056,1410267071,GB
1410267072,1410267087,IT
1410267088,1410269183,FR
-1410269184,1410318335,LT
+1410269184,1410278399,LT
+1410278400,1410278655,LV
+1410278656,1410318335,LT
1410318336,1410319359,LV
1410319360,1410334719,LT
1410334720,1410341887,ES
@@ -40791,9 +43696,7 @@
1410514944,1410523135,GB
1410523136,1410531327,PT
1410531328,1410539519,DE
-1410539520,1410542591,GB
-1410542592,1410543103,IE
-1410543104,1410544415,GB
+1410539520,1410544415,GB
1410544416,1410544431,DE
1410544432,1410544447,FR
1410544448,1410547711,GB
@@ -40807,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
@@ -40821,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
@@ -40843,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
@@ -40865,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
@@ -40900,7 +43966,9 @@
1410753352,1410753367,AQ
1410753368,1410753391,DE
1410753392,1410753399,NL
-1410753400,1410754831,AQ
+1410753400,1410754623,AQ
+1410754624,1410754631,CN
+1410754632,1410754831,AQ
1410754832,1410754855,DE
1410754856,1410754859,AQ
1410754860,1410754867,DE
@@ -40909,14 +43977,12 @@
1410755064,1410755067,AQ
1410755068,1410755071,DE
1410755072,1410755327,AQ
-1410755328,1410756607,DE
-1410756608,1410756735,AQ
-1410756736,1410756863,DE
-1410756864,1410757119,AQ
-1410757120,1410758655,DE
-1410758656,1410759679,AQ
-1410759680,1410760455,DE
-1410760456,1410760471,AQ
+1410755328,1410755583,DE
+1410755584,1410760191,AQ
+1410760192,1410760447,DE
+1410760448,1410760455,CN
+1410760456,1410760463,BS
+1410760464,1410760471,AQ
1410760472,1410760487,DE
1410760488,1410760503,AQ
1410760504,1410760703,DE
@@ -41031,27 +44097,33 @@
1411919872,1411923967,DE
1411923968,1411940351,BG
1411940352,1411973119,PL
-1411973120,1411999743,SI
-1411999744,1411999783,BA
-1411999784,1411999791,SI
-1411999792,1411999799,BA
-1411999800,1411999807,SI
+1411973120,1411999751,SI
+1411999752,1411999791,BA
+1411999792,1411999807,SI
1411999808,1411999847,BA
1411999848,1411999871,SI
-1411999872,1411999887,BA
-1411999888,1411999903,SI
-1411999904,1411999943,BA
-1411999944,1411999999,SI
-1412000000,1412000767,BA
+1411999872,1411999895,BA
+1411999896,1411999903,SI
+1411999904,1411999911,BA
+1411999912,1411999919,SI
+1411999920,1411999927,BA
+1411999928,1411999935,SI
+1411999936,1411999943,BA
+1411999944,1411999951,SI
+1411999952,1411999959,BA
+1411999960,1411999967,SI
+1411999968,1412000767,BA
1412000768,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
@@ -41064,10 +44136,12 @@
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,1412003007,BA
-1412003008,1412003023,SI
+1412002920,1412003015,BA
+1412003016,1412003023,SI
1412003024,1412003039,BA
1412003040,1412003055,SI
1412003056,1412003119,BA
@@ -41082,24 +44156,22 @@
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
-1412003392,1412003407,BA
-1412003408,1412003423,SI
-1412003424,1412003527,BA
+1412003392,1412003527,BA
1412003528,1412003535,SI
1412003536,1412003551,BA
1412003552,1412003583,SI
1412003584,1412003599,BA
1412003600,1412003623,SI
-1412003624,1412003647,BA
-1412003648,1412003711,SI
-1412003712,1412003783,BA
-1412003784,1412003791,SI
-1412003792,1412003823,BA
-1412003824,1412003855,SI
+1412003624,1412003631,BA
+1412003632,1412003639,SI
+1412003640,1412003647,BA
+1412003648,1412003855,SI
1412003856,1412003903,BG
1412003904,1412003935,SI
1412003936,1412004351,BG
@@ -41139,9 +44211,9 @@
1412677632,1412685823,RU
1412685824,1412686239,IE
1412686240,1412686335,BB
-1412686336,1412686591,IE
-1412686592,1412686847,GB
-1412686848,1412690191,IE
+1412686336,1412689315,IE
+1412689316,1412689343,GB
+1412689344,1412690191,IE
1412690192,1412690199,GB
1412690200,1412694015,IE
1412694016,1412710399,EE
@@ -41196,11 +44268,15 @@
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
-1422468736,1422479615,DE
+1422468736,1422476863,DE
+1422476864,1422476895,GB
+1422476896,1422479615,DE
1422479616,1422479871,BE
1422479872,1422491647,DE
1422491648,1422508031,RU
@@ -41219,15 +44295,12 @@
1422761984,1422770175,PL
1422770176,1422786559,GR
1422786560,1422852095,HU
-1422852096,1422853119,FR
-1422853120,1422853631,EU
-1422853632,1422853919,FR
-1422853920,1422854143,EU
-1422854144,1422854151,FR
-1422854152,1422856383,EU
+1422852096,1422856383,EU
1422856384,1422856447,FR
1422856448,1422856703,EU
-1422856704,1422857151,FR
+1422856704,1422856959,FR
+1422856960,1422857087,EU
+1422857088,1422857151,FR
1422857152,1422857183,EU
1422857184,1422857855,FR
1422857856,1422857919,EU
@@ -41236,7 +44309,9 @@
1422858240,1422858623,FR
1422858624,1422909439,EU
1422909440,1422909695,NL
-1422909696,1422917375,EU
+1422909696,1422911231,EU
+1422911232,1422911487,NL
+1422911488,1422917375,EU
1422917376,1422917631,GB
1422917632,1423441919,NO
1423441920,1423704063,SE
@@ -41250,7 +44325,10 @@
1424556032,1424588799,EG
1424588800,1424588839,DE
1424588840,1424588847,GB
-1424588848,1424588959,DE
+1424588848,1424588863,DE
+1424588864,1424588927,US
+1424588928,1424588951,DE
+1424588952,1424588959,GB
1424588960,1424588963,IT
1424588964,1424589311,DE
1424589312,1424589567,FR
@@ -41267,9 +44345,7 @@
1424591464,1424591471,GB
1424591472,1424591551,SE
1424591552,1424591615,CZ
-1424591616,1424591839,GB
-1424591840,1424591871,ZA
-1424591872,1424592639,GB
+1424591616,1424592639,GB
1424592640,1424593151,FR
1424593152,1424593407,NL
1424593408,1424593663,DE
@@ -41280,23 +44356,23 @@
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
1424595576,1424595583,GB
1424595584,1424595819,IT
1424595820,1424595823,GB
-1424595824,1424595831,IT
-1424595832,1424595839,GB
-1424595840,1424595919,IT
-1424595920,1424595935,GB
-1424595936,1424596479,IT
+1424595824,1424596479,IT
1424596480,1424596991,FR
1424596992,1424597255,CZ
1424597256,1424597263,GB
@@ -41305,16 +44381,16 @@
1424597344,1424597351,CH
1424597352,1424597375,GB
1424597376,1424597391,CZ
-1424597392,1424597503,GB
+1424597392,1424597407,GB
+1424597408,1424597431,CZ
+1424597432,1424597503,GB
1424597504,1424597759,FR
1424597760,1424598015,IT
1424598016,1424599039,GB
1424599040,1424599279,DK
1424599280,1424599295,GB
1424599296,1424599551,DK
-1424599552,1424599839,HU
-1424599840,1424599847,GB
-1424599848,1424599855,HU
+1424599552,1424599855,HU
1424599856,1424599871,GB
1424599872,1424599875,HU
1424599876,1424599879,GB
@@ -41331,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
@@ -41340,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
@@ -41348,7 +44426,9 @@
1424603136,1424603391,SK
1424603392,1424603647,DE
1424603648,1424603903,GB
-1424603904,1424604159,ES
+1424603904,1424604039,ES
+1424604040,1424604047,GB
+1424604048,1424604159,ES
1424604160,1424604543,NL
1424604544,1424604671,GB
1424604672,1424604799,NL
@@ -41368,8 +44448,13 @@
1424605632,1424605695,BG
1424605696,1424605951,NL
1424605952,1424605959,CH
-1424605960,1424606023,AT
-1424606024,1424607167,GB
+1424605960,1424605967,AT
+1424605968,1424605983,GB
+1424605984,1424606023,AT
+1424606024,1424606207,GB
+1424606208,1424606719,IT
+1424606720,1424606975,NL
+1424606976,1424607167,GB
1424607168,1424607199,SK
1424607200,1424607215,GB
1424607216,1424607223,SK
@@ -41380,25 +44465,35 @@
1424608084,1424608087,GB
1424608088,1424608127,FR
1424608128,1424608279,GB
-1424608280,1424608383,FR
+1424608280,1424608319,FR
+1424608320,1424608327,GB
+1424608328,1424608383,FR
1424608384,1424608399,ES
1424608400,1424608511,FR
-1424608512,1424608687,ES
-1424608688,1424608695,GB
-1424608696,1424609023,ES
-1424609024,1424609259,DE
-1424609260,1424609271,GB
+1424608512,1424608559,ES
+1424608560,1424608567,GB
+1424608568,1424608687,ES
+1424608688,1424608691,GB
+1424608692,1424609023,ES
+1424609024,1424609255,DE
+1424609256,1424609271,GB
1424609272,1424609279,DE
1424609280,1424609395,CH
1424609396,1424609399,GB
-1424609400,1424609791,CH
+1424609400,1424609535,CH
+1424609536,1424609543,GB
+1424609544,1424609743,CH
+1424609744,1424609759,GB
+1424609760,1424609791,CH
1424609792,1424610303,GB
1424610304,1424610559,TZ
1424610560,1424610815,PL
1424610816,1424611071,FR
1424611072,1424611135,BE
1424611136,1424611151,GB
-1424611152,1424611327,BE
+1424611152,1424611271,BE
+1424611272,1424611279,LU
+1424611280,1424611327,BE
1424611328,1424611583,PL
1424611584,1424612095,GB
1424612096,1424612231,CZ
@@ -41410,16 +44505,16 @@
1424612864,1424613119,FR
1424613120,1424613375,GB
1424613376,1424613631,ES
-1424613632,1424614079,IT
-1424614080,1424614095,GB
+1424613632,1424614087,IT
+1424614088,1424614095,GB
1424614096,1424614127,IT
1424614128,1424614135,GB
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
@@ -41428,9 +44523,12 @@
1424615808,1424615935,IT
1424615936,1424616191,FR
1424616192,1424616447,IT
-1424616448,1424616483,ES
+1424616448,1424616479,GB
+1424616480,1424616483,ES
1424616484,1424616487,GB
-1424616488,1424616615,ES
+1424616488,1424616503,ES
+1424616504,1424616511,GB
+1424616512,1424616615,ES
1424616616,1424616623,GB
1424616624,1424616655,ES
1424616656,1424616659,GB
@@ -41438,23 +44536,25 @@
1424616696,1424616703,GB
1424616704,1424616959,US
1424616960,1424617215,FR
-1424617216,1424617239,GB
-1424617240,1424617351,IT
+1424617216,1424617231,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
-1424617440,1424617463,IT
+1424617424,1424617439,GB
+1424617440,1424617447,IT
+1424617448,1424617455,GB
+1424617456,1424617463,IT
1424617464,1424617471,GB
1424617472,1424617727,US
-1424617728,1424617983,IT
-1424617984,1424618015,GB
-1424618016,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
@@ -41462,9 +44562,7 @@
1424618944,1424619007,FR
1424619008,1424619775,IT
1424619776,1424619807,BE
-1424619808,1424619815,GB
-1424619816,1424619823,BE
-1424619824,1424619839,GB
+1424619808,1424619839,GB
1424619840,1424619915,BE
1424619916,1424619919,GB
1424619920,1424620031,BE
@@ -41540,6 +44638,7 @@
1424850944,1424883711,LV
1424883712,1424916479,DK
1424916480,1424949247,BG
+1424949248,1424982015,RO
1424982016,1425014783,FI
1425014784,1425031167,LT
1425031168,1425047551,FI
@@ -41643,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
@@ -41656,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
@@ -41917,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
@@ -41966,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
@@ -42022,72 +45111,100 @@
1427668992,1427701759,SE
1427701760,1427723391,DE
1427723392,1427723519,LI
-1427723520,1427728479,DE
+1427723520,1427728383,DE
+1427728384,1427728415,BR
+1427728416,1427728479,DE
1427728480,1427728511,CY
1427728512,1427728543,BR
-1427728544,1427728671,DE
+1427728544,1427728575,DE
+1427728576,1427728639,BR
+1427728640,1427728671,DE
1427728672,1427728703,TR
-1427728704,1427728799,DE
+1427728704,1427728735,RU
+1427728736,1427728799,DE
1427728800,1427728831,RU
1427728832,1427728895,CY
-1427728896,1427728927,DE
+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,1427743199,DE
+1427743104,1427743135,BR
+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,US
+1427743808,1427743839,DE
1427743840,1427743871,RU
-1427743872,1427743935,DE
+1427743872,1427743903,DE
+1427743904,1427743935,US
1427743936,1427743967,RU
-1427743968,1427744127,DE
+1427743968,1427743999,US
+1427744000,1427744031,DE
+1427744032,1427744063,RU
+1427744064,1427744127,DE
1427744128,1427744159,PL
1427744160,1427744191,RU
-1427744192,1427744223,TR
-1427744224,1427744255,DE
+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,1427744639,DE
+1427744448,1427744479,US
+1427744480,1427744575,DE
+1427744576,1427744607,PL
+1427744608,1427744639,DE
1427744640,1427744671,TR
-1427744672,1427744735,DE
-1427744736,1427744767,DK
-1427744768,1427744863,DE
+1427744672,1427744767,DE
+1427744768,1427744799,BR
+1427744800,1427744863,DE
1427744864,1427744927,TR
-1427744928,1427744991,DE
+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,1427745439,DE
-1427745440,1427745471,US
-1427745472,1427745503,DE
+1427745216,1427745247,TR
+1427745248,1427745279,DE
+1427745280,1427745311,MA
+1427745312,1427745343,TH
+1427745344,1427745375,DE
+1427745376,1427745407,BR
+1427745408,1427745471,US
+1427745472,1427745503,RO
1427745504,1427745535,RU
1427745536,1427745567,CN
1427745568,1427745599,RU
@@ -42099,7 +45216,13 @@
1427745760,1427745791,LT
1427745792,1427745823,GB
1427745824,1427745855,US
-1427745856,1427746079,DE
+1427745856,1427745887,BR
+1427745888,1427745919,IN
+1427745920,1427745951,ES
+1427745952,1427745983,IN
+1427745984,1427746015,DE
+1427746016,1427746047,TR
+1427746048,1427746079,SE
1427746080,1427746111,GB
1427746112,1427746143,DE
1427746144,1427746175,GR
@@ -42107,64 +45230,91 @@
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,1427748351,DE
-1427748352,1427748383,US
+1427748352,1427748383,BR
1427748384,1427748447,DE
1427748448,1427748479,RU
-1427748480,1427748511,TR
-1427748512,1427748543,DE
-1427748544,1427748575,MX
-1427748576,1427748799,DE
-1427748800,1427748831,US
-1427748832,1427749567,DE
+1427748480,1427748511,MA
+1427748512,1427748575,DE
+1427748576,1427748607,BR
+1427748608,1427748639,HU
+1427748640,1427748735,DE
+1427748736,1427748799,BR
+1427748800,1427748831,MA
+1427748832,1427749535,DE
+1427749536,1427749567,MA
1427749568,1427749599,CY
-1427749600,1427749631,NL
-1427749632,1427749663,US
-1427749664,1427749887,DE
+1427749600,1427749695,DE
+1427749696,1427749727,BR
+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
-1427750112,1427750239,DE
+1427750112,1427750175,DE
+1427750176,1427750207,TR
+1427750208,1427750239,DE
1427750240,1427750271,US
-1427750272,1427750303,DE
+1427750272,1427750303,GR
1427750304,1427750335,GB
-1427750336,1427751167,DE
+1427750336,1427750367,US
+1427750368,1427751167,DE
1427751168,1427751423,NL
-1427751424,1427759935,DE
+1427751424,1427759903,DE
+1427759904,1427759935,MA
1427759936,1427759967,HR
-1427759968,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,1427760959,DE
+1427760832,1427760863,DE
+1427760864,1427760895,US
+1427760896,1427760959,DE
1427760960,1427760991,CZ
1427760992,1427761023,BG
1427761024,1427761055,HR
1427761056,1427761087,CL
1427761088,1427761119,CH
-1427761120,1427761183,DE
-1427761184,1427761215,IT
+1427761120,1427761151,TR
+1427761152,1427761215,DE
1427761216,1427761247,TR
1427761248,1427761279,DE
1427761280,1427761311,RU
-1427761312,1427761343,US
+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
@@ -42187,9 +45337,7 @@
1428045824,1428062207,MK
1428062208,1428078591,SE
1428078592,1428094975,RU
-1428094976,1428096031,AT
-1428096032,1428096039,CH
-1428096040,1428103167,AT
+1428094976,1428103167,AT
1428103168,1428111359,GB
1428111360,1428119551,A2
1428119552,1428121599,LV
@@ -42209,28 +45357,19 @@
1428143280,1428144127,DE
1428144128,1428147343,FR
1428147344,1428147351,GB
-1428147352,1428147595,FR
-1428147596,1428147615,GB
-1428147616,1428147639,FR
-1428147640,1428147711,GB
-1428147712,1428147855,FR
+1428147352,1428147599,FR
+1428147600,1428147615,GB
+1428147616,1428147855,FR
1428147856,1428147871,US
1428147872,1428148175,FR
1428148176,1428148191,CH
1428148192,1428150487,FR
1428150488,1428150495,GB
1428150496,1428150663,FR
-1428150664,1428150687,GB
-1428150688,1428150735,FR
-1428150736,1428150751,GB
-1428150752,1428150863,FR
-1428150864,1428150911,GB
-1428150912,1428151007,FR
-1428151008,1428151039,GB
-1428151040,1428151231,FR
+1428150664,1428150671,GB
+1428150672,1428151231,FR
1428151232,1428151295,CH
-1428151296,1428152127,FR
-1428152128,1428152319,GB
+1428151296,1428152319,FR
1428152320,1428160511,PL
1428160512,1429209087,IT
1429209088,1430257663,ES
@@ -42310,8 +45449,55 @@
1432100864,1432109055,CZ
1432109056,1432117247,GB
1432117248,1432125439,CY
-1432125440,1432131583,NL
-1432131584,1432133631,PH
+1432125440,1432131607,NL
+1432131608,1432131615,PH
+1432131616,1432131679,NL
+1432131680,1432131695,PH
+1432131696,1432131711,NL
+1432131712,1432131727,PH
+1432131728,1432131743,NL
+1432131744,1432131759,PH
+1432131760,1432131775,NL
+1432131776,1432131783,PH
+1432131784,1432131887,NL
+1432131888,1432131903,PH
+1432131904,1432131919,NL
+1432131920,1432131935,PH
+1432131936,1432131951,NL
+1432131952,1432131967,PH
+1432131968,1432131999,NL
+1432132000,1432132031,PH
+1432132032,1432132271,NL
+1432132272,1432132287,PH
+1432132288,1432132303,NL
+1432132304,1432132319,PH
+1432132320,1432132351,NL
+1432132352,1432132495,PH
+1432132496,1432132511,NL
+1432132512,1432132559,PH
+1432132560,1432132639,NL
+1432132640,1432132655,PH
+1432132656,1432132671,NL
+1432132672,1432132687,PH
+1432132688,1432132815,NL
+1432132816,1432132831,PH
+1432132832,1432132895,NL
+1432132896,1432132911,PH
+1432132912,1432132927,NL
+1432132928,1432132943,PH
+1432132944,1432133039,NL
+1432133040,1432133055,PH
+1432133056,1432133151,NL
+1432133152,1432133167,PH
+1432133168,1432133199,NL
+1432133200,1432133215,PH
+1432133216,1432133327,NL
+1432133328,1432133343,PH
+1432133344,1432133455,NL
+1432133456,1432133503,PH
+1432133504,1432133543,NL
+1432133544,1432133551,PH
+1432133552,1432133631,NL
1432133632,1432150015,GB
1432150016,1432158207,BA
1432158208,1432159311,DE
@@ -42387,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
@@ -42416,7 +45603,14 @@
1433772032,1433788415,SE
1433788416,1433796607,UZ
1433796608,1433804799,GB
-1433804800,1433812991,FR
+1433804800,1433806591,FR
+1433806592,1433806623,GB
+1433806624,1433806655,BE
+1433806656,1433806687,IT
+1433806688,1433806719,NL
+1433806720,1433806751,DE
+1433806752,1433806783,ES
+1433806784,1433812991,FR
1433812992,1433821183,BG
1433821184,1433829375,GE
1433829376,1433833471,RU
@@ -42439,7 +45633,11 @@
1433856000,1433858047,GB
1433858048,1433860095,ES
1433860096,1433862143,DE
-1433862144,1433862559,CH
+1433862144,1433862467,CH
+1433862468,1433862471,US
+1433862472,1433862519,CH
+1433862520,1433862527,NL
+1433862528,1433862559,CH
1433862560,1433862575,GB
1433862576,1433862751,CH
1433862752,1433862783,MC
@@ -42448,8 +45646,8 @@
1433862992,1433863055,CH
1433863056,1433863071,GB
1433863072,1433863095,CH
-1433863096,1433863103,US
-1433863104,1433863423,CH
+1433863096,1433863119,US
+1433863120,1433863423,CH
1433863424,1433863487,US
1433863488,1433864191,CH
1433864192,1433866239,HU
@@ -42507,7 +45705,8 @@
1434615808,1434648575,IL
1434648576,1434681343,FI
1434681344,1434681983,DE
-1434681984,1434682111,NL
+1434681984,1434682015,CY
+1434682016,1434682111,NL
1434682112,1434682303,DE
1434682304,1434682367,NL
1434682368,1434683119,DE
@@ -42516,36 +45715,49 @@
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
@@ -42637,7 +45849,9 @@
1436536832,1436538879,GB
1436538880,1436540927,JO
1436540928,1436542975,RU
-1436542976,1436545023,NL
+1436542976,1436544203,NL
+1436544204,1436544207,HK
+1436544208,1436545023,NL
1436545024,1436547071,DE
1436547072,1436549119,GB
1436549120,1436811263,CZ
@@ -42683,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
@@ -42707,10 +45931,7 @@
1438874800,1438874855,PA
1438874856,1438874863,DE
1438874864,1438874879,PA
-1438874880,1438875223,DE
-1438875224,1438875255,GB
-1438875256,1438875257,CH
-1438875258,1438875647,DE
+1438874880,1438875647,DE
1438875648,1438876159,RU
1438876160,1438876415,LT
1438876416,1438876927,RU
@@ -42718,7 +45939,9 @@
1438877184,1438877439,LT
1438877440,1438877695,RU
1438877696,1438877951,LT
-1438877952,1438878975,LB
+1438877952,1438878207,LB
+1438878208,1438878463,IQ
+1438878464,1438878975,LB
1438878976,1438879231,IQ
1438879232,1438880767,RU
1438880768,1438881791,LB
@@ -42734,12 +45957,9 @@
1438890240,1438890495,RU
1438890496,1438890751,IQ
1438890752,1438892031,RU
-1438892032,1438892287,US
-1438892288,1438900223,IS
-1438900224,1438900479,AQ
-1438900480,1438904319,IS
-1438904320,1438904575,CH
-1438904576,1438908415,IS
+1438892032,1438895359,CH
+1438895360,1438900223,IS
+1438900224,1438908415,AQ
1438908416,1438924799,GR
1438924800,1438941183,NO
1438941184,1438957567,BG
@@ -42832,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
@@ -42861,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
@@ -42905,11 +46129,11 @@
1441384512,1441384543,US
1441384544,1441384591,FR
1441384592,1441384599,AU
-1441384600,1441384607,FR
-1441384608,1441384639,CN
-1441384640,1441386111,FR
+1441384600,1441386111,FR
1441386112,1441386239,IL
-1441386240,1441388671,FR
+1441386240,1441387519,FR
+1441387520,1441387647,US
+1441387648,1441388671,FR
1441388672,1441388799,CA
1441388800,1441389055,FR
1441389056,1441389119,IE
@@ -42917,7 +46141,11 @@
1441389224,1441389231,LU
1441389232,1441389567,FR
1441389568,1441389599,LU
-1441389600,1441390591,FR
+1441389600,1441389967,FR
+1441389968,1441389983,CA
+1441389984,1441390383,FR
+1441390384,1441390399,CA
+1441390400,1441390591,FR
1441390592,1441398783,DK
1441398784,1441415167,RU
1441415168,1441423359,GB
@@ -42953,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
@@ -43031,7 +46263,8 @@
1442807808,1442811903,BG
1442811904,1442815999,AT
1442816000,1442820095,BG
-1442820096,1442824191,PL
+1442820096,1442822143,UA
+1442822144,1442824191,RU
1442824192,1442828287,BE
1442828288,1442832383,NL
1442832384,1442836479,GB
@@ -43104,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
@@ -43115,9 +46350,17 @@
1446707176,1446707179,NO
1446707180,1446707183,FI
1446707184,1446707199,DK
-1446707200,1446710687,AT
-1446710688,1446710703,ES
-1446710704,1446736503,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,1446716399,AT
+1446716400,1446716407,MT
+1446716408,1446736503,AT
1446736504,1446736511,US
1446736512,1446739967,AT
1446739968,1446772735,RU
@@ -43129,164 +46372,160 @@
1446871040,1446903807,CZ
1446903808,1446904063,A2
1446904064,1446904071,CY
-1446904072,1446904079,A2
-1446904080,1446904087,NG
-1446904088,1446904095,A2
+1446904072,1446904079,LY
+1446904080,1446904087,AF
+1446904088,1446904095,BF
1446904096,1446904103,SD
1446904104,1446904111,IQ
-1446904112,1446904119,LY
-1446904120,1446904127,A2
-1446904128,1446904135,SA
-1446904136,1446904143,IQ
+1446904112,1446904119,GN
+1446904120,1446904127,IQ
+1446904128,1446904135,A2
+1446904136,1446904143,LY
1446904144,1446904151,ER
-1446904152,1446904159,IQ
-1446904160,1446904167,NG
-1446904168,1446904175,BW
-1446904176,1446904183,NG
-1446904184,1446904191,IQ
-1446904192,1446904199,A2
-1446904200,1446904223,IQ
-1446904224,1446904231,LY
+1446904152,1446904231,A2
1446904232,1446904239,IQ
1446904240,1446904247,A2
1446904248,1446904255,AF
1446904256,1446904263,CY
-1446904264,1446904279,A2
-1446904280,1446904287,IQ
-1446904288,1446904295,AF
-1446904296,1446904303,IQ
-1446904304,1446904311,A2
-1446904312,1446904319,AF
-1446904320,1446904367,AE
+1446904264,1446904319,A2
+1446904320,1446904335,AE
+1446904336,1446904351,A2
+1446904352,1446904367,AE
1446904368,1446904383,IQ
-1446904384,1446904399,KW
+1446904384,1446904399,A2
1446904400,1446904415,IQ
-1446904416,1446904527,A2
-1446904528,1446904543,ZM
-1446904544,1446904575,A2
+1446904416,1446904575,A2
1446904576,1446904591,SD
-1446904592,1446904599,NG
+1446904592,1446904599,AF
1446904600,1446904607,A2
1446904608,1446904623,SD
-1446904624,1446904631,IQ
-1446904632,1446904639,NG
+1446904624,1446904639,A2
1446904640,1446904679,IQ
-1446904680,1446904695,A2
-1446904696,1446904703,LB
-1446904704,1446904751,A2
+1446904680,1446904751,A2
1446904752,1446904759,NG
1446904760,1446904799,A2
1446904800,1446904807,SD
-1446904808,1446904815,A2
-1446904816,1446904823,ZM
-1446904824,1446904831,IQ
-1446904832,1446904835,A2
+1446904808,1446904831,A2
+1446904832,1446904835,LY
1446904836,1446904843,IQ
1446904844,1446904847,CG
-1446904848,1446904863,IQ
-1446904864,1446904867,GN
-1446904868,1446904871,LY
-1446904872,1446904875,IQ
-1446904876,1446904879,ZM
-1446904880,1446904907,IQ
-1446904908,1446904911,AE
-1446904912,1446904915,IQ
-1446904916,1446904919,ZM
-1446904920,1446904927,IQ
-1446904928,1446904931,A2
-1446904932,1446904935,ZM
-1446904936,1446904939,LY
-1446904940,1446904951,IQ
+1446904848,1446904851,AF
+1446904852,1446904855,LY
+1446904856,1446904859,IQ
+1446904860,1446904867,LY
+1446904868,1446904871,IQ
+1446904872,1446904879,A2
+1446904880,1446904883,IQ
+1446904884,1446904887,AF
+1446904888,1446904895,IQ
+1446904896,1446904899,LY
+1446904900,1446904903,A2
+1446904904,1446904907,AF
+1446904908,1446904919,A2
+1446904920,1446904923,LY
+1446904924,1446904927,AF
+1446904928,1446904931,TD
+1446904932,1446904935,A2
+1446904936,1446904939,AO
+1446904940,1446904943,LY
+1446904944,1446904947,IQ
+1446904948,1446904951,LY
1446904952,1446904955,AF
-1446904956,1446904959,NG
+1446904956,1446904959,A2
1446904960,1446904963,IQ
1446904964,1446904967,TD
-1446904968,1446904971,LY
-1446904972,1446904975,IQ
+1446904968,1446904971,A2
+1446904972,1446904975,LY
1446904976,1446904979,CG
-1446904980,1446904983,IQ
-1446904984,1446904987,A2
-1446904988,1446904991,AF
-1446904992,1446905007,IQ
-1446905008,1446905011,CG
-1446905012,1446905015,KW
+1446904980,1446904983,TG
+1446904984,1446904991,LY
+1446904992,1446904995,IQ
+1446904996,1446905003,A2
+1446905004,1446905007,NG
+1446905008,1446905011,A2
+1446905012,1446905015,AF
1446905016,1446905019,NG
1446905020,1446905023,LY
-1446905024,1446905039,IQ
+1446905024,1446905027,A2
+1446905028,1446905031,IQ
+1446905032,1446905035,LY
+1446905036,1446905039,IQ
1446905040,1446905043,AF
1446905044,1446905047,IQ
-1446905048,1446905051,A2
-1446905052,1446905055,LY
-1446905056,1446905063,IQ
-1446905064,1446905067,NG
-1446905068,1446905071,IQ
-1446905072,1446905075,A2
-1446905076,1446905079,IQ
-1446905080,1446905083,A2
+1446905048,1446905051,LY
+1446905052,1446905059,IQ
+1446905060,1446905067,NG
+1446905068,1446905083,A2
1446905084,1446905095,AF
-1446905096,1446905103,BJ
-1446905104,1446905115,A2
+1446905096,1446905099,LY
+1446905100,1446905103,IQ
+1446905104,1446905111,LY
+1446905112,1446905115,NG
1446905116,1446905119,SD
-1446905120,1446905123,GN
+1446905120,1446905123,A2
1446905124,1446905127,AF
1446905128,1446905131,IQ
-1446905132,1446905135,A2
-1446905136,1446905143,IQ
-1446905144,1446905147,A2
-1446905148,1446905151,LY
-1446905152,1446905155,AF
-1446905156,1446905167,IQ
-1446905168,1446905171,A2
-1446905172,1446905175,IQ
+1446905132,1446905139,LY
+1446905140,1446905147,IQ
+1446905148,1446905151,A2
+1446905152,1446905159,IQ
+1446905160,1446905163,A2
+1446905164,1446905171,LY
+1446905172,1446905175,A2
1446905176,1446905179,AF
-1446905180,1446905191,LY
-1446905192,1446905195,A2
+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,IQ
-1446905216,1446905227,A2
+1446905212,1446905215,AF
+1446905216,1446905219,LY
+1446905220,1446905223,IQ
+1446905224,1446905227,LY
1446905228,1446905235,NG
-1446905236,1446905247,A2
-1446905248,1446905251,IQ
-1446905252,1446905259,A2
+1446905236,1446905239,A2
+1446905240,1446905243,IQ
+1446905244,1446905247,AF
+1446905248,1446905251,A2
+1446905252,1446905255,LY
+1446905256,1446905259,A2
1446905260,1446905263,IQ
-1446905264,1446905267,LY
-1446905268,1446905271,A2
-1446905272,1446905283,IQ
-1446905284,1446905287,A2
-1446905288,1446905295,IQ
-1446905296,1446905303,ZM
+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,1446905339,IQ
-1446905340,1446905343,A2
-1446905344,1446905351,LY
+1446905320,1446905331,IQ
+1446905332,1446905335,NG
+1446905336,1446905343,IQ
+1446905344,1446905351,NG
1446905352,1446905383,A2
1446905384,1446905391,SD
1446905392,1446905583,A2
1446905584,1446905591,AF
-1446905592,1446905599,A2
-1446905600,1446905603,ZM
-1446905604,1446905619,A2
-1446905620,1446905623,ZM
-1446905624,1446905631,A2
-1446905632,1446905635,LY
+1446905592,1446905611,A2
+1446905612,1446905615,IQ
+1446905616,1446905619,A2
+1446905620,1446905623,TD
+1446905624,1446905627,A2
+1446905628,1446905631,IQ
+1446905632,1446905635,A2
1446905636,1446905639,IQ
-1446905640,1446905643,LY
-1446905644,1446905655,IQ
+1446905640,1446905643,A2
+1446905644,1446905647,IQ
+1446905648,1446905651,A2
+1446905652,1446905655,IQ
1446905656,1446905659,AF
1446905660,1446905663,ER
-1446905664,1446905667,LY
+1446905664,1446905667,A2
1446905668,1446905675,AF
-1446905676,1446905679,LY
-1446905680,1446905683,ZM
-1446905684,1446905695,A2
-1446905696,1446905699,LY
-1446905700,1446905703,ZM
+1446905676,1446905683,LY
+1446905684,1446905703,A2
1446905704,1446905707,IQ
1446905708,1446905715,A2
1446905716,1446905719,IQ
@@ -43294,33 +46533,30 @@
1446905724,1446905727,A2
1446905728,1446905731,IQ
1446905732,1446905735,AF
-1446905736,1446905743,IQ
-1446905744,1446905747,LY
-1446905748,1446905759,IQ
+1446905736,1446905739,IQ
+1446905740,1446905743,A2
+1446905744,1446905759,LY
1446905760,1446905763,ML
-1446905764,1446905767,LY
+1446905764,1446905767,A2
1446905768,1446905775,IQ
-1446905776,1446905779,A2
-1446905780,1446905783,LY
-1446905784,1446905787,A2
-1446905788,1446905791,LY
+1446905776,1446905791,A2
1446905792,1446905795,TD
-1446905796,1446905803,A2
-1446905804,1446905811,IQ
-1446905812,1446905815,A2
-1446905816,1446905823,LY
-1446905824,1446905827,A2
-1446905828,1446905831,LY
+1446905796,1446905799,A2
+1446905800,1446905803,IQ
+1446905804,1446905815,A2
+1446905816,1446905819,LY
+1446905820,1446905823,IQ
+1446905824,1446905831,A2
1446905832,1446905835,NG
1446905836,1446905839,IQ
-1446905840,1446905847,A2
-1446905848,1446905851,IQ
+1446905840,1446905851,A2
1446905852,1446905855,AF
-1446905856,1446905856,A2
-1446905857,1446905863,LY
+1446905856,1446905863,LY
1446905864,1446905871,SD
1446905872,1446905911,A2
-1446905912,1446905943,SD
+1446905912,1446905927,SD
+1446905928,1446905935,A2
+1446905936,1446905943,SD
1446905944,1446905959,A2
1446905960,1446905967,AF
1446905968,1446906023,A2
@@ -43328,542 +46564,382 @@
1446906032,1446906071,A2
1446906072,1446906079,CY
1446906080,1446906111,A2
-1446906112,1446906115,IQ
-1446906116,1446906119,ZM
-1446906120,1446906123,SD
+1446906112,1446906119,IQ
+1446906120,1446906123,A2
1446906124,1446906131,IQ
-1446906132,1446906135,LY
-1446906136,1446906139,IQ
-1446906140,1446906143,A2
-1446906144,1446906147,ZM
-1446906148,1446906151,A2
+1446906132,1446906135,SD
+1446906136,1446906151,A2
1446906152,1446906159,AF
1446906160,1446906167,A2
1446906168,1446906171,IQ
1446906172,1446906179,AF
-1446906180,1446906187,A2
-1446906188,1446906191,AF
-1446906192,1446906199,A2
-1446906200,1446906203,IQ
-1446906204,1446906207,A2
-1446906208,1446906211,NG
+1446906180,1446906211,A2
1446906212,1446906215,AF
-1446906216,1446906219,A2
+1446906216,1446906219,IQ
1446906220,1446906223,BG
-1446906224,1446906227,IQ
-1446906228,1446906231,A2
+1446906224,1446906231,A2
1446906232,1446906239,AF
-1446906240,1446906247,A2
-1446906248,1446906259,IQ
+1446906240,1446906243,IQ
+1446906244,1446906251,A2
+1446906252,1446906255,IQ
+1446906256,1446906259,A2
1446906260,1446906263,AF
-1446906264,1446906267,A2
-1446906268,1446906271,IQ
-1446906272,1446906275,A2
-1446906276,1446906279,GH
-1446906280,1446906283,A2
-1446906284,1446906303,IQ
-1446906304,1446906307,ZM
-1446906308,1446906323,A2
-1446906324,1446906331,IQ
-1446906332,1446906335,A2
-1446906336,1446906339,ZM
-1446906340,1446906343,IQ
+1446906264,1446906287,A2
+1446906288,1446906295,IQ
+1446906296,1446906299,A2
+1446906300,1446906303,LY
+1446906304,1446906327,A2
+1446906328,1446906331,IQ
+1446906332,1446906343,A2
1446906344,1446906347,NG
-1446906348,1446906351,ZM
-1446906352,1446906355,A2
-1446906356,1446906359,IQ
+1446906348,1446906359,A2
1446906360,1446906363,SD
1446906364,1446906391,A2
1446906392,1446906399,CY
-1446906400,1446906567,A2
-1446906568,1446906591,KW
-1446906592,1446906599,IQ
-1446906600,1446906615,KW
-1446906616,1446906623,A2
-1446906624,1446906631,LY
-1446906632,1446906639,A2
-1446906640,1446906655,LY
-1446906656,1446906663,NG
-1446906664,1446906863,A2
-1446906864,1446906871,ZM
-1446906872,1446906879,A2
-1446906880,1446906883,IQ
+1446906400,1446906883,A2
1446906884,1446906887,AF
-1446906888,1446906907,A2
-1446906908,1446906911,IQ
-1446906912,1446906923,A2
+1446906888,1446906891,LY
+1446906892,1446906895,A2
+1446906896,1446906899,GN
+1446906900,1446906915,A2
+1446906916,1446906919,AF
+1446906920,1446906923,A2
1446906924,1446906927,IQ
1446906928,1446906931,SA
-1446906932,1446906935,IQ
-1446906936,1446906943,LY
-1446906944,1446906951,IQ
-1446906952,1446906955,A2
-1446906956,1446906963,IQ
-1446906964,1446906975,A2
+1446906932,1446906939,A2
+1446906940,1446906943,LY
+1446906944,1446906947,IQ
+1446906948,1446906967,A2
+1446906968,1446906971,LY
+1446906972,1446906975,A2
1446906976,1446906979,IQ
-1446906980,1446906983,A2
+1446906980,1446906983,LY
1446906984,1446906987,NG
-1446906988,1446906995,IQ
+1446906988,1446906991,A2
+1446906992,1446906995,IQ
1446906996,1446906999,AF
-1446907000,1446907007,A2
+1446907000,1446907003,LY
+1446907004,1446907007,A2
1446907008,1446907011,AF
-1446907012,1446907015,IQ
-1446907016,1446907019,ZM
-1446907020,1446907027,A2
-1446907028,1446907031,ZM
-1446907032,1446907035,A2
+1446907012,1446907019,A2
+1446907020,1446907023,LY
+1446907024,1446907031,A2
+1446907032,1446907035,LY
1446907036,1446907039,IQ
1446907040,1446907043,A2
1446907044,1446907047,CG
-1446907048,1446907051,A2
-1446907052,1446907055,IQ
-1446907056,1446907067,A2
+1446907048,1446907051,IQ
+1446907052,1446907067,A2
1446907068,1446907071,AF
1446907072,1446907075,IQ
1446907076,1446907079,A2
1446907080,1446907083,AF
-1446907084,1446907087,IQ
-1446907088,1446907111,A2
+1446907084,1446907095,A2
+1446907096,1446907099,NG
+1446907100,1446907111,A2
1446907112,1446907115,IQ
-1446907116,1446907123,A2
-1446907124,1446907131,IQ
-1446907132,1446907135,A2
-1446907136,1446907139,IQ
-1446907140,1446907143,A2
+1446907116,1446907119,LY
+1446907120,1446907131,A2
+1446907132,1446907135,AF
+1446907136,1446907143,A2
1446907144,1446907147,AF
-1446907148,1446907155,IQ
-1446907156,1446907163,A2
-1446907164,1446907167,IQ
-1446907168,1446907171,LY
+1446907148,1446907151,IQ
+1446907152,1446907159,A2
+1446907160,1446907163,IQ
+1446907164,1446907171,A2
1446907172,1446907175,IQ
-1446907176,1446907187,LY
+1446907176,1446907187,A2
1446907188,1446907191,CG
-1446907192,1446907207,IQ
-1446907208,1446907211,A2
+1446907192,1446907195,A2
+1446907196,1446907199,LY
+1446907200,1446907211,A2
1446907212,1446907215,IQ
1446907216,1446907219,A2
-1446907220,1446907223,NG
-1446907224,1446907227,ZM
-1446907228,1446907231,A2
+1446907220,1446907223,BJ
+1446907224,1446907231,A2
1446907232,1446907243,IQ
-1446907244,1446907247,NG
-1446907248,1446907251,A2
-1446907252,1446907255,IQ
-1446907256,1446907259,GA
-1446907260,1446907279,IQ
+1446907244,1446907251,A2
+1446907252,1446907259,IQ
+1446907260,1446907263,A2
+1446907264,1446907271,IQ
+1446907272,1446907279,A2
1446907280,1446907283,GA
1446907284,1446907287,A2
1446907288,1446907291,AF
-1446907292,1446907303,A2
-1446907304,1446907307,IQ
+1446907292,1446907307,A2
1446907308,1446907311,AF
1446907312,1446907315,A2
1446907316,1446907319,IQ
1446907320,1446907323,AF
-1446907324,1446907327,A2
-1446907328,1446907331,IQ
-1446907332,1446907335,A2
-1446907336,1446907339,IQ
-1446907340,1446907347,LY
-1446907348,1446907355,ZM
-1446907356,1446907363,IQ
-1446907364,1446907367,A2
+1446907324,1446907355,A2
+1446907356,1446907359,IQ
+1446907360,1446907367,A2
1446907368,1446907368,IQ
1446907369,1446907371,A2
1446907372,1446907375,AF
-1446907376,1446907379,ZM
-1446907380,1446907383,A2
+1446907376,1446907383,A2
1446907384,1446907387,CI
1446907388,1446907395,A2
1446907396,1446907399,IQ
1446907400,1446907403,A2
1446907404,1446907407,IQ
-1446907408,1446907411,A2
-1446907412,1446907423,IQ
-1446907424,1446907427,ZM
-1446907428,1446907431,A2
+1446907408,1446907415,A2
+1446907416,1446907423,IQ
+1446907424,1446907431,A2
1446907432,1446907435,IQ
1446907436,1446907439,A2
1446907440,1446907443,AF
1446907444,1446907447,IQ
-1446907448,1446907455,A2
-1446907456,1446907459,IQ
-1446907460,1446907463,A2
-1446907464,1446907467,IQ
-1446907468,1446907471,A2
-1446907472,1446907475,IQ
-1446907476,1446907479,LY
-1446907480,1446907487,A2
+1446907448,1446907487,A2
1446907488,1446907491,IQ
1446907492,1446907495,TD
-1446907496,1446907503,IQ
-1446907504,1446907507,LY
-1446907508,1446907511,A2
-1446907512,1446907519,IQ
-1446907520,1446907527,LY
-1446907528,1446907539,A2
-1446907540,1446907543,LY
-1446907544,1446907555,A2
-1446907556,1446907559,IQ
+1446907496,1446907519,A2
+1446907520,1446907523,LY
+1446907524,1446907531,A2
+1446907532,1446907535,CI
+1446907536,1446907543,A2
+1446907544,1446907547,LY
+1446907548,1446907551,A2
+1446907552,1446907555,LY
+1446907556,1446907559,A2
1446907560,1446907563,AF
-1446907564,1446907571,IQ
+1446907564,1446907571,A2
1446907572,1446907575,AF
1446907576,1446907579,IQ
-1446907580,1446907583,GH
+1446907580,1446907583,A2
1446907584,1446907587,IQ
1446907588,1446907595,A2
1446907596,1446907599,IQ
-1446907600,1446907615,A2
+1446907600,1446907611,A2
+1446907612,1446907615,IQ
1446907616,1446907619,TD
-1446907620,1446907623,A2
-1446907624,1446907631,IQ
-1446907632,1446907635,LY
+1446907620,1446907635,A2
1446907636,1446907639,IQ
-1446907640,1446907643,A2
-1446907644,1446907647,IQ
-1446907648,1446907651,A2
-1446907652,1446907655,IQ
-1446907656,1446907659,A2
-1446907660,1446907663,ZM
+1446907640,1446907663,A2
1446907664,1446907667,NG
1446907668,1446907671,IQ
-1446907672,1446907675,A2
-1446907676,1446907683,LY
+1446907672,1446907679,A2
+1446907680,1446907683,LY
1446907684,1446907687,IQ
-1446907688,1446907691,LY
+1446907688,1446907691,A2
1446907692,1446907695,IQ
-1446907696,1446907703,A2
-1446907704,1446907707,IQ
-1446907708,1446907711,LY
+1446907696,1446907711,A2
1446907712,1446907715,IQ
1446907716,1446907719,AF
-1446907720,1446907723,LY
-1446907724,1446907731,IQ
-1446907732,1446907735,LY
-1446907736,1446907747,IQ
-1446907748,1446907755,AF
-1446907756,1446907763,IQ
-1446907764,1446907767,A2
+1446907720,1446907735,A2
+1446907736,1446907739,IQ
+1446907740,1446907743,A2
+1446907744,1446907747,IQ
+1446907748,1446907751,A2
+1446907752,1446907755,AF
+1446907756,1446907767,A2
1446907768,1446907775,IQ
-1446907776,1446907779,LY
-1446907780,1446907783,IQ
-1446907784,1446907787,A2
-1446907788,1446907795,IQ
-1446907796,1446907799,A2
-1446907800,1446907803,ZM
-1446907804,1446907815,A2
-1446907816,1446907819,IQ
-1446907820,1446907823,A2
-1446907824,1446907827,LY
-1446907828,1446907831,A2
-1446907832,1446907839,LY
-1446907840,1446907855,A2
+1446907776,1446907787,A2
+1446907788,1446907791,IQ
+1446907792,1446907811,A2
+1446907812,1446907819,IQ
+1446907820,1446907823,AF
+1446907824,1446907827,A2
+1446907828,1446907831,TD
+1446907832,1446907855,A2
1446907856,1446907859,AF
-1446907860,1446907863,IQ
-1446907864,1446907867,LY
-1446907868,1446907871,A2
+1446907860,1446907871,A2
1446907872,1446907875,IQ
1446907876,1446907891,A2
1446907892,1446907895,AF
1446907896,1446907899,A2
-1446907900,1446907903,LY
+1446907900,1446907903,EG
1446907904,1446907911,A2
1446907912,1446907919,SD
-1446907920,1446907927,LY
-1446907928,1446907951,A2
-1446907952,1446907959,SD
-1446907960,1446908143,A2
+1446907920,1446908143,A2
1446908144,1446908151,AE
1446908152,1446908159,SD
1446908160,1446908163,AF
1446908164,1446908187,A2
1446908188,1446908191,GH
-1446908192,1446908199,IQ
+1446908192,1446908195,A2
+1446908196,1446908199,IQ
1446908200,1446908211,A2
1446908212,1446908215,SD
-1446908216,1446908247,A2
+1446908216,1446908231,A2
+1446908232,1446908235,LY
+1446908236,1446908247,A2
1446908248,1446908251,AF
-1446908252,1446908255,A2
-1446908256,1446908259,SZ
+1446908252,1446908259,A2
1446908260,1446908263,IQ
1446908264,1446908267,A2
1446908268,1446908271,AF
-1446908272,1446908275,LY
-1446908276,1446908279,A2
-1446908280,1446908283,IQ
+1446908272,1446908275,A2
+1446908276,1446908279,LY
+1446908280,1446908283,A2
1446908284,1446908287,AF
1446908288,1446908299,A2
1446908300,1446908303,IQ
-1446908304,1446908311,A2
-1446908312,1446908315,LY
-1446908316,1446908323,A2
-1446908324,1446908327,ZM
-1446908328,1446908331,A2
+1446908304,1446908331,A2
1446908332,1446908335,NG
-1446908336,1446908347,A2
+1446908336,1446908343,A2
+1446908344,1446908347,IQ
1446908348,1446908351,TD
1446908352,1446908355,IQ
1446908356,1446908359,A2
1446908360,1446908363,LY
-1446908364,1446908367,A2
-1446908368,1446908371,IQ
-1446908372,1446908379,A2
-1446908380,1446908391,IQ
-1446908392,1446908419,A2
-1446908420,1446908423,IQ
-1446908424,1446908439,A2
-1446908440,1446908443,AF
-1446908444,1446908447,A2
-1446908448,1446908451,ZM
-1446908452,1446908455,A2
+1446908364,1446908379,A2
+1446908380,1446908383,IQ
+1446908384,1446908387,A2
+1446908388,1446908391,IQ
+1446908392,1446908423,A2
+1446908424,1446908427,AF
+1446908428,1446908435,A2
+1446908436,1446908443,AF
+1446908444,1446908455,A2
1446908456,1446908459,LB
1446908460,1446908479,A2
1446908480,1446908483,IQ
-1446908484,1446908487,A2
-1446908488,1446908491,IQ
-1446908492,1446908515,A2
-1446908516,1446908519,IQ
-1446908520,1446908531,A2
-1446908532,1446908535,IQ
-1446908536,1446908539,A2
-1446908540,1446908543,ZM
-1446908544,1446908599,A2
-1446908600,1446908603,ZM
+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
-1446908692,1446908707,A2
-1446908708,1446908711,IQ
-1446908712,1446908715,A2
-1446908716,1446908719,CM
-1446908720,1446908727,A2
-1446908728,1446908731,AF
-1446908732,1446908735,A2
-1446908736,1446908739,IQ
-1446908740,1446908743,A2
-1446908744,1446908747,GN
-1446908748,1446908751,A2
-1446908752,1446908759,IQ
-1446908760,1446908775,A2
-1446908776,1446908779,IQ
-1446908780,1446908787,A2
+1446908692,1446908755,A2
+1446908756,1446908759,IQ
+1446908760,1446908787,A2
1446908788,1446908791,NG
-1446908792,1446908839,A2
-1446908840,1446908843,IQ
-1446908844,1446908855,A2
-1446908856,1446908859,ZM
-1446908860,1446908863,A2
+1446908792,1446908863,A2
1446908864,1446908871,AF
1446908872,1446908875,A2
1446908876,1446908879,AF
-1446908880,1446908907,A2
-1446908908,1446908911,IQ
-1446908912,1446908919,A2
+1446908880,1446908919,A2
1446908920,1446908923,IQ
1446908924,1446908927,A2
1446908928,1446908931,IQ
-1446908932,1446908935,ZM
-1446908936,1446908955,A2
-1446908956,1446908959,LY
-1446908960,1446908963,IQ
-1446908964,1446908971,A2
+1446908932,1446908971,A2
1446908972,1446908975,AF
1446908976,1446908979,GA
1446908980,1446908983,AF
-1446908984,1446908987,LY
-1446908988,1446908991,A2
+1446908984,1446908991,A2
1446908992,1446908995,IQ
-1446908996,1446909003,A2
-1446909004,1446909007,LY
+1446908996,1446909007,A2
1446909008,1446909011,IQ
1446909012,1446909083,A2
1446909084,1446909087,CG
-1446909088,1446909111,A2
+1446909088,1446909095,A2
+1446909096,1446909099,TD
+1446909100,1446909111,A2
1446909112,1446909115,IQ
1446909116,1446909163,A2
1446909164,1446909167,IQ
1446909168,1446909187,A2
1446909188,1446909191,IQ
-1446909192,1446909195,A2
-1446909196,1446909207,IQ
-1446909208,1446909219,A2
-1446909220,1446909227,IQ
-1446909228,1446909271,A2
-1446909272,1446909275,IQ
-1446909276,1446909295,A2
+1446909192,1446909203,A2
+1446909204,1446909207,IQ
+1446909208,1446909239,A2
+1446909240,1446909243,LY
+1446909244,1446909295,A2
1446909296,1446909299,IQ
-1446909300,1446909307,A2
-1446909308,1446909319,IQ
-1446909320,1446909351,A2
-1446909352,1446909359,IQ
-1446909360,1446909363,A2
+1446909300,1446909363,A2
1446909364,1446909367,IQ
-1446909368,1446909391,A2
-1446909392,1446909395,ZM
-1446909396,1446909399,A2
+1446909368,1446909399,A2
1446909400,1446909403,AF
1446909404,1446909423,A2
1446909424,1446909435,AF
-1446909436,1446909439,A2
-1446909440,1446909443,IQ
+1446909436,1446909443,IQ
1446909444,1446909447,NG
-1446909448,1446909451,IQ
-1446909452,1446909459,A2
-1446909460,1446909463,LY
-1446909464,1446909467,A2
-1446909468,1446909471,EG
-1446909472,1446909479,A2
-1446909480,1446909483,EG
-1446909484,1446909487,LY
-1446909488,1446909491,EG
-1446909492,1446909495,A2
-1446909496,1446909499,EG
-1446909500,1446909507,IQ
-1446909508,1446909515,A2
+1446909448,1446909499,A2
+1446909500,1446909503,IQ
+1446909504,1446909507,LY
+1446909508,1446909511,IQ
+1446909512,1446909515,A2
1446909516,1446909519,EG
1446909520,1446909523,CG
1446909524,1446909527,A2
-1446909528,1446909535,EG
+1446909528,1446909531,EG
+1446909532,1446909535,A2
1446909536,1446909539,AF
-1446909540,1446909551,IQ
-1446909552,1446909555,A2
-1446909556,1446909559,IQ
-1446909560,1446909575,A2
+1446909540,1446909547,IQ
+1446909548,1446909575,A2
1446909576,1446909579,AF
1446909580,1446909599,A2
1446909600,1446909603,AF
-1446909604,1446909615,A2
-1446909616,1446909619,IQ
-1446909620,1446909647,A2
-1446909648,1446909651,NG
-1446909652,1446909655,A2
-1446909656,1446909659,AF
-1446909660,1446909667,A2
-1446909668,1446909671,IQ
-1446909672,1446909687,A2
+1446909604,1446909639,A2
+1446909640,1446909643,NG
+1446909644,1446909687,A2
1446909688,1446909691,AF
-1446909692,1446909731,A2
-1446909732,1446909735,IQ
-1446909736,1446909739,ZM
+1446909692,1446909739,A2
1446909740,1446909743,AF
-1446909744,1446909759,A2
-1446909760,1446909763,ZM
-1446909764,1446909787,A2
-1446909788,1446909791,IQ
-1446909792,1446909803,A2
+1446909744,1446909803,A2
1446909804,1446909807,AF
1446909808,1446909815,A2
1446909816,1446909819,AF
1446909820,1446909827,IQ
-1446909828,1446909851,A2
-1446909852,1446909855,LY
-1446909856,1446909867,A2
-1446909868,1446909871,LY
-1446909872,1446909879,A2
-1446909880,1446909883,LY
-1446909884,1446909887,A2
-1446909888,1446909891,LY
-1446909892,1446909899,A2
-1446909900,1446909911,IQ
-1446909912,1446909967,A2
+1446909828,1446909967,A2
1446909968,1446909971,LY
-1446909972,1446909975,A2
-1446909976,1446909991,LY
-1446909992,1446909995,A2
-1446909996,1446909999,IQ
+1446909972,1446909999,A2
1446910000,1446910003,AF
-1446910004,1446910011,A2
-1446910012,1446910015,IQ
-1446910016,1446910019,A2
-1446910020,1446910027,IQ
-1446910028,1446910031,A2
-1446910032,1446910035,LY
-1446910036,1446910039,A2
-1446910040,1446910043,IQ
-1446910044,1446910055,A2
+1446910004,1446910019,A2
+1446910020,1446910023,IQ
+1446910024,1446910035,A2
+1446910036,1446910039,NG
+1446910040,1446910055,A2
1446910056,1446910059,ZM
-1446910060,1446910063,IQ
-1446910064,1446910071,A2
-1446910072,1446910075,IQ
-1446910076,1446910083,A2
-1446910084,1446910095,IQ
-1446910096,1446910111,A2
-1446910112,1446910115,IQ
+1446910060,1446910111,A2
+1446910112,1446910115,NG
1446910116,1446910139,A2
1446910140,1446910143,NG
-1446910144,1446910159,A2
-1446910160,1446910163,ZM
+1446910144,1446910163,A2
1446910164,1446910167,NG
-1446910168,1446910175,A2
-1446910176,1446910179,ZM
-1446910180,1446910183,A2
-1446910184,1446910191,IQ
+1446910168,1446910187,A2
+1446910188,1446910191,IQ
1446910192,1446910195,A2
1446910196,1446910199,AF
1446910200,1446910215,A2
-1446910216,1446910220,IQ
-1446910221,1446910223,A2
+1446910216,1446910219,IQ
+1446910220,1446910223,A2
1446910224,1446910227,IQ
-1446910228,1446910235,A2
-1446910236,1446910239,IQ
-1446910240,1446910247,A2
-1446910248,1446910251,LY
-1446910252,1446910259,IQ
-1446910260,1446910263,A2
-1446910264,1446910267,IQ
-1446910268,1446910271,AF
-1446910272,1446910275,A2
+1446910228,1446910251,A2
+1446910252,1446910255,IQ
+1446910256,1446910275,A2
1446910276,1446910279,IQ
1446910280,1446910283,A2
-1446910284,1446910291,IQ
-1446910292,1446910299,A2
-1446910300,1446910307,IQ
+1446910284,1446910287,IQ
+1446910288,1446910303,A2
+1446910304,1446910307,IQ
1446910308,1446910311,AF
1446910312,1446910335,A2
1446910336,1446910339,AF
-1446910340,1446910343,A2
-1446910344,1446910347,LY
+1446910340,1446910347,A2
1446910348,1446910351,GA
-1446910352,1446910355,A2
-1446910356,1446910359,IQ
-1446910360,1446910375,A2
+1446910352,1446910359,A2
+1446910360,1446910363,IQ
+1446910364,1446910375,A2
1446910376,1446910379,AF
-1446910380,1446910455,A2
-1446910456,1446910459,IQ
-1446910460,1446910463,A2
-1446910464,1446910479,LY
-1446910480,1446910495,A2
+1446910380,1446910459,A2
+1446910460,1446910463,LY
+1446910464,1446910471,A2
+1446910472,1446910479,LY
+1446910480,1446910487,EG
+1446910488,1446910495,A2
1446910496,1446910503,NG
-1446910504,1446910527,A2
-1446910528,1446910535,AF
-1446910536,1446910599,A2
+1446910504,1446910599,A2
1446910600,1446910607,NG
1446910608,1446910623,A2
-1446910624,1446910631,AF
-1446910632,1446910679,A2
-1446910680,1446910687,EG
-1446910688,1446910695,A2
+1446910624,1446910639,AF
+1446910640,1446910695,A2
1446910696,1446910711,SD
-1446910712,1446910719,AE
-1446910720,1446910727,A2
+1446910712,1446910727,A2
1446910728,1446910731,AF
1446910732,1446910739,A2
1446910740,1446910747,AF
-1446910748,1446910751,A2
-1446910752,1446910755,LY
-1446910756,1446910767,IQ
-1446910768,1446910771,A2
-1446910772,1446910775,AF
-1446910776,1446910779,IQ
-1446910780,1446910783,A2
-1446910784,1446910787,LY
-1446910788,1446910791,IQ
-1446910792,1446910799,A2
+1446910748,1446910767,A2
+1446910768,1446910775,AF
+1446910776,1446910791,A2
+1446910792,1446910795,LY
+1446910796,1446910799,A2
1446910800,1446910807,IQ
1446910808,1446910815,A2
1446910816,1446910819,IQ
@@ -43872,19 +46948,15 @@
1446910836,1446910839,AF
1446910840,1446910843,A2
1446910844,1446910847,NG
-1446910848,1446910855,IQ
-1446910856,1446910883,A2
-1446910884,1446910887,IQ
-1446910888,1446910899,A2
-1446910900,1446910903,IQ
-1446910904,1446910911,A2
+1446910848,1446910851,IQ
+1446910852,1446910887,A2
+1446910888,1446910891,LY
+1446910892,1446910911,A2
1446910912,1446910915,IQ
1446910916,1446910919,A2
1446910920,1446910923,AF
-1446910924,1446910927,A2
-1446910928,1446910931,NG
-1446910932,1446910935,A2
-1446910936,1446910939,IQ
+1446910924,1446910931,A2
+1446910932,1446910939,IQ
1446910940,1446910951,A2
1446910952,1446910955,IQ
1446910956,1446910963,A2
@@ -43898,218 +46970,178 @@
1446910996,1446910999,IQ
1446911000,1446911003,A2
1446911004,1446911007,IQ
-1446911008,1446911011,LY
-1446911012,1446911015,A2
+1446911008,1446911015,A2
1446911016,1446911023,IQ
1446911024,1446911027,LY
1446911028,1446911031,AF
-1446911032,1446911035,A2
-1446911036,1446911039,LY
-1446911040,1446911047,A2
-1446911048,1446911051,LY
-1446911052,1446911059,A2
-1446911060,1446911067,IQ
-1446911068,1446911079,A2
-1446911080,1446911087,LY
+1446911032,1446911083,A2
+1446911084,1446911087,LY
1446911088,1446911095,A2
1446911096,1446911099,NG
-1446911100,1446911103,IQ
-1446911104,1446911107,SD
-1446911108,1446911111,A2
+1446911100,1446911111,A2
1446911112,1446911115,SD
-1446911116,1446911143,A2
+1446911116,1446911123,A2
+1446911124,1446911143,LY
1446911144,1446911147,TD
1446911148,1446911163,A2
1446911164,1446911171,IQ
-1446911172,1446911179,A2
-1446911180,1446911183,IQ
-1446911184,1446911195,A2
-1446911196,1446911203,IQ
-1446911204,1446911207,A2
+1446911172,1446911207,A2
1446911208,1446911215,IQ
1446911216,1446911223,A2
1446911224,1446911227,AF
-1446911228,1446911231,LY
-1446911232,1446911235,A2
+1446911228,1446911235,A2
1446911236,1446911239,IQ
-1446911240,1446911251,A2
-1446911252,1446911255,IQ
-1446911256,1446911263,A2
+1446911240,1446911255,A2
+1446911256,1446911259,LY
+1446911260,1446911263,AF
1446911264,1446911267,IQ
1446911268,1446911271,AF
-1446911272,1446911283,A2
-1446911284,1446911287,IQ
-1446911288,1446911291,LY
-1446911292,1446911295,A2
-1446911296,1446911299,GH
-1446911300,1446911307,IQ
-1446911308,1446911331,A2
-1446911332,1446911335,ZM
-1446911336,1446911339,IQ
-1446911340,1446911343,AF
-1446911344,1446911351,A2
-1446911352,1446911355,IQ
-1446911356,1446911359,A2
-1446911360,1446911363,IQ
-1446911364,1446911367,A2
-1446911368,1446911371,LY
-1446911372,1446911375,A2
-1446911376,1446911379,LY
-1446911380,1446911383,IQ
-1446911384,1446911387,A2
-1446911388,1446911395,LY
-1446911396,1446911415,A2
-1446911416,1446911423,IQ
+1446911272,1446911303,A2
+1446911304,1446911307,IQ
+1446911308,1446911319,A2
+1446911320,1446911323,AF
+1446911324,1446911343,A2
+1446911344,1446911347,IQ
+1446911348,1446911351,LY
+1446911352,1446911363,A2
+1446911364,1446911367,LY
+1446911368,1446911395,A2
+1446911396,1446911399,AF
+1446911400,1446911403,A2
+1446911404,1446911407,AF
+1446911408,1446911411,LY
+1446911412,1446911423,A2
1446911424,1446911427,AF
1446911428,1446911435,A2
1446911436,1446911439,SD
-1446911440,1446911447,IQ
-1446911448,1446911451,A2
-1446911452,1446911459,IQ
-1446911460,1446911475,A2
+1446911440,1446911443,A2
+1446911444,1446911447,IQ
+1446911448,1446911459,A2
+1446911460,1446911463,LY
+1446911464,1446911475,A2
1446911476,1446911479,ER
1446911480,1446911483,CG
-1446911484,1446911519,A2
-1446911520,1446911523,IQ
-1446911524,1446911527,A2
-1446911528,1446911531,IQ
-1446911532,1446911535,A2
+1446911484,1446911487,A2
+1446911488,1446911491,LY
+1446911492,1446911507,A2
+1446911508,1446911511,AF
+1446911512,1446911515,EG
+1446911516,1446911535,A2
1446911536,1446911539,SD
-1446911540,1446911543,A2
+1446911540,1446911543,LY
1446911544,1446911547,AF
-1446911548,1446911551,LY
-1446911552,1446911567,A2
+1446911548,1446911559,A2
+1446911560,1446911563,LY
+1446911564,1446911567,A2
1446911568,1446911571,IQ
-1446911572,1446911575,LY
-1446911576,1446911579,IQ
-1446911580,1446911595,A2
-1446911596,1446911597,LY
-1446911598,1446911619,A2
-1446911620,1446911623,GH
+1446911572,1446911579,A2
+1446911580,1446911583,CG
+1446911584,1446911587,A2
+1446911588,1446911591,LY
+1446911592,1446911595,AF
+1446911596,1446911599,A2
+1446911600,1446911603,LY
+1446911604,1446911615,A2
+1446911616,1446911619,LY
+1446911620,1446911623,A2
1446911624,1446911627,IQ
-1446911628,1446911655,A2
-1446911656,1446911659,IQ
-1446911660,1446911671,A2
-1446911672,1446911675,LY
-1446911676,1446911679,A2
+1446911628,1446911631,AF
+1446911632,1446911635,IQ
+1446911636,1446911679,A2
1446911680,1446911683,SD
-1446911684,1446911691,LY
-1446911692,1446911695,AF
-1446911696,1446911703,A2
-1446911704,1446911707,LY
-1446911708,1446911711,A2
-1446911712,1446911715,LY
-1446911716,1446911719,A2
-1446911720,1446911723,LY
-1446911724,1446911727,A2
-1446911728,1446911735,LY
-1446911736,1446911743,A2
+1446911684,1446911691,A2
+1446911692,1446911695,LY
+1446911696,1446911699,A2
+1446911700,1446911701,LY
+1446911702,1446911739,A2
+1446911740,1446911743,LY
1446911744,1446911751,IQ
-1446911752,1446911755,LY
-1446911756,1446911759,EG
-1446911760,1446911763,IQ
-1446911764,1446911767,A2
-1446911768,1446911771,AF
-1446911772,1446911779,IQ
+1446911752,1446911763,A2
+1446911764,1446911767,LY
+1446911768,1446911771,A2
+1446911772,1446911775,AF
+1446911776,1446911779,A2
1446911780,1446911783,AF
-1446911784,1446911787,LY
+1446911784,1446911787,A2
1446911788,1446911791,AF
-1446911792,1446911795,LY
+1446911792,1446911795,A2
1446911796,1446911799,IQ
-1446911800,1446911803,A2
-1446911804,1446911811,LY
-1446911812,1446911815,IQ
-1446911816,1446911819,LY
-1446911820,1446911827,IQ
-1446911828,1446911835,A2
+1446911800,1446911803,NG
+1446911804,1446911819,A2
+1446911820,1446911823,IQ
+1446911824,1446911827,A2
+1446911828,1446911831,IQ
+1446911832,1446911835,A2
1446911836,1446911843,IQ
1446911844,1446911847,A2
1446911848,1446911855,IQ
1446911856,1446911859,AF
-1446911860,1446911863,A2
-1446911864,1446911867,IQ
+1446911860,1446911867,A2
1446911868,1446911871,LY
1446911872,1446911875,AF
-1446911876,1446911879,A2
-1446911880,1446911883,IQ
-1446911884,1446911887,NG
-1446911888,1446911891,IQ
-1446911892,1446911895,A2
-1446911896,1446911899,IQ
-1446911900,1446911903,A2
+1446911876,1446911903,A2
1446911904,1446911907,AF
-1446911908,1446911911,IQ
-1446911912,1446911923,A2
-1446911924,1446911927,IQ
-1446911928,1446911935,A2
-1446911936,1446911939,IQ
-1446911940,1446911943,A2
-1446911944,1446911967,IQ
-1446911968,1446911975,A2
-1446911976,1446911987,IQ
-1446911988,1446911991,AF
-1446911992,1446911995,A2
-1446911996,1446911999,IQ
-1446912000,1446912003,BJ
+1446911908,1446911947,A2
+1446911948,1446911951,IQ
+1446911952,1446911955,A2
+1446911956,1446911959,IQ
+1446911960,1446911963,A2
+1446911964,1446911967,IQ
+1446911968,1446911987,A2
+1446911988,1446911995,AF
+1446911996,1446912003,A2
1446912004,1446912007,AF
-1446912008,1446912015,IQ
-1446912016,1446912019,BJ
-1446912020,1446912023,ZM
-1446912024,1446912027,LY
+1446912008,1446912011,A2
+1446912012,1446912015,IQ
+1446912016,1446912027,A2
1446912028,1446912031,AF
-1446912032,1446912035,IQ
+1446912032,1446912035,A2
1446912036,1446912039,AF
-1446912040,1446912047,A2
-1446912048,1446912051,IQ
+1446912040,1446912043,IQ
+1446912044,1446912047,CG
+1446912048,1446912051,AF
1446912052,1446912055,ER
1446912056,1446912059,A2
1446912060,1446912063,NG
1446912064,1446912067,AF
-1446912068,1446912071,IQ
-1446912072,1446912075,AE
+1446912068,1446912071,A2
+1446912072,1446912075,IQ
1446912076,1446912079,A2
1446912080,1446912083,IQ
-1446912084,1446912087,A2
-1446912088,1446912091,IQ
-1446912092,1446912095,LY
-1446912096,1446912099,AF
-1446912100,1446912107,IQ
-1446912108,1446912111,A2
-1446912112,1446912115,IQ
+1446912084,1446912087,AF
+1446912088,1446912095,A2
+1446912096,1446912103,AF
+1446912104,1446912115,A2
1446912116,1446912119,LY
-1446912120,1446912123,A2
-1446912124,1446912127,LY
-1446912128,1446912131,IQ
-1446912132,1446912139,A2
-1446912140,1446912143,IQ
-1446912144,1446912147,AF
-1446912148,1446912151,IQ
+1446912120,1446912151,A2
1446912152,1446912155,CF
-1446912156,1446912159,A2
-1446912160,1446912167,IQ
-1446912168,1446912179,A2
-1446912180,1446912183,ZM
+1446912156,1446912163,A2
+1446912164,1446912167,IQ
+1446912168,1446912183,A2
1446912184,1446912187,AF
-1446912188,1446912203,IQ
-1446912204,1446912207,A2
-1446912208,1446912219,IQ
-1446912220,1446912223,LY
-1446912224,1446912235,IQ
-1446912236,1446912243,A2
-1446912244,1446912247,IQ
+1446912188,1446912191,IQ
+1446912192,1446912195,A2
+1446912196,1446912203,IQ
+1446912204,1446912215,A2
+1446912216,1446912219,IQ
+1446912220,1446912239,A2
+1446912240,1446912247,IQ
1446912248,1446912251,AF
1446912252,1446912255,IQ
1446912256,1446912263,AF
1446912264,1446912295,IQ
-1446912296,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,1446920191,A2
+1446912400,1446912415,AF
+1446912416,1446912423,A2
+1446912424,1446912431,AF
+1446912432,1446920191,A2
1446920192,1446936575,RU
1446936576,1446952959,NO
1446952960,1446969343,QA
@@ -44131,11 +47163,7 @@
1449656320,1449657087,GB
1449657088,1449658623,RO
1449658624,1449659135,GB
-1449659136,1449660415,RO
-1449660416,1449662463,GB
-1449662464,1449676799,RO
-1449676800,1449678847,GB
-1449678848,1449685759,RO
+1449659136,1449685759,RO
1449685760,1449686271,GB
1449686272,1449686527,RO
1449686528,1449687039,GB
@@ -44147,9 +47175,7 @@
1449705472,1449705727,GB
1449705728,1449706239,RO
1449706240,1449706495,GB
-1449706496,1449707519,RO
-1449707520,1449709567,GB
-1449709568,1449710591,RO
+1449706496,1449710591,RO
1449710592,1449711103,GB
1449711104,1449711359,RO
1449711360,1449711615,GB
@@ -44181,35 +47207,21 @@
1449795328,1449795583,GB
1449795584,1449808639,RO
1449808640,1449808895,UA
-1449808896,1449823231,RO
-1449823232,1449826303,GB
-1449826304,1449827839,RO
-1449827840,1449828095,GB
-1449828096,1449830655,RO
+1449808896,1449830655,RO
1449830656,1449830911,GB
1449830912,1449840639,RO
1449840640,1449852927,MD
1449852928,1449854975,GB
1449854976,1449859071,RO
1449859072,1449859583,GB
-1449859584,1449859839,RO
-1449859840,1449860095,GB
-1449860096,1449869311,RO
-1449869312,1449870335,GB
-1449870336,1449870847,RO
-1449870848,1449871615,GB
-1449871616,1449879551,RO
-1449879552,1449881599,GB
-1449881600,1449895935,RO
-1449895936,1449896191,GB
-1449896192,1449896703,RO
-1449896704,1449896959,GB
-1449896960,1449899007,RO
-1449899008,1449899263,GB
-1449899264,1449899519,RO
-1449899520,1449899775,GB
-1449899776,1449904127,RO
-1449904128,1449910271,GB
+1449859584,1449879551,RO
+1449879552,1449879807,GB
+1449879808,1449880063,RO
+1449880064,1449880319,GB
+1449880320,1449881087,RO
+1449881088,1449881599,GB
+1449881600,1449908223,RO
+1449908224,1449910271,GB
1449910272,1449918463,RO
1449918464,1449951231,JO
1449951232,1449983999,TR
@@ -44231,10 +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,1450156031,RU
+1450147840,1450151935,CH
+1450151936,1450153983,IQ
+1450153984,1450156031,DE
1450156032,1450164223,GB
1450164224,1450166271,SA
1450166272,1450168319,PL
@@ -44259,7 +47276,11 @@
1464074240,1464336383,IL
1464336384,1464467455,DK
1464467456,1464598527,GB
-1464598528,1464860671,DE
+1464598528,1464602623,RU
+1464602624,1464606719,US
+1464606720,1464614911,KZ
+1464614912,1464664063,UA
+1464664064,1464860671,DE
1464860672,1465384959,GB
1465384960,1465647103,FR
1465647104,1465909247,FI
@@ -44291,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
@@ -44304,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
@@ -44336,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
@@ -44345,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
@@ -44355,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
@@ -44392,11 +47411,7 @@
1467466272,1467466495,NL
1467466496,1467467071,DE
1467467072,1467467103,CH
-1467467104,1467467903,DE
-1467467904,1467468031,CH
-1467468032,1467468111,DE
-1467468112,1467468119,BR
-1467468120,1467473919,DE
+1467467104,1467473919,DE
1467473920,1467482111,RU
1467482112,1467613183,BG
1467613184,1467744255,DE
@@ -44476,9 +47491,7 @@
1475115008,1475117055,KW
1475117056,1475119103,GB
1475119104,1475121151,BH
-1475121152,1475121919,GB
-1475121920,1475122175,US
-1475122176,1475123199,GB
+1475121152,1475123199,GB
1475123200,1475125247,FI
1475125248,1475127295,IT
1475127296,1475129343,FI
@@ -44486,7 +47499,7 @@
1475131392,1475133439,RU
1475133440,1475135487,CZ
1475135488,1475137535,CH
-1475137536,1475139583,SE
+1475137536,1475139583,GB
1475139584,1475141631,ES
1475141632,1475143679,FI
1475143680,1475145727,JO
@@ -44519,6 +47532,7 @@
1475182080,1475182335,RO
1475182336,1475184639,DE
1475184640,1475186687,RU
+1475186688,1475188735,GB
1475188736,1475190783,SE
1475190784,1475192831,GB
1475192832,1475194879,CH
@@ -44560,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,1475230111,SE
-1475230112,1475230199,NO
-1475230200,1475230207,SE
+1475229952,1475230207,SE
1475230208,1475233791,NO
1475233792,1475234303,GB
1475234304,1475234559,IE
@@ -44584,12 +47590,11 @@
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,1475245567,DE
-1475245568,1475246078,SA
-1475246079,1475246079,DE
+1475245312,1475246079,DE
1475246080,1475248127,CH
1475248128,1475250175,JO
1475250176,1475252223,DE
@@ -44634,6 +47639,7 @@
1475287040,1475291135,RU
1475291136,1475293183,PL
1475293184,1475295231,GB
+1475295232,1475297279,SK
1475297280,1475299327,DK
1475299328,1475301375,PL
1475301376,1475303423,LT
@@ -44663,9 +47669,7 @@
1475395584,1475411967,LU
1475411968,1475412383,IT
1475412384,1475412391,ES
-1475412392,1475412471,IT
-1475412472,1475412479,ES
-1475412480,1475417975,IT
+1475412392,1475417975,IT
1475417976,1475417983,A2
1475417984,1475428351,IT
1475428352,1475444735,SE
@@ -44684,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
@@ -44706,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
@@ -44736,18 +47736,56 @@
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
1475727360,1475727391,FI
-1475727392,1475729407,GB
+1475727392,1475727615,GB
+1475727616,1475727623,FI
+1475727624,1475727631,GB
+1475727632,1475727639,FI
+1475727640,1475727807,GB
+1475727808,1475727871,FI
+1475727872,1475729087,GB
+1475729088,1475729103,DE
+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
@@ -44757,6 +47795,7 @@
1475837952,1475846143,GB
1475846144,1475854335,IR
1475854336,1475862527,AT
+1475862528,1475864575,FR
1475864576,1475866623,IT
1475866624,1475868671,GB
1475868672,1475870719,BG
@@ -45032,21 +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,SA
+1486325760,1486327807,PL
1486327808,1486329855,CH
-1486329856,1486331903,FR
1486331904,1486333951,NO
1486333952,1486335999,SE
1486336000,1486338047,KZ
@@ -45096,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
@@ -45110,8 +48139,122 @@
1489650688,1489651199,A2
1489651200,1489653759,IT
1489653760,1489657855,A2
-1489657856,1489661951,IT
-1489661952,1489662719,A2
+1489657856,1489659919,IT
+1489659920,1489659935,FR
+1489659936,1489659951,DE
+1489659952,1489659967,CY
+1489659968,1489659983,FI
+1489659984,1489659999,GR
+1489660000,1489660015,IE
+1489660016,1489660031,ES
+1489660032,1489660047,PL
+1489660048,1489660063,GB
+1489660064,1489660079,AD
+1489660080,1489660095,AE
+1489660096,1489660111,AL
+1489660112,1489660127,AM
+1489660128,1489660143,AT
+1489660144,1489660159,BA
+1489660160,1489660175,BE
+1489660176,1489660191,BG
+1489660192,1489660207,BH
+1489660208,1489660223,BY
+1489660224,1489660239,CH
+1489660240,1489660255,CZ
+1489660256,1489660271,DK
+1489660272,1489660287,DZ
+1489660288,1489660303,EE
+1489660304,1489660319,EG
+1489660320,1489660335,HR
+1489660336,1489660351,HU
+1489660352,1489660367,KW
+1489660368,1489660383,LI
+1489660384,1489660399,LT
+1489660400,1489660415,LU
+1489660416,1489660431,LV
+1489660432,1489660447,LY
+1489660448,1489660463,MA
+1489660464,1489660479,MC
+1489660480,1489660495,MD
+1489660496,1489660511,ME
+1489660512,1489660527,MK
+1489660528,1489660543,MT
+1489660544,1489660559,NL
+1489660560,1489660575,NO
+1489660576,1489660591,OM
+1489660592,1489660607,PT
+1489660608,1489660623,QA
+1489660624,1489660639,RO
+1489660640,1489660655,RS
+1489660656,1489660671,RU
+1489660672,1489660687,SA
+1489660688,1489660703,SE
+1489660704,1489660719,SI
+1489660720,1489660735,SK
+1489660736,1489660751,SM
+1489660752,1489660767,TN
+1489660768,1489660783,TR
+1489660784,1489660799,UA
+1489660800,1489660815,VA
+1489660816,1489660927,A2
+1489660928,1489660943,IT
+1489660944,1489660959,FR
+1489660960,1489660975,DE
+1489660976,1489660991,CY
+1489660992,1489661007,FI
+1489661008,1489661023,GR
+1489661024,1489661039,IE
+1489661040,1489661055,ES
+1489661056,1489661071,PL
+1489661072,1489661087,GB
+1489661088,1489661103,AD
+1489661104,1489661119,AE
+1489661120,1489661135,AL
+1489661136,1489661151,AM
+1489661152,1489661167,AT
+1489661168,1489661183,BA
+1489661184,1489661199,BE
+1489661200,1489661215,BG
+1489661216,1489661231,BH
+1489661232,1489661247,BY
+1489661248,1489661263,CH
+1489661264,1489661279,CZ
+1489661280,1489661295,DK
+1489661296,1489661311,DZ
+1489661312,1489661327,EE
+1489661328,1489661343,EG
+1489661344,1489661359,HR
+1489661360,1489661375,HU
+1489661376,1489661391,KW
+1489661392,1489661407,LI
+1489661408,1489661423,LT
+1489661424,1489661439,LU
+1489661440,1489661455,LV
+1489661456,1489661471,LY
+1489661472,1489661487,MA
+1489661488,1489661503,MC
+1489661504,1489661519,MD
+1489661520,1489661535,ME
+1489661536,1489661551,MK
+1489661552,1489661567,MT
+1489661568,1489661583,NL
+1489661584,1489661599,NO
+1489661600,1489661615,OM
+1489661616,1489661631,PT
+1489661632,1489661647,QA
+1489661648,1489661663,RO
+1489661664,1489661679,RS
+1489661680,1489661695,RU
+1489661696,1489661711,SA
+1489661712,1489661727,SE
+1489661728,1489661743,SI
+1489661744,1489661759,SK
+1489661760,1489661775,SM
+1489661776,1489661791,TN
+1489661792,1489661807,TR
+1489661808,1489661823,UA
+1489661824,1489661839,VA
+1489661840,1489662719,A2
1489662720,1489662975,ZA
1489662976,1489663487,FR
1489663488,1489663999,ES
@@ -45124,12 +48267,14 @@
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
@@ -45139,9 +48284,9 @@
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
@@ -45170,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
@@ -45249,6 +48394,7 @@
1494294528,1494302719,RU
1494302720,1494310911,FI
1494310912,1494319103,LB
+1494319104,1494327295,IS
1494327296,1494335487,IT
1494335488,1494343679,ES
1494343680,1494351871,PL
@@ -45295,6 +48441,20 @@
1494597376,1494597631,NL
1494597632,1494605823,IT
1494605824,1494614015,GB
+1494614016,1494616063,RU
+1494616064,1494618111,ES
+1494618112,1494622207,RU
+1494622208,1494624255,PL
+1494624256,1494626303,UA
+1494626304,1494630399,RO
+1494630400,1494638591,CZ
+1494638592,1494646783,DE
+1494646784,1494663167,RU
+1494663168,1494665215,PL
+1494665216,1494667263,UA
+1494667264,1494669311,PL
+1494669312,1494675455,RU
+1494675456,1494679551,UA
1494679552,1494695935,RU
1494695936,1494704127,RS
1494704128,1494736895,RU
@@ -45340,8 +48500,12 @@
1495146496,1495150591,FR
1495150592,1495151103,GB
1495151104,1495151359,NL
-1495151360,1495154687,FR
-1495154688,1495161599,EU
+1495151360,1495153919,FR
+1495153920,1495154175,TR
+1495154176,1495154687,FR
+1495154688,1495160063,EU
+1495160064,1495160319,NL
+1495160320,1495161599,EU
1495161600,1495161855,FR
1495161856,1495162367,EU
1495162368,1495162879,US
@@ -45380,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
@@ -45390,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
@@ -45416,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
@@ -45457,10 +48643,8 @@
1495891968,1495927295,RO
1495927296,1495927551,AE
1495927552,1495937023,RO
-1495937024,1495937535,ES
-1495937536,1495986175,RO
-1495986176,1495988223,GB
-1495988224,1495990271,RO
+1495937024,1495937535,SE
+1495937536,1495990271,RO
1495990272,1495994367,GB
1495994368,1496078335,RO
1496078336,1496079359,MD
@@ -45470,7 +48654,9 @@
1496121344,1496122367,MD
1496122368,1496178943,RO
1496178944,1496179199,AE
-1496179200,1496317951,RO
+1496179200,1496262655,RO
+1496262656,1496263167,AE
+1496263168,1496317951,RO
1496317952,1497366527,DE
1497366528,1498415103,PL
1498415104,1499463679,FR
@@ -45490,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
@@ -45508,7 +48692,9 @@
1500108160,1500108287,DE
1500108288,1500108319,NL
1500108320,1500108351,DE
-1500108352,1500110847,NL
+1500108352,1500108367,NL
+1500108368,1500108375,DE
+1500108376,1500110847,NL
1500110848,1500119039,UA
1500119040,1500127231,TR
1500127232,1500135423,FI
@@ -45634,23 +48820,24 @@
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
1502674944,1502691327,DE
1502691328,1502691679,GB
1502691680,1502691711,SE
-1502691712,1502692415,GB
-1502692416,1502692479,ES
-1502692480,1502706623,GB
+1502691712,1502702835,GB
+1502702836,1502702839,IE
+1502702840,1502703103,GB
+1502703104,1502703615,SE
+1502703616,1502706623,GB
1502706624,1502706687,CY
-1502706688,1502707631,GB
-1502707632,1502707639,IE
-1502707640,1502707711,GB
-1502707712,1502724095,RU
+1502706688,1502707711,GB
+1502707712,1502715903,RU
+1502715904,1502717951,IT
+1502717952,1502719999,GB
+1502720000,1502722047,CH
1502724096,1502740479,GB
1502740480,1502756863,NL
1502756864,1502773247,UZ
@@ -45677,18 +48864,18 @@
1502969856,1502975231,US
1502975232,1502975247,FR
1502975248,1502975263,IE
-1502975264,1502975311,FR
+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
@@ -45708,12 +48895,14 @@
1502981120,1502981887,US
1502981888,1502982143,NL
1502982144,1502982911,DE
-1502982912,1502983423,FR
-1502983424,1502986255,DE
+1502982912,1502983167,FR
+1502983168,1502986255,DE
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
@@ -45758,7 +48947,8 @@
1503895608,1503895631,DE
1503895632,1503895639,AT
1503895640,1503895647,GR
-1503895648,1503895671,DE
+1503895648,1503895663,DE
+1503895664,1503895671,FR
1503895672,1503895679,PL
1503895680,1503895687,IT
1503895688,1503895695,DE
@@ -45814,20 +49004,16 @@
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
1503898576,1503898599,DE
1503898600,1503898607,IT
1503898608,1503898615,GR
-1503898616,1503898623,SE
-1503898624,1503898631,DE
+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
@@ -45837,10 +49023,13 @@
1503898888,1503898895,IT
1503898896,1503898935,DE
1503898936,1503898943,IT
-1503898944,1503898991,DE
+1503898944,1503898959,DE
+1503898960,1503898967,IT
+1503898968,1503898991,DE
1503898992,1503898999,GB
1503899000,1503899007,AT
-1503899008,1503899063,DE
+1503899008,1503899015,CH
+1503899016,1503899063,DE
1503899064,1503899079,AT
1503899080,1503899119,DE
1503899120,1503899127,NL
@@ -45848,7 +49037,30 @@
1503899144,1503899151,IT
1503899152,1503899159,DE
1503899160,1503899167,GB
-1503899168,1503908351,DE
+1503899168,1503899183,DE
+1503899184,1503899191,GR
+1503899192,1503899199,CH
+1503899200,1503899263,DE
+1503899264,1503899271,AT
+1503899272,1503899287,BE
+1503899288,1503899295,CH
+1503899296,1503899303,GR
+1503899304,1503899311,NL
+1503899312,1503899319,RU
+1503899320,1503899335,DE
+1503899336,1503899343,TH
+1503899344,1503899351,DE
+1503899352,1503899367,GR
+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
@@ -45900,9 +49112,7 @@
1505247232,1505255423,UA
1505255424,1505263615,IT
1505263616,1505271807,DK
-1505271808,1505273087,NL
-1505273088,1505273095,NZ
-1505273096,1505279999,NL
+1505271808,1505279999,NL
1505280000,1505288191,IR
1505288192,1505296383,RU
1505296384,1505304575,UA
@@ -45927,36 +49137,44 @@
1505312768,1505320959,RU
1505320960,1505321103,AT
1505321104,1505321135,DE
-1505321136,1505321407,AT
-1505321408,1505321439,DE
-1505321440,1505321631,AT
-1505321632,1505321823,DE
+1505321136,1505321423,AT
+1505321424,1505321439,DE
+1505321440,1505321663,AT
+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
1505329152,1505329215,GB
-1505329216,1505329375,IE
+1505329216,1505329231,IE
+1505329232,1505329247,GB
+1505329248,1505329375,IE
1505329376,1505329407,GB
1505329408,1505332991,IE
1505332992,1505332999,GB
-1505333000,1505333623,IE
+1505333000,1505333471,IE
+1505333472,1505333487,GB
+1505333488,1505333623,IE
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,1505336831,IE
-1505336832,1505336863,GB
+1505336640,1505336655,IE
+1505336656,1505336663,GB
+1505336664,1505336823,IE
+1505336824,1505336863,GB
1505336864,1505336864,IE
1505336865,1505336879,GB
1505336880,1505336959,IE
@@ -46023,10 +49241,14 @@
1505455768,1505455791,GB
1505455792,1505455799,US
1505455800,1505455999,GB
-1505456000,1505456063,US
-1505456064,1505456127,GB
+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
@@ -46044,8 +49266,9 @@
1505458528,1505458543,GB
1505458544,1505458559,US
1505458560,1505460223,GB
-1505460224,1505476607,CZ
-1505476608,1505484799,RU
+1505460224,1505478655,CZ
+1505478656,1505482751,DE
+1505482752,1505484799,LB
1505484800,1505492991,PL
1505492992,1505501183,NL
1505501184,1505509375,ME
@@ -46082,7 +49305,9 @@
1505709056,1505714175,DE
1505714176,1505722367,LV
1505722368,1505738751,PL
-1505738752,1505745839,GB
+1505738752,1505745135,GB
+1505745136,1505745151,ES
+1505745152,1505745839,GB
1505745840,1505745855,IL
1505745856,1505746943,GB
1505746944,1505755135,RU
@@ -46107,19 +49332,35 @@
1506418688,1506418695,CY
1506418696,1506418703,GB
1506418704,1506418719,CA
-1506418720,1506422655,DE
+1506418720,1506418975,DE
+1506418976,1506418983,CA
+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,1506437631,DE
+1506437504,1506437551,DE
+1506437552,1506437567,BG
+1506437568,1506437583,DE
+1506437584,1506437615,NL
+1506437616,1506437623,US
+1506437624,1506437631,DE
1506437632,1506437887,MU
1506437888,1506437903,CA
1506437904,1506437919,US
@@ -46149,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
@@ -46218,24 +49461,26 @@
1506444288,1506445311,DE
1506445312,1506445337,FR
1506445338,1506445343,GB
-1506445344,1506445407,FR
-1506445408,1506445439,GB
-1506445440,1506445519,FR
+1506445344,1506445519,FR
1506445520,1506445527,GB
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,1506446335,FR
+1506445824,1506446143,FR
+1506446144,1506446151,GB
+1506446152,1506446335,FR
1506446336,1506446719,NL
-1506446720,1506446727,GB
-1506446728,1506447359,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
@@ -46246,9 +49491,7 @@
1506448704,1506448895,GB
1506448896,1506449159,BE
1506449160,1506449171,GB
-1506449172,1506449255,BE
-1506449256,1506449263,GB
-1506449264,1506449407,BE
+1506449172,1506449407,BE
1506449408,1506449663,NL
1506449664,1506449919,SK
1506449920,1506449927,CH
@@ -46261,7 +49504,10 @@
1506450848,1506450863,CZ
1506450864,1506450879,GB
1506450880,1506450943,CZ
-1506450944,1506451007,GB
+1506450944,1506450958,DK
+1506450959,1506450959,GB
+1506450960,1506450967,DK
+1506450968,1506451007,GB
1506451008,1506451023,DK
1506451024,1506451031,FI
1506451032,1506451039,DK
@@ -46270,7 +49516,9 @@
1506451060,1506451199,GB
1506451200,1506451791,ES
1506451792,1506451799,GB
-1506451800,1506451895,ES
+1506451800,1506451871,ES
+1506451872,1506451887,GB
+1506451888,1506451895,ES
1506451896,1506451903,GB
1506451904,1506452143,ES
1506452144,1506452159,GB
@@ -46290,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
@@ -46318,7 +49568,9 @@
1506460064,1506460079,GB
1506460080,1506460126,FR
1506460127,1506460127,GB
-1506460128,1506460335,FR
+1506460128,1506460315,FR
+1506460316,1506460319,GB
+1506460320,1506460335,FR
1506460336,1506460343,GB
1506460344,1506460671,FR
1506460672,1506460927,AT
@@ -46336,12 +49588,14 @@
1506462208,1506462463,ES
1506462464,1506462527,FR
1506462528,1506462583,GB
-1506462584,1506462607,FR
-1506462608,1506462623,A2
-1506462624,1506462719,FR
+1506462584,1506462599,FR
+1506462600,1506462607,GB
+1506462608,1506462719,FR
1506462720,1506463231,IT
1506463232,1506463487,SE
-1506463488,1506463999,DE
+1506463488,1506463671,DE
+1506463672,1506463679,GB
+1506463680,1506463999,DE
1506464000,1506464767,GB
1506464768,1506465279,NL
1506465280,1506465791,GB
@@ -46353,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
@@ -46373,12 +49631,12 @@
1506472704,1506473215,IT
1506473216,1506473471,GB
1506473472,1506474247,IT
-1506474248,1506474271,GB
-1506474272,1506474495,IT
+1506474248,1506474255,GB
+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
@@ -46395,9 +49653,10 @@
1506743168,1506743183,DE
1506743184,1506743199,FR
1506743200,1506743215,IE
-1506743216,1506743232,GB
-1506743233,1506744319,SE
-1506744320,1506746367,NL
+1506743216,1506744319,SE
+1506744320,1506744383,NL
+1506744384,1506744391,GB
+1506744392,1506746367,NL
1506746368,1506750463,RU
1506750464,1506752511,GB
1506752512,1506754559,IE
@@ -46410,14 +49669,29 @@
1506767616,1506767679,NO
1506767680,1506768895,GE
1506768896,1506770943,AT
-1506770944,1506772991,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
+1506772146,1506772147,NL
+1506772148,1506772176,TR
+1506772177,1506772323,NL
+1506772324,1506772325,IR
+1506772326,1506772361,NL
+1506772362,1506772364,IR
+1506772365,1506772938,NL
+1506772939,1506772939,IR
+1506772940,1506772991,NL
1506772992,1506775039,GB
1506775040,1506777087,AT
1506777088,1506781695,GB
-1506781696,1506781759,IE
-1506781760,1506781823,US
-1506781824,1506781887,ZA
-1506781888,1506781951,AU
+1506781696,1506781951,IE
1506781952,1506783231,GB
1506783232,1506785279,RU
1506785280,1506787327,BE
@@ -46428,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
@@ -46459,7 +49731,7 @@
1507664896,1507665407,GR
1507665408,1507665663,IT
1507665664,1507665791,TZ
-1507665792,1507665919,IT
+1507665792,1507665919,GR
1507665920,1507666431,US
1507666432,1507666559,GR
1507666560,1507666591,FR
@@ -46483,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
@@ -46548,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
@@ -46591,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
@@ -46627,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
@@ -46671,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
@@ -46691,14 +49961,18 @@
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
1518510080,1518516479,LV
1518516480,1518517247,SE
1518517248,1518518271,LV
-1518518272,1518665727,SE
+1518518272,1518551039,SE
+1518551040,1518565375,NL
+1518565376,1518665727,SE
1518665728,1518727167,RU
1518727168,1518731263,SE
1518731264,1518927871,DE
@@ -46942,11 +50216,10 @@
1533421568,1533423615,NL
1533423616,1533425663,IT
1533425664,1533429759,GB
-1533429760,1533431807,IT
+1533429760,1533431807,RU
1533431808,1533433855,IE
1533433856,1533435903,DK
1533435904,1533437951,CZ
-1533437952,1533439999,RU
1533440000,1533441519,PL
1533441520,1533441535,CH
1533441536,1533442047,PL
@@ -47066,7 +50339,8 @@
1534714384,1534714399,FR
1534714400,1534714403,GB
1534714404,1534714407,PL
-1534714408,1534714431,GB
+1534714408,1534714415,DE
+1534714416,1534714431,GB
1534714432,1534714463,FR
1534714464,1534714495,GB
1534714496,1534714511,FR
@@ -47085,7 +50359,9 @@
1534714752,1534714767,DE
1534714768,1534714783,FR
1534714784,1534714799,PL
-1534714800,1534714831,FR
+1534714800,1534714815,FR
+1534714816,1534714819,BE
+1534714820,1534714831,FR
1534714832,1534714847,BE
1534714848,1534714855,GB
1534714856,1534714863,CH
@@ -47095,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
@@ -47110,21 +50388,26 @@
1534715208,1534715215,BE
1534715216,1534715263,FR
1534715264,1534715279,ES
-1534715280,1534715295,FR
+1534715280,1534715283,PL
+1534715284,1534715287,FR
+1534715288,1534715295,PL
1534715296,1534715299,ES
1534715300,1534715303,FR
1534715304,1534715307,ES
1534715308,1534715311,DE
-1534715312,1534715315,FR
+1534715312,1534715315,PL
1534715316,1534715319,ES
1534715320,1534715327,PL
1534715328,1534715359,FR
1534715360,1534715367,PL
1534715368,1534715371,FR
-1534715372,1534715375,GB
+1534715372,1534715375,CH
1534715376,1534715391,ES
-1534715392,1534715407,PL
-1534715408,1534715419,DE
+1534715392,1534715399,PL
+1534715400,1534715407,FR
+1534715408,1534715411,GB
+1534715412,1534715415,FI
+1534715416,1534715419,DE
1534715420,1534715423,IT
1534715424,1534715439,PL
1534715440,1534715447,ES
@@ -47135,7 +50418,10 @@
1534715520,1534715551,FR
1534715552,1534715583,ES
1534715584,1534715599,GB
-1534715600,1534715615,BE
+1534715600,1534715603,PL
+1534715604,1534715607,GB
+1534715608,1534715611,CH
+1534715612,1534715615,FI
1534715616,1534715639,FR
1534715640,1534715643,PL
1534715644,1534715647,DE
@@ -47153,30 +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,1534715999,FR
-1534716000,1534716007,PL
+1534715936,1534715951,PL
+1534715952,1534715999,FR
+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
@@ -47184,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
@@ -47197,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
@@ -47207,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
@@ -47217,7 +50518,12 @@
1534717140,1534717143,BE
1534717144,1534717147,FR
1534717148,1534717151,IT
-1534717152,1534717263,FR
+1534717152,1534717215,FR
+1534717216,1534717219,ES
+1534717220,1534717247,FR
+1534717248,1534717251,CZ
+1534717252,1534717255,NL
+1534717256,1534717263,FR
1534717264,1534717267,PL
1534717268,1534717315,FR
1534717316,1534717319,IE
@@ -47225,7 +50531,13 @@
1534717324,1534717343,FR
1534717344,1534717359,GB
1534717360,1534717375,PL
-1534717376,1534717503,FR
+1534717376,1534717411,FR
+1534717412,1534717415,CH
+1534717416,1534717419,CZ
+1534717420,1534717431,PL
+1534717432,1534717435,GB
+1534717436,1534717439,NL
+1534717440,1534717503,FR
1534717504,1534717519,BE
1534717520,1534717535,DE
1534717536,1534717551,PL
@@ -47244,10 +50556,12 @@
1534717728,1534717731,GB
1534717732,1534717735,FR
1534717736,1534717739,BE
-1534717740,1534717743,DE
+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
@@ -47261,11 +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,1534718015,FR
+1534717984,1534717987,PL
+1534717988,1534717991,DE
+1534717992,1534717995,NL
+1534717996,1534717999,GB
+1534718000,1534718007,ES
+1534718008,1534718011,PL
+1534718012,1534718015,FR
1534718016,1534718031,BE
1534718032,1534718063,FR
1534718064,1534718079,IT
@@ -47280,14 +50602,17 @@
1534718176,1534718207,PL
1534718208,1534718271,ES
1534718272,1534718399,FR
-1534718400,1534718423,DE
+1534718400,1534718415,DE
+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
@@ -47295,15 +50620,20 @@
1534718540,1534718543,ES
1534718544,1534718559,FR
1534718560,1534718575,BE
-1534718576,1534718687,FR
+1534718576,1534718591,GB
+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
@@ -47324,10 +50654,10 @@
1534719392,1534719395,CH
1534719396,1534719399,PT
1534719400,1534719403,IT
-1534719404,1534719423,FR
-1534719424,1534719439,DE
-1534719440,1534719455,PL
-1534719456,1534719471,FR
+1534719404,1534719439,FR
+1534719440,1534719459,PL
+1534719460,1534719463,FR
+1534719464,1534719471,PL
1534719472,1534719487,IE
1534719488,1534719631,FR
1534719632,1534719639,ES
@@ -47339,18 +50669,24 @@
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,1534719823,FR
+1534719808,1534719811,PL
+1534719812,1534719815,FR
+1534719816,1534719819,CH
+1534719820,1534719823,CZ
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
@@ -47358,19 +50694,18 @@
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
1534720112,1534720127,ES
1534720128,1534720211,FR
1534720212,1534720215,PL
-1534720216,1534720223,FR
+1534720216,1534720219,FR
+1534720220,1534720223,GB
1534720224,1534720239,DE
1534720240,1534720255,BE
-1534720256,1534720271,NL
+1534720256,1534720271,FR
1534720272,1534720287,PL
1534720288,1534720291,IT
1534720292,1534720295,PL
@@ -47378,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
@@ -47397,16 +50738,20 @@
1534720544,1534720559,FR
1534720560,1534720583,IT
1534720584,1534720591,BE
-1534720592,1534720607,FR
-1534720608,1534720623,GB
+1534720592,1534720611,FR
+1534720612,1534720615,BE
+1534720616,1534720619,DE
+1534720620,1534720623,PT
1534720624,1534720639,FR
-1534720640,1534720671,PL
+1534720640,1534720655,PL
+1534720656,1534720671,ES
1534720672,1534720739,FR
1534720740,1534720743,PL
-1534720744,1534720747,NL
+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
@@ -47415,7 +50760,7 @@
1534720864,1534720879,ES
1534720880,1534720895,FR
1534720896,1534720899,ES
-1534720900,1534720903,GB
+1534720900,1534720903,LT
1534720904,1534720943,FR
1534720944,1534720951,ES
1534720952,1534720959,PL
@@ -47425,17 +50770,21 @@
1534720976,1534720979,NL
1534720980,1534720983,FR
1534720984,1534720991,PL
-1534720992,1534721007,FR
+1534720992,1534720995,PT
+1534720996,1534720999,ES
+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
@@ -47466,29 +50815,35 @@
1534721496,1534721519,PL
1534721520,1534721527,FR
1534721528,1534721531,ES
-1534721532,1534721535,FR
-1534721536,1534721583,GB
-1534721584,1534721599,FR
-1534721600,1534721619,ES
+1534721532,1534721567,FR
+1534721568,1534721583,GB
+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
1534721756,1534721823,FR
1534721824,1534721827,PL
1534721828,1534721831,FR
-1534721832,1534721835,PL
+1534721832,1534721835,DE
1534721836,1534721839,BE
1534721840,1534721855,PL
1534721856,1534721887,ES
1534721888,1534721903,FR
1534721904,1534721919,DE
1534721920,1534721935,FR
-1534721936,1534721951,PL
+1534721936,1534721943,CH
+1534721944,1534721951,IE
1534721952,1534721955,FR
1534721956,1534721959,PL
1534721960,1534721963,IE
@@ -47496,8 +50851,9 @@
1534721968,1534721971,DE
1534721972,1534721975,PL
1534721976,1534721979,ES
-1534721980,1534721983,FR
-1534721984,1534722007,PL
+1534721980,1534721983,PL
+1534721984,1534721999,FR
+1534722000,1534722007,PL
1534722008,1534722011,PT
1534722012,1534722015,ES
1534722016,1534722039,FR
@@ -47558,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
@@ -47634,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
@@ -47648,7 +51006,11 @@
1536245760,1536262143,FI
1536262144,1536278527,PL
1536278528,1536294911,UA
-1536294912,1536327679,RU
+1536294912,1536311295,RU
+1536311296,1536319487,EE
+1536319488,1536321535,ES
+1536321536,1536325631,GB
+1536325632,1536327679,CZ
1536327680,1536344063,HU
1536344064,1536360447,PL
1536360448,1536376831,RU
@@ -47674,13 +51036,10 @@
1536630784,1536634879,RU
1536634880,1536643071,FR
1536643072,1536647167,TR
-1536647168,1536647434,ES
-1536647435,1536647435,PT
-1536647436,1536651263,ES
+1536647168,1536651263,ES
1536651264,1536655359,FR
1536655360,1536659455,GE
-1536659456,1536659759,DE
-1536659760,1536659775,BI
+1536659456,1536659775,DE
1536659776,1536659791,AO
1536659792,1536659823,SD
1536659824,1536659991,DE
@@ -47690,29 +51049,25 @@
1536660016,1536660019,CG
1536660020,1536660023,DE
1536660024,1536660031,CG
-1536660032,1536660039,DJ
-1536660040,1536660735,DE
-1536660736,1536660991,SA
-1536660992,1536661247,DE
-1536661248,1536661759,GQ
-1536661760,1536662271,DE
+1536660032,1536660063,DE
+1536660064,1536660079,SO
+1536660080,1536662271,DE
1536662272,1536662303,SO
1536662304,1536662335,LB
1536662336,1536662367,DE
1536662368,1536662399,SO
-1536662400,1536662415,DE
+1536662400,1536662407,DE
+1536662408,1536662415,SO
1536662416,1536662431,GN
1536662432,1536662463,IQ
1536662464,1536662527,SO
-1536662528,1536662783,DE
-1536662784,1536663039,SA
-1536663040,1536663295,DE
+1536662528,1536663295,DE
1536663296,1536663311,LB
1536663312,1536663319,DE
1536663320,1536663327,LB
1536663328,1536663343,DE
-1536663344,1536663391,IQ
-1536663392,1536663423,DE
+1536663344,1536663359,YE
+1536663360,1536663423,DE
1536663424,1536663551,KW
1536663552,1536667647,SA
1536667648,1536675839,RU
@@ -47745,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
@@ -47797,9 +51152,7 @@
1539049216,1539049223,LY
1539049224,1539049255,IT
1539049256,1539049263,LY
-1539049264,1539049279,IT
-1539049280,1539049287,LY
-1539049288,1539049311,IT
+1539049264,1539049311,IT
1539049312,1539049327,LY
1539049328,1539049335,IT
1539049336,1539049343,LY
@@ -47855,9 +51208,7 @@
1539194880,1539203071,RU
1539203072,1539207167,NL
1539207168,1539211263,RU
-1539211264,1539211527,CZ
-1539211528,1539211531,GB
-1539211532,1539211775,CZ
+1539211264,1539211775,CZ
1539211776,1539212031,DE
1539212032,1539212287,CZ
1539212288,1539212543,DE
@@ -47868,21 +51219,22 @@
1539219712,1539221503,GG
1539221504,1539222527,FR
1539222528,1539222783,HK
-1539222784,1539223551,FR
+1539222784,1539223039,CN
+1539223040,1539223551,FR
1539223552,1539225599,DE
1539225600,1539227647,HU
1539227648,1539229695,FI
1539229696,1539231743,DE
1539231744,1539233791,BE
-1539233792,1539235839,GR
+1539233792,1539234303,LU
+1539234304,1539234559,IE
+1539234560,1539235839,LU
1539235840,1539237887,DE
1539237888,1539239935,RU
1539239936,1539244031,DE
1539244032,1539260415,BA
1539260416,1539276799,SK
-1539276800,1539280135,SE
-1539280136,1539280143,FI
-1539280144,1539280895,SE
+1539276800,1539280895,SE
1539280896,1539284991,FR
1539284992,1539287039,DE
1539287040,1539289087,TR
@@ -47898,6 +51250,7 @@
1539314688,1539315711,RU
1539315712,1539316735,UA
1539316736,1539317759,SE
+1539317760,1539318783,CZ
1539318784,1539319807,NL
1539319808,1539320831,DE
1539320832,1539321855,UA
@@ -47952,7 +51305,7 @@
1539379200,1539380223,EU
1539380224,1539381247,CH
1539381248,1539382271,RS
-1539382272,1539383295,PL
+1539382272,1539383295,RO
1539383296,1539384319,UA
1539384320,1539385343,RU
1539385344,1539385855,PL
@@ -48080,7 +51433,7 @@
1539482112,1539482623,UA
1539482624,1539483135,RU
1539483136,1539483647,ES
-1539483648,1539484159,NL
+1539483648,1539484159,UA
1539484160,1539484671,GB
1539484672,1539485695,RU
1539485696,1539486207,RO
@@ -48121,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
@@ -48176,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
@@ -48253,7 +51605,9 @@
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
@@ -48356,7 +51710,6 @@
1539706624,1539707135,PL
1539707136,1539707391,LT
1539707392,1539707647,GB
-1539707648,1539707903,RO
1539707904,1539708159,UA
1539708160,1539708415,DE
1539708416,1539708671,GB
@@ -48402,8 +51755,7 @@
1539718912,1539719167,KZ
1539719168,1539719423,IE
1539719424,1539719679,PL
-1539719680,1539719935,IE
-1539719936,1539720191,DE
+1539719680,1539720191,DE
1539720192,1539720703,RU
1539720704,1539720959,IL
1539720960,1539721215,RU
@@ -48517,7 +51869,7 @@
1539750400,1539750655,PL
1539750656,1539750911,DE
1539750912,1539751167,UA
-1539751168,1539751423,TR
+1539751168,1539751423,AT
1539751424,1539751679,SI
1539751680,1539751935,FR
1539751936,1539752191,DE
@@ -48543,7 +51895,6 @@
1539757568,1539757823,SI
1539757824,1539758079,UA
1539758080,1539758335,HR
-1539758336,1539758591,EU
1539758592,1539758847,NL
1539758848,1539759103,BA
1539759104,1539759359,DK
@@ -48572,6 +51923,7 @@
1539764992,1539765247,BE
1539765248,1539765503,GB
1539765504,1539766015,PL
+1539766016,1539766271,UA
1539766272,1539766527,PL
1539766528,1539766783,UA
1539766784,1539767039,DE
@@ -48630,7 +51982,7 @@
1539780608,1539780863,PL
1539780864,1539781119,RO
1539781120,1539781375,NL
-1539781376,1539781631,DE
+1539781376,1539781631,PL
1539781632,1539781887,HU
1539781888,1539782143,IL
1539782144,1539782399,UA
@@ -48653,7 +52005,7 @@
1539786752,1539787007,HU
1539787008,1539787263,TR
1539787264,1539787519,IE
-1539787520,1539787775,UA
+1539787520,1539787775,DE
1539787776,1539788031,CH
1539788032,1539788287,HR
1539788288,1539788543,GB
@@ -48744,7 +52096,7 @@
1539812096,1539812351,RU
1539812352,1539812607,CH
1539812608,1539812863,IT
-1539812864,1539813119,SI
+1539812864,1539813119,RU
1539813120,1539813375,AT
1539813376,1539813631,PL
1539813632,1539813887,NL
@@ -48839,7 +52191,6 @@
1539857408,1539858431,PL
1539858432,1539859455,RO
1539859456,1539860479,DE
-1539860480,1539861503,UA
1539861504,1539862527,DE
1539862528,1539863551,UA
1539863552,1539864575,ES
@@ -48916,7 +52267,6 @@
1539947520,1539948543,UA
1539948544,1539949567,RO
1539949568,1539950591,MD
-1539950592,1539951103,KZ
1539951104,1539951615,UA
1539951616,1539953663,RU
1539953664,1539954687,UA
@@ -48934,6 +52284,7 @@
1539975168,1539976191,DE
1539976192,1539977215,RU
1539977216,1539978239,DE
+1539978240,1539979263,CZ
1539979264,1539980287,UA
1539980288,1539981311,VG
1539981312,1539982335,SI
@@ -48974,8 +52325,7 @@
1540025344,1540026367,GB
1540026368,1540028415,UA
1540028416,1540029439,ES
-1540029440,1540030463,RU
-1540030464,1540031487,DE
+1540029440,1540031487,RU
1540031488,1540032511,UA
1540032512,1540033535,RU
1540033536,1540034559,UA
@@ -49026,11 +52376,10 @@
1540081664,1540082687,DE
1540082688,1540083711,NO
1540083712,1540084735,RU
-1540084736,1540085759,LU
+1540084736,1540085759,NL
1540085760,1540087807,PL
1540087808,1540092927,RU
1540092928,1540094975,PL
-1540094976,1540095999,EU
1540096000,1540097023,SE
1540097024,1540099071,DE
1540099072,1540100095,UA
@@ -49047,6 +52396,7 @@
1540118528,1540119551,PL
1540119552,1540120575,UA
1540120576,1540124671,RU
+1540124672,1540125695,UA
1540125696,1540126719,FR
1540126720,1540127743,UA
1540127744,1540128767,GB
@@ -49121,7 +52471,7 @@
1540206592,1540208639,RU
1540208640,1540209663,NO
1540209664,1540211711,RU
-1540211712,1540212735,DE
+1540211712,1540212735,RO
1540212736,1540213759,RU
1540213760,1540214783,UA
1540214784,1540215807,RU
@@ -49171,7 +52521,8 @@
1540248576,1540249087,GB
1540249088,1540249599,PL
1540249600,1540250111,KZ
-1540250112,1540250623,DK
+1540250112,1540250367,PL
+1540250368,1540250623,CZ
1540250624,1540251135,RU
1540251136,1540251647,GB
1540251648,1540252159,PL
@@ -49369,7 +52720,7 @@
1540361472,1540361727,DE
1540361728,1540361983,IT
1540361984,1540362239,EE
-1540362240,1540362495,DK
+1540362240,1540362495,RU
1540362496,1540363007,DE
1540363008,1540363263,FR
1540363264,1540363519,RU
@@ -49651,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
@@ -49736,7 +53087,7 @@
1540464896,1540465407,GB
1540465408,1540465663,ES
1540465664,1540465919,NL
-1540465920,1540466175,UA
+1540465920,1540466175,RU
1540466176,1540466431,DK
1540466432,1540466687,RU
1540466688,1540466943,NL
@@ -49813,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,1540493311,UA
+1540491264,1540492287,UA
+1540492288,1540493311,PL
1540493312,1540494335,CZ
1540494336,1540495359,UA
1540495360,1540496383,RU
@@ -49829,14 +53181,15 @@
1540502528,1540503551,RU
1540503552,1540504575,NL
1540504576,1540505599,SE
-1540505600,1540506623,RU
+1540505600,1540506623,RO
1540506624,1540507647,GB
1540507648,1540508671,RU
1540508672,1540509695,UA
1540509696,1540510719,RO
1540510720,1540511743,RU
1540511744,1540512767,BG
-1540512768,1540514815,UA
+1540512768,1540513791,RU
+1540513792,1540514815,UA
1540514816,1540515839,GB
1540515840,1540516863,RU
1540516864,1540517887,UA
@@ -49924,6 +53277,7 @@
1540621824,1540622335,RU
1540622336,1540622591,KW
1540622592,1540622847,PL
+1540622848,1540623103,RU
1540623104,1540623359,SE
1540623360,1540623615,GB
1540623616,1540623871,BG
@@ -49966,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
@@ -50032,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
@@ -50056,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
@@ -50103,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
@@ -50225,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
@@ -50262,6 +53613,7 @@
1540717312,1540717823,PL
1540717824,1540718079,UA
1540718080,1540718335,RU
+1540718336,1540718591,NO
1540718592,1540718847,CH
1540718848,1540719103,IT
1540719104,1540719359,RU
@@ -50431,8 +53783,7 @@
1540817920,1540818943,NL
1540818944,1540819967,UA
1540819968,1540820991,CZ
-1540820992,1540822015,RU
-1540822016,1540823039,FR
+1540820992,1540823039,RU
1540823040,1540824063,UA
1540824064,1540825087,RU
1540825088,1540826111,PL
@@ -50524,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
@@ -50585,6 +53936,7 @@
1540911104,1540911359,GB
1540911360,1540911615,NL
1540911616,1540911871,RU
+1540911872,1540912127,PL
1540912128,1540912383,GB
1540912384,1540912639,PT
1540912640,1540912895,DK
@@ -50616,8 +53968,7 @@
1540920576,1540920831,PL
1540920832,1540921087,HU
1540921088,1540921599,RO
-1540921600,1540921855,MT
-1540921856,1540922111,EU
+1540921600,1540922111,EU
1540922112,1540922367,ES
1540922368,1540922879,RO
1540922880,1540923135,DE
@@ -50653,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
@@ -50689,8 +54040,7 @@
1540940800,1540941055,FR
1540941056,1540941311,CH
1540941312,1540941567,AT
-1540941568,1540941823,UA
-1540941824,1540942079,RU
+1540941568,1540942079,UA
1540942080,1540942335,RO
1540942336,1540942591,FR
1540942592,1540942847,DE
@@ -50749,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
@@ -50900,6 +54250,7 @@
1541027840,1541028863,RU
1541028864,1541029887,PL
1541029888,1541030911,UA
+1541030912,1541031935,PL
1541031936,1541032959,UA
1541032960,1541033983,PL
1541033984,1541035007,BG
@@ -51096,7 +54447,6 @@
1541171968,1541172223,SI
1541172224,1541172479,GR
1541172480,1541172735,RU
-1541172736,1541172991,RO
1541172992,1541173247,BE
1541173248,1541173503,RU
1541173504,1541173759,UA
@@ -51284,8 +54634,7 @@
1541236736,1541237247,DE
1541237248,1541237759,RU
1541237760,1541238271,CZ
-1541238272,1541238783,ES
-1541238784,1541239295,SK
+1541238272,1541239295,SK
1541239296,1541239807,PL
1541239808,1541240319,RU
1541240320,1541240831,CH
@@ -51355,7 +54704,7 @@
1541275136,1541275647,FR
1541275648,1541276671,UA
1541276672,1541277695,RS
-1541277696,1541278719,ES
+1541277696,1541278719,GB
1541278720,1541280767,UA
1541280768,1541281791,BG
1541281792,1541282815,PL
@@ -51570,7 +54919,7 @@
1541384704,1541384959,RU
1541384960,1541385215,PL
1541385216,1541385471,NL
-1541385472,1541385727,RU
+1541385472,1541385727,SK
1541385728,1541385983,SI
1541385984,1541386239,PL
1541386240,1541386495,RU
@@ -51598,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
@@ -51616,7 +54965,6 @@
1541396480,1541396735,UA
1541396736,1541396991,RU
1541396992,1541397247,GB
-1541397248,1541397503,FR
1541397504,1541397759,NL
1541397760,1541398015,PL
1541398016,1541398271,HU
@@ -51688,8 +55036,7 @@
1541426176,1541426687,RU
1541426688,1541427199,UA
1541427200,1541428223,RU
-1541428224,1541428735,UA
-1541428736,1541429247,RU
+1541428224,1541429247,UA
1541429248,1541429759,FI
1541429760,1541430271,CZ
1541430272,1541430783,LT
@@ -51755,6 +55102,7 @@
1541467136,1541467647,PL
1541467648,1541468159,SI
1541468160,1541468671,ES
+1541468672,1541469183,NL
1541469184,1541469695,SE
1541469696,1541470207,LV
1541470208,1541470719,NL
@@ -51826,6 +55174,7 @@
1541547520,1541548543,PL
1541548544,1541549567,UA
1541549568,1541550079,DE
+1541550080,1541550591,RU
1541550592,1541551103,PL
1541551104,1541552127,RO
1541552128,1541553151,UA
@@ -51853,10 +55202,12 @@
1541567744,1541567999,PL
1541568000,1541568511,SE
1541568512,1541569535,RU
-1541569536,1541570559,CZ
+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
@@ -51873,6 +55224,7 @@
1541583360,1541583615,RU
1541583616,1541583871,GE
1541583872,1541584127,SE
+1541584128,1541584383,GB
1541584384,1541584895,BE
1541584896,1541585151,DE
1541585152,1541585663,RU
@@ -51885,7 +55237,7 @@
1541589248,1541589503,UA
1541589504,1541590015,CH
1541590016,1541590527,RU
-1541590528,1541590783,DK
+1541590528,1541590783,GB
1541590784,1541591039,UA
1541591040,1541592063,RU
1541592064,1541592575,UA
@@ -51897,6 +55249,7 @@
1541595648,1541596159,BG
1541596160,1541597695,PL
1541597696,1541597951,RU
+1541597952,1541598207,AM
1541598208,1541599231,PL
1541599232,1541600255,RS
1541600256,1541600511,HR
@@ -51908,6 +55261,610 @@
1541602048,1541602303,PL
1541602304,1541603327,UA
1541603328,1541604351,PL
+1541604352,1541605119,TR
+1541605120,1541605375,CZ
+1541605376,1541606911,RU
+1541606912,1541607423,UZ
+1541607424,1541608447,RU
+1541608448,1541608703,DE
+1541608704,1541608959,PL
+1541608960,1541609215,SA
+1541609216,1541609471,RU
+1541609472,1541609983,SA
+1541609984,1541610239,GB
+1541610240,1541610495,NL
+1541610496,1541611775,RU
+1541611776,1541612031,RO
+1541612032,1541612543,RU
+1541612544,1541614079,PL
+1541614080,1541614335,UA
+1541614336,1541614591,SI
+1541614592,1541615615,RU
+1541615616,1541615871,CH
+1541615872,1541616127,SE
+1541616128,1541617663,RU
+1541617664,1541619199,PL
+1541619200,1541619455,GB
+1541619456,1541620735,PL
+1541620736,1541620991,RU
+1541620992,1541621247,UA
+1541621248,1541621759,IL
+1541621760,1541622271,RO
+1541622272,1541622527,RU
+1541622528,1541622783,NL
+1541622784,1541623295,PL
+1541623296,1541623551,GB
+1541623552,1541623807,RU
+1541623808,1541624831,PL
+1541624832,1541625855,RU
+1541625856,1541626367,PL
+1541626368,1541626623,RO
+1541626624,1541627903,RU
+1541627904,1541628415,CZ
+1541628416,1541628927,DE
+1541628928,1541629183,PT
+1541629184,1541629439,LV
+1541629440,1541630975,PL
+1541630976,1541631231,GR
+1541631232,1541631487,IT
+1541631488,1541631999,SI
+1541632000,1541632511,RU
+1541632512,1541632767,NL
+1541632768,1541633023,SK
+1541633024,1541634303,PL
+1541634304,1541634559,MD
+1541634560,1541635071,PL
+1541635072,1541636095,GB
+1541636096,1541636863,AT
+1541636864,1541637119,RO
+1541637120,1541637631,PL
+1541637632,1541638143,CZ
+1541638144,1541638399,RU
+1541638400,1541638655,FR
+1541638656,1541639167,HU
+1541639168,1541640191,RU
+1541640192,1541641215,KZ
+1541641216,1541641727,RU
+1541641728,1541642239,UA
+1541642240,1541643263,RU
+1541643264,1541644287,PL
+1541644288,1541645311,RU
+1541645312,1541645823,IL
+1541645824,1541646079,RO
+1541646080,1541646335,PL
+1541646336,1541646847,RU
+1541646848,1541647359,NO
+1541647360,1541648383,RU
+1541648384,1541648639,PL
+1541648640,1541648895,DK
+1541648896,1541649151,GB
+1541649152,1541649407,NL
+1541649408,1541650431,UA
+1541650432,1541650687,RU
+1541650688,1541650943,MD
+1541650944,1541651199,SE
+1541651200,1541651455,FI
+1541651456,1541652479,RU
+1541652480,1541652991,FI
+1541652992,1541653247,FR
+1541653248,1541653503,CZ
+1541653504,1541654015,PL
+1541654016,1541654271,RU
+1541654272,1541655551,PL
+1541655552,1541656063,AT
+1541656064,1541656575,UA
+1541656576,1541656831,SE
+1541656832,1541657087,BE
+1541657088,1541657599,RU
+1541657600,1541659647,PL
+1541659648,1541660671,GB
+1541660672,1541661695,SK
+1541661696,1541661951,RU
+1541661952,1541662207,NL
+1541662208,1541662719,RO
+1541662720,1541663743,CZ
+1541663744,1541664767,RO
+1541664768,1541666047,RU
+1541666048,1541666815,GB
+1541666816,1541667839,NO
+1541667840,1541668095,CH
+1541668096,1541668351,GB
+1541668352,1541668607,UA
+1541668608,1541668863,GE
+1541668864,1541669887,GB
+1541669888,1541670911,LV
+1541670912,1541671423,PL
+1541671424,1541671679,RU
+1541671680,1541671935,PL
+1541671936,1541672959,UA
+1541672960,1541674495,RS
+1541674496,1541675007,KG
+1541675008,1541675519,IE
+1541675520,1541676031,RU
+1541676032,1541676287,PL
+1541676288,1541676543,RO
+1541676544,1541677055,RU
+1541677056,1541678079,PL
+1541678080,1541678591,RO
+1541678592,1541678847,BG
+1541678848,1541679615,RU
+1541679616,1541680127,PL
+1541680128,1541681151,CZ
+1541681152,1541682175,RU
+1541682176,1541682687,DE
+1541682688,1541683199,RU
+1541683200,1541683455,PL
+1541683456,1541683711,RU
+1541683712,1541684223,UA
+1541684224,1541684735,CH
+1541684736,1541686271,RU
+1541686272,1541687295,UA
+1541687296,1541688319,GB
+1541688320,1541688831,RU
+1541688832,1541689343,GB
+1541689344,1541690367,PL
+1541690368,1541691391,LT
+1541691392,1541691903,PL
+1541691904,1541692159,SE
+1541692160,1541692415,ES
+1541692416,1541693439,PL
+1541693440,1541694463,RU
+1541694464,1541694719,CZ
+1541694720,1541694975,CH
+1541694976,1541695487,RU
+1541695488,1541696511,DE
+1541696512,1541697535,MD
+1541697536,1541698047,PL
+1541698048,1541698303,DK
+1541698304,1541698559,GB
+1541698560,1541699327,RU
+1541699328,1541699583,RO
+1541699584,1541700095,RU
+1541700096,1541700607,UA
+1541700608,1541700863,RU
+1541700864,1541701119,PL
+1541701120,1541701631,IL
+1541701632,1541702655,RO
+1541702656,1541703679,RU
+1541703680,1541704703,PL
+1541704704,1541706239,RO
+1541706240,1541706751,UA
+1541706752,1541707263,RU
+1541707264,1541707519,CH
+1541707520,1541707775,NL
+1541707776,1541708799,RU
+1541708800,1541709823,PL
+1541709824,1541710335,RU
+1541710336,1541710847,IL
+1541710848,1541711871,SK
+1541711872,1541712127,FR
+1541712128,1541712383,TR
+1541712384,1541712895,DE
+1541712896,1541713919,RU
+1541713920,1541714175,NL
+1541714176,1541716223,RU
+1541716224,1541716479,PL
+1541716480,1541716991,UA
+1541716992,1541717247,FR
+1541717248,1541717503,IR
+1541717504,1541718015,DE
+1541718016,1541718271,KZ
+1541718272,1541719039,NO
+1541719040,1541720063,PL
+1541720064,1541721087,RU
+1541721088,1541721343,PL
+1541721344,1541721599,RU
+1541721600,1541721855,GB
+1541721856,1541722111,SI
+1541722112,1541723135,RU
+1541723136,1541723647,HU
+1541723648,1541723903,NO
+1541723904,1541724159,BE
+1541724160,1541725183,CZ
+1541725184,1541727231,RU
+1541727232,1541727743,UA
+1541727744,1541727999,RU
+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
+1541732352,1541732607,IL
+1541732608,1541732863,RO
+1541732864,1541733119,RU
+1541733120,1541733375,GB
+1541733376,1541734143,RS
+1541734144,1541734399,TR
+1541734400,1541734911,RO
+1541734912,1541735167,RU
+1541735168,1541735423,DE
+1541735424,1541735679,GB
+1541735680,1541735935,RU
+1541735936,1541736447,RO
+1541736448,1541737471,RU
+1541737472,1541739519,RO
+1541739520,1541739775,FR
+1541739776,1541740031,NO
+1541740032,1541740287,PL
+1541740288,1541740543,NL
+1541740544,1541740799,SK
+1541740800,1541741055,RU
+1541741056,1541741567,PL
+1541741568,1541742079,SK
+1541742080,1541742591,RO
+1541742592,1541743103,SA
+1541743104,1541743615,TR
+1541743616,1541744639,SK
+1541744640,1541745663,PL
+1541745664,1541746175,TR
+1541746176,1541746687,UA
+1541746688,1541746943,RU
+1541746944,1541747199,NL
+1541747200,1541747711,RU
+1541747712,1541748735,UA
+1541748736,1541748991,RU
+1541748992,1541749247,AT
+1541749248,1541749503,ES
+1541749504,1541749759,RU
+1541749760,1541750783,NL
+1541750784,1541751295,AE
+1541751296,1541751807,UA
+1541751808,1541752831,PL
+1541752832,1541753087,SI
+1541753088,1541753343,GB
+1541753344,1541753855,RU
+1541753856,1541754879,UA
+1541754880,1541755391,IT
+1541755392,1541757439,PL
+1541757440,1541757951,EU
+1541757952,1541758207,GB
+1541758208,1541758463,HU
+1541758464,1541758719,RU
+1541758720,1541758975,FR
+1541758976,1541760255,RU
+1541760256,1541760511,UA
+1541760512,1541761023,CH
+1541761024,1541761535,KG
+1541761536,1541762047,PL
+1541762048,1541763583,RU
+1541763584,1541763839,SE
+1541763840,1541764095,UA
+1541764096,1541765119,RU
+1541765120,1541766143,UA
+1541766144,1541767167,GB
+1541767168,1541767679,UA
+1541767680,1541768191,FR
+1541768192,1541769215,RO
+1541769216,1541769471,FR
+1541769472,1541770239,FI
+1541770240,1541770495,CH
+1541770496,1541770751,SE
+1541770752,1541771263,NO
+1541771264,1541771775,NL
+1541771776,1541772031,RU
+1541772032,1541772287,RO
+1541772288,1541773311,KZ
+1541773312,1541773823,NL
+1541773824,1541774079,RU
+1541774080,1541774335,TR
+1541774336,1541775359,RO
+1541775360,1541776895,UZ
+1541776896,1541777151,GB
+1541777152,1541777407,UA
+1541777408,1541778431,DE
+1541778432,1541778687,FR
+1541778688,1541779455,GB
+1541779456,1541779967,RU
+1541779968,1541780479,DE
+1541780480,1541780735,ES
+1541780736,1541780991,GB
+1541780992,1541781503,RO
+1541781504,1541781759,TR
+1541781760,1541782015,RU
+1541782016,1541782271,RO
+1541782272,1541782527,GB
+1541782528,1541783551,RU
+1541783552,1541783807,IE
+1541783808,1541784063,PL
+1541784064,1541784575,DE
+1541784576,1541785855,RU
+1541785856,1541786111,GB
+1541786112,1541786623,RU
+1541786624,1541787647,UA
+1541787648,1541788159,RU
+1541788160,1541788415,UA
+1541788416,1541788671,RU
+1541788672,1541789183,PL
+1541789184,1541789695,IR
+1541789696,1541790719,UA
+1541790720,1541790975,SA
+1541790976,1541791231,RU
+1541791232,1541791743,GB
+1541791744,1541792255,KG
+1541792256,1541792511,UA
+1541792512,1541792767,FR
+1541792768,1541793023,RO
+1541793024,1541793279,HR
+1541793280,1541793791,FR
+1541793792,1541794047,NL
+1541794048,1541794815,RU
+1541794816,1541795071,CH
+1541795072,1541795327,RU
+1541795328,1541795583,PL
+1541795584,1541795839,ES
+1541795840,1541796863,UA
+1541796864,1541797375,RU
+1541797376,1541797887,NL
+1541797888,1541798143,UA
+1541798144,1541798399,PL
+1541798400,1541798911,RO
+1541798912,1541799935,CZ
+1541799936,1541800447,FR
+1541800448,1541800959,AT
+1541800960,1541801471,FI
+1541801472,1541801983,BG
+1541801984,1541802495,PL
+1541802496,1541803007,RU
+1541803008,1541804031,LT
+1541804032,1541804287,GB
+1541804288,1541804543,PL
+1541804544,1541805567,RU
+1541805568,1541805823,DE
+1541805824,1541806079,RU
+1541806080,1541806335,PL
+1541806336,1541806591,UA
+1541806592,1541807103,RU
+1541807104,1541808127,UA
+1541808128,1541808383,IR
+1541808384,1541809151,NL
+1541809152,1541809663,PL
+1541809664,1541810175,GB
+1541810176,1541810431,PT
+1541810432,1541810687,AE
+1541810688,1541811199,PL
+1541811200,1541811711,SK
+1541811712,1541811967,NL
+1541811968,1541812991,RU
+1541812992,1541813247,NL
+1541813248,1541813759,LT
+1541813760,1541814015,RU
+1541814016,1541814783,ES
+1541814784,1541815295,PL
+1541815296,1541816319,RU
+1541816320,1541816575,BE
+1541816576,1541816831,RU
+1541816832,1541817343,FR
+1541817344,1541818367,DK
+1541818368,1541818623,RU
+1541818624,1541818879,TR
+1541818880,1541819903,PL
+1541819904,1541820159,SE
+1541820160,1541820415,IL
+1541820416,1541820671,MD
+1541820672,1541820927,TR
+1541820928,1541821183,RU
+1541821184,1541821439,DE
+1541821440,1541821695,RU
+1541821696,1541821951,TR
+1541821952,1541822975,PL
+1541822976,1541823231,SI
+1541823232,1541823487,RU
+1541823488,1541823999,UA
+1541824000,1541824511,RU
+1541824512,1541824767,IT
+1541824768,1541825023,GB
+1541825024,1541825535,PL
+1541825536,1541826047,RU
+1541826048,1541826559,IT
+1541826560,1541827071,ES
+1541827072,1541827327,LV
+1541827328,1541827583,RU
+1541827584,1541828095,SE
+1541828096,1541828351,RU
+1541828352,1541828607,LV
+1541828608,1541830911,PL
+1541830912,1541831167,UA
+1541831168,1541831423,PL
+1541831424,1541831679,RO
+1541831680,1541832191,SA
+1541832192,1541833983,SE
+1541833984,1541834239,RU
+1541834240,1541834495,LV
+1541834496,1541834751,RU
+1541834752,1541835775,RO
+1541835776,1541836287,CH
+1541836288,1541836543,AT
+1541836544,1541836799,RU
+1541836800,1541837055,CZ
+1541837056,1541837311,IT
+1541837312,1541837823,RU
+1541837824,1541838079,PL
+1541838080,1541839871,RU
+1541839872,1541840383,PL
+1541840384,1541840639,RU
+1541840640,1541840895,PL
+1541840896,1541841407,DE
+1541841408,1541842943,PL
+1541842944,1541843199,GB
+1541843200,1541843455,FR
+1541843456,1541843967,BE
+1541843968,1541844991,DE
+1541844992,1541846015,BE
+1541846016,1541846271,PL
+1541846272,1541846527,GB
+1541846528,1541848063,RU
+1541848064,1541848319,HU
+1541848320,1541848575,GB
+1541848576,1541849087,RU
+1541849088,1541850111,BG
+1541850112,1541850623,RU
+1541850624,1541851135,UA
+1541851136,1541852671,PL
+1541852672,1541853183,RO
+1541853184,1541854207,RU
+1541854208,1541854463,FR
+1541854464,1541854719,KW
+1541854720,1541854975,MD
+1541854976,1541855999,RU
+1541856000,1541856255,MK
+1541856256,1541856511,UA
+1541856512,1541857279,PL
+1541857280,1541857535,RU
+1541857536,1541857791,KW
+1541857792,1541858303,RU
+1541858304,1541858559,LV
+1541858560,1541858815,UA
+1541858816,1541859327,BG
+1541859328,1541859583,RO
+1541859584,1541859839,PL
+1541859840,1541860095,RO
+1541860096,1541860351,FR
+1541860352,1541860607,IL
+1541860608,1541860863,NL
+1541860864,1541861119,SI
+1541861120,1541861375,DK
+1541861376,1541861887,RO
+1541861888,1541862143,AT
+1541862144,1541862399,GB
+1541862400,1541862911,NL
+1541862912,1541863167,GB
+1541863168,1541863423,RU
+1541863424,1541863679,RO
+1541863680,1541863935,CH
+1541863936,1541864191,ES
+1541864192,1541864447,GB
+1541864448,1541864959,RU
+1541864960,1541865471,AL
+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
@@ -52032,7 +55989,9 @@
1546379264,1546381311,ES
1546381312,1546383359,DK
1546383360,1546385407,IT
-1546385408,1546387455,FR
+1546385408,1546385535,FR
+1546385536,1546385599,US
+1546385600,1546387455,FR
1546387456,1546460960,TR
1546460961,1546460967,NL
1546460968,1546518527,TR
@@ -52062,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
@@ -52084,7 +56045,11 @@
1547448320,1547452415,SK
1547452416,1547456511,IT
1547456512,1547460607,RU
-1547460608,1547468799,GB
+1547460608,1547465727,GB
+1547465728,1547465983,ES
+1547465984,1547467775,GB
+1547467776,1547468031,ES
+1547468032,1547468799,GB
1547468800,1547472895,PL
1547472896,1547476991,DK
1547476992,1547481087,ES
@@ -52102,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
@@ -52138,8 +56103,8 @@
1547620352,1547620359,A2
1547620360,1547620367,NG
1547620368,1547620375,A2
-1547620376,1547620383,NG
-1547620384,1547620399,A2
+1547620376,1547620391,NG
+1547620392,1547620399,A2
1547620400,1547620407,NG
1547620408,1547620415,A2
1547620416,1547620423,NG
@@ -52160,17 +56125,15 @@
1547620936,1547620951,A2
1547620952,1547620959,NG
1547620960,1547620967,A2
-1547620968,1547620983,NG
-1547620984,1547620999,A2
+1547620968,1547620991,NG
+1547620992,1547620999,A2
1547621000,1547621031,NG
1547621032,1547621039,A2
1547621040,1547621063,NG
1547621064,1547621071,A2
1547621072,1547621087,NG
1547621088,1547621095,A2
-1547621096,1547621119,NG
-1547621120,1547621127,A2
-1547621128,1547621135,NG
+1547621096,1547621135,NG
1547621136,1547621143,A2
1547621144,1547621151,NG
1547621152,1547621167,A2
@@ -52187,12 +56150,81 @@
1547621304,1547621335,NG
1547621336,1547621351,A2
1547621352,1547621375,NG
-1547621376,1547622463,A2
-1547622464,1547622471,NG
-1547622472,1547624447,A2
+1547621376,1547621447,A2
+1547621448,1547621455,NG
+1547621456,1547621463,A2
+1547621464,1547621471,NG
+1547621472,1547621575,A2
+1547621576,1547621583,NG
+1547621584,1547621615,A2
+1547621616,1547621623,NG
+1547621624,1547621687,A2
+1547621688,1547621711,NG
+1547621712,1547622407,A2
+1547622408,1547622415,NG
+1547622416,1547622455,A2
+1547622456,1547622471,NG
+1547622472,1547622511,A2
+1547622512,1547622527,NG
+1547622528,1547622559,A2
+1547622560,1547622575,NG
+1547622576,1547622583,A2
+1547622584,1547622615,NG
+1547622616,1547622623,A2
+1547622624,1547622631,NG
+1547622632,1547622911,A2
+1547622912,1547622935,NG
+1547622936,1547622951,A2
+1547622952,1547622959,NG
+1547622960,1547622967,A2
+1547622968,1547622983,NG
+1547622984,1547622991,A2
+1547622992,1547623015,NG
+1547623016,1547623031,A2
+1547623032,1547623039,NG
+1547623040,1547623047,A2
+1547623048,1547623071,NG
+1547623072,1547623103,A2
+1547623104,1547623159,NG
+1547623160,1547623167,A2
+1547623168,1547623175,NG
+1547623176,1547623183,A2
+1547623184,1547623191,NG
+1547623192,1547623199,A2
+1547623200,1547623207,NG
+1547623208,1547623215,A2
+1547623216,1547623247,NG
+1547623248,1547623255,A2
+1547623256,1547623263,NG
+1547623264,1547623287,A2
+1547623288,1547623295,NG
+1547623296,1547623319,A2
+1547623320,1547623327,NG
+1547623328,1547623335,A2
+1547623336,1547623343,NG
+1547623344,1547623359,A2
+1547623360,1547623367,NG
+1547623368,1547623383,A2
+1547623384,1547623391,NG
+1547623392,1547623399,A2
+1547623400,1547623415,NG
+1547623416,1547623455,A2
+1547623456,1547623463,NG
+1547623464,1547623479,A2
+1547623480,1547623487,NG
+1547623488,1547623495,A2
+1547623496,1547623519,NG
+1547623520,1547623527,A2
+1547623528,1547623559,NG
+1547623560,1547623567,A2
+1547623568,1547623615,NG
+1547623616,1547623727,A2
+1547623728,1547623735,NG
+1547623736,1547624447,A2
1547624448,1547628543,CZ
1547628544,1547632639,BG
-1547632640,1547636735,TR
+1547632640,1547634687,GB
+1547634688,1547636735,TR
1547636736,1547640831,SI
1547640832,1547644927,PL
1547644928,1547649023,CZ
@@ -52215,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
@@ -52225,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
@@ -52277,7 +56316,8 @@
1551556608,1551558655,FR
1551558656,1551560703,EU
1551560704,1551561727,DE
-1551561728,1551564799,EU
+1551561728,1551562751,FR
+1551562752,1551564799,EU
1551564800,1551572991,FR
1551572992,1551576063,NL
1551576064,1551577087,EU
@@ -52310,7 +56350,9 @@
1559314432,1559322623,GE
1559322624,1559330815,RU
1559330816,1559339007,BA
-1559339008,1559339743,RU
+1559339008,1559339647,RU
+1559339648,1559339679,MY
+1559339680,1559339743,RU
1559339744,1559339775,MH
1559339776,1559341695,RU
1559341696,1559341703,ES
@@ -52391,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
@@ -52484,7 +56524,8 @@
1566382080,1566384127,TR
1566384128,1566386175,RU
1566386176,1566388223,FR
-1566388224,1566388991,HU
+1566388224,1566388479,HK
+1566388480,1566388991,HU
1566388992,1566389247,SC
1566389248,1566389503,HU
1566389504,1566389759,SC
@@ -52495,29 +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
-1566402560,1566404607,IT
+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
@@ -52553,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
@@ -52562,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
@@ -52651,13 +56735,19 @@
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
1567776768,1567830015,RO
1567830016,1567831039,MD
-1567831040,1567883263,RO
+1567831040,1567840255,RO
+1567840256,1567842303,DE
+1567842304,1567880191,RO
+1567880192,1567881215,SE
+1567881216,1567883263,RO
1567883264,1567948799,MD
1567948800,1568026623,RO
1568026624,1568030719,MD
@@ -52665,7 +56755,61 @@
1568083968,1568086015,MD
1568086016,1568178175,RO
1568178176,1568243711,RU
-1568243712,1568276479,FR
+1568243712,1568243967,GP
+1568243968,1568244735,FR
+1568244736,1568244991,GP
+1568244992,1568245759,FR
+1568245760,1568246527,GF
+1568246528,1568247039,GP
+1568247040,1568247551,GF
+1568247552,1568248831,GP
+1568248832,1568249087,MQ
+1568249088,1568250879,GP
+1568250880,1568251135,MQ
+1568251136,1568251903,GP
+1568251904,1568252159,MQ
+1568252160,1568252927,GP
+1568252928,1568253183,MQ
+1568253184,1568254719,GP
+1568254720,1568254975,GF
+1568254976,1568255743,GP
+1568255744,1568255999,GF
+1568256000,1568257791,GP
+1568257792,1568258303,MQ
+1568258304,1568259071,GF
+1568259072,1568259327,MQ
+1568259328,1568260095,GP
+1568260096,1568260351,MQ
+1568260352,1568261119,FR
+1568261120,1568261375,MQ
+1568261376,1568262143,FR
+1568262144,1568262399,MQ
+1568262400,1568263167,FR
+1568263168,1568263423,MQ
+1568263424,1568263679,FR
+1568263680,1568263935,MQ
+1568263936,1568264447,GP
+1568264448,1568265215,FR
+1568265216,1568265471,GP
+1568265472,1568266239,FR
+1568266240,1568266495,GP
+1568266496,1568267263,FR
+1568267264,1568267519,GP
+1568267520,1568267775,FR
+1568267776,1568268287,GP
+1568268288,1568268543,GF
+1568268544,1568269311,FR
+1568269312,1568269567,MQ
+1568269568,1568270335,FR
+1568270336,1568270591,GP
+1568270592,1568271359,FR
+1568271360,1568271615,GP
+1568271616,1568272383,FR
+1568272384,1568272639,GP
+1568272640,1568273407,GF
+1568273408,1568274687,MQ
+1568274688,1568275455,FR
+1568275456,1568276479,MQ
1568276480,1568293135,DE
1568293136,1568293151,SA
1568293152,1568294223,DE
@@ -52699,7 +56843,8 @@
1570242560,1570275327,GB
1570275328,1570308095,BG
1570308096,1570340863,CZ
-1570340864,1570406399,RU
+1570340864,1570373631,RU
+1570373632,1570406399,NL
1570406400,1570439167,PL
1570439168,1570471935,TR
1570471936,1570480895,BG
@@ -52731,13 +56876,18 @@
1570621440,1570625535,RU
1570625536,1570627583,GB
1570627584,1570635775,RU
-1570635776,1570644991,FR
+1570635776,1570644767,FR
+1570644768,1570644775,GB
+1570644776,1570644991,FR
1570644992,1570645055,GB
-1570645056,1570652159,FR
+1570645056,1570645231,FR
+1570645232,1570645247,GB
+1570645248,1570652159,FR
1570652160,1570652287,SE
1570652288,1570652291,MY
1570652292,1570652295,GB
-1570652296,1570652543,SE
+1570652296,1570652299,DE
+1570652300,1570652543,SE
1570652544,1570652551,FR
1570652552,1570652891,SE
1570652892,1570652895,DE
@@ -52752,7 +56902,9 @@
1570660360,1570660367,SE
1570660368,1570660383,FR
1570660384,1570660387,RU
-1570660388,1570660543,SE
+1570660388,1570660407,SE
+1570660408,1570660411,DE
+1570660412,1570660543,SE
1570660544,1570660575,FI
1570660576,1570660591,GB
1570660592,1570660595,RU
@@ -52762,7 +56914,8 @@
1570660616,1570660619,RU
1570660620,1570660623,SE
1570660624,1570660639,FR
-1570660640,1570660863,SE
+1570660640,1570660675,DE
+1570660676,1570660863,SE
1570660864,1570661375,NO
1570661376,1570661631,GB
1570661632,1570662143,SE
@@ -52780,16 +56933,22 @@
1570665920,1570665935,GB
1570665936,1570665951,IT
1570665952,1570665967,FR
-1570665968,1570666175,SE
+1570665968,1570666143,SE
+1570666144,1570666147,DE
+1570666148,1570666175,SE
1570666176,1570666191,GB
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
-1570666392,1570666431,SE
+1570666392,1570666395,SE
+1570666396,1570666399,DE
+1570666400,1570666431,SE
1570666432,1570666447,GB
1570666448,1570666463,DE
1570666464,1570666495,SE
@@ -52804,28 +56963,34 @@
1570666752,1570666755,ES
1570666756,1570666759,SE
1570666760,1570666767,GB
-1570666768,1570666943,SE
+1570666768,1570666887,SE
+1570666888,1570666891,DE
+1570666892,1570666943,SE
1570666944,1570666959,FR
1570666960,1570666975,SE
1570666976,1570666991,FR
1570666992,1570667007,SE
1570667008,1570667011,ES
1570667012,1570667015,SE
-1570667016,1570667023,GB
+1570667016,1570667023,FI
1570667024,1570667039,ES
-1570667040,1570667199,SE
+1570667040,1570667167,SE
+1570667168,1570667171,DE
+1570667172,1570667199,SE
1570667200,1570667215,FR
1570667216,1570667231,SE
1570667232,1570667247,FR
1570667248,1570667263,SE
1570667264,1570667267,ES
-1570667268,1570667279,SE
-1570667280,1570667295,ES
+1570667268,1570667283,SE
+1570667284,1570667287,MT
+1570667288,1570667295,ES
1570667296,1570667327,GB
1570667328,1570667335,SE
1570667336,1570667339,GB
1570667340,1570667343,NL
-1570667344,1570667455,SE
+1570667344,1570667347,DE
+1570667348,1570667455,SE
1570667456,1570667471,FR
1570667472,1570667487,SE
1570667488,1570667503,FR
@@ -52834,10 +56999,14 @@
1570667520,1570667523,NL
1570667524,1570667527,IT
1570667528,1570667531,NO
-1570667532,1570667535,GB
+1570667532,1570667535,IT
1570667536,1570667587,SE
1570667588,1570667591,US
-1570667592,1570667711,SE
+1570667592,1570667599,SE
+1570667600,1570667603,DE
+1570667604,1570667647,SE
+1570667648,1570667651,US
+1570667652,1570667711,SE
1570667712,1570667727,FR
1570667728,1570667743,NL
1570667744,1570667775,SE
@@ -52849,16 +57018,23 @@
1570667904,1570667907,SE
1570667908,1570667911,RU
1570667912,1570667915,US
-1570667916,1570667967,SE
+1570667916,1570667919,SE
+1570667920,1570667923,DE
+1570667924,1570667967,SE
1570667968,1570667983,FR
1570667984,1570668031,SE
1570668032,1570668035,NL
-1570668036,1570668287,SE
+1570668036,1570668047,SE
+1570668048,1570668055,ES
+1570668056,1570668063,NL
+1570668064,1570668287,SE
1570668288,1570668291,NL
1570668292,1570668351,SE
1570668352,1570668415,NO
1570668416,1570668543,SE
-1570668544,1570701311,RU
+1570668544,1570671983,RU
+1570671984,1570671987,TR
+1570671988,1570701311,RU
1570701312,1570717695,PL
1570717696,1570725887,HR
1570725888,1570734079,DE
@@ -52878,8 +57054,9 @@
1571429376,1571432447,UA
1571432448,1571434495,CZ
1571434496,1571435519,UA
-1571435520,1571435775,NL
-1571435776,1571438591,CZ
+1571435520,1571436031,NL
+1571436032,1571436287,UA
+1571436288,1571438591,RU
1571438592,1571441663,UA
1571441664,1571442175,KZ
1571442176,1571442687,NL
@@ -52927,7 +57104,9 @@
1571724032,1571725311,GB
1571725312,1571727359,RO
1571727360,1571729407,IE
-1571729408,1571731455,SK
+1571729408,1571729791,SK
+1571729792,1571729799,CZ
+1571729800,1571731455,SK
1571731456,1571732479,CH
1571732480,1571732495,LI
1571732496,1571733503,CH
@@ -52968,7 +57147,7 @@
1572028416,1572044799,RU
1572044800,1572061183,IT
1572061184,1572077567,PL
-1572093952,1572110335,BG
+1572077568,1572093951,RU
1572110336,1572126719,RU
1572126720,1572143103,UA
1572143104,1572159487,DE
@@ -53032,7 +57211,9 @@
1572504576,1572504703,RO
1572504704,1572504831,TR
1572504832,1572505087,SG
-1572505088,1572507199,IT
+1572505088,1572505983,IT
+1572505984,1572506623,GR
+1572506624,1572507199,IT
1572507200,1572507207,GB
1572507208,1572507647,IT
1572507648,1572511743,GB
@@ -53044,7 +57225,11 @@
1572524032,1572528127,GE
1572528128,1572532223,RU
1572532224,1572536319,IT
-1572536320,1572538367,GB
+1572536320,1572536831,JE
+1572536832,1572537087,GB
+1572537088,1572538111,JE
+1572538112,1572538175,GB
+1572538176,1572538367,JE
1572538368,1572540415,NL
1572540416,1572540511,GB
1572540512,1572540519,DE
@@ -53054,12 +57239,22 @@
1572541456,1572541463,FR
1572541464,1572541471,GB
1572541472,1572541535,FR
-1572541536,1572541951,GB
+1572541536,1572541543,GB
+1572541544,1572541551,CH
+1572541552,1572541951,GB
1572541952,1572541983,DE
1572541984,1572541999,ES
1572542000,1572542015,GB
1572542016,1572542031,HU
-1572542032,1572542207,GB
+1572542032,1572542071,GB
+1572542072,1572542079,DE
+1572542080,1572542087,ES
+1572542088,1572542111,GB
+1572542112,1572542119,PL
+1572542120,1572542127,ES
+1572542128,1572542151,GB
+1572542152,1572542159,DE
+1572542160,1572542207,GB
1572542208,1572542463,FR
1572542464,1572544511,IT
1572544512,1572546559,IQ
@@ -53067,7 +57262,7 @@
1572548608,1572550655,NL
1572550656,1572552703,DE
1572552704,1572554751,TR
-1572554752,1572556799,CH
+1572554752,1572556799,RU
1572556800,1572558847,NO
1572558848,1572560895,IT
1572560896,1572562943,RU
@@ -53089,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
@@ -53101,7 +57298,7 @@
1572612096,1572614143,RU
1572614144,1572616191,ES
1572616192,1572618239,CH
-1572618240,1572620287,RS
+1572618240,1572620287,NL
1572620288,1572620415,CH
1572620416,1572620431,CZ
1572620432,1572620559,CH
@@ -53128,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
@@ -53299,7 +57488,9 @@
1578590304,1578590311,IT
1578590312,1578590319,FR
1578590320,1578590335,CH
-1578590336,1578590347,FR
+1578590336,1578590339,FR
+1578590340,1578590343,DE
+1578590344,1578590347,FR
1578590348,1578590351,PL
1578590352,1578590415,FR
1578590416,1578590431,PL
@@ -53310,11 +57501,12 @@
1578590496,1578590527,PL
1578590528,1578590535,ES
1578590536,1578590543,FR
-1578590544,1578590559,GB
+1578590544,1578590559,PL
1578590560,1578590575,ES
-1578590576,1578590603,FR
+1578590576,1578590599,FR
+1578590600,1578590603,LT
1578590604,1578590607,PL
-1578590608,1578590615,FR
+1578590608,1578590615,GB
1578590616,1578590619,DE
1578590620,1578590623,IT
1578590624,1578590639,FR
@@ -53325,13 +57517,22 @@
1578590664,1578590667,FR
1578590668,1578590671,NL
1578590672,1578590687,PL
-1578590688,1578590699,FR
-1578590700,1578590731,PL
-1578590732,1578590799,FR
-1578590800,1578590831,GB
+1578590688,1578590691,GB
+1578590692,1578590695,DE
+1578590696,1578590699,FR
+1578590700,1578590735,PL
+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
@@ -53353,16 +57554,15 @@
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,NL
+1578591288,1578591291,DE
1578591292,1578591295,ES
1578591296,1578591327,FR
1578591328,1578591343,PL
1578591344,1578591391,FR
-1578591392,1578591407,CH
+1578591392,1578591395,IT
+1578591396,1578591407,PL
1578591408,1578591411,ES
1578591412,1578591415,FR
1578591416,1578591423,ES
@@ -53391,19 +57591,22 @@
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
-1578591900,1578591903,GB
+1578591900,1578591903,NL
1578591904,1578591919,PL
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,1578592047,ES
+1578592040,1578592043,ES
+1578592044,1578592047,PL
1578592048,1578592079,FR
1578592080,1578592095,PL
1578592096,1578592111,FR
@@ -53412,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
@@ -53420,10 +57623,9 @@
1578592208,1578592223,FR
1578592224,1578592239,ES
1578592240,1578592271,FR
-1578592272,1578592275,PL
-1578592276,1578592279,FI
+1578592272,1578592279,PL
1578592280,1578592283,BE
-1578592284,1578592287,NL
+1578592284,1578592287,FR
1578592288,1578592295,PL
1578592296,1578592303,PT
1578592304,1578592319,FR
@@ -53431,33 +57633,43 @@
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
1578592520,1578592531,FR
1578592532,1578592535,GB
-1578592536,1578592543,NL
+1578592536,1578592539,PL
+1578592540,1578592543,ES
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
1578592736,1578592743,PL
1578592744,1578592747,PT
-1578592748,1578592783,DE
-1578592784,1578592831,FR
+1578592748,1578592751,DE
+1578592752,1578592767,IE
+1578592768,1578592783,DE
+1578592784,1578592799,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
@@ -53469,7 +57681,9 @@
1578593296,1578593299,ES
1578593300,1578593303,GB
1578593304,1578593307,ES
-1578593308,1578593327,FR
+1578593308,1578593319,FR
+1578593320,1578593323,PT
+1578593324,1578593327,FR
1578593328,1578593343,IT
1578593344,1578593359,FR
1578593360,1578593375,PL
@@ -53478,8 +57692,13 @@
1578593412,1578593415,FR
1578593416,1578593423,PL
1578593424,1578593439,FR
-1578593440,1578593455,PL
-1578593456,1578593487,FR
+1578593440,1578593443,IT
+1578593444,1578593447,PL
+1578593448,1578593455,DE
+1578593456,1578593471,FR
+1578593472,1578593479,GB
+1578593480,1578593483,PL
+1578593484,1578593487,FR
1578593488,1578593495,ES
1578593496,1578593503,FR
1578593504,1578593519,PL
@@ -53489,7 +57708,7 @@
1578593552,1578593559,PL
1578593560,1578593567,FR
1578593568,1578593583,CZ
-1578593584,1578593587,FR
+1578593584,1578593587,GB
1578593588,1578593599,DE
1578593600,1578593631,FR
1578593632,1578593647,NL
@@ -53517,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
@@ -53530,18 +57751,18 @@
1578594064,1578594079,PL
1578594080,1578594087,CH
1578594088,1578594095,CZ
-1578594096,1578594111,FR
-1578594112,1578594127,PL
-1578594128,1578594159,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
@@ -53551,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
@@ -53581,14 +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,1578594871,GB
+1578594864,1578594871,PL
1578594872,1578595039,FR
1578595040,1578595055,GB
1578595056,1578595103,FR
@@ -53613,28 +57833,36 @@
1578595328,1578595343,IT
1578595344,1578595363,FR
1578595364,1578595367,DE
-1578595368,1578595371,FR
-1578595372,1578595375,BE
-1578595376,1578595379,FR
+1578595368,1578595379,FR
1578595380,1578595383,CH
1578595384,1578595387,ES
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,1578595487,FR
+1578595460,1578595467,PL
+1578595468,1578595487,FR
1578595488,1578595503,DE
1578595504,1578595519,PL
-1578595520,1578595607,FR
+1578595520,1578595535,FR
+1578595536,1578595539,BE
+1578595540,1578595543,CH
+1578595544,1578595547,GB
+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,BE
+1578595680,1578595695,PL
1578595696,1578595711,FR
1578595712,1578595743,GB
1578595744,1578595747,IT
@@ -53643,7 +57871,8 @@
1578595760,1578595763,FR
1578595764,1578595775,ES
1578595776,1578595807,CH
-1578595808,1578595855,FR
+1578595808,1578595823,DE
+1578595824,1578595855,FR
1578595856,1578595871,GB
1578595872,1578595907,PL
1578595908,1578595911,BE
@@ -53652,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
@@ -53688,12 +57920,25 @@
1578610768,1578610771,CH
1578610772,1578610775,GB
1578610776,1578610779,DE
-1578610780,1578610799,FR
+1578610780,1578610783,FR
+1578610784,1578610799,DE
1578610800,1578610803,PL
1578610804,1578610807,GB
-1578610808,1578610943,FR
+1578610808,1578610819,FR
+1578610820,1578610823,NL
+1578610824,1578610831,DE
+1578610832,1578610847,CH
+1578610848,1578610851,PL
+1578610852,1578610855,IE
+1578610856,1578610859,IT
+1578610860,1578610863,PL
+1578610864,1578610867,BE
+1578610868,1578610871,FR
+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
@@ -53702,20 +57947,30 @@
1578611072,1578611075,DE
1578611076,1578611079,FR
1578611080,1578611087,NL
-1578611088,1578611119,DE
+1578611088,1578611103,DE
+1578611104,1578611107,BE
+1578611108,1578611119,DE
1578611120,1578611135,FR
1578611136,1578611151,CH
1578611152,1578611167,DE
1578611168,1578611183,ES
-1578611184,1578611199,FR
+1578611184,1578611191,BE
+1578611192,1578611195,FR
+1578611196,1578611199,ES
1578611200,1578611215,NL
-1578611216,1578611231,PL
-1578611232,1578611247,FR
+1578611216,1578611219,GB
+1578611220,1578611223,DE
+1578611224,1578611227,ES
+1578611228,1578611231,PL
+1578611232,1578611235,IT
+1578611236,1578611247,FR
1578611248,1578611251,ES
1578611252,1578611255,IT
1578611256,1578611263,PL
1578611264,1578611279,IT
-1578611280,1578611295,FR
+1578611280,1578611287,FR
+1578611288,1578611291,PL
+1578611292,1578611295,DE
1578611296,1578611303,GB
1578611304,1578611327,PL
1578611328,1578611343,BE
@@ -53732,9 +57987,10 @@
1578611456,1578611711,FR
1578611712,1578611775,CH
1578611776,1578611783,DE
-1578611784,1578611807,FR
+1578611784,1578611791,FR
+1578611792,1578611807,PL
1578611808,1578611839,CH
-1578611840,1578611855,ES
+1578611840,1578611855,BE
1578611856,1578611919,FR
1578611920,1578611935,BE
1578611936,1578611943,PL
@@ -53753,7 +58009,7 @@
1578612120,1578612123,IE
1578612124,1578612127,DE
1578612128,1578612135,ES
-1578612136,1578612139,NL
+1578612136,1578612139,IE
1578612140,1578612143,ES
1578612144,1578612223,PL
1578612224,1578612239,IT
@@ -53764,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
@@ -53776,7 +58038,7 @@
1578612904,1578612907,DE
1578612908,1578612911,FR
1578612912,1578612959,ES
-1578612960,1578612975,FR
+1578612960,1578612975,DE
1578612976,1578612983,IT
1578612984,1578612991,FR
1578612992,1578613247,DE
@@ -53790,7 +58052,9 @@
1578613712,1578613719,BE
1578613720,1578613723,ES
1578613724,1578613727,IT
-1578613728,1578613743,FR
+1578613728,1578613735,FR
+1578613736,1578613739,PL
+1578613740,1578613743,FR
1578613744,1578613751,ES
1578613752,1578613759,NL
1578613760,1578613775,DE
@@ -53803,7 +58067,8 @@
1578613888,1578613951,ES
1578613952,1578613983,FR
1578613984,1578613999,PL
-1578614000,1578614015,CH
+1578614000,1578614007,IT
+1578614008,1578614015,DE
1578614016,1578614031,FR
1578614032,1578614047,BE
1578614048,1578614055,FI
@@ -53815,7 +58080,14 @@
1578614196,1578614207,GB
1578614208,1578614271,PL
1578614272,1578614527,ES
-1578614528,1578631167,FR
+1578614528,1578614543,GB
+1578614544,1578614559,PL
+1578614560,1578614575,FR
+1578614576,1578614583,DE
+1578614584,1578614591,GB
+1578614592,1578614623,CZ
+1578614624,1578614655,BE
+1578614656,1578631167,FR
1578631168,1578663935,RO
1578663936,1578762239,RU
1578762240,1578795007,BG
@@ -53860,9 +58132,9 @@
1580015616,1580048383,UA
1580048384,1580064767,RU
1580064768,1580072959,DE
-1580072960,1580085247,PT
-1580085248,1580089343,MZ
-1580089344,1580104959,PT
+1580072960,1580079103,PT
+1580079104,1580079359,US
+1580079360,1580104959,PT
1580104960,1580105215,CH
1580105216,1580134399,PT
1580134400,1580136447,ES
@@ -53881,7 +58153,9 @@
1581826048,1581842431,GB
1581842432,1581858815,BG
1581858816,1581875199,IT
-1581875200,1581891583,TR
+1581875200,1581881343,TR
+1581881344,1581881599,GB
+1581881600,1581891583,TR
1581891584,1581907967,RU
1581907968,1581924351,IT
1581924352,1581940735,UA
@@ -53891,14 +58165,18 @@
1581989888,1582006271,PL
1582006272,1582022655,RU
1582022656,1582039039,NL
-1582039040,1582055423,RU
+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
@@ -53913,11 +58191,15 @@
1583619840,1583620095,US
1583620096,1583624191,IT
1583624192,1583628287,RS
-1583628288,1583632383,DE
+1583628288,1583631283,DE
+1583631284,1583631287,A2
+1583631288,1583632383,DE
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
@@ -53958,7 +58240,9 @@
1583742976,1583747071,TR
1583747072,1583751167,RU
1583751168,1583755263,NO
-1583755264,1583759359,NL
+1583755264,1583755414,NL
+1583755415,1583755424,RU
+1583755425,1583759359,NL
1583759360,1583763455,TR
1583763456,1583767551,RU
1583767552,1583771647,AT
@@ -53968,7 +58252,9 @@
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
@@ -53976,24 +58262,30 @@
1583813172,1583813183,US
1583813184,1583813199,NL
1583813200,1583813215,RU
-1583813216,1583813663,NL
+1583813216,1583813231,US
+1583813232,1583813239,NL
+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
-1583815352,1583816703,NL
-1583816704,1583820799,TR
+1583815352,1583815679,NL
+1583815680,1583815711,DE
+1583815712,1583815727,US
+1583815728,1583815807,NL
+1583815808,1583815935,US
+1583815936,1583816191,GB
+1583816192,1583816255,DE
+1583816256,1583816703,NL
+1583816704,1583819007,TR
+1583819008,1583819136,GB
+1583819137,1583820799,TR
1583820800,1583824895,LV
1583824896,1583828991,SI
1583828992,1583833087,RU
@@ -54035,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
@@ -54049,8 +58341,7 @@
1585231360,1585231615,NL
1585231616,1585231871,RU
1585231872,1585233919,CZ
-1585233920,1585235967,LB
-1585235968,1585238015,RU
+1585233920,1585238015,RU
1585238016,1585240063,DE
1585240064,1585241087,FR
1585241088,1585242111,MQ
@@ -54119,7 +58410,7 @@
1585354752,1585356799,RU
1585356800,1585358847,FI
1585358848,1585360895,PT
-1585360896,1585362943,GB
+1585360896,1585362943,DK
1585362944,1585363455,IT
1585363456,1585363551,ES
1585363552,1585364991,IT
@@ -54173,11 +58464,21 @@
1585979392,1585987583,GB
1585987584,1585988095,SE
1585988096,1585988103,IT
-1585988104,1585988351,SE
+1585988104,1585988119,SE
+1585988120,1585988123,US
+1585988124,1585988351,SE
1585988352,1585988359,DE
-1585988360,1585990655,SE
+1585988360,1585988479,SE
+1585988480,1585988483,US
+1585988484,1585988927,SE
+1585988928,1585988931,US
+1585988932,1585989307,SE
+1585989308,1585989311,US
+1585989312,1585990655,SE
1585990656,1585990659,US
-1585990660,1585990911,SE
+1585990660,1585990847,SE
+1585990848,1585990851,US
+1585990852,1585990911,SE
1585990912,1585990915,US
1585990916,1585991167,SE
1585991168,1585991171,US
@@ -54220,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
@@ -54249,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
@@ -54292,6 +58597,15 @@
1586495488,1587019775,DK
1587019776,1587085311,PL
1587085312,1587150847,UA
+1587150848,1587154943,RU
+1587154944,1587159039,PL
+1587159040,1587163135,UA
+1587163136,1587165183,DE
+1587165184,1587167231,PL
+1587167232,1587175423,RU
+1587175424,1587177471,PL
+1587177472,1587179519,RS
+1587179520,1587183615,UA
1587183616,1587199999,RU
1587200000,1587216383,UA
1587216384,1587347455,BG
@@ -54320,7 +58634,15 @@
1588723712,1588854783,UA
1588854784,1588985855,RU
1588985856,1589182463,IR
-1589182464,1589215231,RU
+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
@@ -54391,6 +58713,7 @@
1590132992,1590134783,GB
1590134784,1590136831,ES
1590136832,1590138879,GB
+1590138880,1590140927,FR
1590140928,1590142975,UA
1590142976,1590145023,AT
1590145024,1590147071,HU
@@ -54401,9 +58724,7 @@
1590157312,1590157471,IE
1590157472,1590157823,GB
1590157824,1590157951,IE
-1590157952,1590158335,GB
-1590158336,1590158463,IE
-1590158464,1590161407,GB
+1590157952,1590161407,GB
1590161408,1590163455,DE
1590163456,1590165503,NL
1590165504,1590176831,AE
@@ -54434,20 +58755,26 @@
1592061952,1592066047,RU
1592066048,1592067583,US
1592067584,1592067711,NO
-1592067712,1592069119,CY
+1592067712,1592067839,CY
+1592067840,1592068095,NL
+1592068096,1592069119,CY
1592069120,1592069135,RU
1592069136,1592069247,CY
1592069248,1592069375,RU
1592069376,1592069407,US
1592069408,1592069631,CY
-1592069632,1592069759,NL
-1592069760,1592069855,CY
-1592069856,1592069887,NL
+1592069632,1592069711,NL
+1592069712,1592069727,CY
+1592069728,1592069759,NL
+1592069760,1592069839,CY
+1592069840,1592069887,NL
1592069888,1592074239,RU
1592074240,1592078335,SK
1592078336,1592082431,NL
1592082432,1592086527,GB
-1592086528,1592087295,CZ
+1592086528,1592087079,CZ
+1592087080,1592087087,PL
+1592087088,1592087295,CZ
1592087296,1592088191,PL
1592088192,1592090623,CZ
1592090624,1592094719,RU
@@ -54491,6 +58818,7 @@
1592281088,1592283135,UA
1592283136,1592285183,GR
1592285184,1592287231,RU
+1592287232,1592289279,RO
1592289280,1592291327,RU
1592291328,1592293375,NL
1592293376,1592295423,LT
@@ -54510,13 +58838,11 @@
1592326144,1592328191,UA
1592328192,1592393727,RU
1592393728,1592459263,SE
-1592459264,1592524799,GE
+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
@@ -54544,16 +58870,14 @@
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
1593203488,1593204087,SE
1593204088,1593204095,FI
1593204096,1593204159,SE
-1593204160,1593204223,DK
+1593204160,1593204223,FI
1593204224,1593205567,SE
1593205568,1593205631,DK
1593205632,1593206083,SE
@@ -54689,7 +59013,10 @@
1599504384,1599520767,AZ
1599520768,1599537151,RU
1599537152,1599553535,BG
-1599553536,1599569919,RU
+1599553536,1599561727,KG
+1599561728,1599565823,GB
+1599565824,1599567871,SY
+1599567872,1599569919,IT
1599569920,1599586303,SI
1599586304,1599602687,BG
1599602688,1599864831,DE
@@ -54716,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
@@ -54753,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
@@ -54774,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
@@ -54786,7 +59114,6 @@
1602287616,1602289663,DE
1602289664,1602291711,LB
1602291712,1602293759,SA
-1602293760,1602295807,RU
1602295808,1602297855,NL
1602297856,1602298367,IL
1602298368,1602298431,MT
@@ -54817,7 +59144,7 @@
1602347008,1602349055,PL
1602349056,1602351103,RU
1602351104,1602353151,CZ
-1602353152,1602355199,RU
+1602353152,1602355199,ES
1602355200,1602357247,GB
1602357248,1602359295,FR
1602359296,1602361343,DE
@@ -54878,8 +59205,16 @@
1602449408,1602451455,LV
1602451456,1602453503,DE
1602453504,1602455551,SK
-1602455552,1602456015,FR
-1602456016,1602456031,ES
+1602455552,1602455690,FR
+1602455691,1602455691,BE
+1602455692,1602456015,FR
+1602456016,1602456025,ES
+1602456026,1602456026,DE
+1602456027,1602456027,NL
+1602456028,1602456028,IT
+1602456029,1602456029,ES
+1602456030,1602456030,PT
+1602456031,1602456031,ES
1602456032,1602456175,FR
1602456176,1602456183,ES
1602456184,1602457599,FR
@@ -54901,7 +59236,9 @@
1602781184,1602813951,FR
1602813952,1602846719,RU
1602846720,1602879487,GE
-1602879488,1602912255,FR
+1602879488,1602895871,FR
+1602895872,1602896127,MQ
+1602896128,1602912255,FR
1602912256,1603010559,RU
1603010560,1603014655,FR
1603014656,1603018751,RU
@@ -54923,11 +59260,21 @@
1603080192,1603083007,DE
1603083008,1603083263,UA
1603083264,1603084287,DE
-1603084288,1603087515,IT
+1603084288,1603085871,IT
+1603085872,1603085879,CH
+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
@@ -54938,29 +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,1603161007,DE
+1603159552,1603159823,DE
+1603159824,1603159839,CH
+1603159840,1603160079,DE
+1603160080,1603160095,NL
+1603160096,1603160111,GB
+1603160112,1603161007,DE
1603161008,1603161023,GB
1603161024,1603161103,DE
1603161104,1603161119,GB
-1603161120,1603161567,DE
+1603161120,1603161135,AT
+1603161136,1603161151,GB
+1603161152,1603161567,DE
1603161568,1603161599,FR
1603161600,1603162111,DE
1603162112,1603166207,TJ
@@ -55014,20 +59374,24 @@
1603224432,1603224447,US
1603224448,1603224463,MX
1603224464,1603224575,GB
-1603224576,1603224775,FR
-1603224776,1603224783,GB
-1603224784,1603224895,FR
-1603224896,1603225087,GB
-1603225088,1603225599,FR
+1603224576,1603224831,FR
+1603224832,1603224847,ES
+1603224848,1603224895,FR
+1603224896,1603224911,GB
+1603224912,1603225007,FR
+1603225008,1603225023,MX
+1603225024,1603225159,FR
+1603225160,1603225343,GB
+1603225344,1603225599,FR
1603225600,1603225607,ES
1603225608,1603225615,GB
1603225616,1603225623,DE
1603225624,1603225631,IT
1603225632,1603225639,US
1603225640,1603225647,CN
-1603225648,1603225855,FR
-1603225856,1603226111,GB
-1603226112,1603227647,FR
+1603225648,1603226111,FR
+1603226112,1603226623,GB
+1603226624,1603227647,FR
1603227648,1603231743,AT
1603231744,1603235839,IT
1603235840,1603239935,RU
@@ -55050,21 +59414,21 @@
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
1603982784,1603982847,AN
1603982848,1603984895,GB
1603984896,1603985151,PT
-1603985152,1603990271,GB
+1603985152,1603985279,GB
+1603985280,1603985407,BR
+1603985408,1603990271,GB
1603990272,1603990527,SA
1603990528,1603993599,GB
1603993600,1604009983,ME
@@ -55099,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
@@ -55126,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
@@ -55170,8 +59535,8 @@
1605125280,1605125335,GB
1605125336,1605125343,US
1605125344,1605125375,GB
-1605125376,1605125919,US
-1605125920,1605126143,GB
+1605125376,1605125903,US
+1605125904,1605126143,GB
1605126144,1605127679,US
1605127680,1605127935,GB
1605127936,1605128703,US
@@ -55203,8 +59568,10 @@
1605230592,1605238783,TR
1605238784,1605246975,IT
1605246976,1605255167,PL
-1605255168,1605263359,HU
-1605263360,1605271551,RU
+1605255168,1605257215,RU
+1605257216,1605259263,FR
+1605259264,1605261311,DE
+1605261312,1605271551,RU
1605271552,1605279743,DE
1605279744,1605287935,FR
1605287936,1605296127,RU
@@ -55237,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
@@ -55255,7 +59626,9 @@
1607794688,1607860223,RU
1607860224,1607892992,ES
1607892993,1607892994,DE
-1607892995,1607893055,ES
+1607892995,1607893000,ES
+1607893001,1607893004,GB
+1607893005,1607893055,ES
1607893056,1607893119,DE
1607893120,1607925759,ES
1607925760,1607926783,RU
@@ -55287,21 +59660,17 @@
1607962624,1607963647,UA
1607963648,1607965695,RU
1607965696,1607966719,UA
-1607966720,1607967743,RU
1607967744,1607968767,UA
1607968768,1607969791,SE
-1607969792,1607970815,RU
+1607970816,1607972863,RU
1607972864,1607974911,NL
-1607974912,1607975935,LV
-1607976960,1607977983,KZ
-1607979008,1607980031,RU
+1607976960,1607980031,RU
1607980032,1607981055,DE
1607981056,1607982079,UA
1607983104,1607984127,GB
1607984128,1607985151,RU
1607985152,1607986175,PL
1607986176,1607987199,UA
-1607987200,1607988223,ES
1607988224,1607989247,KG
1607990272,1607991295,RU
1607991296,1608122367,UA
@@ -55311,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
@@ -55383,7 +59773,9 @@
1613550736,1613550743,US
1613550744,1613554743,CA
1613554744,1613554751,US
-1613554752,1613557007,CA
+1613554752,1613556183,CA
+1613556184,1613556191,US
+1613556192,1613557007,CA
1613557008,1613557015,US
1613557016,1613557087,CA
1613557088,1613557095,US
@@ -55402,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
@@ -55419,8 +59813,13 @@
1614741504,1614757887,CA
1614757888,1614774271,US
1614774272,1614786559,CA
-1614786560,1618886655,US
-1618968576,1618984959,US
+1614786560,1618837503,US
+1618837504,1618841599,CA
+1618841600,1618849791,US
+1618849792,1618862079,CA
+1618862080,1618866175,US
+1618866176,1618870271,CA
+1618870272,1618984959,US
1618984960,1619001343,CA
1619001344,1632305151,US
1632305152,1632321535,CA
@@ -55452,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
@@ -56058,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
@@ -56088,8 +60489,8 @@
1673562896,1673562911,CA
1673562912,1673562975,US
1673562976,1673563007,NL
-1673563008,1673563135,US
-1673563136,1673563167,CA
+1673563008,1673563151,US
+1673563152,1673563167,CA
1673563168,1673563407,US
1673563408,1673563423,CA
1673563424,1673563487,US
@@ -56100,13 +60501,7 @@
1673563696,1673563711,CA
1673563712,1673563775,US
1673563776,1673563903,GB
-1673563904,1673563967,US
-1673563968,1673563983,CA
-1673563984,1673566719,US
-1673566720,1673566735,CA
-1673566736,1673566767,US
-1673566768,1673566783,NO
-1673566784,1673566847,US
+1673563904,1673566847,US
1673566848,1673566911,CA
1673566912,1673566975,US
1673566976,1673567007,CA
@@ -56134,9 +60529,7 @@
1673568304,1673568319,GB
1673568320,1673568383,US
1673568384,1673568447,CA
-1673568448,1673568527,US
-1673568528,1673568543,CA
-1673568544,1673569023,US
+1673568448,1673569023,US
1673569024,1673569039,CA
1673569040,1673569055,HR
1673569056,1673569103,US
@@ -56168,7 +60561,9 @@
1673577984,1673578239,A1
1673578240,1673578287,US
1673578288,1673578303,CA
-1673578304,1673585343,US
+1673578304,1673583231,US
+1673583232,1673583295,CA
+1673583296,1673585343,US
1673585344,1673585407,SC
1673585408,1673590783,US
1673590784,1673590911,EC
@@ -56246,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
@@ -56262,7 +60661,9 @@
1701737472,1701740543,CN
1701740544,1701838847,JP
1701838848,1702363135,AU
-1702363136,1702888447,CN
+1702363136,1702821887,CN
+1702821888,1702887423,HK
+1702887424,1702888447,CN
1702888448,1702889471,AU
1702889472,1702903807,CN
1702903808,1702920191,ID
@@ -56294,7 +60695,10 @@
1710949376,1710950399,NP
1710950400,1711210495,CN
1711210496,1711276031,ID
-1728053248,1728120831,AU
+1728053248,1728120063,AU
+1728120064,1728120319,SG
+1728120320,1728120575,IN
+1728120576,1728120831,AU
1728120832,1728121855,CN
1728121856,1728123903,HK
1728123904,1728125951,CN
@@ -56343,7 +60747,8 @@
1728204800,1728205823,IN
1728205824,1728206847,KR
1728206848,1728207871,SB
-1728207872,1728210943,JP
+1728207872,1728208895,KR
+1728208896,1728210943,JP
1728210944,1728211967,SG
1728211968,1728212991,CN
1728212992,1728214015,TH
@@ -56389,10 +60794,472 @@
1728291840,1728292863,SG
1728292864,1728293887,PG
1728293888,1728294911,MY
+1728294912,1728295935,TH
+1728295936,1728299007,JP
+1728299008,1728300031,TW
+1728300032,1728301055,AU
+1728301056,1728302079,SG
+1728302080,1728303103,IN
+1728303104,1728305151,ID
+1728305152,1728306175,AU
+1728306176,1728307199,ID
+1728307200,1728308223,BD
+1728308224,1728309247,IN
+1728309248,1728310271,NZ
+1728310272,1728311295,AU
+1728311296,1728312319,GU
+1728312320,1728315391,VN
+1728315392,1728316415,ID
+1728316416,1728317439,MY
+1728317440,1728318463,JP
+1728318464,1728319487,SG
+1728319488,1728320511,AU
+1728320512,1728321535,PH
+1728321536,1728322559,JP
+1728322560,1728323583,MY
+1728323584,1728324607,JP
+1728324608,1728325631,SG
+1728325632,1728326655,JP
+1728326656,1728327679,MY
+1728327680,1728328703,KR
+1728328704,1728329727,ID
+1728329728,1728330751,CN
+1728330752,1728331775,AU
+1728331776,1728332799,BD
+1728332800,1728333823,JP
+1728333824,1728334847,PF
+1728334848,1728336895,JP
+1728336896,1728337919,AU
+1728337920,1728338943,MY
+1728338944,1728339967,PK
+1728339968,1728340991,SG
+1728340992,1728342015,AU
+1728342016,1728343039,TW
+1728343040,1728344063,SG
+1728344064,1728344575,HK
+1728344576,1728345087,SG
+1728345088,1728346111,BD
+1728346112,1728346367,AU
+1728346368,1728346623,NZ
+1728346624,1728347135,AU
+1728347136,1728348159,SG
+1728348160,1728349183,VN
+1728349184,1728349951,AU
+1728349952,1728350207,NP
+1728350208,1728351231,NZ
+1728351232,1728352255,MY
+1728352256,1728353279,BD
+1728353280,1728354303,KR
+1728354304,1728355327,NZ
+1728355328,1728356351,TH
+1728356352,1728357375,AU
+1728357376,1728358399,ID
+1728358400,1728359423,CN
+1728359424,1728359935,AU
+1728359936,1728360447,ID
+1728360448,1728362495,KR
+1728362496,1728363519,CN
+1728363520,1728364543,BN
+1728364544,1728365567,AU
+1728365568,1728366591,SG
+1728366592,1728367615,JP
+1728367616,1728367871,IN
+1728367872,1728368127,AU
+1728368128,1728368639,ID
+1728368640,1728369663,IN
+1728369664,1728370687,AU
+1728370688,1728371711,TH
+1728371712,1728372735,IN
+1728372736,1728373759,HK
+1728373760,1728374783,TH
+1728374784,1728375039,SG
+1728375296,1728376831,AU
+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
+1728710912,1728711167,IN
+1728711424,1728711679,AU
+1728711680,1728712703,HK
+1728712704,1728713727,CN
+1728713728,1728714751,MN
+1728714752,1728715775,IN
+1728715776,1728716799,NP
+1728716800,1728717823,AU
+1728717824,1728718847,JP
+1728718848,1728719871,MY
+1728719872,1728720895,NZ
+1728720896,1728721919,AU
+1728721920,1728722943,BD
+1728722944,1728723199,ID
+1728723200,1728723455,AU
+1728723456,1728726015,ID
+1728726016,1728727039,JP
+1728727040,1728728063,AU
+1728728064,1728729087,BD
+1728729088,1728729599,ID
+1728729600,1728730111,AU
+1728730112,1728731135,CN
+1728731136,1728732159,VN
+1728732160,1728733183,KR
+1728733184,1728734207,ID
+1728734208,1728735231,SG
+1728735232,1728736255,ID
+1728736256,1728736511,HK
+1728736512,1728736767,IN
+1728736768,1728737023,ID
+1728737024,1728737279,CN
+1728737280,1728738303,JP
+1728738304,1728739327,IN
+1728739328,1728740351,ID
+1728740352,1728740863,HK
+1728740864,1728741119,AU
+1728741120,1728741375,IN
+1728741376,1728742399,ID
+1728742400,1728743423,IN
+1728743424,1728744447,ID
+1728744448,1728745471,CN
+1728745472,1728747519,ID
+1728747520,1728748543,PH
+1728748544,1728750591,MY
+1728750592,1728751615,JP
+1728751616,1728751871,IN
+1728751872,1728752639,ID
+1728752640,1728753663,LK
+1728753664,1728754687,PH
+1728754688,1728755711,IN
+1728755712,1728756735,ID
+1728756736,1728757759,IN
+1728757760,1728758783,JP
+1728758784,1728759039,MY
+1728759040,1728759295,HK
+1728759296,1728759807,MY
+1728759808,1728760831,PH
+1728760832,1728761855,TW
+1728761856,1728762879,IN
+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
+1729531904,1729532927,AU
+1729532928,1729533951,MY
+1729533952,1729534975,JP
+1729534976,1729535999,TW
+1729536000,1729537023,HK
+1729537024,1729537791,ID
+1729537792,1729538047,JP
+1729538048,1729539071,SG
+1729539072,1729540095,IN
+1729540096,1729541119,AU
+1729541120,1729542143,TH
+1729542144,1729543167,AU
+1729543168,1729544191,CN
+1729544192,1729545215,IN
+1729545216,1729546239,AU
+1729546240,1729547263,HK
+1729547264,1729548287,IN
+1729548288,1729549311,AU
+1729549312,1729550335,JP
+1729550336,1729551359,MY
+1729551360,1729552383,KR
+1729552384,1729553407,AU
+1729553408,1729554431,CN
+1729554432,1729554943,ID
+1729554944,1729555455,NZ
+1729555456,1729556479,IN
+1729556480,1729557503,ID
+1729557504,1729558527,HK
+1729558528,1729559551,ID
+1729559552,1729560575,CN
+1729953792,1729954815,MY
+1729954816,1729955839,ID
+1729955840,1729956863,BD
+1729956864,1729957887,HK
+1729957888,1729958911,CN
+1729958912,1729959935,PH
+1729959936,1729960959,SG
+1729960960,1729961471,IN
+1729961472,1729961983,NZ
+1729961984,1729964031,IN
+1729964032,1729965055,AU
+1729965056,1729966079,IN
+1729966080,1729967103,JP
+1729967104,1729968127,AU
+1729968128,1729969151,MY
+1729969152,1729970175,LK
+1729970176,1729971199,AU
+1729971200,1729972223,JP
+1729972224,1729973247,HK
+1729973248,1729974271,AU
+1729974272,1729975295,PH
+1729975296,1729976831,AU
+1729976832,1729977343,NZ
+1729977344,1729978367,HK
+1729978368,1729979391,IN
+1729979392,1729980415,AU
+1729980416,1729980927,BD
+1729980928,1729982463,SG
+1729982464,1729982719,AU
+1729982720,1729982975,JP
+1729982976,1729983231,SG
+1729983232,1729983487,AU
+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
+1744179200,1744180223,TH
+1744180224,1744181247,PH
+1744181248,1744182271,TH
+1744182272,1744185343,AU
+1744185344,1744186367,HK
+1744186368,1744187903,IN
+1744187904,1744188159,TH
+1744188160,1744188415,AU
+1744188416,1744189439,NZ
+1744189440,1744190463,KR
+1744190464,1744191487,JP
+1744191488,1744192511,IN
+1744192512,1744194559,JP
+1744194560,1744194815,ID
+1744194816,1744195071,HK
+1744195072,1744195327,SG
+1744195328,1744195583,HK
+1744195584,1744196607,JP
+1744196608,1744197631,IN
+1744197632,1744198655,MY
+1744198656,1744199679,SG
+1744199680,1744201727,AU
+1744201728,1744201983,VN
+1744202240,1744202495,IN
+1744202496,1744202751,ID
+1744202752,1744203775,PK
+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
1778385408,1778393087,CN
-1778393088,1778401279,AU
1778401280,1778417663,CN
1778417664,1778450431,TH
1778450432,1778515967,TW
@@ -56416,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
@@ -56424,16 +61342,40 @@
1815912448,1815920639,CA
1815920640,1815928831,US
1815928832,1815937023,BS
-1815937024,1816068095,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
@@ -56480,7 +61422,8 @@
1833248768,1833250815,MK
1833250816,1833254911,GB
1833254912,1833256959,DE
-1833256960,1833261055,GB
+1833256960,1833259007,RU
+1833259008,1833261055,GB
1833261056,1833263103,PL
1833263104,1833265151,DE
1833265152,1833267199,GB
@@ -56488,7 +61431,7 @@
1833269248,1833271295,FI
1833271296,1833273343,IT
1833273344,1833275391,EU
-1833275392,1833277439,GB
+1833275392,1833277439,IT
1833277440,1833279487,CH
1833279488,1833281535,AL
1833281536,1833283583,AT
@@ -56496,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
@@ -56606,16 +61550,18 @@
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,1833476095,EU
+1833474560,1833474815,RU
+1833474816,1833475071,EU
+1833475072,1833476095,DE
1833476096,1833477375,NL
1833477376,1833477503,GB
1833477504,1833477631,DE
-1833477632,1833481087,NL
-1833481088,1833481215,IE
-1833481216,1833484287,NL
+1833477632,1833484287,NL
1833484288,1833488383,IR
1833488384,1833492479,GB
1833492480,1833504767,RU
@@ -56667,19 +61613,21 @@
1833644288,1833644319,TJ
1833644320,1833648127,RU
1833648128,1833652223,LB
-1833652224,1833659903,DE
-1833659904,1833659919,NA
-1833659920,1833660159,DE
-1833660160,1833660175,CH
-1833660176,1833660179,DE
-1833660180,1833660223,CH
-1833660224,1833660351,DE
+1833652224,1833660351,DE
1833660352,1833660415,US
1833660416,1833664511,IT
1833664512,1833668607,RU
1833668608,1833672703,CZ
1833672704,1833676799,GB
-1833676800,1833680895,DE
+1833676800,1833677567,DE
+1833677568,1833677599,CH
+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
@@ -56729,7 +61677,9 @@
1835540480,1835548671,DE
1835548672,1835549695,GB
1835549696,1835550207,ES
-1835550208,1835565055,GB
+1835550208,1835561351,GB
+1835561352,1835561359,A2
+1835561360,1835565055,GB
1835565056,1835573247,AL
1835573248,1835581439,UA
1835581440,1835589631,BG
@@ -56750,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
@@ -56786,12 +61739,12 @@
1835909120,1835913215,RS
1835913216,1835917311,RU
1835917312,1835920127,GB
-1835920128,1835920143,PT
-1835920144,1835920151,GB
-1835920152,1835920159,PT
-1835920160,1835920263,GB
-1835920264,1835920279,PT
-1835920280,1835925503,GB
+1835920128,1835920199,PT
+1835920200,1835920207,GB
+1835920208,1835920271,PT
+1835920272,1835920279,GB
+1835920280,1835920335,PT
+1835920336,1835925503,GB
1835925504,1835933695,LV
1835933696,1835941887,RU
1835941888,1835950079,UA
@@ -56843,16 +61796,23 @@
1837088768,1837105151,SI
1837105152,1838153727,BE
1838153728,1839202303,GB
-1839202304,1839218687,BG
-1839218688,1839220735,ES
-1839220736,1839235071,BG
+1839202304,1839235071,BG
1839235072,1839267839,IL
1839267840,1839300607,RU
1839300608,1839333375,BH
1839333376,1839366143,UA
1839366144,1839398911,IR
1839398912,1839431679,NO
-1839431680,1839464447,RU
+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
@@ -56864,11 +61824,7 @@
1839756328,1839756335,FR
1839756336,1839759359,IT
1839759360,1839792127,RU
-1839792128,1839794687,GB
-1839794688,1839794943,US
-1839794944,1839795071,GB
-1839795072,1839795087,US
-1839795088,1839795151,GB
+1839792128,1839795151,GB
1839795152,1839795167,US
1839795168,1839796607,GB
1839796608,1839796671,US
@@ -56883,17 +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,1839801599,GB
-1839801600,1839801855,US
-1839801856,1839802111,GB
+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
@@ -56918,7 +61872,8 @@
1840906240,1840971775,IL
1840971776,1841102847,RU
1841102848,1841168383,NO
-1841168384,1841299455,RU
+1841168384,1841233919,FR
+1841233920,1841299455,RU
1841299456,1841430527,DE
1841430528,1841561599,RU
1841561600,1841565695,PL
@@ -57010,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
@@ -57092,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
@@ -57153,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
@@ -57169,13 +62154,17 @@
1844058112,1844062207,RU
1844062208,1844064255,CZ
1844064256,1844068351,IT
-1844068352,1844072447,GB
+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
@@ -57185,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
@@ -57198,8 +62189,11 @@
1844125696,1844127743,NL
1844127744,1844129791,DE
1844129792,1844131583,NL
-1844131584,1844131711,SC
-1844131712,1844131839,NL
+1844131584,1844131647,SC
+1844131648,1844131711,NL
+1844131712,1844131775,RU
+1844131776,1844131807,US
+1844131808,1844131839,NL
1844131840,1844133887,DE
1844133888,1844135935,LT
1844135936,1844137983,NL
@@ -57227,17 +62221,30 @@
1844169656,1844169663,SE
1844169664,1844169679,US
1844169680,1844169687,ZM
-1844169688,1844169727,SE
+1844169688,1844169695,IQ
+1844169696,1844169727,SE
1844169728,1844169767,DE
1844169768,1844169951,US
1844169952,1844169983,DE
-1844169984,1844169987,AF
-1844169988,1844169991,DE
-1844169992,1844169995,AF
+1844169984,1844169995,AF
1844169996,1844169999,TM
-1844170000,1844170007,DE
-1844170008,1844170015,AF
-1844170016,1844170751,DE
+1844170000,1844170015,AF
+1844170016,1844170019,NG
+1844170020,1844170027,AF
+1844170028,1844170031,IQ
+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,1844170263,IQ
+1844170264,1844170279,AF
+1844170280,1844170751,DE
1844170752,1844174847,RU
1844174848,1844178943,DE
1844178944,1844180991,EE
@@ -57249,7 +62256,23 @@
1844181953,1844181958,GB
1844181959,1844181984,TR
1844181985,1844181990,GB
-1844181991,1844183039,TR
+1844181991,1844182272,TR
+1844182273,1844182302,US
+1844182303,1844182309,TR
+1844182310,1844182329,US
+1844182330,1844182343,TR
+1844182344,1844182403,US
+1844182404,1844182416,TR
+1844182417,1844182417,US
+1844182418,1844182424,TR
+1844182425,1844182426,US
+1844182427,1844182432,TR
+1844182433,1844182480,US
+1844182481,1844182485,TR
+1844182486,1844182489,US
+1844182490,1844182501,TR
+1844182502,1844182511,US
+1844182512,1844183039,TR
1844183040,1844191231,IT
1844191232,1844195327,AL
1844195328,1844203519,RU
@@ -57257,9 +62280,12 @@
1844207616,1844211711,RU
1844211712,1844215807,SK
1844215808,1844219903,BE
-1844219904,1844220159,A2
+1844219904,1844219919,A2
+1844219920,1844219959,LB
+1844219960,1844220159,A2
1844220160,1844220191,IQ
-1844220192,1844220415,DE
+1844220192,1844220287,DE
+1844220288,1844220415,LB
1844220416,1844220431,A2
1844220432,1844223743,DE
1844223744,1844223999,A2
@@ -57290,7 +62316,9 @@
1844310016,1844318207,FR
1844318208,1844322303,IT
1844322304,1844326399,CZ
-1844326400,1844330495,DK
+1844326400,1844329983,DK
+1844329984,1844330303,LU
+1844330304,1844330495,DK
1844330496,1844334591,GB
1844334592,1844342783,RU
1844342784,1844346879,IT
@@ -57646,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
@@ -57715,7 +62738,6 @@
1888266240,1888268287,JP
1888268288,1888270335,AU
1888270336,1888271359,SG
-1888271360,1888272383,TH
1888272384,1888288767,KR
1888288768,1888354303,AU
1888354304,1888485375,TH
@@ -57850,7 +62872,9 @@
1908539392,1908670463,CN
1908670464,1908735999,TW
1908736000,1908740095,AU
-1908740096,1908748287,JP
+1908740096,1908744191,JP
+1908744192,1908746239,SG
+1908746240,1908748287,JP
1908748288,1908750335,PK
1908750336,1908752383,JP
1908752384,1908753407,NZ
@@ -58319,7 +63343,9 @@
1958830080,1958838271,JP
1958838272,1958842367,IN
1958842368,1958844415,NZ
-1958844416,1958846463,HK
+1958845440,1958845695,HK
+1958845696,1958845951,MY
+1958845952,1958846463,HK
1958846464,1958848511,IN
1958848512,1958850559,BD
1958850560,1958853631,AU
@@ -58969,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
@@ -58997,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
@@ -59587,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
@@ -59791,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
@@ -59804,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
@@ -59813,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
@@ -59832,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
@@ -59927,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
@@ -59938,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
@@ -59952,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
@@ -60045,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
@@ -60055,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
@@ -60082,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
@@ -60172,7 +65338,11 @@
2212495360,2212560895,NL
2212560896,2212691967,US
2212691968,2212757503,GB
-2212757504,2212810751,FI
+2212757504,2212761599,FI
+2212761600,2212762623,GB
+2212762624,2212766719,FI
+2212766720,2212767743,GB
+2212767744,2212810751,FI
2212810752,2212811519,US
2212811520,2212823039,FI
2212823040,2212954111,US
@@ -60192,13 +65362,7 @@
2214068224,2214133759,JP
2214133760,2214264831,US
2214264832,2214330367,GB
-2214330368,2214396159,US
-2214396160,2214396415,CA
-2214396416,2214396671,US
-2214396672,2214396927,CA
-2214396928,2214397183,US
-2214397184,2214397695,CA
-2214397696,2214397951,US
+2214330368,2214397951,US
2214397952,2214398207,CA
2214398208,2214398975,US
2214398976,2214400767,CA
@@ -60686,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
@@ -60859,13 +66021,16 @@
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
2330591232,2330656767,US
2330656768,2330722303,NZ
-2330722304,2331181055,US
+2330722304,2331049983,US
+2331049984,2331115519,GB
+2331115520,2331181055,US
2331181056,2331246591,JP
2331246592,2331443199,DE
2331443200,2331508735,US
@@ -61029,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
@@ -61102,8 +66267,41 @@
2365390848,2365456383,AU
2365456384,2365521919,US
2365521920,2365587455,CN
-2365587456,2366111743,DE
-2366177280,2366308351,DE
+2365587456,2365589503,JO
+2365589504,2365591551,US
+2365591552,2365593599,DE
+2365593600,2365595647,NL
+2365595648,2365603839,GB
+2365603840,2365624319,NO
+2365624320,2365630463,GB
+2365630464,2365632511,NL
+2365632512,2365634559,RU
+2365634560,2365636607,FR
+2365636608,2365638655,GB
+2365638656,2365640703,FR
+2365640704,2365644799,GB
+2365644800,2365652991,NO
+2365652992,2366111743,DE
+2366111744,2366144511,MT
+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,2366171135,CH
+2366171136,2366308351,DE
2366308352,2366373887,GB
2366373888,2367487999,DE
2367488000,2367553535,SI
@@ -61120,9 +66318,56 @@
2371944448,2372009983,GB
2372009984,2372075519,CH
2372075520,2372206591,DE
+2372206592,2372214783,UA
+2372214784,2372218879,DE
+2372218880,2372220927,FR
+2372220928,2372222975,KW
+2372222976,2372239359,EU
+2372239360,2372264447,RU
+2372264448,2372266495,UA
+2372266496,2372272127,RU
2372272128,2372337663,US
2372337664,2372403199,ID
-2372403200,2372665343,US
+2372403200,2372468735,US
+2372468736,2372472831,NL
+2372472832,2372474367,PL
+2372474368,2372474623,US
+2372474624,2372474879,GB
+2372474880,2372483071,RU
+2372483072,2372485119,JO
+2372485120,2372485247,RU
+2372485248,2372485375,IN
+2372485376,2372485823,RU
+2372485824,2372485887,NL
+2372485888,2372487167,RU
+2372487168,2372489215,FR
+2372489216,2372493311,LB
+2372493312,2372497407,ES
+2372497408,2372499455,IE
+2372499456,2372501503,NL
+2372501504,2372505599,UA
+2372505600,2372507647,NL
+2372507648,2372509695,IT
+2372509696,2372511743,AE
+2372511744,2372511744,SI
+2372511745,2372511998,BA
+2372511999,2372512000,SI
+2372512001,2372512254,BA
+2372512255,2372512256,SI
+2372512257,2372512510,BA
+2372512511,2372512512,SI
+2372512513,2372512766,BA
+2372512767,2372512768,SI
+2372512769,2372513022,BA
+2372513023,2372513024,SI
+2372513025,2372513278,BA
+2372513279,2372513280,SI
+2372513281,2372513534,BA
+2372513535,2372513536,SI
+2372513537,2372513790,BA
+2372513791,2372513791,SI
+2372513792,2372534271,GB
+2372534272,2372665343,US
2372665344,2372730879,IT
2372730880,2372796415,CA
2372796416,2372993023,US
@@ -61141,19 +66386,64 @@
2374172672,2374238207,US
2374238208,2374303743,AU
2374303744,2374369279,US
+2374369280,2374500351,BE
+2374500352,2374502399,LV
+2374502400,2374504447,MK
+2374504448,2374508543,RO
+2374508544,2374512639,LT
+2374512640,2374514687,SK
+2374514688,2374516735,ES
+2374516736,2374524927,AM
+2374524928,2374525183,DE
+2374525184,2374529023,FR
+2374529024,2374531071,RU
+2374531072,2374533119,NL
+2374533120,2374565887,HR
2374565888,2374631423,SE
+2374631424,2374647807,HR
+2374647808,2374651903,BE
+2374651904,2374653951,IT
+2374653952,2374655999,FR
+2374656000,2374664191,UA
+2374664192,2374666239,GB
+2374666240,2374670335,NL
+2374670336,2374672383,FR
+2374672384,2374674431,PL
+2374674432,2374676479,NL
+2374676480,2374680575,LB
+2374680576,2374684671,NL
+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
2376597504,2376663039,AU
2376663040,2376728575,DE
+2376728576,2376761343,GB
+2376761344,2376777727,CZ
+2376777728,2376781823,BA
+2376781824,2376783871,ES
+2376783872,2376785919,FR
+2376785920,2376794111,UA
2376794112,2376859647,CH
2376859648,2376925183,FI
2376925184,2377056255,US
@@ -61169,7 +66459,9 @@
2378170368,2378235903,FI
2378235904,2378301439,US
2378301440,2378366975,FR
-2378366976,2378694655,US
+2378366976,2378432511,US
+2378432512,2378498047,TR
+2378498048,2378694655,US
2378694656,2378760191,DE
2378760192,2378825727,AT
2378825728,2378891263,US
@@ -61185,7 +66477,9 @@
2380595200,2380660735,JP
2380660736,2380726271,US
2380726272,2380791807,GB
-2380791808,2381381631,US
+2380791808,2381119487,US
+2381119488,2381185023,GR
+2381185024,2381381631,US
2381381632,2381447167,GB
2381447168,2381512703,US
2381512704,2381578239,AU
@@ -61198,6 +66492,14 @@
2382102528,2382168063,NL
2382168064,2382233599,BE
2382233600,2382299135,US
+2382299136,2382331903,GR
+2382331904,2382335999,FR
+2382336000,2382340095,NL
+2382340096,2382342143,CH
+2382342144,2382344191,AT
+2382344192,2382346239,NL
+2382346240,2382348287,SE
+2382348288,2382364671,SI
2382364672,2385430655,CA
2385430656,2385430687,US
2385430688,2385903615,CA
@@ -61210,7 +66512,11 @@
2386988288,2386988543,CH
2386988544,2386989055,CA
2386989056,2386989311,GB
-2386989312,2387410943,CA
+2386989312,2387003391,CA
+2387003392,2387003647,GB
+2387003648,2387003903,CA
+2387003904,2387004159,GB
+2387004160,2387410943,CA
2387410944,2387476479,US
2387476480,2387542015,CA
2387542016,2387607551,US
@@ -61439,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
@@ -61508,6 +66771,16 @@
2449145856,2449211391,SE
2449211392,2449276927,CH
2449276928,2449407999,DE
+2449473536,2449477631,DE
+2449477632,2449479679,AL
+2449479680,2449481727,FR
+2449481728,2449489919,RO
+2449489920,2449491967,FR
+2449491968,2449494015,NL
+2449494016,2449496063,UA
+2449496064,2449498111,FR
+2449498112,2449506303,DE
+2449506304,2449539071,RO
2449539072,2449604607,US
2449604608,2449670143,NO
2449670144,2449735679,LU
@@ -61523,19 +66796,40 @@
2452684800,2452750335,US
2452750336,2452815871,NL
2452815872,2452881407,JP
-2452881408,2453143551,US
+2452881408,2452946943,DE
+2452946944,2453143551,US
2453143552,2453209087,JP
2453209088,2453340159,US
2453340160,2453405695,NO
+2453405696,2453471231,DE
2453471232,2453536767,US
2453536768,2453602303,AU
2453602304,2453667839,US
2453667840,2453733375,ZA
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,2453832959,IR
+2453832960,2453833727,IQ
+2453833728,2453835775,ES
+2453835776,2453837823,DE
+2453837824,2453838335,LU
+2453838336,2453839871,EU
+2453839872,2453852159,RU
+2453852160,2453856255,RO
+2453856256,2453858303,DE
+2453858304,2453860351,SE
+2453860352,2453864447,ES
2453864448,2453929983,CH
2453929984,2454061055,US
2454061056,2454126591,GB
-2454126592,2454192127,US
+2454159360,2454192127,US
2454192128,2454257663,NO
2454257664,2454388735,US
2454388736,2454454271,SE
@@ -61554,7 +66848,9 @@
2454913024,2454978559,CL
2454978560,2455175167,US
2455175168,2455240703,GB
-2455240704,2455830527,US
+2455240704,2455371775,US
+2455371776,2455437311,GB
+2455437312,2455830527,US
2455830528,2455896063,GB
2455896064,2456027135,US
2456027136,2456092671,IT
@@ -61575,7 +66871,22 @@
2457141248,2457206783,JP
2457206784,2457272319,AU
2457272320,2457337855,FI
-2457337856,2457599999,US
+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
+2457382912,2457383935,CZ
+2457383936,2457385983,RU
+2457385984,2457398271,CZ
+2457398272,2457400319,UA
+2457400320,2457403391,CZ
+2457403392,2457599999,US
2457600000,2457665535,GR
2457665536,2458058751,US
2458058752,2458124287,CA
@@ -61594,6 +66905,8 @@
2458995520,2459631615,US
2459631616,2459697151,CL
2459697152,2459828223,US
+2459828224,2459860991,RU
+2459860992,2459893759,RO
2459893760,2459959295,CH
2459959296,2460024831,US
2460024832,2460090367,FI
@@ -61613,7 +66926,27 @@
2461204480,2461270015,GB
2461270016,2461401087,US
2461401088,2461466623,ZA
-2461466624,2461794303,US
+2461466624,2461597695,US
+2461597696,2461599743,CH
+2461599744,2461601791,SE
+2461601792,2461605887,GB
+2461605888,2461607935,LB
+2461607936,2461609983,FR
+2461609984,2461610495,BE
+2461610496,2461611519,NL
+2461611520,2461612031,BE
+2461612032,2461614079,IL
+2461614080,2461630463,TR
+2461630464,2461651967,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
2461990912,2462056447,GB
@@ -61624,6 +66957,7 @@
2462384128,2463236095,US
2463236096,2463301631,AT
2463301632,2463367167,FI
+2463367168,2463432703,SI
2463432704,2463498239,NO
2463498240,2463629311,US
2463629312,2463694847,CH
@@ -61643,13 +66977,70 @@
2464546816,2464743423,ZA
2464743424,2464808959,US
2464808960,2464874495,DE
-2464874496,2465726463,US
+2464874496,2465660927,US
+2465660928,2465662975,RU
+2465662976,2465665023,CH
+2465665024,2465667071,IT
+2465667072,2465669119,SI
+2465669120,2465671167,RU
+2465671168,2465673215,IR
+2465673216,2465677311,GB
+2465677312,2465679359,IT
+2465679360,2465681407,NL
+2465681408,2465683455,SE
+2465683456,2465685503,FR
+2465685504,2465690367,DE
+2465690368,2465690431,US
+2465690432,2465690623,IT
+2465690624,2465690639,GB
+2465690640,2465690879,IT
+2465690880,2465690895,CH
+2465690896,2465691135,IT
+2465691136,2465691151,DE
+2465691152,2465691391,IT
+2465691392,2465691407,NL
+2465691408,2465691647,IT
+2465691648,2465691663,BR
+2465691664,2465691903,IT
+2465691904,2465691919,JP
+2465691920,2465692159,IT
+2465692160,2465692175,CN
+2465692176,2465692415,IT
+2465692416,2465692431,LT
+2465692432,2465692671,IT
+2465692672,2465692687,FR
+2465692688,2465692927,IT
+2465692928,2465692943,ID
+2465692944,2465693183,IT
+2465693184,2465693199,RU
+2465693200,2465693439,IT
+2465693440,2465693455,FR
+2465693456,2465693695,IT
+2465693696,2465726463,NO
2465726464,2465791999,CH
2465792000,2465857535,FR
2465857536,2465923071,US
+2465923072,2465988607,SA
2465988608,2466054143,US
2466054144,2466119679,SE
2466119680,2466185215,DE
+2466185216,2466189311,GB
+2466189312,2466191359,ES
+2466191360,2466193407,CZ
+2466193408,2466199551,NL
+2466199552,2466201599,AT
+2466201600,2466209791,MK
+2466209792,2466211839,ES
+2466211840,2466213887,GB
+2466213888,2466215935,CH
+2466215936,2466217983,DE
+2466217984,2466226175,BA
+2466226176,2466228223,IT
+2466228224,2466230271,FR
+2466230272,2466232319,EE
+2466232320,2466234367,ES
+2466234368,2466242559,RU
+2466242560,2466250751,GE
2466250752,2466643967,US
2466643968,2466709503,KR
2466709504,2466775039,HU
@@ -61690,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
@@ -61852,26 +67243,125 @@
2499477504,2499543039,DE
2499543040,2499674111,GB
2499674112,2499739647,US
-2499805184,2503016447,US
+2499805184,2499870719,TR
+2499870720,2500001791,US
+2500001792,2500034559,GE
+2500034560,2500038655,GB
+2500038656,2500040703,IT
+2500040704,2500042751,LB
+2500042752,2500046847,SA
+2500046848,2500047359,IT
+2500047360,2500047615,DE
+2500047616,2500048895,IT
+2500048896,2500050943,MD
+2500050944,2500067327,KZ
+2500067328,2501574655,US
+2501574656,2501640191,KZ
+2501640192,2503016447,US
2503016448,2503081983,IL
2503081984,2503671807,US
2503671808,2503737343,NL
-2503737344,2506293247,US
+2503737344,2503868415,US
+2503868416,2503876607,RU
+2503876608,2503880703,ES
+2503880704,2503882751,RU
+2503882752,2503884799,DE
+2503884800,2503901183,SI
+2503901184,2503905279,IT
+2503905280,2503907327,CZ
+2503907328,2503909375,FR
+2503909376,2503911423,RU
+2503911424,2503915519,ES
+2503915520,2503917567,IT
+2503917568,2503933951,BG
+2503933952,2506293247,US
2506293248,2506358783,CA
-2506358784,2508455935,US
+2506358784,2508062719,US
+2508062720,2508064767,CH
+2508064768,2508066815,ES
+2508066816,2508068863,RU
+2508068864,2508070911,HU
+2508070912,2508075007,ES
+2508075008,2508077055,CH
+2508077056,2508079103,BE
+2508079104,2508081151,DE
+2508081152,2508081279,GB
+2508081280,2508083199,IL
+2508083200,2508085247,IS
+2508085248,2508087295,PS
+2508087296,2508089343,RU
+2508089344,2508091391,GB
+2508091392,2508095487,AZ
+2508095488,2508103679,SI
+2508103680,2508105727,ES
+2508105728,2508107775,RU
+2508107776,2508109823,FI
+2508109824,2508111871,DE
+2508111872,2508128255,RU
+2508128256,2508455935,US
2508455936,2508521471,IT
2508521472,2508587007,CH
2508587008,2508652543,BE
2508652544,2508718079,AU
2508718080,2508914687,US
2508914688,2508980223,IT
-2508980224,2509242367,US
+2508980224,2509045759,TR
+2509045760,2509242367,US
2509242368,2509307903,AU
2509307904,2509373439,US
2509373440,2509438975,NL
+2509438976,2509504511,KW
2509504512,2509570047,AT
2509570048,2509832191,US
2509832192,2509897727,IE
+2509897728,2509914111,US
+2509914112,2509916159,RU
+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
@@ -61880,13 +67370,18 @@
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
@@ -61894,11 +67389,31 @@
2514485248,2514514431,DE
2514514432,2514514687,NL
2514514688,2515599359,DE
-2515599360,2515664895,EU
+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
@@ -61911,7 +67426,6 @@
2524512256,2524643327,CN
2524643328,2524971007,US
2524971008,2525036543,ES
-2525036544,2525102079,EU
2525102080,2525233151,US
2525233152,2525298687,SE
2525298688,2525626367,US
@@ -61957,12 +67471,11 @@
2531459072,2531524607,SE
2531524608,2531590143,US
2531590144,2531655679,AU
-2531655680,2532048895,US
+2531721216,2532048895,US
2532048896,2532114431,SE
2532114432,2532179967,GB
2532179968,2532376575,US
2532376576,2532442111,ES
-2532442112,2532507647,FR
2532507648,2532573183,US
2532573184,2532638719,ES
2532638720,2533031935,US
@@ -62040,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
@@ -62083,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
@@ -62114,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
@@ -62259,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
@@ -62403,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
@@ -62501,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
@@ -62514,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
@@ -62539,7 +68065,9 @@
2671378432,2671443967,NO
2671443968,2671509503,US
2671509504,2671575039,NL
-2671575040,2672295935,US
+2671575040,2671749119,US
+2671749120,2671750143,CA
+2671750144,2672295935,US
2672295936,2672361471,SE
2672361472,2672427007,AU
2672427008,2672820223,US
@@ -62548,6 +68076,7 @@
2672951296,2673082367,US
2673082368,2673147903,FR
2673147904,2673213439,US
+2673213440,2673278975,GB
2673278976,2673410047,US
2673410048,2673475583,CA
2673475584,2673541119,VE
@@ -62582,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
@@ -62594,6 +68125,7 @@
2677800960,2677866495,CH
2677866496,2677997567,US
2677997568,2678063103,CA
+2678063104,2678128639,UA
2678128640,2678194175,US
2678194176,2678259711,NO
2678259712,2678521855,US
@@ -62626,6 +68158,7 @@
2680553472,2680684543,US
2680684544,2680750079,SE
2680750080,2681012223,US
+2681012224,2681077759,PL
2681077760,2681143295,CA
2681143296,2681208831,AU
2681208832,2681274367,CA
@@ -62640,6 +68173,7 @@
2681864192,2681929727,US
2681929728,2681995263,GB
2681995264,2682257407,US
+2682257408,2682322943,UA
2682322944,2682388479,US
2682388480,2682454015,CN
2682454016,2682519551,US
@@ -62664,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
@@ -62833,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
@@ -62845,7 +68427,6 @@
2708865024,2708930559,JP
2708930560,2709127167,US
2709127168,2709192703,KR
-2709192704,2709258239,EU
2709258240,2709389311,US
2709389312,2709454847,SG
2709454848,2709716991,US
@@ -63036,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
@@ -63295,7 +68878,9 @@
2788243472,2788243487,SG
2788243488,2788245007,US
2788245008,2788245023,CA
-2788245024,2788253183,US
+2788245024,2788247863,US
+2788247864,2788247871,GB
+2788247872,2788253183,US
2788253184,2788253191,JP
2788253192,2788261887,US
2788261888,2788294655,GB
@@ -63387,8 +68972,8 @@
2815164416,2815229951,US
2815229952,2815295487,ID
2815295488,2815984639,US
-2815984640,2815985407,IL
-2815985408,2815985663,US
+2815984640,2815985151,IL
+2815985152,2815985663,US
2815985664,2815986687,IL
2815986688,2815986815,GB
2815986816,2815986831,US
@@ -63429,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
@@ -63571,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
@@ -63619,7 +69206,15 @@
2869428224,2869952511,CN
2869952512,2870018047,FR
2870018048,2870083583,DE
-2870083584,2870149119,FR
+2870083584,2870087935,FR
+2870087936,2870088191,ES
+2870088192,2870088959,FR
+2870088960,2870088991,ES
+2870088992,2870089727,FR
+2870089728,2870091775,DE
+2870091776,2870095871,FR
+2870095872,2870096383,SG
+2870096384,2870149119,FR
2870149120,2870214655,HU
2870214656,2870280191,DK
2870280192,2870345727,NL
@@ -63672,25 +69267,55 @@
2899443712,2899574783,FR
2899574784,2899902463,GB
2902458368,2902462463,A1
-2902462464,2902470936,US
+2902462464,2902470775,US
+2902470776,2902470777,BD
+2902470778,2902470936,US
2902470937,2902470938,LK
-2902470939,2902471468,US
+2902470939,2902470986,US
+2902470987,2902470989,BD
+2902470990,2902471468,US
2902471469,2902471470,AU
2902471471,2902471895,US
2902471896,2902471897,AU
2902471898,2902471960,US
2902471961,2902471962,AU
-2902471963,2902472037,US
+2902471963,2902472018,US
+2902472019,2902472021,AL
+2902472022,2902472037,US
2902472038,2902472039,AU
-2902472040,2902472834,US
+2902472040,2902472725,US
+2902472726,2902472728,BD
+2902472729,2902472788,US
+2902472789,2902472790,LK
+2902472791,2902472813,US
+2902472814,2902472814,LK
+2902472815,2902472834,US
2902472835,2902472836,BD
-2902472837,2902492927,US
-2902492928,2902493183,IN
+2902472837,2902473028,US
+2902473029,2902473031,IN
+2902473032,2902473107,US
+2902473108,2902473109,BD
+2902473110,2902473556,US
+2902473557,2902473558,LK
+2902473559,2902473649,US
+2902473650,2902473650,BD
+2902473651,2902473652,US
+2902473653,2902473653,BD
+2902473654,2902474023,US
+2902474024,2902474032,RU
+2902474033,2902474062,US
+2902474063,2902474073,RU
+2902474074,2902475263,US
+2902475264,2902475327,CY
+2902475328,2902492671,US
+2902492672,2902493183,IN
2902493184,2902507519,US
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
@@ -63702,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
@@ -63724,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
@@ -63738,14 +69371,23 @@
2915275008,2915275071,PL
2915275072,2915275263,US
2915275264,2915275327,PL
-2915275328,2915516671,US
+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
-2915765368,2915765375,PE
+2915765288,2915765367,US
+2915765368,2915765375,ZA
2915765376,2915765431,US
2915765432,2915765439,MX
2915765440,2915765471,US
@@ -63784,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
@@ -63813,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
@@ -64038,11 +69679,19 @@
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,2916121087,US
+2916118232,2916120823,US
+2916120824,2916120831,CA
+2916120832,2916121087,US
2916121088,2916121343,GB
2916121344,2916163583,US
2916163584,2916171775,CA
@@ -64060,48 +69709,48 @@
2916434560,2916434591,CA
2916434592,2916434623,US
2916434624,2916434655,CA
-2916434656,2916436543,US
+2916434656,2916436487,US
+2916436488,2916436495,CA
+2916436496,2916436543,US
2916436544,2916436607,CA
-2916436608,2916436735,US
-2916436736,2916436743,CA
-2916436744,2916437039,US
+2916436608,2916437039,US
2916437040,2916437047,DE
2916437048,2916437055,CN
2916437056,2916437063,GB
-2916437064,2916437503,US
-2916437504,2916437567,CA
-2916437568,2916440143,US
+2916437064,2916437199,US
+2916437200,2916437207,GB
+2916437208,2916437215,TH
+2916437216,2916437231,US
+2916437232,2916437239,SG
+2916437240,2916440143,US
2916440144,2916440159,CA
2916440160,2916440175,US
2916440176,2916440191,CA
-2916440192,2916440223,US
-2916440224,2916440239,CA
-2916440240,2916440287,US
+2916440192,2916440287,US
2916440288,2916440295,CA
2916440296,2916441119,US
2916441120,2916441151,CA
-2916441152,2916441191,US
-2916441192,2916441199,CA
-2916441200,2916441343,US
+2916441152,2916441199,US
+2916441200,2916441207,MY
+2916441208,2916441343,US
2916441344,2916442111,CA
2916442112,2916442623,US
2916442624,2916442879,CA
2916442880,2916443614,US
2916443615,2916443647,CA
-2916443648,2916444351,US
-2916444352,2916444359,CA
-2916444360,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,2916581375,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
@@ -64110,9 +69759,7 @@
2917168000,2917168031,UA
2917168032,2917168095,US
2917168096,2917168127,NZ
-2917168128,2917168159,US
-2917168160,2917168191,NL
-2917168192,2917168223,US
+2917168128,2917168223,US
2917168224,2917168255,BR
2917168256,2917168319,US
2917168320,2917168351,AR
@@ -64122,17 +69769,12 @@
2917168448,2917168479,BR
2917168480,2917168607,US
2917168608,2917168639,BR
-2917168640,2917169663,US
-2917169664,2917169695,DE
-2917169696,2917169727,NL
-2917169728,2917170015,US
+2917168640,2917170015,US
2917170016,2917170047,UA
2917170048,2917170079,BR
-2917170080,2917170111,NL
+2917170080,2917170111,US
2917170112,2917170143,RU
-2917170144,2917170175,US
-2917170176,2917170207,NL
-2917170208,2917170239,US
+2917170144,2917170239,US
2917170240,2917170271,RU
2917170272,2917170303,BR
2917170304,2917193025,US
@@ -64154,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
@@ -64163,13 +69807,83 @@
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
2917666304,2917667710,US
2917667711,2917671935,CA
-2917671936,2917675263,US
+2917671936,2917672191,US
+2917672192,2917672223,CA
+2917672224,2917675263,US
2917675264,2917675775,CA
2917675776,2917676031,US
2917676032,2917677055,CA
@@ -64181,8 +69895,8 @@
2917682432,2917683455,CA
2917683456,2917685503,US
2917685504,2917686015,CA
-2917686016,2917690367,US
-2917690368,2917690879,CA
+2917686016,2917690623,US
+2917690624,2917690879,CA
2917690880,2917693183,US
2917693184,2917693951,CA
2917693952,2917695231,US
@@ -64191,23 +69905,76 @@
2917695744,2917696255,CA
2917696256,2917702399,US
2917702400,2917707007,CA
-2917707008,2917714175,US
+2917707008,2917707519,US
+2917707520,2917707775,CA
+2917707776,2917710591,US
+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,2917802367,US
+2917722624,2917724159,US
+2917724160,2917724415,CA
+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,2917858047,US
+2917842432,2917853471,US
+2917853472,2917853495,CA
+2917853496,2917853519,US
+2917853520,2917853535,CA
+2917853536,2917858047,US
2917858048,2917858303,BE
2917858304,2918014975,US
2918014976,2918023167,CA
@@ -64221,7 +69988,9 @@
2918199680,2918199743,CA
2918199744,2918200287,US
2918200288,2918200303,CA
-2918200304,2918232063,US
+2918200304,2918201551,US
+2918201552,2918201567,CA
+2918201568,2918232063,US
2918232064,2918236159,CA
2918236160,2918260735,US
2918260736,2918264831,CA
@@ -64256,17 +70025,19 @@
2918477824,2918481919,CA
2918481920,2918514943,US
2918514944,2918515079,CA
-2918515080,2918532111,US
-2918532112,2918532127,CN
-2918532128,2918532143,US
+2918515080,2918515199,US
+2918515200,2918515231,CA
+2918515232,2918532111,US
+2918532112,2918532119,CN
+2918532120,2918532143,US
2918532144,2918532151,PK
2918532152,2918533119,US
2918533120,2918533127,CN
2918533128,2918533143,US
2918533144,2918533151,CN
2918533152,2918533159,US
-2918533160,2918533175,CN
-2918533176,2918533191,US
+2918533160,2918533167,CN
+2918533168,2918533191,US
2918533192,2918533199,AU
2918533200,2918533215,CN
2918533216,2918534687,US
@@ -64275,35 +70046,25 @@
2918534704,2918534735,CN
2918534736,2918534751,US
2918534752,2918534767,CN
-2918534768,2918534783,US
-2918534784,2918534807,CN
-2918534808,2918534815,US
-2918534816,2918534887,CN
-2918534888,2918534911,US
+2918534768,2918534815,US
+2918534816,2918534879,CN
+2918534880,2918534911,US
2918534912,2918534943,KR
-2918534944,2918534983,CN
+2918534944,2918534975,CN
+2918534976,2918534983,US
2918534984,2918534991,ID
-2918534992,2918535199,US
-2918535200,2918535231,CN
-2918535232,2918535423,US
-2918535424,2918535679,CN
-2918535680,2918535807,US
-2918535808,2918536191,CN
-2918536192,2918536703,US
-2918536704,2918536711,CN
-2918536712,2918536767,US
-2918536768,2918536791,CN
-2918536792,2918536799,US
-2918536800,2918536815,CN
-2918536816,2918536823,US
-2918536824,2918536959,CN
-2918536960,2918537215,US
-2918537216,2918537615,CN
-2918537616,2918537623,US
-2918537624,2918537727,CN
-2918537728,2918539007,US
-2918539008,2918539263,CN
-2918539264,2918580223,US
+2918534992,2918535807,US
+2918535808,2918535967,CN
+2918535968,2918535999,US
+2918536000,2918536023,CN
+2918536024,2918536031,US
+2918536032,2918536127,CN
+2918536128,2918536167,US
+2918536168,2918536191,CN
+2918536192,2918536703,A1
+2918536704,2918536719,US
+2918536720,2918536727,CA
+2918536728,2918580223,US
2918580224,2918588415,CA
2918588416,2918596607,US
2918596608,2918604799,CA
@@ -64311,7 +70072,9 @@
2918699008,2918703103,CA
2918703104,2918760447,US
2918760448,2918776831,CA
-2918776832,2918828031,US
+2918776832,2918816000,US
+2918816001,2918817023,GB
+2918817024,2918828031,US
2918828032,2918828543,UA
2918828544,2918829055,ES
2918829056,2918829183,US
@@ -64332,7 +70095,13 @@
2919020544,2919020575,CA
2919020576,2919020591,US
2919020592,2919020655,CA
-2919020656,2919063551,US
+2919020656,2919020711,US
+2919020712,2919020719,CA
+2919020720,2919020727,US
+2919020728,2919020799,CA
+2919020800,2919021343,US
+2919021344,2919021567,CA
+2919021568,2919063551,US
2919063552,2919064063,MX
2919064064,2919067655,CN
2919067656,2919067695,US
@@ -64550,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
@@ -64570,10 +70343,7 @@
2919170528,2919170535,BR
2919170536,2919170551,US
2919170552,2919170559,FR
-2919170560,2919170575,US
-2919170576,2919170583,FR
-2919170584,2919170591,US
-2919170592,2919170599,CN
+2919170560,2919170599,US
2919170600,2919170607,JP
2919170608,2919170615,US
2919170616,2919170623,CN
@@ -64603,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
@@ -64618,11 +70388,34 @@
2919171144,2919171151,TR
2919171152,2919171159,US
2919171160,2919171167,AU
-2919171168,2919174143,US
+2919171168,2919171183,US
+2919171184,2919171191,ZA
+2919171192,2919171311,US
+2919171312,2919171319,IL
+2919171320,2919171327,TW
+2919171328,2919171343,US
+2919171344,2919171351,BR
+2919171352,2919171359,US
+2919171360,2919171367,BR
+2919171368,2919171391,US
+2919171392,2919171399,ES
+2919171400,2919171407,IT
+2919171408,2919171415,CN
+2919171416,2919171455,US
+2919171456,2919171463,BR
+2919171464,2919171479,US
+2919171480,2919171487,BR
+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,2919202815,US
+2919190528,2919202079,US
+2919202080,2919202111,BE
+2919202112,2919206911,US
2919206912,2919211007,CA
2919219200,2919235583,US
2919235584,2919759871,CA
@@ -64634,9 +70427,15 @@
2921497416,2921497423,IN
2921497424,2921497471,US
2921497472,2921497599,IN
-2921497600,2921498383,US
+2921497600,2921498031,US
+2921498032,2921498039,CA
+2921498040,2921498215,US
+2921498216,2921498223,CA
+2921498224,2921498383,US
2921498384,2921498391,ID
-2921498392,2921500159,US
+2921498392,2921498431,US
+2921498432,2921498439,CA
+2921498440,2921500159,US
2921500160,2921500415,GB
2921500416,2921503607,US
2921503608,2921503615,GB
@@ -64644,9 +70443,15 @@
2921503696,2921503703,ID
2921503704,2921504431,US
2921504432,2921504439,GB
-2921504440,2921508719,US
+2921504440,2921507903,US
+2921507904,2921507911,CA
+2921507912,2921508719,US
2921508720,2921508727,SE
-2921508728,2921512703,US
+2921508728,2921509351,US
+2921509352,2921509367,CA
+2921509368,2921511383,US
+2921511384,2921511391,CA
+2921511392,2921512703,US
2921512704,2921512959,CA
2921512960,2921562111,US
2921562112,2921594879,CA
@@ -64660,7 +70465,11 @@
2927152176,2927152183,CH
2927152184,2927154847,US
2927154848,2927154855,CH
-2927154856,2927911183,US
+2927154856,2927242751,US
+2927242752,2927243263,AE
+2927243264,2927254527,US
+2927254528,2927255039,AE
+2927255040,2927911183,US
2927911184,2927911191,CH
2927911192,2928173103,US
2928173104,2928173119,PH
@@ -64696,13 +70505,19 @@
2928175056,2928175063,MX
2928175064,2928175143,US
2928175144,2928175151,PH
-2928175152,2928175271,US
+2928175152,2928175167,US
+2928175168,2928175175,RU
+2928175176,2928175207,US
+2928175208,2928175215,CA
+2928175216,2928175271,US
2928175272,2928175279,NZ
2928175280,2928175303,US
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
@@ -65027,12 +70842,18 @@
2928318720,2928318975,DO
2928318976,2928320519,US
2928320520,2928320527,BR
-2928320528,2928321311,US
+2928320528,2928321063,US
+2928321064,2928321071,AU
+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,2928323967,US
+2928323144,2928323175,US
+2928323176,2928323183,AU
+2928323184,2928323967,US
2928323968,2928323983,RU
2928323984,2928328703,US
2928328704,2928336895,CA
@@ -65667,7 +71488,1557 @@
2948135936,2948136959,IN
2948136960,2948595711,CN
2948595712,2952790015,KR
-2969567232,2973761535,BR
+2952790016,2953314303,DE
+2953314304,2953379839,UA
+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
+2953457664,2953459711,DE
+2953459712,2953461759,IT
+2953461760,2953465855,ES
+2953465856,2953465991,GB
+2953465992,2953466111,EU
+2953466112,2953466127,GB
+2953466128,2953467903,EU
+2953467904,2953469951,BE
+2953469952,2953478143,CH
+2953478144,2953503551,SE
+2953503552,2953503559,NO
+2953503560,2953510911,SE
+2953510912,2953576447,NO
+2953576448,2953592831,BG
+2953592832,2953596927,IR
+2953596928,2953598975,ES
+2953598976,2953601023,IT
+2953601024,2953603071,RU
+2953603072,2953605119,GB
+2953605120,2953609215,CZ
+2953609216,2953707519,IL
+2953707520,2953838591,RU
+2953838592,2954100735,SA
+2954100736,2954362879,DK
+2954362880,2954625023,GB
+2954625024,2954641407,DE
+2954641408,2954643455,RU
+2954643456,2954645503,IQ
+2954645504,2954647551,AZ
+2954647552,2954657791,ES
+2954657792,2954756095,JO
+2954756096,2954821631,TR
+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
+2954897408,2954899455,DE
+2954899456,2954901503,ES
+2954901504,2954903551,IT
+2954903552,2954905599,NL
+2954905600,2954907647,IE
+2954907648,2954909695,GB
+2954909696,2954911743,DE
+2954911744,2954918911,IE
+2954918912,2954919423,NL
+2954919424,2954919935,IE
+2954919936,2954928127,RU
+2954928128,2954932223,PL
+2954932224,2954936319,RU
+2954936320,2954938367,AM
+2954938368,2954940415,HU
+2954940416,2954940423,DE
+2954940424,2954940443,GR
+2954940444,2954940445,DE
+2954940446,2954940481,GR
+2954940482,2954940489,PL
+2954940490,2954940535,DE
+2954940536,2954940539,RO
+2954940540,2954940658,DE
+2954940659,2954940662,PL
+2954940663,2954940664,DE
+2954940665,2954940670,PL
+2954940671,2954940927,DE
+2954940928,2954940931,RO
+2954940932,2954940935,DE
+2954940936,2954940939,TR
+2954940940,2954940943,DE
+2954940944,2954940947,TR
+2954940948,2954940963,DE
+2954940964,2954940967,TR
+2954940968,2954940987,DE
+2954940988,2954940991,TR
+2954940992,2954941011,DE
+2954941012,2954941015,TR
+2954941016,2954941035,DE
+2954941036,2954941039,TR
+2954941040,2954941047,DE
+2954941048,2954941051,RO
+2954941052,2954941063,DE
+2954941064,2954941071,TR
+2954941072,2954941091,DE
+2954941092,2954941095,TR
+2954941096,2954941115,DE
+2954941116,2954941119,TR
+2954941120,2954941139,DE
+2954941140,2954941143,TR
+2954941144,2954941147,DE
+2954941148,2954941151,GR
+2954941152,2954941163,DE
+2954941164,2954941167,TR
+2954941168,2954941171,DE
+2954941172,2954941175,TR
+2954941176,2954941187,DE
+2954941188,2954941191,TR
+2954941192,2954941193,DE
+2954941194,2954941197,GR
+2954941198,2954941209,DE
+2954941210,2954941213,TR
+2954941214,2954941219,DE
+2954941220,2954941223,TR
+2954941224,2954941243,DE
+2954941244,2954941247,TR
+2954941248,2954941267,DE
+2954941268,2954941271,TR
+2954941272,2954941291,DE
+2954941292,2954941295,TR
+2954941296,2954941314,DE
+2954941315,2954941318,RO
+2954941319,2954941319,DE
+2954941320,2954941323,TR
+2954941324,2954941330,DE
+2954941331,2954941334,TR
+2954941335,2954941413,DE
+2954941414,2954941417,GR
+2954941418,2954941429,DE
+2954941430,2954941433,TR
+2954941434,2954941447,DE
+2954941448,2954941451,RO
+2954941452,2954941463,DE
+2954941464,2954941467,TR
+2954941468,2954941547,DE
+2954941548,2954941551,GR
+2954941552,2954941563,DE
+2954941564,2954941567,TR
+2954941568,2954941647,DE
+2954941648,2954941651,GR
+2954941652,2954941663,DE
+2954941664,2954941667,TR
+2954941668,2954941703,DE
+2954941704,2954941707,GR
+2954941708,2954941719,DE
+2954941720,2954941723,TR
+2954941724,2954941727,GR
+2954941728,2954941739,DE
+2954941740,2954941743,TR
+2954941744,2954941803,DE
+2954941804,2954941807,GR
+2954941808,2954941819,DE
+2954941820,2954941823,TR
+2954941824,2954941873,DE
+2954941874,2954941877,RO
+2954941878,2954941889,DE
+2954941890,2954941893,TR
+2954941894,2954941903,DE
+2954941904,2954941907,RO
+2954941908,2954941919,DE
+2954941920,2954941923,TR
+2954941924,2954941935,DE
+2954941936,2954941939,RO
+2954941940,2954941951,DE
+2954941952,2954941955,GR
+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,2954942108,DE
+2954942109,2954942112,ES
+2954942113,2954942151,DE
+2954942152,2954942155,RO
+2954942156,2954942167,DE
+2954942168,2954942171,TR
+2954942172,2954942191,DE
+2954942192,2954942195,TR
+2954942196,2954942227,DE
+2954942228,2954942231,RO
+2954942232,2954942243,DE
+2954942244,2954942247,TR
+2954942248,2954942347,DE
+2954942348,2954942351,GR
+2954942352,2954942363,DE
+2954942364,2954942367,TR
+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,2954942479,DE
+2954942480,2954942483,ES
+2954942484,2954942487,DE
+2954942488,2954942491,TR
+2954942492,2954942563,DE
+2954942564,2954942567,TR
+2954942568,2954942571,DE
+2954942572,2954942575,RO
+2954942576,2954942587,DE
+2954942588,2954942591,TR
+2954942592,2954942654,DE
+2954942655,2954942658,ES
+2954942659,2954942671,DE
+2954942672,2954942675,GR
+2954942676,2954942687,DE
+2954942688,2954942691,TR
+2954942692,2954942719,DE
+2954942720,2954942723,TR
+2954942724,2954942727,DE
+2954942728,2954942731,RO
+2954942732,2954942743,DE
+2954942744,2954942747,TR
+2954942748,2954942839,DE
+2954942840,2954942843,FR
+2954942844,2954942847,TR
+2954942848,2954942851,FR
+2954942852,2954942871,GB
+2954942872,2954942875,FR
+2954942876,2954942943,DE
+2954942944,2954942947,TR
+2954942948,2954942979,DE
+2954942980,2954942983,TR
+2954942984,2954943003,DE
+2954943004,2954943007,TR
+2954943008,2954943027,DE
+2954943028,2954943031,TR
+2954943032,2954943051,DE
+2954943052,2954943055,TR
+2954943056,2954943075,DE
+2954943076,2954943079,TR
+2954943080,2954943099,DE
+2954943100,2954943103,TR
+2954943104,2954943123,DE
+2954943124,2954943127,TR
+2954943128,2954943146,DE
+2954943147,2954943150,TR
+2954943151,2954943170,DE
+2954943171,2954943174,TR
+2954943175,2954943194,DE
+2954943195,2954943198,TR
+2954943199,2954943218,DE
+2954943219,2954943222,TR
+2954943223,2954943235,DE
+2954943236,2954943239,TR
+2954943240,2954943259,DE
+2954943260,2954943263,TR
+2954943264,2954943283,DE
+2954943284,2954943287,TR
+2954943288,2954943307,DE
+2954943308,2954943311,TR
+2954943312,2954943331,DE
+2954943332,2954943335,TR
+2954943336,2954943355,DE
+2954943356,2954943359,TR
+2954943360,2954943379,DE
+2954943380,2954943383,TR
+2954943384,2954943403,DE
+2954943404,2954943407,TR
+2954943408,2954943427,DE
+2954943428,2954943431,TR
+2954943432,2954943451,DE
+2954943452,2954943455,TR
+2954943456,2954943475,DE
+2954943476,2954943479,TR
+2954943480,2954943491,DE
+2954943492,2954943495,TR
+2954943496,2954943515,DE
+2954943516,2954943519,TR
+2954943520,2954943539,DE
+2954943540,2954943543,TR
+2954943544,2954943547,DE
+2954943548,2954943563,GB
+2954943564,2954943567,TR
+2954943568,2954943583,GB
+2954943584,2954943587,DE
+2954943588,2954943591,TR
+2954943592,2954943603,GB
+2954943604,2954943611,FR
+2954943612,2954943615,TR
+2954943616,2954943623,FR
+2954943624,2954943635,DE
+2954943636,2954943639,TR
+2954943640,2954943659,DE
+2954943660,2954943663,TR
+2954943664,2954943683,DE
+2954943684,2954943687,TR
+2954943688,2954943707,DE
+2954943708,2954943711,TR
+2954943712,2954943731,DE
+2954943732,2954943735,TR
+2954943736,2954943743,DE
+2954943744,2954943823,GB
+2954943824,2954943903,DE
+2954943904,2954943943,FR
+2954943944,2954943999,DE
+2954944000,2954944007,RO
+2954944008,2954944511,DE
+2954944512,2954946559,GB
+2954946560,2954948607,DE
+2954948608,2954950655,RU
+2954950656,2954952703,ES
+2954952704,2955018239,TR
+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,2955083775,NL
+2955083776,2955149311,GB
+2955149312,2955411455,UA
+2955411456,2955673599,TR
+2955673600,2955804671,SA
+2955804672,2955837439,EE
+2955837440,2955845631,IR
+2955845632,2955853823,GB
+2955853824,2955870207,CH
+2955870208,2955935743,UA
+2955935744,2956230655,RU
+2956230656,2956238847,SI
+2956238848,2956242943,ES
+2956242944,2956244991,SE
+2956244992,2956247039,FR
+2956247040,2956251135,DE
+2956251136,2956253183,GB
+2956253184,2956255231,IE
+2956255232,2956259327,FR
+2956259328,2956261375,DE
+2956261376,2956263423,ES
+2956263424,2956296191,TR
+2956296192,2956328959,RU
+2956328960,2956460031,TR
+2956460032,2956468223,RU
+2956468224,2956470271,LV
+2956470272,2956472319,NL
+2956472320,2956474367,RU
+2956474368,2956476415,GB
+2956476416,2956492799,ES
+2956492800,2956496895,CH
+2956496896,2956500991,IR
+2956500992,2956507135,RU
+2956507136,2956508159,NL
+2956508160,2956508415,RU
+2956508416,2956508671,FR
+2956508672,2956509183,NL
+2956509184,2956517375,GB
+2956517376,2956521471,NL
+2956521472,2956525567,SE
+2956525568,2956533759,JO
+2956533760,2956535807,FR
+2956535808,2956537855,LV
+2956537856,2956541951,UA
+2956541952,2956543999,FR
+2956544000,2956546047,RU
+2956546048,2956548095,FR
+2956548096,2956550143,ME
+2956550144,2956554239,ES
+2956554240,2956558335,IT
+2956558336,2956574719,DE
+2956574720,2956576767,SE
+2956576768,2956578815,ES
+2956578816,2956582911,RU
+2956582912,2956587007,CH
+2956587008,2956589055,FR
+2956589056,2956593151,GB
+2956593152,2956595199,ES
+2956595200,2956597247,PL
+2956597248,2956599295,NL
+2956599296,2956607487,RU
+2956607488,2956611583,PS
+2956611584,2956613631,IT
+2956613632,2956613887,GB
+2956613888,2956614143,NL
+2956614144,2956614399,FR
+2956614400,2956615679,EU
+2956615680,2956623871,GB
+2956623872,2956656639,GR
+2956656640,2956722175,RU
+2956722176,2956787711,BY
+2956787712,2956820479,IE
+2956820480,2956822527,NL
+2956822528,2956823551,SE
+2956823552,2956824575,US
+2956824576,2956826623,PT
+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
+2956869632,2956886015,RU
+2956886016,2956888063,GB
+2956888064,2956890111,BE
+2956890112,2956892159,IR
+2956892160,2956894207,IT
+2956894208,2956896255,BE
+2956896256,2956898303,NL
+2956898304,2956902399,RU
+2956902400,2956904447,NL
+2956904448,2956906495,DK
+2956906496,2956908543,GB
+2956908544,2956910591,RU
+2956910592,2956914687,CZ
+2956914688,2956918783,RU
+2956918784,2956984319,HU
+2956984320,2957049855,SE
+2957049856,2957058047,PS
+2957058048,2957066239,RU
+2957066240,2957068287,GB
+2957068288,2957070335,LU
+2957070336,2957074431,IT
+2957074432,2957082623,RU
+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
+2957193216,2957195263,RU
+2957195264,2957197311,PS
+2957197312,2957201407,IR
+2957201408,2957201423,GB
+2957201424,2957201427,IE
+2957201428,2957201431,DK
+2957201432,2957201435,CH
+2957201436,2957201468,BR
+2957201469,2957201727,US
+2957201728,2957201743,CA
+2957201744,2957201759,MX
+2957201760,2957201775,BR
+2957201776,2957201791,AR
+2957201792,2957201807,BS
+2957201808,2957201823,VE
+2957201824,2957201839,AU
+2957201840,2957201855,JP
+2957201856,2957201871,HK
+2957201872,2957201887,RU
+2957201888,2957201903,KR
+2957201904,2957201919,TW
+2957201920,2957202175,US
+2957202176,2957202179,GB
+2957202180,2957202183,BR
+2957202184,2957202187,CA
+2957202188,2957202431,US
+2957202432,2957202463,GB
+2957202464,2957202467,PL
+2957202468,2957202471,KR
+2957202472,2957202475,BR
+2957202476,2957202479,EG
+2957202480,2957202483,ZA
+2957202484,2957202487,IS
+2957202488,2957202491,CA
+2957202492,2957202495,IL
+2957202496,2957202499,DE
+2957202500,2957202503,AR
+2957202504,2957202507,NZ
+2957202508,2957202511,DE
+2957202512,2957202527,NO
+2957202528,2957202543,SE
+2957202544,2957202551,FI
+2957202552,2957202559,EE
+2957202560,2957202567,LV
+2957202568,2957202575,LT
+2957202576,2957202583,BY
+2957202584,2957202591,UA
+2957202592,2957202599,RO
+2957202600,2957202607,BG
+2957202608,2957202615,GR
+2957202616,2957202623,TR
+2957202624,2957202627,AT
+2957202628,2957202631,IT
+2957202632,2957202639,CH
+2957202640,2957202643,LU
+2957202644,2957202647,BE
+2957202648,2957202651,NL
+2957202652,2957202667,DK
+2957202668,2957202671,FR
+2957202672,2957202675,US
+2957202676,2957202679,ES
+2957202680,2957202683,PT
+2957202684,2957202687,AU
+2957202688,2957202691,RU
+2957202692,2957202699,IE
+2957202700,2957202703,JP
+2957202704,2957202944,US
+2957202945,2957202947,AL
+2957202948,2957202951,AD
+2957202952,2957202955,AR
+2957202956,2957202959,AU
+2957202960,2957202963,BY
+2957202964,2957202967,BE
+2957202968,2957202971,BA
+2957202972,2957202975,BR
+2957202976,2957202979,BG
+2957202980,2957202983,CL
+2957202984,2957202987,CN
+2957202988,2957202991,CO
+2957202992,2957202995,CR
+2957202996,2957202999,HR
+2957203000,2957203003,CY
+2957203004,2957203007,CZ
+2957203008,2957203011,DK
+2957203012,2957203015,EG
+2957203016,2957203019,EE
+2957203020,2957203023,FJ
+2957203024,2957203027,FI
+2957203028,2957203031,FR
+2957203032,2957203035,GE
+2957203036,2957203039,DE
+2957203040,2957203043,GR
+2957203044,2957203047,HK
+2957203048,2957203051,HU
+2957203052,2957203055,IS
+2957203056,2957203059,IN
+2957203060,2957203063,IE
+2957203064,2957203067,IL
+2957203068,2957203071,IT
+2957203072,2957203075,JP
+2957203076,2957203079,KR
+2957203080,2957203083,LV
+2957203084,2957203087,LI
+2957203088,2957203091,LT
+2957203092,2957203095,LU
+2957203096,2957203099,MK
+2957203100,2957203103,MY
+2957203104,2957203107,MX
+2957203108,2957203111,NL
+2957203112,2957203115,NZ
+2957203116,2957203119,NO
+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
+2957221888,2957228031,GB
+2957228032,2957230079,DK
+2957230080,2957238271,RS
+2957238272,2957240319,CZ
+2957240320,2957242367,BG
+2957242368,2957244415,RU
+2957244416,2957246463,HU
+2957246464,2957508607,SE
+2957508608,2957574143,FI
+2957574144,2957639679,GE
+2957639680,2957641727,GB
+2957641728,2957643775,RU
+2957643776,2957647871,GB
+2957647872,2957649919,FR
+2957649920,2957651967,CH
+2957651968,2957654015,AE
+2957654016,2957656063,DE
+2957656064,2957672447,GE
+2957672448,2957680639,CZ
+2957680640,2957688831,GB
+2957688832,2957690879,SE
+2957690880,2957692927,RU
+2957692928,2957694975,NO
+2957694976,2957697023,CZ
+2957697024,2957705215,NL
+2957705216,2957770751,NO
+2957770752,2957836287,SI
+2957836288,2957869055,RU
+2957869056,2957901823,HU
+2957901824,2958032895,PT
+2958032896,2958557183,ES
+2958557184,2958819327,TR
+2958819328,2958884863,GR
+2958884864,2958950399,FI
+2958950400,2959081471,DE
+2959081472,2959089663,RU
+2959089664,2959093759,PL
+2959093760,2959097855,RO
+2959097856,2959099903,RU
+2959099904,2959101951,UA
+2959101952,2959103999,RU
+2959104000,2959106047,RO
+2959106048,2959114239,AT
+2959114240,2959118335,RU
+2959118336,2959120383,PL
+2959120384,2959122431,AT
+2959122432,2959126527,PL
+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
2987397120,2987401215,LV
@@ -65743,7 +73114,8 @@
2987585872,2987585879,MX
2987585880,2987585887,BR
2987585888,2987585895,PL
-2987585896,2987589631,DE
+2987585896,2987589119,DE
+2987589120,2987589631,US
2987589632,2987593727,FR
2987593728,2987597823,LT
2987597824,2987601919,ES
@@ -65810,7 +73182,7 @@
2987755520,2987757567,PL
2987757568,2987759615,DE
2987759616,2987761663,PL
-2987761664,2987763711,DK
+2987761664,2987763711,IR
2987763712,2987765759,GR
2987765760,2987767807,FR
2987767808,2987769855,CZ
@@ -65840,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
@@ -65892,17 +73265,14 @@
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
2988441792,2988441807,PL
2988441808,2988441815,FR
-2988441816,2988441819,GB
+2988441816,2988441819,FI
2988441820,2988441839,FR
2988441840,2988441843,PL
2988441844,2988441847,BE
@@ -65913,7 +73283,7 @@
2988441904,2988441911,IT
2988441912,2988441919,ES
2988441920,2988441931,PL
-2988441932,2988441935,GB
+2988441932,2988441935,BE
2988441936,2988441939,FR
2988441940,2988441943,ES
2988441944,2988441951,FR
@@ -65924,7 +73294,8 @@
2988441980,2988441983,IT
2988441984,2988441991,FR
2988441992,2988441995,ES
-2988441996,2988442003,FR
+2988441996,2988441999,PT
+2988442000,2988442003,PL
2988442004,2988442007,ES
2988442008,2988442047,FR
2988442048,2988442063,GB
@@ -65937,8 +73308,8 @@
2988442432,2988442439,CZ
2988442440,2988442447,ES
2988442448,2988442463,GB
-2988442464,2988442639,FR
-2988442640,2988442647,PL
+2988442464,2988442623,FR
+2988442624,2988442647,PL
2988442648,2988442651,DE
2988442652,2988442655,GB
2988442656,2988442671,PL
@@ -65956,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
@@ -65990,7 +73363,7 @@
2988443928,2988444167,FR
2988444168,2988444171,CZ
2988444172,2988444199,FR
-2988444200,2988444203,DE
+2988444200,2988444203,FI
2988444204,2988444207,NL
2988444208,2988444415,FR
2988444416,2988444679,ES
@@ -66022,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
@@ -66030,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
@@ -66058,7 +73435,8 @@
2988448512,2988448515,GB
2988448516,2988448519,FR
2988448520,2988448543,PL
-2988448544,2988448551,FR
+2988448544,2988448547,GB
+2988448548,2988448551,FR
2988448552,2988448559,PL
2988448560,2988448563,DE
2988448564,2988448575,ES
@@ -66066,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
@@ -66077,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
@@ -66089,12 +73463,21 @@
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
-2988449632,2988449647,ES
+2988449632,2988449639,ES
+2988449640,2988449643,CH
+2988449644,2988449647,CZ
2988449648,2988449663,FR
2988449664,2988449695,DE
2988449696,2988449727,IT
@@ -66107,7 +73490,9 @@
2988457984,2988457987,FR
2988457988,2988457991,PL
2988457992,2988457995,CH
-2988457996,2988458031,FR
+2988457996,2988457999,FR
+2988458000,2988458015,DE
+2988458016,2988458031,FR
2988458032,2988458047,IT
2988458048,2988458055,PL
2988458056,2988458063,CH
@@ -66121,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
@@ -66156,21 +73542,24 @@
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
-2988459584,2988459599,FR
+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
2988459616,2988459631,CZ
@@ -66187,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
@@ -66196,12 +73585,10 @@
2988459768,2988459771,NL
2988459772,2988459775,GB
2988459776,2988459839,FR
-2988459840,2988459855,GB
-2988459856,2988459863,FR
-2988459864,2988459867,ES
-2988459868,2988459871,GB
-2988459872,2988459887,FR
-2988459888,2988459895,PL
+2988459840,2988459859,GB
+2988459860,2988459863,FR
+2988459864,2988459871,ES
+2988459872,2988459895,PL
2988459896,2988459967,FR
2988459968,2988459999,ES
2988460000,2988460015,NL
@@ -66248,9 +73635,9 @@
2988460616,2988460623,PT
2988460624,2988460679,FR
2988460680,2988460687,DE
-2988460688,2988460719,FR
-2988460720,2988460735,ES
-2988460736,2988460767,FR
+2988460688,2988460755,FR
+2988460756,2988460759,PT
+2988460760,2988460767,FR
2988460768,2988460799,PL
2988460800,2988460863,DE
2988460864,2988460927,FR
@@ -66258,11 +73645,9 @@
2988460932,2988460943,PL
2988460944,2988460959,DE
2988460960,2988460991,GB
-2988460992,2988461087,FR
-2988461088,2988461103,PL
-2988461104,2988461151,FR
-2988461152,2988461183,GB
-2988461184,2988461255,FR
+2988460992,2988461055,FR
+2988461056,2988461103,PL
+2988461104,2988461255,FR
2988461256,2988461259,IT
2988461260,2988461263,PT
2988461264,2988461279,PL
@@ -66282,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
@@ -66290,23 +73675,28 @@
2988461488,2988461491,FR
2988461492,2988461495,PL
2988461496,2988461499,ES
-2988461500,2988461503,BE
+2988461500,2988461503,PT
2988461504,2988461519,PL
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
2988461700,2988461703,PL
-2988461704,2988461707,NL
+2988461704,2988461707,FR
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
@@ -66319,20 +73709,20 @@
2988461820,2988461823,GB
2988461824,2988461839,PL
2988461840,2988461851,FR
-2988461852,2988461855,PL
-2988461856,2988461859,FI
+2988461852,2988461859,PL
2988461860,2988461871,DE
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
2988461936,2988461951,GB
2988461952,2988462087,PL
-2988462088,2988462095,DE
+2988462088,2988462091,IT
+2988462092,2988462095,PL
2988462096,2988462119,FR
2988462120,2988462123,PL
2988462124,2988462127,GB
@@ -66380,7 +73770,8 @@
2988463104,2988463107,IT
2988463108,2988463111,FR
2988463112,2988463119,ES
-2988463120,2988463127,GB
+2988463120,2988463123,GB
+2988463124,2988463127,ES
2988463128,2988463131,FR
2988463132,2988463135,PL
2988463136,2988463143,NL
@@ -66393,13 +73784,16 @@
2988463204,2988463207,DE
2988463208,2988463211,FR
2988463212,2988463223,GB
-2988463224,2988463227,FR
+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
-2988463316,2988463319,DE
+2988463316,2988463319,PL
2988463320,2988463323,FR
2988463324,2988463331,DE
2988463332,2988463335,IT
@@ -66428,10 +73822,11 @@
2988463836,2988463839,FR
2988463840,2988463871,PL
2988463872,2988463907,FR
-2988463908,2988463911,PL
-2988463912,2988463915,FR
+2988463908,2988463915,PL
2988463916,2988463919,GB
-2988463920,2988463947,FR
+2988463920,2988463939,FR
+2988463940,2988463943,DE
+2988463944,2988463947,FR
2988463948,2988463951,GB
2988463952,2988463999,FR
2988464000,2988464007,IE
@@ -66451,42 +73846,54 @@
2988464284,2988464287,PL
2988464288,2988464303,FR
2988464304,2988464307,IT
-2988464308,2988464319,FR
-2988464320,2988464351,GB
+2988464308,2988464311,PL
+2988464312,2988464351,FR
2988464352,2988464355,DE
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,2988464575,ES
+2988464552,2988464555,IT
+2988464556,2988464559,DE
+2988464560,2988464575,ES
2988464576,2988464591,GB
2988464592,2988464607,FR
2988464608,2988464611,DE
-2988464612,2988464615,PL
-2988464616,2988464619,FR
+2988464612,2988464619,PL
2988464620,2988464623,ES
2988464624,2988464627,FR
2988464628,2988464631,IT
-2988464632,2988464783,FR
+2988464632,2988464779,FR
+2988464780,2988464783,PL
2988464784,2988464787,IT
2988464788,2988464791,ES
-2988464792,2988464799,FR
+2988464792,2988464795,FR
+2988464796,2988464799,GB
2988464800,2988464815,DE
2988464816,2988464819,FR
-2988464820,2988464823,NL
-2988464824,2988464831,PL
+2988464820,2988464823,GB
+2988464824,2988464827,ES
+2988464828,2988464831,PL
2988464832,2988464895,ES
-2988464896,2988464927,NL
-2988464928,2988464947,FR
+2988464896,2988464911,PL
+2988464912,2988464915,FR
+2988464916,2988464919,DE
+2988464920,2988464923,FI
+2988464924,2988464927,FR
+2988464928,2988464943,ES
+2988464944,2988464947,FR
2988464948,2988464951,CH
2988464952,2988464955,FR
2988464956,2988464959,GB
-2988464960,2988465215,FR
-2988465216,2988465223,ES
+2988464960,2988464963,IT
+2988464964,2988464967,LT
+2988464968,2988464971,PT
+2988464972,2988464975,PL
+2988464976,2988465215,FR
+2988465216,2988465219,ES
+2988465220,2988465223,IE
2988465224,2988465235,FR
2988465236,2988465239,ES
2988465240,2988465279,FR
@@ -66532,50 +73939,81 @@
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
2988466160,2988476415,FR
2988476416,2988478463,IT
-2988478464,2988482799,FR
+2988478464,2988482559,FR
+2988482560,2988482567,ES
+2988482568,2988482579,FR
+2988482580,2988482591,ES
+2988482592,2988482607,PL
+2988482608,2988482631,FR
+2988482632,2988482639,PL
+2988482640,2988482647,FR
+2988482648,2988482651,CZ
+2988482652,2988482655,GB
+2988482656,2988482763,FR
+2988482764,2988482767,GB
+2988482768,2988482775,PL
+2988482776,2988482779,NL
+2988482780,2988482783,PL
+2988482784,2988482799,FR
2988482800,2988482807,ES
2988482808,2988482811,GB
2988482812,2988482815,FR
2988482816,2988482819,NL
2988482820,2988482823,DE
-2988482824,2988482827,PL
-2988482828,2988482895,FR
-2988482896,2988482911,GB
-2988482912,2988482935,FR
-2988482936,2988482939,PL
+2988482824,2988482831,PL
+2988482832,2988482835,IE
+2988482836,2988482839,PL
+2988482840,2988482843,ES
+2988482844,2988482847,NL
+2988482848,2988482863,FR
+2988482864,2988482871,ES
+2988482872,2988482875,PT
+2988482876,2988482879,CZ
+2988482880,2988482887,PL
+2988482888,2988482891,ES
+2988482892,2988482895,PL
+2988482896,2988482927,GB
+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,2988483079,FR
-2988483080,2988483087,IT
-2988483088,2988483091,FR
+2988482988,2988483035,FR
+2988483036,2988483039,GB
+2988483040,2988483091,FR
2988483092,2988483095,BE
-2988483096,2988483103,FR
+2988483096,2988483099,FR
+2988483100,2988483103,PL
2988483104,2988483107,IE
2988483108,2988483111,PL
2988483112,2988483115,ES
2988483116,2988483119,PL
2988483120,2988483127,ES
-2988483128,2988483151,FR
-2988483152,2988483155,CH
+2988483128,2988483135,PL
+2988483136,2988483151,FR
+2988483152,2988483155,PL
2988483156,2988483159,FR
2988483160,2988483167,ES
2988483168,2988483199,GB
-2988483200,2988483267,FR
+2988483200,2988483231,FR
+2988483232,2988483235,IE
+2988483236,2988483263,PL
+2988483264,2988483267,FR
2988483268,2988483271,NL
2988483272,2988483279,DE
2988483280,2988483283,ES
@@ -66626,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
@@ -66658,33 +74097,87 @@
2988484480,2988484511,PL
2988484512,2988484543,IT
2988484544,2988484591,FR
-2988484592,2988484607,ES
-2988484608,2988484863,FR
+2988484592,2988484607,PL
+2988484608,2988484775,FR
+2988484776,2988484783,PL
+2988484784,2988484831,FR
+2988484832,2988484847,PL
+2988484848,2988484863,FR
2988484864,2988484879,ES
-2988484880,2988484991,FR
+2988484880,2988484883,GB
+2988484884,2988484887,PL
+2988484888,2988484891,FR
+2988484892,2988484895,GB
+2988484896,2988484927,FR
+2988484928,2988484959,PT
+2988484960,2988484967,FR
+2988484968,2988484971,GB
+2988484972,2988484991,FR
2988484992,2988485007,LT
2988485008,2988485023,PL
-2988485024,2988485071,FR
+2988485024,2988485039,IE
+2988485040,2988485055,PL
+2988485056,2988485071,FR
2988485072,2988485087,IE
-2988485088,2988485327,FR
+2988485088,2988485119,PL
+2988485120,2988485135,FR
+2988485136,2988485151,PL
+2988485152,2988485167,IT
+2988485168,2988485183,FR
+2988485184,2988485247,BE
+2988485248,2988485255,IT
+2988485256,2988485263,NL
+2988485264,2988485267,DE
+2988485268,2988485271,CH
+2988485272,2988485279,FR
+2988485280,2988485311,PL
+2988485312,2988485327,IT
2988485328,2988485335,FI
2988485336,2988485343,PT
-2988485344,2988485487,FR
-2988485488,2988485503,DE
-2988485504,2988485599,FR
+2988485344,2988485347,ES
+2988485348,2988485351,IT
+2988485352,2988485355,GB
+2988485356,2988485359,PL
+2988485360,2988485439,FR
+2988485440,2988485455,PL
+2988485456,2988485471,ES
+2988485472,2988485479,FR
+2988485480,2988485487,IT
+2988485488,2988485503,FR
+2988485504,2988485519,GB
+2988485520,2988485559,FR
+2988485560,2988485567,NL
+2988485568,2988485583,GB
+2988485584,2988485587,IT
+2988485588,2988485591,BE
+2988485592,2988485599,FR
2988485600,2988485607,PL
-2988485608,2988485611,GB
+2988485608,2988485611,FR
2988485612,2988485615,PL
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,2988485839,FR
+2988485692,2988485695,PL
+2988485696,2988485759,FR
+2988485760,2988485767,GB
+2988485768,2988485791,FR
+2988485792,2988485795,PT
+2988485796,2988485799,LT
+2988485800,2988485803,PT
+2988485804,2988485807,PL
+2988485808,2988485823,NL
+2988485824,2988485831,FR
+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
@@ -66702,35 +74195,85 @@
2988486072,2988486075,FR
2988486076,2988486079,ES
2988486080,2988486083,BE
-2988486084,2988486087,NL
-2988486088,2988486111,FR
-2988486112,2988486127,PL
-2988486128,2988486159,NL
+2988486084,2988486087,IT
+2988486088,2988486095,FR
+2988486096,2988486099,CH
+2988486100,2988486103,CZ
+2988486104,2988486107,DE
+2988486108,2988486111,IE
+2988486112,2988486135,PL
+2988486136,2988486139,FR
+2988486140,2988486143,GB
+2988486144,2988486151,ES
+2988486152,2988486159,FR
2988486160,2988486175,IE
2988486176,2988486179,FR
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
-2988486224,2988486239,NL
+2988486224,2988486231,BE
+2988486232,2988486235,PL
+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
@@ -66752,7 +74295,9 @@
2988487424,2988487679,IE
2988487680,2988487935,DE
2988487936,2988487939,BE
-2988487940,2988487979,FR
+2988487940,2988487947,FR
+2988487948,2988487951,CH
+2988487952,2988487979,FR
2988487980,2988487983,ES
2988487984,2988488011,FR
2988488012,2988488015,LT
@@ -66769,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
@@ -66799,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
@@ -66822,22 +74369,25 @@
2988489348,2988489351,PL
2988489352,2988489355,FR
2988489356,2988489359,PT
-2988489360,2988489379,ES
+2988489360,2988489375,FR
+2988489376,2988489379,ES
2988489380,2988489383,GB
2988489384,2988489391,FR
2988489392,2988489399,NL
-2988489400,2988489407,FR
+2988489400,2988489403,PL
+2988489404,2988489407,IT
2988489408,2988489439,PT
2988489440,2988489455,GB
2988489456,2988489471,BE
2988489472,2988489475,ES
2988489476,2988489479,GB
-2988489480,2988489483,IT
+2988489480,2988489483,PL
2988489484,2988489487,GB
2988489488,2988489503,FR
2988489504,2988489519,GB
-2988489520,2988489535,ES
-2988489536,2988489543,PT
+2988489520,2988489527,ES
+2988489528,2988489539,NL
+2988489540,2988489543,CH
2988489544,2988489663,FR
2988489664,2988489667,DE
2988489668,2988489671,GB
@@ -66848,14 +74398,14 @@
2988489712,2988489719,FR
2988489720,2988489723,IT
2988489724,2988489727,ES
-2988489728,2988489743,FR
-2988489744,2988489751,IT
+2988489728,2988489747,FR
+2988489748,2988489751,IT
2988489752,2988489755,ES
2988489756,2988489759,FR
2988489760,2988489791,NL
2988489792,2988489887,PL
2988489888,2988489903,FR
-2988489904,2988489919,GB
+2988489904,2988489919,IE
2988489920,2988489935,PL
2988489936,2988489943,ES
2988489944,2988489947,FR
@@ -66874,17 +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,2988490223,FR
+2988490200,2988490203,DE
+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
@@ -66892,19 +74444,512 @@
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
2988490624,2988490751,ES
-2988490752,2988507143,FR
+2988490752,2988491775,FR
+2988491776,2988492031,TN
+2988492032,2988492799,FR
+2988492800,2988494847,PL
+2988494848,2988498975,FR
+2988498976,2988498983,ES
+2988498984,2988498991,FR
+2988498992,2988499007,PL
+2988499008,2988499051,DE
+2988499052,2988499063,FR
+2988499064,2988499067,DE
+2988499068,2988499071,FR
+2988499072,2988499103,PL
+2988499104,2988499119,IE
+2988499120,2988499135,FR
+2988499136,2988499139,DE
+2988499140,2988499143,FR
+2988499144,2988499151,DE
+2988499152,2988499167,FR
+2988499168,2988499199,ES
+2988499200,2988499343,FR
+2988499344,2988499347,PL
+2988499348,2988499351,FR
+2988499352,2988499359,IT
+2988499360,2988499367,PL
+2988499368,2988499375,IT
+2988499376,2988499379,PT
+2988499380,2988499387,PL
+2988499388,2988499407,FR
+2988499408,2988499415,PL
+2988499416,2988499423,DE
+2988499424,2988499455,PL
+2988499456,2988499463,NL
+2988499464,2988499471,DE
+2988499472,2988499487,FR
+2988499488,2988499519,PL
+2988499520,2988499551,ES
+2988499552,2988499559,PL
+2988499560,2988499567,NL
+2988499568,2988499575,IE
+2988499576,2988499579,FR
+2988499580,2988499583,CH
+2988499584,2988499599,IT
+2988499600,2988499615,PL
+2988499616,2988499623,DE
+2988499624,2988499631,ES
+2988499632,2988499635,CH
+2988499636,2988499639,DE
+2988499640,2988499663,GB
+2988499664,2988499671,DE
+2988499672,2988499679,NL
+2988499680,2988499683,FR
+2988499684,2988499687,CZ
+2988499688,2988499691,FI
+2988499692,2988499695,IT
+2988499696,2988499699,PT
+2988499700,2988499703,GB
+2988499704,2988499711,DE
+2988499712,2988499731,GB
+2988499732,2988499735,FR
+2988499736,2988499743,NL
+2988499744,2988499747,IE
+2988499748,2988499751,LT
+2988499752,2988499755,PL
+2988499756,2988499759,ES
+2988499760,2988499763,CH
+2988499764,2988499775,PL
+2988499776,2988499791,IT
+2988499792,2988499795,GB
+2988499796,2988499803,IT
+2988499804,2988499807,DE
+2988499808,2988499823,FR
+2988499824,2988499831,PL
+2988499832,2988499839,GB
+2988499840,2988499847,BE
+2988499848,2988499851,DE
+2988499852,2988499855,PL
+2988499856,2988499871,ES
+2988499872,2988499903,IE
+2988499904,2988499907,FR
+2988499908,2988499911,BE
+2988499912,2988499915,FR
+2988499916,2988499919,LT
+2988499920,2988499923,DE
+2988499924,2988499927,BE
+2988499928,2988499935,FR
+2988499936,2988499967,IE
+2988499968,2988500223,FR
+2988500224,2988500255,ES
+2988500256,2988500271,IT
+2988500272,2988500287,BE
+2988500288,2988500303,PL
+2988500304,2988500307,FR
+2988500308,2988500311,DE
+2988500312,2988500315,ES
+2988500316,2988500319,DE
+2988500320,2988500335,FR
+2988500336,2988500339,DE
+2988500340,2988500343,IE
+2988500344,2988500347,FR
+2988500348,2988500351,PL
+2988500352,2988500383,GB
+2988500384,2988500399,BE
+2988500400,2988500415,DE
+2988500416,2988500447,PL
+2988500448,2988500479,ES
+2988500480,2988500495,DE
+2988500496,2988500499,PL
+2988500500,2988500503,DE
+2988500504,2988500511,PL
+2988500512,2988500519,NL
+2988500520,2988500523,ES
+2988500524,2988500527,GB
+2988500528,2988500543,BE
+2988500544,2988500607,PL
+2988500608,2988500639,FR
+2988500640,2988500671,GB
+2988500672,2988500679,IT
+2988500680,2988500687,PL
+2988500688,2988500703,NL
+2988500704,2988500711,PL
+2988500712,2988500767,FR
+2988500768,2988500771,PT
+2988500772,2988500775,ES
+2988500776,2988500779,GB
+2988500780,2988500787,PL
+2988500788,2988500791,ES
+2988500792,2988500799,PL
+2988500800,2988500815,ES
+2988500816,2988500831,FR
+2988500832,2988500847,ES
+2988500848,2988500863,DE
+2988500864,2988500867,GB
+2988500868,2988500871,DE
+2988500872,2988500879,NL
+2988500880,2988500883,BE
+2988500884,2988500887,PL
+2988500888,2988500895,DE
+2988500896,2988500919,FR
+2988500920,2988500927,PL
+2988500928,2988500935,FR
+2988500936,2988500939,DE
+2988500940,2988500943,FI
+2988500944,2988500959,IT
+2988500960,2988500975,IE
+2988500976,2988500979,CZ
+2988500980,2988500983,FR
+2988500984,2988500987,DE
+2988500988,2988500991,PL
+2988500992,2988501055,FR
+2988501056,2988501119,PT
+2988501120,2988501135,NL
+2988501136,2988501183,FR
+2988501184,2988501215,PL
+2988501216,2988501219,DE
+2988501220,2988501223,ES
+2988501224,2988501227,PL
+2988501228,2988501231,CZ
+2988501232,2988501247,PL
+2988501248,2988501327,FR
+2988501328,2988501331,FI
+2988501332,2988501335,GB
+2988501336,2988501339,FR
+2988501340,2988501359,PL
+2988501360,2988501367,FR
+2988501368,2988501375,ES
+2988501376,2988501407,FR
+2988501408,2988501411,LT
+2988501412,2988501415,NL
+2988501416,2988501423,BE
+2988501424,2988501439,NL
+2988501440,2988501471,BE
+2988501472,2988501475,PT
+2988501476,2988501479,BE
+2988501480,2988501483,DE
+2988501484,2988501487,PL
+2988501488,2988501503,FR
+2988501504,2988501567,PT
+2988501568,2988501631,PL
+2988501632,2988501663,DE
+2988501664,2988501679,CH
+2988501680,2988501683,PL
+2988501684,2988501687,GB
+2988501688,2988501691,FR
+2988501692,2988501695,PL
+2988501696,2988501727,FI
+2988501728,2988501759,PL
+2988501760,2988502031,FR
+2988502032,2988502047,DE
+2988502048,2988502063,NL
+2988502064,2988502067,FR
+2988502068,2988502071,GB
+2988502072,2988502075,PL
+2988502076,2988502079,ES
+2988502080,2988502095,IE
+2988502096,2988502099,FI
+2988502100,2988502103,CZ
+2988502104,2988502143,PL
+2988502144,2988502207,FR
+2988502208,2988502223,GB
+2988502224,2988502255,FR
+2988502256,2988502263,DE
+2988502264,2988502267,ES
+2988502268,2988502271,DE
+2988502272,2988502399,FR
+2988502400,2988502407,NL
+2988502408,2988502411,FR
+2988502412,2988502415,NL
+2988502416,2988502431,DE
+2988502432,2988502447,FR
+2988502448,2988502451,IE
+2988502452,2988502455,IT
+2988502456,2988502459,ES
+2988502460,2988502463,PT
+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
+2988502592,2988502599,FR
+2988502600,2988502603,DE
+2988502604,2988502607,PL
+2988502608,2988502631,FR
+2988502632,2988502639,NL
+2988502640,2988502655,FR
+2988502656,2988502719,DE
+2988502720,2988502723,ES
+2988502724,2988502727,BE
+2988502728,2988502731,GB
+2988502732,2988502735,PL
+2988502736,2988502751,FR
+2988502752,2988502783,ES
+2988502784,2988502795,FR
+2988502796,2988502799,DE
+2988502800,2988502831,GB
+2988502832,2988502839,DE
+2988502840,2988502847,NL
+2988502848,2988502851,FR
+2988502852,2988502855,CH
+2988502856,2988502859,FI
+2988502860,2988502863,BE
+2988502864,2988502867,IE
+2988502868,2988502871,LT
+2988502872,2988502875,PL
+2988502876,2988502879,ES
+2988502880,2988502883,IT
+2988502884,2988502887,CZ
+2988502888,2988502891,NL
+2988502892,2988502895,PL
+2988502896,2988502911,FR
+2988502912,2988502915,PL
+2988502916,2988502919,CH
+2988502920,2988502959,FR
+2988502960,2988502975,IE
+2988502976,2988502983,PL
+2988502984,2988502991,BE
+2988502992,2988503015,DE
+2988503016,2988503019,PL
+2988503020,2988503023,ES
+2988503024,2988503031,GB
+2988503032,2988503035,ES
+2988503036,2988503039,GB
+2988503040,2988503071,FR
+2988503072,2988503075,NL
+2988503076,2988503103,GB
+2988503104,2988503107,ES
+2988503108,2988503111,NL
+2988503112,2988503119,PL
+2988503120,2988503127,DE
+2988503128,2988503131,IT
+2988503132,2988503151,PL
+2988503152,2988503155,DE
+2988503156,2988503159,LT
+2988503160,2988503167,ES
+2988503168,2988503171,PL
+2988503172,2988503183,ES
+2988503184,2988503199,NL
+2988503200,2988503215,FR
+2988503216,2988503231,PL
+2988503232,2988503375,FR
+2988503376,2988503383,PT
+2988503384,2988503391,PL
+2988503392,2988503395,ES
+2988503396,2988503399,PL
+2988503400,2988503415,FR
+2988503416,2988503423,PL
+2988503424,2988503471,FR
+2988503472,2988503487,NL
+2988503488,2988503503,DE
+2988503504,2988503519,FR
+2988503520,2988503535,NL
+2988503536,2988503551,FI
+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,2988504007,PL
+2988504008,2988504015,BE
+2988504016,2988504019,FR
+2988504020,2988504023,BE
+2988504024,2988504031,FR
+2988504032,2988504063,ES
+2988504064,2988504127,IE
+2988504128,2988504159,DE
+2988504160,2988504191,PL
+2988504192,2988504223,FR
+2988504224,2988504227,PT
+2988504228,2988504231,DE
+2988504232,2988504239,PL
+2988504240,2988504255,GB
+2988504256,2988504287,ES
+2988504288,2988504303,GB
+2988504304,2988504311,PL
+2988504312,2988504315,FI
+2988504316,2988504319,DE
+2988504320,2988504415,FR
+2988504416,2988504419,PL
+2988504420,2988504423,DE
+2988504424,2988504427,ES
+2988504428,2988504431,PT
+2988504432,2988504435,FR
+2988504436,2988504439,ES
+2988504440,2988504443,FR
+2988504444,2988504447,GB
+2988504448,2988504451,BE
+2988504452,2988504455,ES
+2988504456,2988504459,PL
+2988504460,2988504463,GB
+2988504464,2988504467,DE
+2988504468,2988504471,ES
+2988504472,2988504479,PL
+2988504480,2988504543,FR
+2988504544,2988504559,PL
+2988504560,2988504563,FR
+2988504564,2988504567,PL
+2988504568,2988504571,CH
+2988504572,2988504603,PL
+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,2988504823,PL
+2988504824,2988504827,DE
+2988504828,2988504863,FR
+2988504864,2988504879,PL
+2988504880,2988504959,FR
+2988504960,2988504963,PT
+2988504964,2988504967,FR
+2988504968,2988504975,BE
+2988504976,2988504983,FR
+2988504984,2988504987,ES
+2988504988,2988504991,FR
+2988504992,2988505023,CZ
+2988505024,2988505087,FR
+2988505088,2988505151,NL
+2988505152,2988505183,FR
+2988505184,2988505195,PL
+2988505196,2988505199,DE
+2988505200,2988505207,PL
+2988505208,2988505211,ES
+2988505212,2988505215,PT
+2988505216,2988505247,FR
+2988505248,2988505255,PL
+2988505256,2988505279,FR
+2988505280,2988505311,BE
+2988505312,2988505315,DE
+2988505316,2988505319,ES
+2988505320,2988505323,PL
+2988505324,2988505327,ES
+2988505328,2988505343,PL
+2988505344,2988505375,DE
+2988505376,2988505391,FR
+2988505392,2988505399,PL
+2988505400,2988505407,ES
+2988505408,2988505439,FR
+2988505440,2988505455,PL
+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
+2988505604,2988505607,ES
+2988505608,2988505615,FR
+2988505616,2988505631,ES
+2988505632,2988505663,FR
+2988505664,2988505695,ES
+2988505696,2988505699,FR
+2988505700,2988505703,IT
+2988505704,2988505711,PL
+2988505712,2988505727,GB
+2988505728,2988505735,PL
+2988505736,2988505739,DE
+2988505740,2988505743,ES
+2988505744,2988505747,PT
+2988505748,2988505751,DE
+2988505752,2988505755,CH
+2988505756,2988505759,PL
+2988505760,2988505775,FR
+2988505776,2988505791,GB
+2988505792,2988505807,FR
+2988505808,2988505811,PL
+2988505812,2988505815,DE
+2988505816,2988505819,GB
+2988505820,2988505823,PL
+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
+2988506192,2988506207,GB
+2988506208,2988506239,ES
+2988506240,2988506255,BE
+2988506256,2988506271,CH
+2988506272,2988506303,GB
+2988506304,2988506335,DE
+2988506336,2988506367,FR
+2988506368,2988506375,IE
+2988506376,2988506379,FR
+2988506380,2988506383,DE
+2988506384,2988506399,FR
+2988506400,2988506415,GB
+2988506416,2988506431,BE
+2988506432,2988506447,IT
+2988506448,2988506451,ES
+2988506452,2988506455,PT
+2988506456,2988506459,BE
+2988506460,2988506463,PL
+2988506464,2988506495,FR
+2988506496,2988506499,PL
+2988506500,2988506507,DE
+2988506508,2988506511,ES
+2988506512,2988506515,GB
+2988506516,2988506519,FR
+2988506520,2988506523,PL
+2988506524,2988506527,IE
+2988506528,2988506543,FR
+2988506544,2988506551,DE
+2988506552,2988506559,FR
+2988506560,2988506563,DE
+2988506564,2988506567,GB
+2988506568,2988506571,PL
+2988506572,2988506575,CH
+2988506576,2988506623,FR
+2988506624,2988506687,PL
+2988506688,2988506751,IE
+2988506752,2988506763,ES
+2988506764,2988506767,PL
+2988506768,2988506783,ES
+2988506784,2988506819,PL
+2988506820,2988506831,FR
+2988506832,2988506847,PL
+2988506848,2988506863,FR
+2988506864,2988506871,DE
+2988506872,2988506875,ES
+2988506876,2988506887,FR
+2988506888,2988506891,ES
+2988506892,2988507143,FR
2988507144,2988507147,BE
-2988507148,2988507151,IT
-2988507152,2988507159,DE
+2988507148,2988507155,IT
+2988507156,2988507159,PL
2988507160,2988507163,CH
2988507164,2988507167,PL
2988507168,2988507183,DE
@@ -66919,10 +74964,14 @@
2988507244,2988507247,GB
2988507248,2988507263,FR
2988507264,2988507279,PL
-2988507280,2988507287,GB
+2988507280,2988507283,FR
+2988507284,2988507287,ES
2988507288,2988507327,FR
2988507328,2988507335,DE
-2988507336,2988507423,FR
+2988507336,2988507339,FR
+2988507340,2988507343,NL
+2988507344,2988507391,FR
+2988507392,2988507423,PT
2988507424,2988507431,PL
2988507432,2988507439,DE
2988507440,2988507443,IT
@@ -66972,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
@@ -66989,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
@@ -67005,7 +75052,9 @@
2988508208,2988508215,PL
2988508216,2988508219,FR
2988508220,2988508223,DE
-2988508224,2988508263,FR
+2988508224,2988508255,FR
+2988508256,2988508259,BE
+2988508260,2988508263,FR
2988508264,2988508271,ES
2988508272,2988508287,FR
2988508288,2988508303,PL
@@ -67017,11 +75066,12 @@
2988508352,2988508367,ES
2988508368,2988508383,FR
2988508384,2988508423,PL
-2988508424,2988508431,IE
+2988508424,2988508427,CH
+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
@@ -67031,22 +75081,26 @@
2988508688,2988508703,PL
2988508704,2988508711,GB
2988508712,2988508719,DE
-2988508720,2988508723,IT
+2988508720,2988508723,FR
2988508724,2988508735,GB
-2988508736,2988508847,FR
+2988508736,2988508767,FR
+2988508768,2988508799,PT
+2988508800,2988508847,FR
2988508848,2988508855,GB
2988508856,2988508871,FR
2988508872,2988508875,PL
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,2988508975,IT
-2988508976,2988508991,FR
+2988508960,2988508983,FR
+2988508984,2988508987,DE
+2988508988,2988508991,PL
2988508992,2988509055,NL
2988509056,2988509119,FR
2988509120,2988509151,IT
@@ -67059,8 +75113,9 @@
2988509296,2988509311,DE
2988509312,2988509343,FR
2988509344,2988509351,BE
-2988509352,2988509355,NL
-2988509356,2988509363,DE
+2988509352,2988509355,ES
+2988509356,2988509359,DE
+2988509360,2988509363,CH
2988509364,2988509367,IT
2988509368,2988509371,CH
2988509372,2988509375,PL
@@ -67070,11 +75125,11 @@
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,2988509471,NL
-2988509472,2988509503,FR
+2988509468,2988509503,NL
2988509504,2988509507,PL
2988509508,2988509511,FR
2988509512,2988509515,GB
@@ -67085,22 +75140,22 @@
2988509552,2988509575,FR
2988509576,2988509583,PL
2988509584,2988509619,FR
-2988509620,2988509623,DE
+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,DE
+2988509776,2988509779,ES
2988509780,2988509783,GB
2988509784,2988509787,FR
-2988509788,2988509791,ES
+2988509788,2988509791,BE
2988509792,2988509823,NL
2988509824,2988509839,FR
2988509840,2988509855,ES
@@ -67117,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
@@ -67129,16 +75183,21 @@
2988510016,2988510023,GB
2988510024,2988510031,FR
2988510032,2988510079,PL
-2988510080,2988510095,ES
-2988510096,2988510099,FR
+2988510080,2988510087,ES
+2988510088,2988510091,PL
+2988510092,2988510099,FR
2988510100,2988510103,GB
2988510104,2988510111,BE
2988510112,2988510143,CZ
2988510144,2988510175,NL
2988510176,2988510207,ES
2988510208,2988510211,FR
-2988510212,2988510215,DE
-2988510216,2988510255,FR
+2988510212,2988510215,ES
+2988510216,2988510239,FR
+2988510240,2988510243,IT
+2988510244,2988510247,FR
+2988510248,2988510251,FI
+2988510252,2988510255,LT
2988510256,2988510259,GB
2988510260,2988510263,FR
2988510264,2988510271,PL
@@ -67155,10 +75214,24 @@
2988510408,2988510415,PL
2988510416,2988510431,FR
2988510432,2988510435,IT
-2988510436,2988510751,FR
+2988510436,2988510463,FR
+2988510464,2988510495,PL
+2988510496,2988510507,FR
+2988510508,2988510511,NL
+2988510512,2988510515,GB
+2988510516,2988510519,DE
+2988510520,2988510523,PT
+2988510524,2988510527,BE
+2988510528,2988510559,FR
+2988510560,2988510591,IT
+2988510592,2988510623,BE
+2988510624,2988510655,IE
+2988510656,2988510719,PL
+2988510720,2988510751,FR
2988510752,2988510759,PL
2988510760,2988510767,FR
-2988510768,2988510775,ES
+2988510768,2988510771,ES
+2988510772,2988510775,LT
2988510776,2988510847,FR
2988510848,2988510943,PL
2988510944,2988510975,GB
@@ -67203,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
@@ -67231,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
@@ -67254,7 +75326,9 @@
2988512340,2988512343,DE
2988512344,2988512351,FR
2988512352,2988512383,IT
-2988512384,2988512415,FR
+2988512384,2988512399,FR
+2988512400,2988512403,DE
+2988512404,2988512415,FR
2988512416,2988512435,PL
2988512436,2988512439,FR
2988512440,2988512447,NL
@@ -67276,7 +75350,8 @@
2988512592,2988512595,BE
2988512596,2988512599,ES
2988512600,2988512607,PT
-2988512608,2988512639,FR
+2988512608,2988512631,GB
+2988512632,2988512639,PL
2988512640,2988512647,GB
2988512648,2988512651,ES
2988512652,2988512655,DE
@@ -67292,20 +75367,25 @@
2988512840,2988512847,DE
2988512848,2988512851,ES
2988512852,2988512855,DE
-2988512856,2988512883,FR
-2988512884,2988512895,DE
+2988512856,2988512879,FR
+2988512880,2988512895,DE
2988512896,2988512899,PL
-2988512900,2988512903,GB
-2988512904,2988512907,ES
-2988512908,2988512943,FR
-2988512944,2988512951,GB
+2988512900,2988512903,ES
+2988512904,2988512907,PL
+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
@@ -67338,10 +75418,13 @@
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,2988513391,GB
+2988513384,2988513387,FR
+2988513388,2988513391,CH
2988513392,2988513407,FR
2988513408,2988513471,PL
2988513472,2988513503,FR
@@ -67349,15 +75432,16 @@
2988513508,2988513511,DE
2988513512,2988513515,FR
2988513516,2988513519,DE
-2988513520,2988513535,GB
-2988513536,2988513551,DE
+2988513520,2988513551,GB
2988513552,2988513555,IT
2988513556,2988513567,FR
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
@@ -67366,9 +75450,7 @@
2988513704,2988513707,DE
2988513708,2988513723,FR
2988513724,2988513727,DE
-2988513728,2988513731,FR
-2988513732,2988513735,BE
-2988513736,2988513739,FR
+2988513728,2988513739,FR
2988513740,2988513743,ES
2988513744,2988513759,GB
2988513760,2988513879,FR
@@ -67379,14 +75461,12 @@
2988513904,2988513919,IT
2988513920,2988513951,FR
2988513952,2988513967,PT
-2988513968,2988513975,FI
-2988513976,2988513983,IT
+2988513968,2988513983,DE
2988513984,2988513991,GB
2988513992,2988513999,IE
2988514000,2988514015,FR
-2988514016,2988514019,ES
-2988514020,2988514023,NL
-2988514024,2988514027,PT
+2988514016,2988514023,ES
+2988514024,2988514027,CH
2988514028,2988514031,PL
2988514032,2988514047,FR
2988514048,2988514079,ES
@@ -67394,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
@@ -67402,28 +75482,25 @@
2988514140,2988514143,PL
2988514144,2988514159,FR
2988514160,2988514163,IT
-2988514164,2988514167,DE
-2988514168,2988514171,FR
+2988514164,2988514171,FR
2988514172,2988514175,DE
2988514176,2988514207,FR
2988514208,2988514211,ES
2988514212,2988514219,FR
2988514220,2988514227,GB
2988514228,2988514231,IE
-2988514232,2988514239,GB
-2988514240,2988514243,FR
-2988514244,2988514251,GB
+2988514232,2988514239,ES
+2988514240,2988514247,FR
+2988514248,2988514251,GB
2988514252,2988514255,FR
2988514256,2988514271,ES
2988514272,2988514279,FR
-2988514280,2988514283,PL
-2988514284,2988514287,GB
+2988514280,2988514287,PL
2988514288,2988514303,ES
2988514304,2988514335,FR
-2988514336,2988514339,IE
+2988514336,2988514339,PL
2988514340,2988514343,FR
-2988514344,2988514351,GB
-2988514352,2988514359,PL
+2988514344,2988514359,PL
2988514360,2988514367,ES
2988514368,2988514399,FR
2988514400,2988514431,GB
@@ -67434,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
@@ -67457,7 +75535,9 @@
2988514984,2988514991,IT
2988514992,2988514995,FR
2988514996,2988515007,PL
-2988515008,2988515039,FR
+2988515008,2988515027,FR
+2988515028,2988515031,DE
+2988515032,2988515039,FR
2988515040,2988515071,GB
2988515072,2988515327,FR
2988515328,2988517375,DE
@@ -67469,21 +75549,33 @@
2988523600,2988523603,ES
2988523604,2988523607,GB
2988523608,2988523615,PL
-2988523616,2988523631,IT
+2988523616,2988523631,FR
2988523632,2988523651,PL
2988523652,2988523655,FR
2988523656,2988523663,FI
-2988523664,2988523667,IT
+2988523664,2988523667,DE
2988523668,2988523679,FR
2988523680,2988523711,ES
2988523712,2988523731,GB
2988523732,2988523735,IT
2988523736,2988523739,DE
2988523740,2988523743,FR
-2988523744,2988523775,GB
+2988523744,2988523775,PT
2988523776,2988524031,FR
-2988524032,2988524159,DE
-2988524160,2988524163,IT
+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
2988524176,2988524191,FR
@@ -67504,13 +75596,14 @@
2988524268,2988524271,NL
2988524272,2988524287,DE
2988524288,2988524291,ES
-2988524292,2988524299,IT
+2988524292,2988524295,IT
+2988524296,2988524299,CZ
2988524300,2988524303,FR
2988524304,2988524307,IT
2988524308,2988524319,GB
2988524320,2988524351,FR
2988524352,2988524359,CH
-2988524360,2988524363,GB
+2988524360,2988524363,ES
2988524364,2988524367,DE
2988524368,2988524383,GB
2988524384,2988524415,IE
@@ -67524,15 +75617,19 @@
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,2988524799,FR
+2988524672,2988524735,FR
+2988524736,2988524751,GB
+2988524752,2988524799,FR
2988524800,2988525055,GB
2988525056,2988525567,PL
2988525568,2988525583,FR
2988525584,2988525647,PL
-2988525648,2988525655,IE
+2988525648,2988525655,GB
2988525656,2988525659,FR
2988525660,2988525663,DE
2988525664,2988525695,FR
@@ -67540,56 +75637,81 @@
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,2988526423,PL
-2988526424,2988526427,NL
+2988526080,2988526143,PT
+2988526144,2988526175,BE
+2988526176,2988526239,ES
+2988526240,2988526423,PL
+2988526424,2988526427,BE
2988526428,2988526431,ES
-2988526432,2988526447,FR
-2988526448,2988526451,ES
-2988526452,2988526455,FR
+2988526432,2988526435,NL
+2988526436,2988526439,FR
+2988526440,2988526443,CH
+2988526444,2988526447,BE
+2988526448,2988526451,GB
+2988526452,2988526455,DE
2988526456,2988526463,ES
-2988526464,2988526527,FR
-2988526528,2988526543,GB
+2988526464,2988526543,FR
2988526544,2988526559,IT
2988526560,2988526579,FR
2988526580,2988526583,ES
2988526584,2988526591,DE
2988526592,2988526607,FR
2988526608,2988526615,DE
-2988526616,2988526687,FR
+2988526616,2988526655,FR
+2988526656,2988526663,PL
+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,2988526943,FR
-2988526944,2988526959,DE
-2988526960,2988526991,FR
+2988526928,2988526935,DE
+2988526936,2988526943,PL
+2988526944,2988526951,DE
+2988526952,2988526955,FR
+2988526956,2988526959,IT
+2988526960,2988526975,FR
+2988526976,2988526991,PL
2988526992,2988526995,DE
-2988526996,2988526999,ES
-2988527000,2988527055,FR
-2988527056,2988527071,NL
-2988527072,2988527095,GB
+2988526996,2988527003,ES
+2988527004,2988527055,FR
+2988527056,2988527071,BE
+2988527072,2988527087,FR
+2988527088,2988527095,GB
2988527096,2988527099,IE
2988527100,2988527103,LT
2988527104,2988527127,FR
2988527128,2988527167,PL
-2988527168,2988527183,FR
+2988527168,2988527171,DE
+2988527172,2988527175,ES
+2988527176,2988527179,PT
+2988527180,2988527183,PL
2988527184,2988527187,IT
2988527188,2988527191,ES
2988527192,2988527195,DE
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
@@ -67599,45 +75721,89 @@
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
2988527504,2988527523,FR
2988527524,2988527531,DE
-2988527532,2988527551,FR
+2988527532,2988527535,FR
+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
@@ -67650,9 +75816,16 @@
2988528484,2988528487,ES
2988528488,2988528495,FR
2988528496,2988528511,IT
-2988528512,2988528671,FR
+2988528512,2988528639,FR
+2988528640,2988528643,BE
+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
@@ -67661,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,ES
+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
@@ -67679,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
@@ -67688,43 +75862,52 @@
2988529200,2988529207,PL
2988529208,2988529247,FR
2988529248,2988529251,GB
-2988529252,2988529255,PL
-2988529256,2988529263,NL
-2988529264,2988529311,FR
+2988529252,2988529263,PL
+2988529264,2988529279,ES
+2988529280,2988529311,FR
2988529312,2988529315,PL
2988529316,2988529319,FR
-2988529320,2988529323,FI
+2988529320,2988529323,ES
2988529324,2988529331,DE
-2988529332,2988529335,FR
-2988529336,2988529339,GB
+2988529332,2988529339,GB
2988529340,2988529343,DE
-2988529344,2988529351,IE
+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,2988529599,GB
+2988529568,2988529583,FR
+2988529584,2988529591,ES
+2988529592,2988529595,FR
+2988529596,2988529599,GB
2988529600,2988529607,IT
2988529608,2988529631,FR
2988529632,2988529647,LT
2988529648,2988529663,FR
2988529664,2988529679,PL
2988529680,2988529703,FR
-2988529704,2988529707,GB
+2988529704,2988529707,DE
2988529708,2988529759,FR
2988529760,2988529767,PL
2988529768,2988529771,FR
2988529772,2988529775,DE
2988529776,2988529783,ES
-2988529784,2988529823,FR
+2988529784,2988529787,FR
+2988529788,2988529791,PL
+2988529792,2988529799,ES
+2988529800,2988529807,DE
+2988529808,2988529823,FR
2988529824,2988529855,ES
2988529856,2988529887,FR
2988529888,2988529891,DE
@@ -67732,41 +75915,47 @@
2988529896,2988529899,GB
2988529900,2988529903,FI
2988529904,2988529919,BE
-2988529920,2988529935,FR
+2988529920,2988529935,GB
2988529936,2988529939,CH
2988529940,2988529943,GB
-2988529944,2988529951,ES
+2988529944,2988529947,ES
+2988529948,2988529951,PT
2988529952,2988529955,GB
-2988529956,2988529959,DE
+2988529956,2988529959,PL
2988529960,2988529967,GB
2988529968,2988529983,NL
2988529984,2988529999,GB
2988530000,2988530003,FR
2988530004,2988530007,GB
-2988530008,2988530039,FR
-2988530040,2988530043,ES
+2988530008,2988530031,FR
+2988530032,2988530035,CH
+2988530036,2988530043,DE
2988530044,2988530047,FR
2988530048,2988530063,GB
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,IE
+2988530208,2988530239,PL
2988530240,2988530271,FR
2988530272,2988530303,IE
-2988530304,2988530367,FR
+2988530304,2988530307,DE
+2988530308,2988530311,PL
+2988530312,2988530323,FR
+2988530324,2988530327,GB
+2988530328,2988530367,FR
2988530368,2988530371,ES
2988530372,2988530379,FR
2988530380,2988530383,CH
2988530384,2988530391,FR
-2988530392,2988530399,IE
+2988530392,2988530395,PT
+2988530396,2988530399,GB
2988530400,2988530403,ES
-2988530404,2988530415,FR
-2988530416,2988530419,PT
-2988530420,2988530423,PL
+2988530404,2988530407,PL
+2988530408,2988530411,LT
+2988530412,2988530415,CZ
+2988530416,2988530423,PL
2988530424,2988530431,ES
2988530432,2988530687,DE
2988530688,2988530695,IT
@@ -67784,9 +75973,9 @@
2988530872,2988530879,IT
2988530880,2988530887,PL
2988530888,2988530895,DE
-2988530896,2988530943,FR
-2988530944,2988530959,BE
-2988530960,2988530975,FR
+2988530896,2988530927,FR
+2988530928,2988530943,FI
+2988530944,2988530975,FR
2988530976,2988531007,PL
2988531008,2988531015,DE
2988531016,2988531019,NL
@@ -67803,29 +75992,34 @@
2988531080,2988531083,FR
2988531084,2988531087,PL
2988531088,2988531103,FR
-2988531104,2988531119,BE
-2988531120,2988531151,FR
-2988531152,2988531167,PL
-2988531168,2988531175,NL
+2988531104,2988531107,DE
+2988531108,2988531151,FR
+2988531152,2988531171,PL
+2988531172,2988531175,BE
2988531176,2988531183,GB
2988531184,2988531187,ES
2988531188,2988531191,IE
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
2988531324,2988531327,GB
2988531328,2988531343,IE
-2988531344,2988531391,FR
+2988531344,2988531351,CH
+2988531352,2988531355,PL
+2988531356,2988531391,FR
2988531392,2988531399,PL
2988531400,2988531403,DE
2988531404,2988531427,PL
2988531428,2988531451,FR
-2988531452,2988531455,CH
+2988531452,2988531455,GB
2988531456,2988535807,FR
2988535808,2988537855,ES
2988537856,2988539935,FR
@@ -67835,7 +76029,10 @@
2988539976,2988539983,FR
2988539984,2988540003,PL
2988540004,2988540007,CZ
-2988540008,2988540023,FR
+2988540008,2988540011,ES
+2988540012,2988540015,DE
+2988540016,2988540019,FR
+2988540020,2988540023,GB
2988540024,2988540027,PL
2988540028,2988540031,ES
2988540032,2988540207,FR
@@ -67849,14 +76046,13 @@
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
-2988540380,2988540423,FR
-2988540424,2988540427,GB
+2988540380,2988540415,FR
+2988540416,2988540419,CZ
+2988540420,2988540427,GB
2988540428,2988540431,NL
2988540432,2988540435,FR
2988540436,2988540439,DE
@@ -67866,7 +76062,7 @@
2988540456,2988540459,DE
2988540460,2988540463,ES
2988540464,2988540471,PL
-2988540472,2988540479,DE
+2988540472,2988540479,ES
2988540480,2988540483,FR
2988540484,2988540487,DE
2988540488,2988540491,ES
@@ -67875,30 +76071,34 @@
2988540508,2988540511,ES
2988540512,2988540543,FR
2988540544,2988540607,PL
-2988540608,2988540639,FR
+2988540608,2988540623,FR
+2988540624,2988540631,GB
+2988540632,2988540635,DE
+2988540636,2988540639,PT
2988540640,2988540647,PL
2988540648,2988540651,FR
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
2988540752,2988540759,PL
2988540760,2988540763,ES
2988540764,2988540767,DE
-2988540768,2988540775,GB
+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
@@ -67925,9 +76125,15 @@
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,FR
+2988541392,2988541407,CH
2988541408,2988541423,BE
2988541424,2988541439,DE
2988541440,2988541443,IT
@@ -67975,9 +76181,7 @@
2988541816,2988541819,ES
2988541820,2988541823,CZ
2988541824,2988541855,FR
-2988541856,2988541859,PL
-2988541860,2988541863,GB
-2988541864,2988541867,PL
+2988541856,2988541867,PL
2988541868,2988541887,FR
2988541888,2988541895,DE
2988541896,2988541899,PL
@@ -67993,8 +76197,11 @@
2988541956,2988541959,DE
2988541960,2988541963,CH
2988541964,2988541967,DE
-2988541968,2988541983,FR
-2988541984,2988542015,ES
+2988541968,2988541999,FR
+2988542000,2988542003,PL
+2988542004,2988542007,DE
+2988542008,2988542011,FI
+2988542012,2988542015,CH
2988542016,2988542019,GB
2988542020,2988542023,FR
2988542024,2988542027,NL
@@ -68007,9 +76214,10 @@
2988542072,2988542255,FR
2988542256,2988542271,IT
2988542272,2988542335,ES
-2988542336,2988542367,FR
+2988542336,2988542367,DE
2988542368,2988542399,CZ
-2988542400,2988542407,FR
+2988542400,2988542403,FI
+2988542404,2988542407,FR
2988542408,2988542411,LT
2988542412,2988542415,PL
2988542416,2988542431,FR
@@ -68018,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
@@ -68031,32 +76238,35 @@
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
2988542848,2988542919,DE
2988542920,2988542923,PL
-2988542924,2988542927,CH
-2988542928,2988542935,FR
+2988542924,2988542935,FR
2988542936,2988542939,IT
2988542940,2988542943,PL
2988542944,2988542959,DE
2988542960,2988542963,FR
-2988542964,2988542967,PL
+2988542964,2988542967,CH
2988542968,2988542975,DE
2988542976,2988543007,FR
2988543008,2988543011,PL
-2988543012,2988543015,IT
+2988543012,2988543015,LT
2988543016,2988543023,CH
2988543024,2988543039,DE
2988543040,2988543047,GB
2988543048,2988543067,FR
2988543068,2988543071,PL
2988543072,2988543103,FR
-2988543104,2988543167,GB
-2988543168,2988543199,IE
+2988543104,2988543183,GB
+2988543184,2988543199,FR
2988543200,2988543203,GB
2988543204,2988543207,FR
2988543208,2988543211,PL
@@ -68108,18 +76318,19 @@
2988543584,2988543615,DE
2988543616,2988543743,ES
2988543744,2988543935,FR
-2988543936,2988543939,FI
-2988543940,2988543947,PL
+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
@@ -68127,23 +76338,25 @@
2988544168,2988544175,GB
2988544176,2988544179,CH
2988544180,2988544183,IT
-2988544184,2988544191,DE
+2988544184,2988544191,FR
2988544192,2988544227,ES
2988544228,2988544271,FR
-2988544272,2988544275,DE
+2988544272,2988544275,PL
2988544276,2988544279,FR
2988544280,2988544283,GB
-2988544284,2988544287,DE
+2988544284,2988544287,CZ
2988544288,2988544291,PL
2988544292,2988544295,GB
2988544296,2988544303,FR
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
@@ -68160,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
@@ -68182,12 +76394,11 @@
2988544928,2988544931,DE
2988544932,2988544935,FR
2988544936,2988544943,IT
-2988544944,2988544951,PL
+2988544944,2988544951,PT
2988544952,2988544959,GB
2988544960,2988544979,ES
2988544980,2988544983,FR
-2988544984,2988544991,IE
-2988544992,2988544995,PL
+2988544984,2988544995,PL
2988544996,2988544999,FR
2988545000,2988545003,DE
2988545004,2988545007,ES
@@ -68223,10 +76434,13 @@
2988545384,2988545387,ES
2988545388,2988545391,FR
2988545392,2988545395,DE
-2988545396,2988545471,FR
+2988545396,2988545439,FR
+2988545440,2988545443,DE
+2988545444,2988545447,ES
+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
@@ -68235,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
@@ -68252,17 +76466,19 @@
2988545836,2988545839,DE
2988545840,2988545855,FR
2988545856,2988545859,ES
-2988545860,2988545867,FR
-2988545868,2988545871,PL
+2988545860,2988545863,FR
+2988545864,2988545871,PL
2988545872,2988545919,FR
-2988545920,2988545923,GB
+2988545920,2988545923,ES
2988545924,2988545927,PL
2988545928,2988545931,BE
2988545932,2988545935,DE
2988545936,2988545943,FR
-2988545944,2988545967,NL
+2988545944,2988545947,CZ
+2988545948,2988545967,FR
2988545968,2988545971,IT
-2988545972,2988545979,FR
+2988545972,2988545975,DE
+2988545976,2988545979,FR
2988545980,2988545983,DE
2988545984,2988545987,FR
2988545988,2988545991,PL
@@ -68285,15 +76501,14 @@
2988546176,2988546239,GB
2988546240,2988546271,LT
2988546272,2988546279,IT
-2988546280,2988546283,GB
+2988546280,2988546283,DE
2988546284,2988546287,BE
2988546288,2988546291,GB
2988546292,2988546295,ES
-2988546296,2988546303,PL
-2988546304,2988546307,ES
+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
@@ -68301,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
@@ -68331,11 +76548,18 @@
2988546832,2988546835,DE
2988546836,2988546839,ES
2988546840,2988546847,IE
-2988546848,2988546879,FR
+2988546848,2988546851,PT
+2988546852,2988546855,IT
+2988546856,2988546859,FR
+2988546860,2988546863,IE
+2988546864,2988546867,GB
+2988546868,2988546871,FR
+2988546872,2988546875,GB
+2988546876,2988546879,IE
2988546880,2988546947,ES
2988546948,2988546951,DE
2988546952,2988546955,FR
-2988546956,2988546959,GB
+2988546956,2988546959,DE
2988546960,2988546963,CH
2988546964,2988546967,IT
2988546968,2988546971,FR
@@ -68345,8 +76569,7 @@
2988546996,2988546999,ES
2988547000,2988547003,IT
2988547004,2988547007,ES
-2988547008,2988547011,GB
-2988547012,2988547015,FR
+2988547008,2988547015,FR
2988547016,2988547019,NL
2988547020,2988547023,ES
2988547024,2988547039,FR
@@ -68366,7 +76589,10 @@
2988547124,2988547127,IT
2988547128,2988547135,FR
2988547136,2988547167,IT
-2988547168,2988547199,BE
+2988547168,2988547183,IE
+2988547184,2988547191,ES
+2988547192,2988547195,DE
+2988547196,2988547199,PL
2988547200,2988547207,IE
2988547208,2988547211,ES
2988547212,2988547215,GB
@@ -68378,9 +76604,9 @@
2988547256,2988547263,FR
2988547264,2988547267,GB
2988547268,2988547271,ES
-2988547272,2988547279,NL
-2988547280,2988547295,FR
-2988547296,2988547303,DE
+2988547272,2988547275,GB
+2988547276,2988547295,FR
+2988547296,2988547303,BE
2988547304,2988547311,FR
2988547312,2988547327,PL
2988547328,2988547423,FR
@@ -68390,7 +76616,7 @@
2988547444,2988547447,DE
2988547448,2988547451,FR
2988547452,2988547455,PT
-2988547456,2988547471,DE
+2988547456,2988547471,PL
2988547472,2988547475,LT
2988547476,2988547479,GB
2988547480,2988547487,FR
@@ -68401,27 +76627,37 @@
2988547532,2988547535,ES
2988547536,2988547539,FR
2988547540,2988547543,DE
-2988547544,2988547547,IT
+2988547544,2988547547,BE
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
-2988547752,2988547775,DE
+2988547712,2988547743,FR
+2988547744,2988547751,PT
+2988547752,2988547759,ES
+2988547760,2988547775,FR
2988547776,2988547807,ES
-2988547808,2988547871,FR
+2988547808,2988547823,GB
+2988547824,2988547831,FR
+2988547832,2988547835,DE
+2988547836,2988547839,BE
+2988547840,2988547871,FR
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,DE
+2988548060,2988548063,FR
2988548064,2988548095,ES
2988548096,2988556287,FR
2988556288,2988556295,PL
@@ -68429,10 +76665,18 @@
2988556304,2988556311,PL
2988556312,2988556319,FR
2988556320,2988556351,GB
-2988556352,2988556359,DE
+2988556352,2988556355,DE
+2988556356,2988556359,PL
2988556360,2988556383,FR
2988556384,2988556415,DE
-2988556416,2988556447,FR
+2988556416,2988556419,IT
+2988556420,2988556423,FR
+2988556424,2988556427,BE
+2988556428,2988556431,ES
+2988556432,2988556435,GB
+2988556436,2988556439,FI
+2988556440,2988556443,FR
+2988556444,2988556447,PL
2988556448,2988556451,NL
2988556452,2988556479,FR
2988556480,2988556487,IT
@@ -68440,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
@@ -68450,25 +76694,28 @@
2988556864,2988556879,FR
2988556880,2988556883,ES
2988556884,2988556887,DE
-2988556888,2988556895,FR
+2988556888,2988556891,BE
+2988556892,2988556895,FR
2988556896,2988556911,PL
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
-2988556980,2988557003,FR
+2988556980,2988556999,FR
+2988557000,2988557003,BE
2988557004,2988557007,ES
2988557008,2988557023,FR
2988557024,2988557039,IE
-2988557040,2988557047,FR
+2988557040,2988557043,PT
+2988557044,2988557047,BE
2988557048,2988557055,PL
2988557056,2988557059,ES
-2988557060,2988557071,FR
-2988557072,2988557075,PL
+2988557060,2988557063,FR
+2988557064,2988557067,ES
+2988557068,2988557075,PL
2988557076,2988557079,FR
2988557080,2988557087,FI
2988557088,2988557095,CH
@@ -68483,7 +76730,9 @@
2988557256,2988557259,FR
2988557260,2988557263,DE
2988557264,2988557279,GB
-2988557280,2988557295,ES
+2988557280,2988557287,ES
+2988557288,2988557291,IT
+2988557292,2988557295,DE
2988557296,2988557299,BE
2988557300,2988557303,PL
2988557304,2988557311,CZ
@@ -68492,19 +76741,21 @@
2988557344,2988557379,FR
2988557380,2988557383,ES
2988557384,2988557387,GB
-2988557388,2988557391,ES
+2988557388,2988557391,CZ
2988557392,2988557399,PL
-2988557400,2988557407,DE
+2988557400,2988557403,ES
+2988557404,2988557407,IT
2988557408,2988557427,ES
2988557428,2988557431,DE
2988557432,2988557439,PL
2988557440,2988557471,GB
2988557472,2988557487,PL
-2988557488,2988557495,DE
+2988557488,2988557491,FI
+2988557492,2988557495,FR
2988557496,2988557539,PL
2988557540,2988557599,FR
-2988557600,2988557631,GB
-2988557632,2988557639,FR
+2988557600,2988557635,GB
+2988557636,2988557639,PT
2988557640,2988557643,IE
2988557644,2988557647,GB
2988557648,2988557651,NL
@@ -68512,25 +76763,29 @@
2988557664,2988557695,PL
2988557696,2988557727,FR
2988557728,2988557759,PL
-2988557760,2988557763,FR
+2988557760,2988557763,DE
2988557764,2988557767,ES
2988557768,2988557771,PL
-2988557772,2988557823,FR
-2988557824,2988557951,DE
+2988557772,2988557775,FR
+2988557776,2988557791,BE
+2988557792,2988557951,FR
2988557952,2988557983,LT
2988557984,2988557999,FR
2988558000,2988558015,IE
2988558016,2988558047,FR
2988558048,2988558063,PL
-2988558064,2988558071,IT
+2988558064,2988558067,DE
+2988558068,2988558071,FI
2988558072,2988558075,DE
2988558076,2988558079,PL
2988558080,2988558083,FR
2988558084,2988558087,PL
2988558088,2988558095,FR
2988558096,2988558103,PL
-2988558104,2988558119,FR
-2988558120,2988558123,GB
+2988558104,2988558107,NL
+2988558108,2988558111,IT
+2988558112,2988558115,IE
+2988558116,2988558123,GB
2988558124,2988558127,FR
2988558128,2988558131,DE
2988558132,2988558135,PL
@@ -68544,10 +76799,12 @@
2988558464,2988558527,NL
2988558528,2988558591,PL
2988558592,2988558655,GB
-2988558656,2988558727,FR
+2988558656,2988558719,FR
+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
@@ -68556,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
@@ -68566,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
@@ -68588,17 +76844,32 @@
2988559700,2988559703,PL
2988559704,2988559707,DE
2988559708,2988559711,PL
-2988559712,2988559719,FR
-2988559720,2988559727,DE
-2988559728,2988559731,FR
+2988559712,2988559723,FR
+2988559724,2988559727,IT
+2988559728,2988559731,DE
2988559732,2988559735,PL
2988559736,2988559743,GB
-2988559744,2988559871,FR
+2988559744,2988559807,FR
+2988559808,2988559871,ES
2988559872,2988560383,IT
-2988560384,2988560447,FR
+2988560384,2988560387,FR
+2988560388,2988560391,ES
+2988560392,2988560399,IT
+2988560400,2988560415,IE
+2988560416,2988560439,FR
+2988560440,2988560443,DE
+2988560444,2988560447,PL
2988560448,2988560451,DE
2988560452,2988560455,PL
-2988560456,2988560575,FR
+2988560456,2988560479,FR
+2988560480,2988560511,ES
+2988560512,2988560519,IT
+2988560520,2988560523,DE
+2988560524,2988560527,BE
+2988560528,2988560531,ES
+2988560532,2988560535,FR
+2988560536,2988560543,IE
+2988560544,2988560575,GB
2988560576,2988560591,ES
2988560592,2988560595,NL
2988560596,2988560599,IT
@@ -68618,27 +76889,29 @@
2988560800,2988560815,DE
2988560816,2988560831,FR
2988560832,2988560863,GB
-2988560864,2988560871,FR
+2988560864,2988560871,PL
2988560872,2988560895,GB
2988560896,2988560911,PL
2988560912,2988560919,FR
2988560920,2988560923,DE
-2988560924,2988560951,FR
+2988560924,2988560935,FR
+2988560936,2988560939,CZ
+2988560940,2988560951,FR
2988560952,2988560959,PL
2988560960,2988560975,FR
2988560976,2988560991,ES
2988560992,2988560995,FR
-2988560996,2988561007,DE
-2988561008,2988561023,FR
-2988561024,2988561031,ES
-2988561032,2988561039,FR
+2988560996,2988560999,DE
+2988561000,2988561023,FR
+2988561024,2988561027,BE
+2988561028,2988561039,FR
2988561040,2988561043,GB
-2988561044,2988561047,FR
+2988561044,2988561047,DE
2988561048,2988561051,PL
2988561052,2988561055,GB
2988561056,2988561059,FR
2988561060,2988561071,PL
-2988561072,2988561075,NL
+2988561072,2988561075,ES
2988561076,2988561079,LT
2988561080,2988561083,PL
2988561084,2988561087,GB
@@ -68657,7 +76930,12 @@
2988561200,2988561203,PL
2988561204,2988561207,GB
2988561208,2988561215,PL
-2988561216,2988561283,FR
+2988561216,2988561231,FR
+2988561232,2988561235,PT
+2988561236,2988561239,GB
+2988561240,2988561243,BE
+2988561244,2988561263,PL
+2988561264,2988561283,FR
2988561284,2988561287,NL
2988561288,2988561291,ES
2988561292,2988561295,PT
@@ -68671,7 +76949,10 @@
2988561668,2988561671,PL
2988561672,2988561675,NL
2988561676,2988561679,FI
-2988561680,2988561695,ES
+2988561680,2988561683,FR
+2988561684,2988561687,CZ
+2988561688,2988561691,DE
+2988561692,2988561695,LT
2988561696,2988561727,FR
2988561728,2988561743,PL
2988561744,2988561747,FR
@@ -68680,17 +76961,19 @@
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
-2988562016,2988562023,PT
-2988562024,2988562027,ES
+2988562016,2988562027,ES
2988562028,2988562031,LT
2988562032,2988562047,PL
2988562048,2988562079,DE
@@ -68703,27 +76986,27 @@
2988562164,2988562167,DE
2988562168,2988562431,NL
2988562432,2988562591,FR
-2988562592,2988562595,GB
-2988562596,2988562607,FR
+2988562592,2988562599,GB
+2988562600,2988562607,FR
2988562608,2988562611,PT
2988562612,2988562623,PL
2988562624,2988562687,FI
2988562688,2988562703,GB
2988562704,2988562707,PL
2988562708,2988562711,DE
-2988562712,2988562719,GB
+2988562712,2988562719,FR
2988562720,2988562815,BE
2988562816,2988562823,PL
2988562824,2988562831,PT
2988562832,2988562835,FR
2988562836,2988562839,NL
-2988562840,2988562847,FR
-2988562848,2988562855,NL
-2988562856,2988562863,DE
+2988562840,2988562843,LT
+2988562844,2988562847,PL
+2988562848,2988562863,GB
2988562864,2988562911,FR
2988562912,2988562943,PL
2988562944,2988563011,FR
-2988563012,2988563015,PL
+2988563012,2988563015,PT
2988563016,2988563023,GB
2988563024,2988563043,FR
2988563044,2988563047,ES
@@ -68734,17 +77017,23 @@
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,2988563199,FR
+2988563152,2988563183,FR
+2988563184,2988563187,CZ
+2988563188,2988563191,PL
+2988563192,2988563199,FR
2988563200,2988563455,IE
2988563456,2988563487,FR
2988563488,2988563499,GB
2988563500,2988563503,FR
2988563504,2988563519,PL
-2988563520,2988563555,FR
+2988563520,2988563523,CZ
+2988563524,2988563527,FI
+2988563528,2988563535,PL
+2988563536,2988563555,FR
2988563556,2988563559,BE
2988563560,2988563567,FR
2988563568,2988563571,NL
@@ -68762,19 +77051,44 @@
2988563676,2988563679,PL
2988563680,2988563967,FR
2988563968,2988563999,BE
-2988564000,2988564019,FR
+2988564000,2988564015,IE
+2988564016,2988564019,FR
2988564020,2988564023,PL
2988564024,2988564031,FR
2988564032,2988564063,BE
-2988564064,2988564191,FR
+2988564064,2988564143,FR
+2988564144,2988564159,FI
+2988564160,2988564175,FR
+2988564176,2988564179,PL
+2988564180,2988564183,GB
+2988564184,2988564187,PL
+2988564188,2988564191,GB
2988564192,2988564195,ES
-2988564196,2988564203,DE
-2988564204,2988564383,FR
+2988564196,2988564199,LT
+2988564200,2988564203,DE
+2988564204,2988564215,FR
+2988564216,2988564219,GB
+2988564220,2988564223,IT
+2988564224,2988564275,FR
+2988564276,2988564279,BE
+2988564280,2988564287,ES
+2988564288,2988564303,FR
+2988564304,2988564307,IT
+2988564308,2988564311,PL
+2988564312,2988564319,ES
+2988564320,2988564351,FR
+2988564352,2988564359,DE
+2988564360,2988564367,GB
+2988564368,2988564383,FR
2988564384,2988564387,IE
2988564388,2988564391,GB
2988564392,2988564395,NL
2988564396,2988564399,CH
-2988564400,2988572671,FR
+2988564400,2988564403,DE
+2988564404,2988564407,ES
+2988564408,2988564471,FR
+2988564472,2988564479,GB
+2988564480,2988572671,FR
2988572672,2988703743,RU
2988703744,2988834815,PL
2988834816,2988965887,CH
@@ -68799,7 +77113,11 @@
2990518016,2990518079,IT
2990518080,2990525247,DE
2990525248,2990525311,ES
-2990525312,2990535935,DE
+2990525312,2990528703,DE
+2990528704,2990528735,RS
+2990528736,2990534655,DE
+2990534656,2990534687,EG
+2990534688,2990535935,DE
2990535936,2990535967,PL
2990535968,2990538751,DE
2990538752,2991063039,RU
@@ -69005,7 +77323,7 @@
2991538176,2991554559,SI
2991554560,2991571455,GB
2991571456,2991587327,IT
-2991587328,2991718399,RU
+2991587328,2991718399,SA
2991718400,2991849471,CH
2991849472,2991980543,NL
2991980544,2991980807,UA
@@ -69014,11 +77332,7 @@
2991981064,2991981071,DE
2991981072,2991981495,UA
2991981496,2991981503,NA
-2991981504,2991981647,UA
-2991981648,2991981655,NA
-2991981656,2991981687,UA
-2991981688,2991981695,NA
-2991981696,2991981839,UA
+2991981504,2991981839,UA
2991981840,2991981847,RU
2991981848,2991982535,UA
2991982536,2991982543,GL
@@ -69032,7 +77346,11 @@
2991983360,2991983615,JP
2991983616,2991984383,UA
2991984384,2991984639,JP
-2991984640,2992111615,UA
+2991984640,2991985919,UA
+2991985920,2991986175,JP
+2991986176,2991986431,UA
+2991986432,2991986687,JP
+2991986688,2992111615,UA
2992111616,2992373759,KZ
2992373760,2992635903,UA
2992635904,2993684479,GB
@@ -69042,7 +77360,26 @@
2994733056,2994798591,GR
2994798592,2994929663,RU
2994929664,2994995199,IR
-2994995200,2995060735,RU
+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
@@ -69058,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
@@ -69085,28 +77424,25 @@
2996862976,2996895743,AM
2996895744,2996928511,KW
2996928512,2996994047,RU
-2996994048,2996994879,DE
-2996994880,2996994943,UA
+2996994048,2996994943,DE
2996994944,2996995071,US
2996995072,2996995327,BZ
2996995328,2996995647,DE
2996995648,2996995711,BZ
2996995712,2996995775,BY
2996995776,2996995839,RU
-2996995840,2996995871,DE
-2996995872,2996995903,BR
-2996995904,2996996127,DE
+2996995840,2996996127,DE
2996996128,2996996159,CA
2996996160,2996996287,DE
2996996288,2996996351,RU
2996996352,2996996383,DE
2996996384,2996996447,RU
2996996448,2996996575,UA
-2996996576,2996996583,US
-2996996584,2996996639,DE
+2996996576,2996996639,DE
2996996640,2996996767,UA
2996996768,2996996831,RU
-2996996832,2996997119,CN
+2996996832,2996996863,DE
+2996996864,2996997119,CN
2996997120,2996998143,DE
2996998144,2996998271,UA
2996998272,2996998463,DE
@@ -69119,16 +77455,11 @@
2996999424,2996999551,IN
2996999552,2996999679,DE
2996999680,2996999935,GB
-2996999936,2996999951,DE
-2996999952,2996999967,LT
-2996999968,2997000447,DE
+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,2997003071,DE
@@ -69139,11 +77470,10 @@
2997003288,2997003295,NL
2997003296,2997003327,CA
2997003328,2997003391,RU
-2997003392,2997003583,DE
-2997003584,2997003647,UA
-2997003648,2997004031,DE
+2997003392,2997004031,DE
2997004032,2997004287,BZ
-2997004288,2997004607,DE
+2997004288,2997004543,CA
+2997004544,2997004607,DE
2997004608,2997004671,RU
2997004672,2997004799,DE
2997004800,2997005055,BZ
@@ -69152,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
@@ -69165,33 +77494,25 @@
2997008512,2997008639,LT
2997008640,2997008959,DE
2997008960,2997009023,RU
-2997009024,2997010479,DE
-2997010480,2997010495,BR
-2997010496,2997010559,CY
-2997010560,2997010687,IN
-2997010688,2997018623,DE
+2997009024,2997018623,DE
2997018624,2997019135,GB
2997019136,2997019391,TR
-2997019392,2997019647,GB
-2997019648,2997019679,DE
-2997019680,2997019711,BR
+2997019392,2997019711,DE
2997019712,2997019903,US
2997019904,2997020415,DE
2997020416,2997020671,CA
2997020672,2997020719,DE
2997020720,2997020735,SE
2997020736,2997020799,DE
-2997020800,2997020863,US
-2997020864,2997021183,DE
-2997021184,2997021695,GB
-2997021696,2997022079,DE
+2997020800,2997020863,CA
+2997020864,2997022079,DE
2997022080,2997022143,GB
2997022144,2997022239,DE
2997022240,2997022303,NL
2997022304,2997022367,SG
2997022368,2997022751,DE
2997022752,2997022783,TR
-2997022784,2997022847,IN
+2997022784,2997022847,DE
2997022848,2997023231,BZ
2997023232,2997023295,DE
2997023296,2997023423,IN
@@ -69240,10 +77561,10 @@
2999985728,2999985743,CZ
2999985744,2999985759,NL
2999985760,2999988991,BE
-2999988992,2999989007,FR
-2999989008,2999989247,NL
-2999989248,2999990527,BE
-2999990528,2999992319,NL
+2999988992,2999988999,FR
+2999989000,2999989247,NL
+2999989248,2999991039,BE
+2999991040,2999992319,NL
2999992320,3000000511,RU
3000000512,3000008703,DE
3000008704,3000016895,RU
@@ -69355,6 +77676,7 @@
3000545280,3000547327,RU
3000547328,3000549375,UA
3000549376,3000551423,SE
+3000551424,3000553471,PL
3000553472,3000555519,KG
3000555520,3000557567,RU
3000557568,3000561663,UA
@@ -69391,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
@@ -69421,31 +77743,46 @@
3001823232,3001827327,GE
3001827328,3001827647,SE
3001827648,3001827743,GB
-3001827744,3001828864,SE
+3001827744,3001827775,US
+3001827776,3001828864,SE
3001828865,3001828896,US
-3001828897,3001829120,SE
+3001828897,3001828927,SE
+3001828928,3001828991,DE
+3001828992,3001829055,GB
+3001829056,3001829120,SE
3001829121,3001829152,US
-3001829153,3001830400,SE
+3001829153,3001829183,SE
+3001829184,3001829247,DE
+3001829248,3001829311,GB
+3001829312,3001830400,SE
3001830401,3001830432,GB
-3001830433,3001830527,SE
+3001830433,3001830495,SE
+3001830496,3001830527,GB
3001830528,3001830559,IT
3001830560,3001830591,FR
3001830592,3001830623,US
-3001830624,3001830656,SE
+3001830624,3001830631,SE
+3001830632,3001830639,IT
+3001830640,3001830656,SE
3001830657,3001830688,GB
-3001830689,3001830783,SE
+3001830689,3001830751,SE
+3001830752,3001830783,GB
3001830784,3001830815,IT
3001830816,3001830847,FR
3001830848,3001830879,US
-3001830880,3001830912,SE
+3001830880,3001830887,SE
+3001830888,3001830895,IT
+3001830896,3001830912,SE
3001830913,3001830944,GB
-3001830945,3001831039,SE
+3001830945,3001831007,SE
+3001831008,3001831039,GB
3001831040,3001831071,IT
3001831072,3001831103,FR
3001831104,3001831135,US
3001831136,3001831167,IT
3001831168,3001831199,GB
-3001831200,3001831295,SE
+3001831200,3001831263,SE
+3001831264,3001831295,GB
3001831296,3001831327,IT
3001831328,3001831359,FR
3001831360,3001831391,US
@@ -69462,9 +77799,74 @@
3001859072,3001860095,MD
3001860096,3001861119,LV
3001861120,3001862143,LT
-3001862144,3001864191,EE
+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
@@ -69493,7 +77895,8 @@
3001886464,3001886511,NL
3001886512,3001886527,US
3001886528,3001886543,IE
-3001886544,3001888767,NL
+3001886544,3001886559,US
+3001886560,3001888767,NL
3001888768,3001892863,BH
3001892864,3001896959,AZ
3001896960,3001901055,CH
@@ -69514,98 +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,CN
-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,3001977983,GB
-3001977984,3001978015,CN
-3001978016,3001978031,GB
-3001978032,3001978047,RU
-3001978048,3001978367,GB
-3001978368,3001978495,US
-3001978496,3001978527,RU
-3001978528,3001978559,UA
-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
@@ -69614,8 +77926,7 @@
3002003456,3002011647,PL
3002011648,3002015743,BA
3002015744,3002019839,IT
-3002019840,3002020223,NL
-3002020224,3002020287,IL
+3002019840,3002020287,NL
3002020288,3002020303,US
3002020304,3002023935,NL
3002023936,3002028031,DE
@@ -69650,10 +77961,9 @@
3002619984,3002619991,GB
3002619992,3002620015,IT
3002620016,3002620031,GB
-3002620032,3002620039,DE
-3002620040,3002620047,IT
-3002620048,3002620095,GB
-3002620096,3002620103,IT
+3002620032,3002620047,IT
+3002620048,3002620087,GB
+3002620088,3002620103,IT
3002620104,3002620111,GB
3002620112,3002621951,IT
3002621952,3002623999,NO
@@ -69688,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
@@ -69713,7 +78024,6 @@
3002730496,3002732543,DE
3002732544,3002734591,NL
3002734592,3002736639,CH
-3002736640,3002738687,FR
3002738688,3002740735,PL
3002740736,3002742783,GB
3002742784,3002744831,LI
@@ -69729,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
@@ -69788,7 +78102,8 @@
3003058432,3003058687,FI
3003058688,3003058751,EE
3003058752,3003058943,PH
-3003058944,3003060223,EE
+3003058944,3003059199,IL
+3003059200,3003060223,EE
3003060224,3003062271,DE
3003062272,3003064319,NL
3003064320,3003066367,RO
@@ -69808,12 +78123,22 @@
3003088896,3003090943,FR
3003090944,3003092991,DE
3003092992,3003095039,NO
-3003095040,3003097087,AT
+3003095040,3003095567,AT
+3003095568,3003095583,CZ
+3003095584,3003095871,AT
+3003095872,3003095935,IT
+3003095936,3003096063,AT
+3003096064,3003096079,CZ
+3003096080,3003097087,AT
3003097088,3003099135,FR
3003099136,3003101183,CZ
3003101184,3003103231,UA
3003103232,3003105279,IT
-3003105280,3003107327,NL
+3003105280,3003107084,NL
+3003107085,3003107085,US
+3003107086,3003107091,NL
+3003107092,3003107093,US
+3003107094,3003107327,NL
3003107328,3003109375,RU
3003109376,3003111423,FR
3003111424,3003113471,IT
@@ -69928,7 +78253,6 @@
3031582720,3031584767,SG
3031584768,3031587839,JP
3031587840,3031592959,ID
-3031592960,3031595007,HK
3031595008,3031596031,AU
3031596032,3031597055,KH
3031597056,3031613439,PK
@@ -70047,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
@@ -70055,6 +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
@@ -70097,7 +78428,6 @@
3056664576,3056734207,CN
3056734208,3056746495,KR
3056746496,3056747519,NP
-3056747520,3056748543,BD
3056748544,3056749567,WS
3056749568,3056750591,SG
3056750592,3056754687,TH
@@ -70120,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
@@ -70288,8 +78620,48 @@
3091976192,3091980287,CA
3091980288,3093168127,US
3093168128,3093200895,CA
+3093200896,3093213183,US
+3093213184,3093217279,CA
+3093217280,3093233663,US
3093233664,3093237759,PR
-3093237760,3093266431,US
+3093237760,3093241863,US
+3093241864,3093241871,AU
+3093241872,3093242287,US
+3093242288,3093242295,AU
+3093242296,3093242719,US
+3093242720,3093242751,CN
+3093242752,3093243223,US
+3093243224,3093243231,AU
+3093243232,3093245575,US
+3093245576,3093245583,BR
+3093245584,3093245719,US
+3093245720,3093245727,AU
+3093245728,3093245999,US
+3093246000,3093246007,AU
+3093246008,3093246431,US
+3093246432,3093246439,AU
+3093246440,3093247327,US
+3093247328,3093247335,AU
+3093247336,3093247511,US
+3093247512,3093247519,AU
+3093247520,3093248375,US
+3093248376,3093248399,AU
+3093248400,3093248415,US
+3093248416,3093248431,AU
+3093248432,3093248479,US
+3093248480,3093248487,AU
+3093248488,3093248727,US
+3093248728,3093248735,AU
+3093248736,3093248831,US
+3093248832,3093248839,AU
+3093248840,3093248887,US
+3093248888,3093248895,AU
+3093248896,3093249599,US
+3093249600,3093249623,AU
+3093249624,3093249679,US
+3093249680,3093249687,AU
+3093249688,3093282815,US
+3093282816,3093299199,CA
3093299200,3093940991,US
3093940992,3093941055,CN
3093941056,3093941103,US
@@ -70390,9 +78762,7 @@
3093963600,3093963607,CA
3093963608,3093965039,US
3093965040,3093965055,GB
-3093965056,3093965359,US
-3093965360,3093965367,FR
-3093965368,3093965663,US
+3093965056,3093965663,US
3093965664,3093965671,KW
3093965672,3093965879,US
3093965880,3093965881,CA
@@ -70418,7 +78788,10 @@
3093969132,3093969135,MX
3093969136,3093970503,US
3093970504,3093970507,GB
-3093970508,3093986367,US
+3093970508,3093977159,US
+3093977160,3093977163,AU
+3093977164,3093977167,IL
+3093977168,3093986367,US
3093986368,3093986431,DE
3093986432,3093986463,US
3093986464,3093986495,GB
@@ -70430,35 +78803,117 @@
3097493504,3097755647,CA
3097755648,3098095615,US
3098095616,3098099711,CA
-3098099712,3098116095,US
+3098099712,3098148863,US
3098148864,3098165247,JM
3098165248,3098181631,US
-3098214400,3098263551,US
+3098181632,3098185727,CA
+3098185728,3098255903,US
+3098255904,3098255911,MV
+3098255912,3098263551,US
3098263552,3098271743,CA
-3098271744,3098275839,US
-3098279936,3098281503,US
+3098271744,3098279943,US
+3098279944,3098279951,KW
+3098279952,3098280591,US
+3098280592,3098280599,PA
+3098280600,3098281311,US
+3098281312,3098281343,EG
+3098281344,3098281503,US
3098281504,3098281511,PA
3098281512,3098281711,US
3098281712,3098281719,PA
-3098281720,3098476543,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,3098291119,US
+3098291120,3098291135,NL
+3098291136,3098291151,US
+3098291152,3098291159,NL
+3098291160,3098295751,US
+3098295752,3098295759,PL
+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,3098323679,US
+3098323680,3098323711,EG
+3098323712,3098331151,US
+3098331152,3098331159,HK
+3098331160,3098331471,US
+3098331472,3098331479,CL
+3098331480,3098333951,US
+3098333952,3098333959,BD
+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,3098365631,US
+3098365632,3098365639,AU
+3098365640,3098365951,US
+3098365952,3098365959,MX
+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,3098502143,US
+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
@@ -70466,7 +78921,7 @@
3120824320,3120840703,CR
3120840704,3120857087,AR
3120857088,3120922623,EC
-3120955392,3121020927,DO
+3120955392,3121086463,DO
3121086464,3121151999,UY
3121152000,3121348607,CL
3121348608,3121479679,AR
@@ -70476,33 +78931,43 @@
3121741824,3121872895,AR
3121872896,3122003967,CL
3122003968,3122135039,AR
-3122135040,3122331647,VE
+3122135040,3122282495,VE
+3122282496,3122294783,AR
+3122294784,3122298879,CR
+3122298880,3122331647,VE
3122331648,3122348031,BO
3122397184,3122659327,CO
-3122659328,3122724863,GT
-3122790400,3122987007,CL
+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
-3125018624,3125149695,EC
-3125280768,3125542911,PA
+3124953088,3125018623,CL
+3125018624,3125280767,EC
+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
@@ -70511,10 +78976,25 @@
3128950784,3129016319,UY
3129016320,3129999359,AR
3129999360,3130261503,CO
+3130261504,3130277887,CL
+3130294272,3130302463,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
-3131572224,3131703295,CO
-3132096512,3132162047,CR
+3131310080,3131572223,VE
+3131572224,3131834367,CO
+3131834368,3132096511,CL
+3132096512,3132227583,CR
3132227584,3132293119,EC
3132358656,3132489727,CO
3132489728,3132555263,AR
@@ -70530,13 +79010,19 @@
3133079552,3133145087,AR
3133145088,3145727999,BR
3145728000,3154116607,MX
-3154116608,3154149375,NO
+3154116608,3154124799,RU
+3154124800,3154126847,PL
+3154126848,3154128895,RU
+3154128896,3154132991,EE
+3154132992,3154157567,UA
+3154157568,3154173951,RU
+3154173952,3154182143,MD
3154182144,3154247679,DE
3154247680,3154313215,RS
3154313216,3154378751,TR
3154378752,3154444287,GR
3154444288,3154509823,BE
-3154509824,3154575359,RU
+3154509824,3154575359,HU
3154575360,3154640895,FR
3154640896,3155165183,IT
3155165184,3155427327,RU
@@ -70564,7 +79050,12 @@
3156803360,3156803583,DE
3156803584,3156869119,TR
3156869120,3156934655,LU
-3156934656,3157065727,RU
+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
@@ -70572,7 +79063,7 @@
3157786624,3158048767,TR
3158048768,3158310911,CH
3158310912,3158312959,FI
-3158312960,3158315007,NL
+3158312960,3158315007,AZ
3158315008,3158317055,DE
3158317056,3158319103,SI
3158319104,3158321151,GB
@@ -70616,15 +79107,23 @@
3158392832,3158394879,RU
3158394880,3158395007,AT
3158395008,3158395135,GB
-3158395136,3158395151,AT
-3158395152,3158395159,DE
-3158395160,3158395263,AT
-3158395264,3158395295,DE
-3158395296,3158395431,AT
+3158395136,3158395167,AT
+3158395168,3158395175,DE
+3158395176,3158395191,AT
+3158395192,3158395199,DE
+3158395200,3158395247,AT
+3158395248,3158395295,DE
+3158395296,3158395359,AT
+3158395360,3158395367,DE
+3158395368,3158395431,AT
3158395432,3158395439,DE
3158395440,3158395647,AT
3158395648,3158395663,DE
-3158395664,3158396287,AT
+3158395664,3158395687,AT
+3158395688,3158395695,DE
+3158395696,3158395711,AT
+3158395712,3158395743,DE
+3158395744,3158396287,AT
3158396288,3158396319,DE
3158396320,3158396927,AT
3158396928,3158398975,IT
@@ -70689,8 +79188,7 @@
3158891648,3158891711,DE
3158891712,3158891775,RU
3158891776,3158892031,PL
-3158892032,3158892351,DE
-3158892352,3158892415,IR
+3158892032,3158892415,DE
3158892416,3158892543,GB
3158892544,3158892671,DE
3158892672,3158892799,RU
@@ -70698,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
@@ -70718,7 +79215,7 @@
3158898272,3158898335,RU
3158898336,3158898431,DE
3158898432,3158898687,US
-3158898688,3158898815,DE
+3158898688,3158898815,IN
3158898816,3158898943,BZ
3158898944,3158899199,ES
3158899200,3158899455,DE
@@ -70842,9 +79339,14 @@
3160324096,3160328191,IT
3160328192,3160330239,FR
3160330240,3160332287,RU
-3160332288,3160333055,NO
+3160332288,3160332751,NO
+3160332752,3160332759,SE
+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
@@ -70865,7 +79367,9 @@
3160375296,3160377343,GB
3160377344,3160379391,NL
3160379392,3160381439,TR
-3160381440,3160383487,UA
+3160381440,3160382543,UA
+3160382544,3160382559,DE
+3160382560,3160383487,UA
3160383488,3160385535,SA
3160385536,3160387583,NL
3160387584,3160389631,RS
@@ -70899,10 +79403,14 @@
3161784320,3161800703,FI
3161800704,3161817087,SA
3161817088,3161833471,PL
-3161833472,3161833983,MK
-3161833984,3161834495,AT
-3161834496,3161835263,MK
-3161835264,3161849855,AT
+3161833472,3161835519,MK
+3161835520,3161835775,AT
+3161835776,3161837567,MK
+3161837568,3161837695,AT
+3161837696,3161840639,MK
+3161840640,3161840895,AT
+3161840896,3161844735,MK
+3161844736,3161849855,AT
3161849856,3161866239,BE
3161866240,3161882623,IR
3161882624,3161899007,DE
@@ -70928,7 +79436,8 @@
3162103808,3162104831,FR
3162104832,3162110975,NL
3162110976,3162111103,FR
-3162111104,3162111231,NL
+3162111104,3162111167,NL
+3162111168,3162111231,FR
3162111232,3162111295,CA
3162111296,3162111359,NL
3162111360,3162111391,CA
@@ -70983,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
@@ -71007,8 +79516,12 @@
3162669056,3162681343,RU
3162681344,3162682367,UA
3162682368,3162685439,RU
-3162685440,3162697727,UA
-3162697728,3162701823,RU
+3162685440,3162693631,UA
+3162693632,3162700031,RU
+3162700032,3162700287,UZ
+3162700288,3162700543,RU
+3162700544,3162700799,UA
+3162700800,3162701823,RU
3162701824,3162734591,MD
3162734592,3162767359,RU
3162767360,3162800127,SA
@@ -71022,57 +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,DE
+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,3163162111,DE
+3163161952,3163162015,DE
+3163162016,3163162047,US
+3163162048,3163162079,NL
+3163162080,3163162111,RU
3163162112,3163162143,TR
-3163162144,3163162207,DE
-3163162208,3163162239,TR
-3163162240,3163162271,DE
+3163162144,3163162271,DE
3163162272,3163162303,NL
-3163162304,3163162431,DE
+3163162304,3163162335,TH
+3163162336,3163162367,DE
+3163162368,3163162399,TR
+3163162400,3163162431,DE
3163162432,3163162463,CY
-3163162464,3163163807,DE
+3163162464,3163162495,DE
+3163162496,3163162527,BR
+3163162528,3163162559,DE
+3163162560,3163162623,US
+3163162624,3163163711,DE
+3163163712,3163163743,BR
+3163163744,3163163775,DE
+3163163776,3163163807,TR
3163163808,3163163839,CY
-3163163840,3163163871,DE
+3163163840,3163163871,PL
3163163872,3163163903,RU
3163163904,3163163935,GR
-3163163936,3163163967,VG
-3163163968,3163164063,DE
+3163163936,3163163967,BR
+3163163968,3163163999,US
+3163164000,3163164031,DE
+3163164032,3163164063,US
3163164064,3163164095,AM
-3163164096,3163164127,DE
-3163164128,3163164159,US
-3163164160,3163164191,DE
-3163164192,3163164223,RU
+3163164096,3163164127,RU
+3163164128,3163164159,MA
+3163164160,3163164191,US
+3163164192,3163164223,MA
3163164224,3163164287,DE
3163164288,3163164319,CL
-3163164320,3163164447,DE
+3163164320,3163164351,RU
+3163164352,3163164383,DE
+3163164384,3163164415,TR
+3163164416,3163164447,PL
3163164448,3163164479,RU
-3163164480,3163164511,US
+3163164480,3163164511,DE
3163164512,3163164543,HU
3163164544,3163164575,RU
-3163164576,3163165759,DE
+3163164576,3163164607,DE
+3163164608,3163164639,ES
+3163164640,3163164671,US
+3163164672,3163165695,DE
+3163165696,3163165727,US
+3163165728,3163165759,RU
3163165760,3163165791,PL
3163165792,3163165823,RU
-3163165824,3163166175,DE
-3163166176,3163166207,US
-3163166208,3163166367,DE
-3163166368,3163166399,US
-3163166400,3163166495,DE
+3163165824,3163165855,BR
+3163165856,3163165887,DE
+3163165888,3163165919,AR
+3163165920,3163166015,DE
+3163166016,3163166047,US
+3163166048,3163166079,BR
+3163166080,3163166175,DE
+3163166176,3163166207,RU
+3163166208,3163166239,TR
+3163166240,3163166271,IT
+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,3163167775,DE
+3163166592,3163166623,IN
+3163166624,3163166655,US
+3163166656,3163166687,DE
+3163166688,3163166719,RU
+3163166720,3163167743,DE
+3163167744,3163167775,RU
3163167776,3163167807,GR
3163167808,3163167839,US
3163167840,3163167871,BR
-3163167872,3163167967,DE
+3163167872,3163167903,DE
+3163167904,3163167935,UA
+3163167936,3163167967,US
3163167968,3163167999,TR
3163168000,3163168031,DE
3163168032,3163168095,RU
@@ -71080,91 +79634,126 @@
3163168128,3163168159,SA
3163168160,3163168191,BR
3163168192,3163168223,AT
-3163168224,3163168319,DE
+3163168224,3163168255,DE
+3163168256,3163168287,US
+3163168288,3163168319,DE
3163168320,3163168351,DK
-3163168352,3163168383,DE
+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,DE
+3163170112,3163170143,CZ
3163170144,3163170175,ZA
3163170176,3163170207,DE
3163170208,3163170239,RU
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,3163170815,US
3163170816,3163171871,DE
3163171872,3163171903,RO
-3163171904,3163171935,BZ
-3163171936,3163171967,BR
-3163171968,3163172127,DE
+3163171904,3163171967,DE
+3163171968,3163171999,US
+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,3163172447,DE
-3163172448,3163172479,TR
-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,3163174047,DE
+3163172768,3163173951,DE
+3163173952,3163173983,IN
+3163173984,3163174015,GB
+3163174016,3163174047,RU
3163174048,3163174079,DK
3163174080,3163174111,DE
3163174112,3163174143,BE
-3163174144,3163174303,DE
+3163174144,3163174175,BD
+3163174176,3163174207,DE
+3163174208,3163174239,RU
+3163174240,3163174271,TW
+3163174272,3163174303,DE
3163174304,3163174335,IL
3163174336,3163174367,RU
-3163174368,3163174495,DE
+3163174368,3163174399,US
+3163174400,3163174431,DE
+3163174432,3163174463,BR
+3163174464,3163174495,DE
3163174496,3163174527,US
-3163174528,3163174559,DE
+3163174528,3163174559,BD
3163174560,3163174591,PL
3163174592,3163174623,SE
3163174624,3163174655,GB
-3163174656,3163174719,DE
+3163174656,3163174687,RU
+3163174688,3163174719,DE
3163174720,3163174751,NL
-3163174752,3163174783,US
-3163174784,3163174815,DE
+3163174752,3163174783,DE
+3163174784,3163174815,TW
3163174816,3163174847,CA
3163174848,3163174879,TR
-3163174880,3163176127,DE
+3163174880,3163174911,RU
+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,3163176575,DE
+3163176512,3163176543,RU
+3163176544,3163176575,US
3163176576,3163176607,GR
-3163176608,3163176767,DE
+3163176608,3163176703,DE
+3163176704,3163176735,BR
+3163176736,3163176767,DE
3163176768,3163176799,PL
-3163176800,3163176895,DE
+3163176800,3163176831,EG
+3163176832,3163176895,BR
3163176896,3163176927,SE
-3163176928,3163193343,DE
+3163176928,3163176959,TH
+3163176960,3163193343,DE
3163193344,3163226111,MD
3163226112,3163258879,SA
3163258880,3163291647,SY
@@ -71246,9 +79835,13 @@
3164949124,3164949131,DE
3164949132,3164949151,FR
3164949152,3164949155,NL
-3164949156,3164949159,FR
+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
@@ -71261,9 +79854,9 @@
3164949276,3164949279,CH
3164949280,3164949295,ES
3164949296,3164949327,FR
-3164949328,3164949331,PL
-3164949332,3164949335,ES
-3164949336,3164949343,IE
+3164949328,3164949335,PL
+3164949336,3164949339,IT
+3164949340,3164949343,GB
3164949344,3164949359,FR
3164949360,3164949363,BE
3164949364,3164949371,FR
@@ -71294,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
@@ -71355,12 +79949,13 @@
3164951936,3164951999,DE
3164952000,3164952015,ES
3164952016,3164952031,FR
-3164952032,3164952063,PL
+3164952032,3164952063,PT
3164952064,3164952191,FR
3164952192,3164952207,ES
3164952208,3164952215,FR
3164952216,3164952219,NL
-3164952220,3164952239,FR
+3164952220,3164952223,FR
+3164952224,3164952239,GB
3164952240,3164952243,DE
3164952244,3164952247,BE
3164952248,3164952255,FR
@@ -71369,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
@@ -71378,9 +79972,11 @@
3164953216,3164953247,FR
3164953248,3164953255,CH
3164953256,3164953263,CZ
-3164953264,3164953311,FR
-3164953312,3164953375,PL
-3164953376,3164953391,FR
+3164953264,3164953327,FR
+3164953328,3164953375,PL
+3164953376,3164953379,NL
+3164953380,3164953383,GB
+3164953384,3164953391,PL
3164953392,3164953395,IT
3164953396,3164953399,NL
3164953400,3164953403,BE
@@ -71398,7 +79994,8 @@
3164953504,3164953511,FR
3164953512,3164953515,PL
3164953516,3164953519,IE
-3164953520,3164953567,PL
+3164953520,3164953535,FR
+3164953536,3164953567,PL
3164953568,3164953571,FR
3164953572,3164953575,GB
3164953576,3164953583,IT
@@ -71412,8 +80009,8 @@
3164954304,3164954367,DE
3164954368,3164954431,FR
3164954432,3164954439,ES
-3164954440,3164954443,DE
-3164954444,3164954447,NL
+3164954440,3164954443,NL
+3164954444,3164954447,PL
3164954448,3164954479,FR
3164954480,3164954495,GB
3164954496,3164954499,PL
@@ -71426,7 +80023,9 @@
3164954544,3164954559,LT
3164954560,3164954591,FR
3164954592,3164954623,PL
-3164954624,3164956479,FR
+3164954624,3164956383,FR
+3164956384,3164956399,DE
+3164956400,3164956479,FR
3164956480,3164956543,GB
3164956544,3164958847,FR
3164958848,3164958911,IT
@@ -71451,12 +80050,13 @@
3164959384,3164959387,PL
3164959388,3164959487,FR
3164959488,3164959743,ES
-3164959744,3164959871,FR
-3164959872,3164959903,GB
+3164959744,3164959887,FR
+3164959888,3164959891,CH
+3164959892,3164959895,LT
+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
@@ -71473,25 +80073,27 @@
3164960336,3164960339,PL
3164960340,3164960359,FR
3164960360,3164960367,PL
-3164960368,3164960383,FR
+3164960368,3164960383,GB
3164960384,3164960387,DE
3164960388,3164960391,PL
3164960392,3164960395,GB
3164960396,3164960399,DE
3164960400,3164960415,PL
3164960416,3164960435,FR
-3164960436,3164960443,PT
+3164960436,3164960439,ES
+3164960440,3164960443,CH
3164960444,3164960447,IT
3164960448,3164960463,PL
3164960464,3164960467,NL
3164960468,3164960471,GB
3164960472,3164960479,FR
-3164960480,3164960511,GB
+3164960480,3164960511,DE
3164960512,3164960575,PL
3164960576,3164960591,DE
3164960592,3164960599,ES
-3164960600,3164960607,DE
-3164960608,3164960639,BE
+3164960600,3164960623,DE
+3164960624,3164960627,FR
+3164960628,3164960639,PL
3164960640,3164960643,LT
3164960644,3164960647,FR
3164960648,3164960651,CH
@@ -71504,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
@@ -71515,7 +80117,14 @@
3164960936,3164960939,GB
3164960940,3164960943,DE
3164960944,3164960959,PL
-3164960960,3164961023,CH
+3164960960,3164960963,ES
+3164960964,3164960967,PT
+3164960968,3164960975,PL
+3164960976,3164960991,GB
+3164960992,3164960999,FR
+3164961000,3164961003,ES
+3164961004,3164961007,DE
+3164961008,3164961023,PL
3164961024,3164961151,FR
3164961152,3164961167,DE
3164961168,3164961175,PL
@@ -71535,7 +80144,7 @@
3164961472,3164961503,DE
3164961504,3164961519,GB
3164961520,3164961527,IT
-3164961528,3164961535,FR
+3164961528,3164961535,PL
3164961536,3164961551,ES
3164961552,3164961559,FR
3164961560,3164961563,DE
@@ -71547,14 +80156,19 @@
3164961656,3164961663,ES
3164961664,3164961695,DE
3164961696,3164961727,GB
-3164961728,3164961743,ES
+3164961728,3164961731,ES
+3164961732,3164961735,IT
+3164961736,3164961739,FR
+3164961740,3164961743,GB
3164961744,3164961763,PL
3164961764,3164961767,IT
3164961768,3164961775,BE
3164961776,3164961783,PL
3164961784,3164961791,ES
3164961792,3164961855,FR
-3164961856,3164961871,PL
+3164961856,3164961859,PL
+3164961860,3164961863,ES
+3164961864,3164961871,FR
3164961872,3164961887,IE
3164961888,3164961903,ES
3164961904,3164961919,GB
@@ -71565,17 +80179,22 @@
3164961976,3164961979,GB
3164961980,3164961999,DE
3164962000,3164962007,BE
-3164962008,3164962031,FR
+3164962008,3164962011,DE
+3164962012,3164962015,PT
+3164962016,3164962031,FR
3164962032,3164962047,NL
3164962048,3164962079,FR
3164962080,3164962095,ES
-3164962096,3164962111,DE
+3164962096,3164962111,FR
3164962112,3164962143,GB
-3164962144,3164962203,FR
+3164962144,3164962151,ES
+3164962152,3164962159,DE
+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
@@ -71583,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
@@ -71604,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
@@ -71645,7 +80267,7 @@
3164968864,3164968895,FR
3164968896,3164968927,GB
3164968928,3164968959,IT
-3164968960,3164968991,DE
+3164968960,3164968991,GB
3164968992,3164969007,IE
3164969008,3164969015,PT
3164969016,3164969019,NL
@@ -71667,7 +80289,17 @@
3164969208,3164969211,PL
3164969212,3164969471,FR
3164969472,3164969727,PL
-3164969728,3164969983,GB
+3164969728,3164969743,DE
+3164969744,3164969759,FR
+3164969760,3164969775,IE
+3164969776,3164969823,FR
+3164969824,3164969855,DE
+3164969856,3164969875,FR
+3164969876,3164969879,DE
+3164969880,3164969883,ES
+3164969884,3164969887,PL
+3164969888,3164969903,IE
+3164969904,3164969983,FR
3164969984,3164970047,IE
3164970048,3164970079,GB
3164970080,3164970111,DE
@@ -71677,7 +80309,7 @@
3164970220,3164970223,FR
3164970224,3164970239,GB
3164970240,3164970271,IE
-3164970272,3164970287,DE
+3164970272,3164970287,BE
3164970288,3164970291,PL
3164970292,3164970295,DE
3164970296,3164970299,ES
@@ -71692,8 +80324,12 @@
3164970364,3164970367,ES
3164970368,3164970371,PL
3164970372,3164970375,ES
-3164970376,3164970399,IT
-3164970400,3164970415,GB
+3164970376,3164970379,FR
+3164970380,3164970383,PL
+3164970384,3164970399,IT
+3164970400,3164970407,CH
+3164970408,3164970411,IT
+3164970412,3164970415,GB
3164970416,3164970423,FR
3164970424,3164970427,IE
3164970428,3164970431,PT
@@ -71726,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
@@ -71761,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
@@ -71771,26 +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,3164974647,FR
+3164973952,3164974591,FR
+3164974592,3164974623,PL
+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
@@ -71805,14 +80494,46 @@
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
3164975360,3164975615,ES
-3164975616,3164976127,GB
+3164975616,3164975663,FI
+3164975664,3164975679,DE
+3164975680,3164975695,GB
+3164975696,3164975699,PL
+3164975700,3164975703,DE
+3164975704,3164975719,PL
+3164975720,3164975731,ES
+3164975732,3164975735,PT
+3164975736,3164975739,BE
+3164975740,3164975751,PL
+3164975752,3164975755,NL
+3164975756,3164975759,ES
+3164975760,3164975775,PL
+3164975776,3164975807,FR
+3164975808,3164975823,PL
+3164975824,3164975839,ES
+3164975840,3164975843,DE
+3164975844,3164975847,PL
+3164975848,3164975851,ES
+3164975852,3164975871,PL
+3164975872,3164975935,FR
+3164975936,3164975939,ES
+3164975940,3164975943,PT
+3164975944,3164975947,PL
+3164975948,3164975951,NL
+3164975952,3164975967,GB
+3164975968,3164975983,NL
+3164975984,3164975991,DE
+3164975992,3164976011,PL
+3164976012,3164976015,ES
+3164976016,3164976023,PL
+3164976024,3164976031,ES
+3164976032,3164976063,FR
+3164976064,3164976095,PT
+3164976096,3164976127,PL
3164976128,3164976131,NL
3164976132,3164976135,GB
3164976136,3164976139,FR
@@ -71832,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
@@ -71843,17 +80564,20 @@
3164976348,3164976351,ES
3164976352,3164976367,DE
3164976368,3164976383,PL
-3164976384,3164976407,FR
+3164976384,3164976399,FR
+3164976400,3164976403,ES
+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
@@ -71874,14 +80598,19 @@
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
-3164977904,3164977919,NL
+3164977904,3164977907,DE
+3164977908,3164977911,BE
+3164977912,3164977915,CH
+3164977916,3164977919,CZ
3164977920,3164978047,DE
-3164978048,3164978067,FR
+3164978048,3164978055,FR
+3164978056,3164978063,NL
+3164978064,3164978067,FR
3164978068,3164978079,ES
3164978080,3164978111,IT
3164978112,3164978127,GB
@@ -71892,32 +80621,33 @@
3164978156,3164978159,DE
3164978160,3164978175,FR
3164978176,3164978431,IT
-3164978432,3164978495,FR
-3164978496,3164978511,IT
-3164978512,3164978527,ES
-3164978528,3164978543,FR
-3164978544,3164978559,PT
-3164978560,3164978575,FR
+3164978432,3164978559,FR
+3164978560,3164978563,PT
+3164978564,3164978567,PL
+3164978568,3164978571,GB
+3164978572,3164978575,FR
3164978576,3164978591,ES
3164978592,3164978607,FR
-3164978608,3164978623,CZ
+3164978608,3164978623,IE
3164978624,3164978687,FR
3164978688,3164978943,PL
3164978944,3164978951,PT
3164978952,3164978955,PL
3164978956,3164978959,GB
3164978960,3164978975,FR
-3164978976,3164978991,ES
-3164978992,3164979007,FR
-3164979008,3164979023,ES
-3164979024,3164979039,CH
-3164979040,3164979071,PT
-3164979072,3164979103,ES
-3164979104,3164979111,DE
+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,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
@@ -71964,11 +80694,11 @@
3167223808,3167594831,NL
3167594832,3167594839,A2
3167594840,3167748095,NL
-3167748096,3167940095,RO
+3167748096,3167875071,RO
+3167875072,3167879167,MD
+3167879168,3167940095,RO
3167940096,3167940351,CY
-3167940352,3168015871,RO
-3168015872,3168016127,GB
-3168016128,3168092159,RO
+3167940352,3168092159,RO
3168092160,3168096255,GB
3168096256,3168100351,MD
3168100352,3168104447,RO
@@ -71977,15 +80707,9 @@
3168112640,3168116735,GB
3168116736,3168120831,RO
3168120832,3168124927,GB
-3168124928,3168161791,RO
-3168161792,3168165887,GB
-3168165888,3168169983,RO
-3168169984,3168178175,GB
-3168178176,3168182271,RO
-3168182272,3168186367,GB
-3168186368,3168190463,RO
-3168190464,3168194559,GB
-3168194560,3168207103,RO
+3168124928,3168195583,RO
+3168195584,3168196095,DE
+3168196096,3168207103,RO
3168207104,3168207359,CY
3168207360,3168214527,RO
3168214528,3168214783,CY
@@ -71998,7 +80722,16 @@
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,3169157119,RO
@@ -72042,7 +80775,11 @@
3169863680,3169864703,MD
3169864704,3169867775,RO
3169867776,3169868031,DE
-3169868032,3169976319,RO
+3169868032,3169873919,RO
+3169873920,3169878015,MD
+3169878016,3169905151,RO
+3169905152,3169905407,GB
+3169905408,3169976319,RO
3169976320,3170111487,RU
3170111488,3170115583,MD
3170115584,3170119679,RU
@@ -72059,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
@@ -72102,8 +80841,9 @@
3187826688,3187834879,AR
3187834880,3187851263,AN
3187851264,3187855359,PY
+3187855360,3187857407,PA
3187859456,3187863551,PA
-3187867648,3187908607,AR
+3187863552,3187908607,AR
3187908608,3187910655,CO
3187910656,3187914751,CL
3187914752,3187916799,BO
@@ -72115,6 +80855,7 @@
3187953664,3187955711,CL
3187955712,3187957759,CR
3187957760,3187961855,CL
+3187961856,3187965951,AR
3187965952,3187982335,AN
3187982336,3187998719,CL
3187998720,3188006911,AR
@@ -72135,13 +80876,21 @@
3188146176,3188170751,CO
3188170752,3188174847,CR
3188178944,3188187135,CR
-3188187136,3188199423,AR
+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
@@ -72153,20 +80902,32 @@
3188400128,3188408319,AR
3188408320,3188416511,BO
3188416512,3188445183,AR
+3188445184,3188449279,PE
3188449280,3188453375,HN
3188457472,3188473855,EC
3188473856,3188482047,PE
3188482048,3188490239,AR
3188490240,3188498431,CO
-3188506624,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
-3188580352,3188597759,AR
+3188576256,3188597759,AR
3188597760,3188598783,PA
3188598784,3188600831,AR
3188600832,3188604927,CL
@@ -72206,6 +80967,7 @@
3191093248,3191095295,AR
3191095296,3191099391,EC
3191103488,3191107583,CO
+3191107584,3191111679,PE
3191111680,3191128063,PY
3191128064,3191132159,EC
3191136256,3191144447,DO
@@ -72232,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
@@ -72260,20 +81024,32 @@
3193634816,3193700351,CL
3193700352,3193716735,HN
3193733120,3193765887,AR
-3193765888,3193798655,TT
+3193765888,3193774079,TT
+3193774080,3193775103,PA
+3193775104,3193776127,GY
+3193776128,3193777151,AR
+3193777152,3193778175,VE
+3193778176,3193782271,AR
+3193782272,3193798655,TT
3193798656,3193806847,CO
+3193806848,3193810943,CR
+3193810944,3193815039,PY
3193815040,3193823231,AR
3193823232,3193827327,CL
3193831424,3193864191,DO
3193864192,3193872383,EC
-3193880576,3193888767,VE
+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
@@ -72314,6 +81090,7 @@
3194585088,3194589183,HN
3194589184,3194591231,AR
3194591232,3194592255,PA
+3194592256,3194593279,GY
3194593280,3194595327,AR
3194595328,3194596351,PA
3194596352,3194597375,HT
@@ -72327,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
@@ -72336,7 +81115,6 @@
3194707968,3194716159,AR
3194716160,3194724351,HN
3194724352,3194728447,PA
-3194732544,3194736639,AR
3194740736,3194742783,CL
3194742784,3194744831,EC
3194744832,3194746879,AR
@@ -72347,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
@@ -72367,13 +81145,13 @@
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,3195105279,CR
+3195101184,3195109375,CR
3195109376,3195125759,AR
3195125760,3195133951,PE
3195142144,3195150335,VE
@@ -72388,19 +81166,20 @@
3195256832,3195265023,AR
3195273216,3195535359,PE
3195535360,3195543551,SV
-3195543552,3195547647,PE
+3195547648,3195551743,AR
3195551744,3195559935,EC
-3195559936,3195564031,AR
+3195559936,3195568127,AR
3195568128,3195572223,CO
3195572224,3195576319,AR
3195576320,3195580415,CL
3195584512,3195592703,HT
3195592704,3195596799,PA
3195600896,3195633663,CL
-3195633664,3195637759,CO
+3195633664,3195641855,CO
3195641856,3195645951,PY
3195650048,3195654143,GT
3195658240,3195662335,VE
+3195662336,3195666431,AN
3195666432,3195686911,AR
3195691008,3195699199,DO
3195699200,3195703295,AR
@@ -72410,7 +81189,8 @@
3195740160,3195744255,PA
3195744256,3195748351,EC
3195748352,3195752447,CL
-3195756544,3195764735,AR
+3195756544,3195763711,AR
+3195763712,3195764735,BO
3195764736,3195768831,CR
3195772928,3195777023,VE
3195781120,3195797503,PA
@@ -72447,8 +81227,13 @@
3197075456,3197091839,GT
3197108224,3197370367,CO
3197370368,3197501439,GT
-3197501440,3197534207,SV
+3197501440,3197566975,SV
3197566976,3197599743,CL
+3197599744,3197600767,GT
+3197600768,3197601791,CR
+3197601792,3197612031,AR
+3197612032,3197616127,SV
+3197616128,3197632511,CO
3197632512,3197698047,EC
3197698048,3197730815,VE
3197730816,3197763583,CL
@@ -72462,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
@@ -72482,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
@@ -72511,11 +81302,23 @@
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
-3221225472,3221560319,US
+3221233664,3221237759,US
+3221291008,3221422079,US
+3221487616,3221560319,US
3221560320,3221561343,GB
3221561344,3221562367,US
3221562368,3221562623,SE
@@ -72772,14 +81575,44 @@
3223582464,3223582719,NL
3223582720,3223582975,AU
3223583488,3223584767,US
-3223584768,3223650303,SE
+3223584768,3223589119,SE
+3223589120,3223589375,US
+3223589376,3223606527,SE
+3223606528,3223606783,GB
+3223606784,3223607551,SE
+3223607552,3223607807,GB
+3223607808,3223610367,SE
+3223610368,3223610623,IT
+3223610624,3223610879,SE
+3223610880,3223611135,NO
+3223611136,3223611647,SE
+3223611648,3223611903,GB
+3223611904,3223615743,SE
+3223615744,3223615999,GB
+3223616000,3223617535,SE
+3223617536,3223617791,NO
+3223617792,3223620863,SE
+3223620864,3223621119,DK
+3223621120,3223627775,SE
+3223627776,3223628031,DE
+3223628032,3223628287,SE
+3223628288,3223628543,ES
+3223628544,3223630591,SE
+3223630592,3223630847,GB
+3223630848,3223634431,SE
+3223634432,3223634687,US
+3223634688,3223646207,SE
+3223646208,3223646463,IT
+3223646464,3223646975,SE
+3223646976,3223647231,IT
+3223647232,3223650303,SE
3223650304,3223715839,CH
3223715840,3223781375,DK
3223781376,3223823871,US
3223823872,3223824127,AT
3223824128,3223863295,US
3223863552,3223863807,US
-3223864320,3223867647,FI
+3223865344,3223867391,FI
3223871488,3223887871,US
3223898368,3223898623,US
3223902464,3223902719,CA
@@ -72996,7 +81829,6 @@
3224800256,3224816639,FR
3224816640,3224816895,EU
3224816896,3224820735,FR
-3224820736,3224820991,AT
3224820992,3224821247,DE
3224821248,3224822015,US
3224822016,3224822271,SE
@@ -73082,7 +81914,7 @@
3224958208,3225028863,US
3225028864,3225031423,JP
3225031424,3225033727,US
-3225033728,3225035775,LU
+3225033728,3225033983,LU
3225035776,3225037055,US
3225037056,3225051135,FI
3225051136,3225052671,JP
@@ -73311,10 +82143,36 @@
3225876480,3225878527,US
3225878528,3225880319,SE
3225880320,3225880575,US
-3225880576,3225944063,SE
-3225944064,3225977855,TW
-3225977856,3225978111,CH
-3225978112,3226008831,TW
+3225880576,3225881343,SE
+3225881344,3225881599,IT
+3225881600,3225887999,SE
+3225888000,3225888255,GB
+3225888256,3225905407,SE
+3225905408,3225905663,IT
+3225905664,3225913855,SE
+3225913856,3225914111,DE
+3225914112,3225915135,SE
+3225915136,3225915391,DK
+3225915392,3225918463,SE
+3225918464,3225918719,GB
+3225918720,3225920767,SE
+3225920768,3225921023,GB
+3225921024,3225921791,SE
+3225921792,3225922047,GB
+3225922048,3225923839,SE
+3225923840,3225924095,GB
+3225924096,3225930239,SE
+3225930240,3225930495,FR
+3225930496,3225932799,SE
+3225932800,3225933055,IT
+3225933056,3225935359,SE
+3225935360,3225935615,US
+3225935616,3225937407,SE
+3225937408,3225937663,US
+3225937664,3225938431,SE
+3225938432,3225938687,US
+3225938688,3225944063,SE
+3225944064,3226008831,TW
3226008832,3226009343,US
3226009600,3226010879,US
3226010880,3226011135,CA
@@ -73345,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
@@ -73898,7 +82754,6 @@
3227909632,3227909887,AU
3227910400,3227910655,AT
3227910656,3227911679,US
-3227911680,3227912191,HU
3227912192,3227912447,GB
3227912448,3227912703,ZA
3227912704,3227912959,US
@@ -74232,9 +83087,23 @@
3229120768,3229151487,US
3229151488,3229151743,SE
3229151744,3229155327,US
-3229155328,3229171455,SE
+3229155328,3229155839,SE
+3229155840,3229156095,ES
+3229156096,3229168895,SE
+3229168896,3229169151,JP
+3229169152,3229171455,SE
3229171456,3229171711,MT
-3229171712,3229219583,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
+3229201920,3229205503,SE
+3229205504,3229206015,GB
+3229206016,3229219583,SE
3229219584,3229219839,EE
3229219840,3229220863,SE
3229220864,3229245439,GB
@@ -74287,20 +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,3229478911,DE
-3229478912,3229480959,IE
-3229480960,3229481471,DE
-3229481472,3229482239,GB
-3229482240,3229483007,DE
+3229412096,3229483007,DE
3229483008,3229499647,FI
3229499648,3229500671,US
3229548544,3229679615,US
@@ -74320,7 +83176,9 @@
3229749760,3229750015,BE
3229750016,3229764063,FI
3229764064,3229764095,AX
-3229764096,3229810687,FI
+3229764096,3229808639,FI
+3229808640,3229808647,AX
+3229808648,3229810687,FI
3229810688,3229814015,US
3229814016,3229814271,AU
3229814272,3229815807,US
@@ -74636,13 +83494,7 @@
3230368768,3230370303,US
3230370304,3230370559,CA
3230370816,3230400511,CA
-3230400512,3230591231,FR
-3230591232,3230591487,FI
-3230591488,3230625791,FR
-3230625792,3230626047,FI
-3230626048,3230654879,FR
-3230654880,3230654895,HU
-3230654896,3230793727,FR
+3230681088,3230683135,FR
3230793728,3230823679,US
3230823680,3230823935,DK
3230824192,3230824447,FR
@@ -74653,7 +83505,7 @@
3230827520,3230827775,AT
3230827776,3230828031,NZ
3230828032,3230828543,HU
-3230828544,3230830079,GB
+3230828544,3230828799,GB
3230830080,3230832127,US
3230832128,3230832383,NZ
3230832384,3230832639,US
@@ -74782,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
@@ -75064,9 +83917,7 @@
3231502848,3231503103,PT
3231503104,3231503615,US
3231503616,3231503871,IT
-3231503872,3231504383,US
-3231504640,3231504895,GB
-3231504896,3231506687,US
+3231503872,3231506687,US
3231506688,3231506943,NZ
3231506944,3231507199,US
3231507200,3231507455,BE
@@ -75148,9 +83999,7 @@
3231678464,3231682559,US
3231711232,3231713023,US
3231713024,3231713279,CA
-3231713280,3231713791,US
-3231713792,3231714047,IE
-3231714048,3231715071,US
+3231713280,3231715071,US
3231715072,3231715327,SI
3231715328,3231715583,AU
3231715584,3231716095,US
@@ -75281,14 +84130,44 @@
3231896576,3231897599,RU
3231897600,3231898623,IE
3231898624,3231899647,SE
-3231899648,3231903743,UA
-3231903744,3231907839,RU
+3231899648,3231900671,UA
+3231900672,3231901439,DE
+3231901440,3231901695,BG
+3231901696,3231903743,UA
+3231903744,3231905791,RU
+3231905792,3231906047,PL
+3231906048,3231907839,RU
3231907840,3231916031,US
3231916032,3231948799,FI
3231973376,3232038911,AT
-3232038912,3232079871,SE
+3232038912,3232039167,SE
+3232039168,3232039423,DK
+3232039424,3232039679,IT
+3232039680,3232047359,SE
+3232047360,3232048639,GB
+3232048640,3232049151,SE
+3232049152,3232049407,GB
+3232049408,3232051967,SE
+3232051968,3232052991,GB
+3232052992,3232060415,SE
+3232060416,3232060671,IE
+3232060672,3232065791,SE
+3232065792,3232066303,GB
+3232066304,3232066559,SE
+3232066560,3232066815,NO
+3232066816,3232079871,SE
3232079872,3232080895,GB
-3232080896,3232092671,SE
+3232080896,3232082687,SE
+3232082688,3232083199,GB
+3232083200,3232083455,SE
+3232083456,3232083711,DE
+3232083712,3232086271,SE
+3232086272,3232087039,GB
+3232087040,3232089087,SE
+3232089088,3232089343,ES
+3232089344,3232090367,SE
+3232090368,3232090623,IT
+3232090624,3232092671,SE
3232092672,3232093183,GB
3232093184,3232093439,US
3232093440,3232094207,GB
@@ -75297,7 +84176,12 @@
3232095232,3232096255,GB
3232096256,3232097279,SE
3232097280,3232097535,IT
-3232097536,3232104447,SE
+3232097536,3232098047,SE
+3232098048,3232098303,FR
+3232098304,3232100095,SE
+3232100096,3232100351,IE
+3232100352,3232101119,GB
+3232101120,3232104447,SE
3232104448,3232107519,DE
3232107520,3232108543,RU
3232108544,3232129023,DE
@@ -75306,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
@@ -75352,7 +84239,23 @@
3232706560,3232706815,US
3232710656,3232718847,US
3232727040,3232759807,US
-3232759808,3232825343,SE
+3232759808,3232774911,SE
+3232774912,3232775167,IE
+3232775168,3232794879,SE
+3232794880,3232795135,DE
+3232795136,3232802559,SE
+3232802560,3232802815,DK
+3232802816,3232803071,SE
+3232803072,3232803327,IE
+3232803328,3232804607,SE
+3232804608,3232804863,IT
+3232804864,3232812031,SE
+3232812032,3232812543,GB
+3232812544,3232812799,SE
+3232812800,3232813055,ES
+3232813056,3232820223,SE
+3232820224,3232820479,IE
+3232820480,3232825343,SE
3233285120,3233285375,US
3233480704,3233484799,US
3233484800,3233488895,ES
@@ -75763,10 +84666,7 @@
3234781440,3234781951,CA
3234781952,3234782719,US
3234782720,3234783999,IL
-3234784000,3234794495,US
-3234794752,3234795007,US
-3234795008,3234795263,GB
-3234795264,3234799359,US
+3234784000,3234799359,US
3234799360,3234799615,NL
3234799616,3234799871,US
3234799872,3234800127,AU
@@ -76160,7 +85060,7 @@
3238007040,3238010879,NL
3238010880,3238017023,CH
3238017024,3238018303,DK
-3238018304,3238018559,TR
+3238018304,3238018559,UA
3238018560,3238018815,FR
3238018816,3238019071,DE
3238019072,3238035455,PL
@@ -76209,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
@@ -76230,9 +85132,7 @@
3238590208,3238590975,CH
3238590976,3238591231,SA
3238591232,3238592511,CH
-3238592512,3238593023,GB
-3238593024,3238594303,EU
-3238594304,3238594559,GB
+3238592512,3238594559,GB
3238594560,3238595583,BE
3238595584,3238595839,SI
3238595840,3238596607,GB
@@ -76270,8 +85170,8 @@
3238624000,3238624255,PL
3238624256,3238625279,HU
3238625280,3238630399,EU
-3238630400,3238630655,GR
-3238630656,3238632959,GB
+3238630400,3238631423,GR
+3238631424,3238632959,GB
3238632960,3238633215,UA
3238633216,3238653951,DK
3238653952,3238655999,RU
@@ -76297,7 +85197,6 @@
3239062784,3239063551,UA
3239063552,3239075839,DE
3239075840,3239076095,MT
-3239076096,3239076351,SE
3239076352,3239076607,DE
3239076608,3239076863,PL
3239076864,3239077119,NL
@@ -76342,7 +85241,6 @@
3239108096,3239109887,DE
3239109888,3239110143,PL
3239110144,3239110655,DE
-3239110656,3239110911,RU
3239110912,3239111167,UA
3239111168,3239111423,NL
3239111424,3239111935,DE
@@ -76359,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
@@ -76405,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
@@ -76449,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
@@ -76490,7 +85390,7 @@
3239287808,3239288831,GB
3239288832,3239289855,DE
3239289856,3239290879,PL
-3239290880,3239291903,GB
+3239290880,3239291903,RU
3239291904,3239292927,BG
3239292928,3239293951,CZ
3239293952,3239294975,DE
@@ -76521,6 +85421,7 @@
3239452416,3239452671,HR
3239452672,3239464959,DE
3239464960,3239465215,IL
+3239465216,3239465471,PL
3239465472,3239465727,AT
3239465728,3239465983,PL
3239465984,3239466239,UA
@@ -76691,7 +85592,6 @@
3239682560,3239683071,BG
3239683072,3239683583,PT
3239683584,3239684607,PL
-3239684608,3239685119,GB
3239685120,3239686143,DE
3239686144,3239686655,UA
3239686656,3239687167,IT
@@ -76717,7 +85617,7 @@
3239706880,3239707135,NL
3239707136,3239707391,RU
3239707392,3239707647,UA
-3239707648,3239707903,GB
+3239707648,3239707903,CH
3239707904,3239708159,DE
3239708160,3239708415,SE
3239708416,3239708671,RO
@@ -76790,9 +85690,10 @@
3239783424,3239783679,DK
3239783680,3239783935,CH
3239783936,3239784191,DE
-3239784192,3239784447,UA
+3239784192,3239784447,FR
3239784448,3239788543,DE
3239788544,3239789055,EU
+3239789056,3239789567,DE
3239789568,3239790079,FR
3239790080,3239790591,RO
3239790592,3239791103,LV
@@ -76809,7 +85710,6 @@
3239796736,3239821311,DE
3239821312,3239821823,SE
3239821824,3239822335,FR
-3239822336,3239822847,RU
3239822848,3239823359,PL
3239823360,3239823871,SE
3239823872,3239824383,IT
@@ -76857,7 +85757,8 @@
3239859968,3239860223,CA
3239860224,3239860479,DE
3239860480,3239860735,GB
-3239860736,3239861247,DE
+3239860736,3239860991,DE
+3239860992,3239861247,AT
3239861248,3239861503,UA
3239861504,3239861759,PL
3239861760,3239862015,SA
@@ -76878,12 +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,CH
+3239884032,3239884287,IR
3239884288,3239884543,GB
3239884544,3239884799,FR
3239884800,3239885055,UA
@@ -76907,7 +85808,8 @@
3239895296,3239895551,TR
3239895552,3239895807,PL
3239895808,3239896063,DK
-3239896064,3239896575,DE
+3239896064,3239896319,DE
+3239896320,3239896575,AT
3239896576,3239896831,PL
3239896832,3239897087,HU
3239897088,3239897343,GB
@@ -77063,6 +85965,7 @@
3240189952,3240190463,DE
3240190464,3240190975,IT
3240190976,3240191487,RU
+3240191488,3240191999,AE
3240192000,3240192511,UA
3240192512,3240193023,RO
3240193024,3240193535,GB
@@ -77095,6 +85998,7 @@
3240207872,3240208383,RU
3240208384,3240208895,FR
3240208896,3240209407,GB
+3240209408,3240209919,AE
3240209920,3240210943,PL
3240210944,3240211455,GB
3240211456,3240211967,NL
@@ -77189,7 +86093,7 @@
3240279040,3240279551,CH
3240279552,3240280063,RO
3240280064,3240280191,DE
-3240280192,3240280447,PL
+3240280320,3240280447,PL
3240280448,3240280575,UA
3240280576,3240280703,GB
3240280704,3240280831,RU
@@ -77204,7 +86108,8 @@
3240282112,3240282239,DE
3240282240,3240282367,UA
3240282368,3240282495,RO
-3240282496,3240282879,SE
+3240282496,3240282623,RU
+3240282624,3240282879,SE
3240282880,3240283007,UA
3240283008,3240283391,PL
3240283392,3240283647,TR
@@ -77218,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
@@ -77247,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
@@ -77299,7 +86213,7 @@
3240577280,3240577535,RO
3240577536,3240577791,DE
3240577792,3240578559,UA
-3240578560,3240578815,CH
+3240578560,3240578815,RU
3240578816,3240579071,IL
3240579072,3240587263,GB
3240587264,3240587519,NL
@@ -77391,7 +86305,6 @@
3240730624,3240731647,ES
3240731648,3240732671,GB
3240732672,3240733695,SE
-3240733696,3240734719,UA
3240734720,3240735743,IT
3240735744,3240736255,FR
3240736256,3240736767,BG
@@ -77407,13 +86320,12 @@
3240740608,3240741119,DE
3240741120,3240741375,AT
3240741376,3240741631,IL
-3240741632,3240741887,SK
+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
@@ -77442,7 +86354,6 @@
3240791552,3240791807,RU
3240791808,3240792063,ES
3240792064,3240792319,GB
-3240792320,3240792575,RO
3240792576,3240792831,CH
3240792832,3240793087,PL
3240793088,3240793343,UA
@@ -77474,7 +86385,6 @@
3240813568,3240814591,PL
3240814592,3240818687,IT
3240818688,3240820735,NL
-3240820736,3240820799,EU
3240820800,3240820831,RU
3240820832,3240827135,IT
3240827136,3240827391,FR
@@ -77520,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
@@ -77535,8 +86445,7 @@
3240884224,3240886271,UA
3240886272,3240952071,SE
3240952072,3240952079,IE
-3240952080,3240952087,GB
-3240952088,3240952095,SE
+3240952080,3240952095,SE
3240952096,3240952127,US
3240952128,3240954495,SE
3240954496,3240954623,DE
@@ -77649,7 +86558,6 @@
3241119232,3241119487,DK
3241119488,3241119743,BE
3241119744,3241119999,RO
-3241120000,3241120255,UA
3241120256,3241120511,RU
3241120512,3241120767,GB
3241120768,3241121023,RU
@@ -77685,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
@@ -77709,7 +86616,6 @@
3241501440,3241501951,EU
3241501952,3241502975,BE
3241502976,3241503231,GR
-3241503232,3241503487,FR
3241503488,3241508095,BE
3241508096,3241508351,NL
3241508352,3241541375,BE
@@ -77720,7 +86626,6 @@
3241803824,3241803831,EU
3241803832,3241803839,GB
3241803840,3241803903,PT
-3241803904,3241804031,UA
3241804032,3241820159,BE
3241820160,3241821695,GB
3241821696,3241822207,GR
@@ -77765,7 +86670,9 @@
3241869312,3241934847,PL
3241934848,3242196991,GB
3242196992,3242393599,FI
-3242393600,3242459135,NL
+3242393600,3242394471,NL
+3242394472,3242394479,DE
+3242394480,3242459135,NL
3242459136,3242467327,BG
3242467328,3242475519,HU
3242475520,3242483711,LV
@@ -77815,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
@@ -77951,7 +86858,9 @@
3244228608,3244261375,TN
3244261376,3244265823,IE
3244265824,3244265831,ES
-3244265832,3244272575,IE
+3244265832,3244268031,IE
+3244268032,3244268159,LU
+3244268160,3244272575,IE
3244272576,3244272639,US
3244272640,3244273687,IE
3244273688,3244273695,US
@@ -78076,6 +86985,7 @@
3244844800,3244845055,GB
3244845056,3244845311,NL
3244845312,3244845567,NO
+3244845568,3244845823,RO
3244845824,3244846335,GB
3244846336,3244846591,TR
3244846592,3244846847,CZ
@@ -78111,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
@@ -78182,7 +87090,6 @@
3244875008,3244875263,PL
3244875264,3244875519,LI
3244875520,3244875775,IT
-3244875776,3244876799,BZ
3244876800,3244877055,GB
3244877056,3244877311,JO
3244877312,3244877567,RU
@@ -78208,7 +87115,6 @@
3244882432,3244882687,IT
3244882688,3244882943,PL
3244882944,3244883199,NL
-3244883200,3244883455,UA
3244883456,3244883711,CZ
3244883712,3244883967,NL
3244883968,3244884223,DE
@@ -78222,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
@@ -78286,6 +87190,7 @@
3244903168,3244903423,PL
3244903424,3244903679,FI
3244903680,3244903935,NO
+3244903936,3244904191,RO
3244904192,3244904447,IT
3244904448,3244904703,GR
3244904704,3244904959,FR
@@ -78298,7 +87203,7 @@
3244906752,3244907007,SA
3244907008,3244907263,FR
3244907264,3244907519,RO
-3244907520,3244907775,GB
+3244907520,3244907775,UA
3244907776,3244908287,RU
3244908288,3244908543,NL
3244908544,3244908799,RU
@@ -78322,6 +87227,7 @@
3244913408,3244913663,SI
3244913664,3244913919,DK
3244913920,3244914431,RU
+3244914432,3244914687,SA
3244914688,3244914943,GB
3244914944,3244915199,UA
3244915200,3244915455,PL
@@ -78400,6 +87306,7 @@
3244935168,3244935423,NL
3244935424,3244935679,UA
3244935680,3244935935,PL
+3244935936,3244936191,IL
3244936192,3244936959,AT
3244936960,3244937215,KZ
3244937216,3244937471,TR
@@ -78491,13 +87398,17 @@
3245001728,3245002751,IL
3245002752,3245003263,PL
3245003264,3245003519,SE
-3245003520,3245003775,CH
+3245003520,3245003775,UA
3245003776,3245004799,RU
3245004800,3245005823,PL
3245005824,3245006847,UA
3245006848,3245007871,DE
3245007872,3245008895,PL
-3245008896,3245011967,RU
+3245008896,3245009919,RU
+3245009920,3245010431,UA
+3245010432,3245010687,PL
+3245010688,3245010943,FR
+3245010944,3245011967,RU
3245011968,3245012991,PL
3245012992,3245014015,UA
3245014016,3245015039,GR
@@ -78506,7 +87417,7 @@
3245017088,3245018111,PL
3245018112,3245019135,RU
3245019136,3245020159,SC
-3245020160,3245021183,CZ
+3245020160,3245021183,RU
3245021184,3245022207,UA
3245022208,3245023231,NO
3245023232,3245024255,PL
@@ -78579,7 +87490,7 @@
3245093888,3245094911,RO
3245094912,3245095935,UA
3245095936,3245096959,IT
-3245096960,3245099007,CZ
+3245096960,3245099007,EU
3245099008,3245103103,GB
3245103104,3245105151,EU
3245105152,3245105663,GB
@@ -78649,7 +87560,7 @@
3245136384,3245136639,GB
3245136640,3245136895,EU
3245136896,3245137151,PL
-3245137152,3245137407,IT
+3245137152,3245137407,GB
3245137408,3245137663,DE
3245137664,3245137919,SE
3245137920,3245138431,DK
@@ -78659,7 +87570,7 @@
3245139968,3245140479,CH
3245140480,3245140991,RO
3245140992,3245141503,UA
-3245141504,3245142015,IT
+3245141504,3245142015,RO
3245142016,3245143039,UA
3245143040,3245144063,GB
3245144064,3245145087,UA
@@ -78741,7 +87652,7 @@
3245200384,3245200639,PL
3245200640,3245200895,GR
3245200896,3245201151,DE
-3245201152,3245201407,GB
+3245201152,3245201407,KW
3245201408,3245201663,UA
3245201664,3245201919,NO
3245201920,3245202175,SA
@@ -78911,7 +87822,6 @@
3245298688,3245298943,GB
3245298944,3245299199,UA
3245299200,3245299455,GB
-3245299456,3245299711,CY
3245299712,3245299967,DE
3245299968,3245300223,BG
3245300224,3245300479,FR
@@ -79010,7 +87920,9 @@
3245903032,3245903039,GB
3245903040,3245903959,IE
3245903960,3245903967,FR
-3245903968,3245904199,IE
+3245903968,3245904087,IE
+3245904088,3245904095,GB
+3245904096,3245904199,IE
3245904200,3245904207,GB
3245904208,3245906367,IE
3245906368,3245906431,GB
@@ -79018,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
@@ -79040,9 +87954,7 @@
3245932544,3245998079,BE
3245998080,3246100351,GB
3246100352,3246100367,DE
-3246100368,3246128479,GB
-3246128480,3246128495,DE
-3246128496,3246129151,GB
+3246100368,3246129151,GB
3246129152,3246141439,RU
3246141440,3246141695,UA
3246141696,3246142975,RU
@@ -79080,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
@@ -79415,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
@@ -79434,7 +88350,7 @@
3247336448,3247337215,NO
3247337216,3247337471,CH
3247337472,3247337983,PL
-3247337984,3247338239,FI
+3247337984,3247338239,UA
3247338240,3247338495,PL
3247338496,3247338751,SI
3247338752,3247339519,GB
@@ -79475,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
@@ -79494,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
@@ -79508,7 +88424,9 @@
3247714304,3247716351,CH
3247716352,3247717887,ES
3247717888,3247718399,CH
-3247718400,3247769599,ES
+3247718400,3247742975,ES
+3247742976,3247751167,DE
+3247751168,3247769599,ES
3247769600,3247771647,DE
3247771648,3247775743,ES
3247775744,3247779647,DE
@@ -79528,10 +88446,62 @@
3247825920,3247826943,BE
3247826944,3247828991,CH
3247828992,3247833087,BE
-3247833088,3247865855,RU
+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,TR
+3247875328,3247875583,PL
3247875584,3247876095,DE
3247876096,3247876351,PL
3247876352,3247876607,FR
@@ -79555,7 +88525,7 @@
3247909888,3247910911,DE
3247910912,3247912959,PL
3247912960,3247913983,UA
-3247913984,3247915007,DE
+3247913984,3247915007,AT
3247915008,3247917055,PL
3247917056,3247918079,NL
3247918080,3247919103,PL
@@ -79583,9 +88553,7 @@
3248226304,3248235007,NO
3248235008,3248235263,PK
3248235264,3248357375,NO
-3248357376,3248370511,DE
-3248370512,3248370519,AT
-3248370520,3248371743,DE
+3248357376,3248371743,DE
3248371744,3248371751,PL
3248371752,3248372239,DE
3248372240,3248372247,AT
@@ -79610,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
@@ -79620,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
@@ -79660,8 +88636,8 @@
3248790784,3248791039,PL
3248791040,3248791295,BE
3248791296,3248791551,DE
-3248791552,3248792511,GB
-3248792512,3248796607,EU
+3248791552,3248792543,GB
+3248792544,3248796607,EU
3248796608,3248796863,GB
3248796864,3248798975,EU
3248798976,3248799231,GB
@@ -79702,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
@@ -79840,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
@@ -79928,17 +88907,66 @@
3249731584,3249732607,UA
3249732608,3249733631,IT
3249733632,3249799167,CZ
-3249799168,3249865727,SE
-3249865728,3249866751,GB
-3249866752,3249910783,SE
+3249799168,3249829887,SE
+3249829888,3249830143,GB
+3249830144,3249830399,SE
+3249830400,3249830655,IT
+3249830656,3249850623,SE
+3249850624,3249850879,GB
+3249850880,3249863679,SE
+3249863680,3249863935,ES
+3249863936,3249865471,SE
+3249865472,3249866751,GB
+3249866752,3249868543,SE
+3249868544,3249868799,DE
+3249868800,3249871103,SE
+3249871104,3249871359,NO
+3249871360,3249871615,SE
+3249871616,3249871871,NO
+3249871872,3249872383,SE
+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,3249934335,GB
-3249934336,3249968127,SE
+3249932032,3249932287,GB
+3249932288,3249934335,US
+3249934336,3249961471,SE
+3249961472,3249961727,NL
+3249961728,3249967615,SE
+3249967616,3249967871,GB
+3249967872,3249968127,SE
3249968128,3249969151,FR
-3249969152,3250061311,SE
+3249969152,3249971199,SE
+3249971200,3249971455,IT
+3249971456,3249974527,SE
+3249974528,3249974783,ES
+3249974784,3249976063,SE
+3249976064,3249976319,FR
+3249976320,3249976831,SE
+3249976832,3249977087,GB
+3249977088,3249991679,SE
+3249991680,3249991935,US
+3249991936,3249993215,SE
+3249993216,3249993471,NL
+3249993472,3249995263,SE
+3249995264,3249995519,GB
+3249995520,3249997055,SE
+3249997056,3249997311,US
+3249997312,3250000127,SE
+3250000128,3250000383,GB
+3250000384,3250007295,SE
+3250007296,3250007551,GB
+3250007552,3250031359,SE
+3250031360,3250031615,US
+3250031616,3250035455,SE
+3250035456,3250035711,US
+3250035712,3250061311,SE
3250061312,3250061635,FI
3250061636,3250061639,AX
3250061640,3250083643,FI
@@ -79976,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
@@ -80008,27 +89036,25 @@
3250357880,3250357887,SE
3250357888,3250357895,DK
3250357920,3250357927,PL
-3250357928,3250357959,CY
-3250357960,3250358015,GB
+3250357952,3250358015,GB
3250358016,3250358527,LB
3250358528,3250358783,HU
3250358784,3250359295,LB
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,TR
+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
@@ -80084,15 +89110,12 @@
3250426880,3250427135,JO
3250427136,3250427391,NL
3250427392,3250429951,DE
-3250429952,3250438143,SI
-3250438144,3250438207,FR
-3250438208,3250438399,CH
-3250438400,3250438431,FR
-3250438432,3250443519,CH
+3250429952,3250434335,SI
+3250434336,3250434351,AT
+3250434352,3250438143,SI
+3250438144,3250443519,CH
3250443520,3250443527,DE
-3250443528,3250443543,CH
-3250443544,3250443551,DE
-3250443552,3250446335,CH
+3250443528,3250446335,CH
3250446336,3250451583,DE
3250451584,3250451599,AT
3250451600,3250454527,DE
@@ -80106,7 +89129,7 @@
3250589440,3250589471,IE
3250589472,3250589503,NL
3250589504,3250589567,HR
-3250589568,3250589631,UA
+3250589568,3250589631,RU
3250589632,3250589695,NO
3250589696,3250593791,CH
3250593792,3250594815,GB
@@ -80137,7 +89160,9 @@
3250692096,3250692351,NO
3250692352,3250692607,NL
3250692608,3250693375,BG
-3250693376,3250693631,IE
+3250693376,3250693631,NL
+3250693632,3250694143,DE
+3250694144,3250694399,PL
3250694400,3250694655,GB
3250694656,3250694911,SK
3250694912,3250695167,NL
@@ -80147,7 +89172,8 @@
3250697728,3250697983,BG
3250697984,3250698239,IT
3250698240,3250698751,GR
-3250698752,3250699775,GB
+3250698752,3250699263,RU
+3250699264,3250699775,GB
3250699776,3250700287,DE
3250700288,3250708479,UA
3250708480,3250716671,KZ
@@ -80159,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
@@ -80377,10 +89412,7 @@
3251174656,3251174911,DE
3251174912,3251175167,AT
3251175168,3251175423,UA
-3251175424,3251176703,FR
-3251176704,3251176959,IT
-3251176960,3251177215,US
-3251177216,3251177471,FR
+3251175424,3251177471,IT
3251177472,3251179519,DE
3251179520,3251180031,SE
3251180032,3251180543,PL
@@ -80390,6 +89422,7 @@
3251182080,3251182591,FR
3251182592,3251183103,IT
3251183104,3251183615,RU
+3251183616,3251183871,LT
3251183872,3251184127,CH
3251184128,3251184383,PL
3251184384,3251184639,DK
@@ -80426,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
@@ -80463,7 +89494,7 @@
3251213696,3251213759,LV
3251213760,3251213823,TR
3251213824,3251213887,GB
-3251213888,3251214015,FI
+3251213952,3251214015,FI
3251214016,3251214079,UA
3251214080,3251214143,FR
3251214144,3251214207,AF
@@ -80479,7 +89510,6 @@
3251215488,3251215615,SE
3251215616,3251215743,TR
3251215744,3251215871,GB
-3251215872,3251215999,CH
3251216000,3251216127,LI
3251216128,3251216255,FI
3251216256,3251216383,RU
@@ -80528,26 +89558,14 @@
3251246336,3251246591,UA
3251246592,3251246847,RO
3251246848,3251247103,NL
-3251247104,3251247359,FR
-3251247360,3251247871,DE
-3251247872,3251248127,GB
-3251248128,3251248383,DE
-3251248384,3251248639,SE
-3251248640,3251248895,DE
+3251247104,3251248895,DE
3251248896,3251249151,GB
3251249152,3251251199,NL
-3251251200,3251251455,PT
-3251251456,3251251711,GB
-3251251712,3251251967,CH
-3251251968,3251252223,BG
-3251252224,3251252479,AT
-3251252480,3251252735,NL
+3251251200,3251252735,EU
3251252736,3251256831,CH
3251256832,3251257343,GB
3251257344,3251259903,BE
-3251259904,3251260671,FR
-3251260672,3251260927,BE
-3251260928,3251261439,FR
+3251259904,3251261439,FR
3251261440,3251264255,CH
3251264256,3251265535,FR
3251265536,3251267839,NL
@@ -80584,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
@@ -80661,7 +89679,9 @@
3251734528,3251734783,NL
3251734784,3251765247,FI
3251765248,3251765503,NL
-3251765504,3251774207,FI
+3251765504,3251766663,FI
+3251766664,3251766671,AX
+3251766672,3251774207,FI
3251774208,3251774463,DE
3251774464,3251783423,FI
3251783424,3251783679,GB
@@ -80683,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
@@ -80698,10 +89755,11 @@
3252316416,3252316671,FR
3252316672,3252318463,GR
3252318464,3252318719,TR
-3252318720,3252318975,GP
+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
@@ -80721,10 +89779,9 @@
3252342144,3252342207,LU
3252342208,3252342239,GB
3252342240,3252342271,CH
-3252342272,3252342527,IL
+3252342272,3252342527,SE
3252342528,3252342543,NO
-3252342544,3252342559,GB
-3252342560,3252342591,FR
+3252342544,3252342591,DE
3252342592,3252342607,IE
3252342656,3252342783,IL
3252342784,3252346367,DE
@@ -80732,8 +89789,7 @@
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
@@ -80782,8 +89838,9 @@
3252407760,3252407775,CD
3252407776,3252407791,GH
3252407792,3252407807,NO
-3252407808,3252407999,GN
-3252408000,3252408159,NO
+3252407808,3252408063,GN
+3252408064,3252408079,ML
+3252408080,3252408159,NO
3252408160,3252408191,GQ
3252408192,3252408319,NO
3252408320,3252408327,MW
@@ -80791,8 +89848,8 @@
3252408336,3252408343,GN
3252408344,3252408351,LT
3252408352,3252408367,GN
-3252408368,3252408375,NG
-3252408376,3252408383,LT
+3252408368,3252408375,LT
+3252408376,3252408383,GN
3252408384,3252408391,BI
3252408392,3252408415,LT
3252408416,3252408479,NO
@@ -80815,11 +89872,12 @@
3252408856,3252408863,CM
3252408864,3252408871,LR
3252408872,3252408879,CI
-3252408880,3252409103,LT
+3252408880,3252409023,LT
+3252409024,3252409039,TZ
+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
@@ -80840,11 +89898,9 @@
3252409408,3252409471,BI
3252409472,3252409503,LT
3252409504,3252409511,GH
-3252409512,3252409519,LT
+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
@@ -80865,8 +89921,7 @@
3252411376,3252411391,CD
3252411392,3252411647,LT
3252411648,3252411679,BI
-3252411680,3252411695,LT
-3252411696,3252411711,UG
+3252411680,3252411711,LT
3252411712,3252411743,NG
3252411744,3252411775,LT
3252411776,3252411783,GH
@@ -80875,11 +89930,12 @@
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,3252414495,ML
-3252414496,3252414511,LT
+3252414480,3252414511,LT
3252414512,3252414527,MR
3252414528,3252414591,LT
3252414592,3252414599,GH
@@ -80888,29 +89944,28 @@
3252414624,3252414639,TZ
3252414640,3252414647,GH
3252414648,3252414655,NE
-3252414656,3252414991,LT
-3252414992,3252414999,IQ
-3252415000,3252415015,LT
-3252415016,3252415095,IQ
+3252414656,3252414975,LT
+3252414976,3252415031,IQ
+3252415032,3252415039,LT
+3252415040,3252415095,IQ
3252415096,3252415103,LT
-3252415104,3252415127,IQ
-3252415128,3252415135,LT
-3252415136,3252415159,IQ
+3252415104,3252415159,IQ
3252415160,3252415167,BE
3252415168,3252415231,IQ
-3252415232,3252415487,LT
-3252415488,3252415743,IQ
+3252415232,3252415743,LT
3252415744,3252415775,GB
3252415776,3252415967,LT
3252415968,3252415999,CM
-3252416000,3252416831,LT
-3252416832,3252416927,GN
+3252416000,3252416895,LT
+3252416896,3252416927,GN
3252416928,3252416959,LT
3252416960,3252417023,GN
3252417024,3252417279,LT
3252417280,3252417287,IQ
3252417288,3252417463,AF
-3252417464,3252417791,LT
+3252417464,3252417471,LT
+3252417472,3252417511,AF
+3252417512,3252417791,LT
3252417792,3252417855,NG
3252417856,3252417919,LT
3252417920,3252417935,MW
@@ -80932,18 +89987,13 @@
3252419168,3252419199,CD
3252419200,3252419215,LT
3252419216,3252419247,GN
-3252419248,3252419263,LT
-3252419264,3252419279,TZ
-3252419280,3252419311,LT
+3252419248,3252419311,LT
3252419312,3252419327,ZM
-3252419328,3252419343,GH
-3252419344,3252419359,LT
+3252419328,3252419359,LT
3252419360,3252419423,GH
3252419424,3252419839,LT
3252419840,3252419879,IQ
-3252419880,3252419903,LT
-3252419904,3252419911,IQ
-3252419912,3252419919,LT
+3252419880,3252419919,LT
3252419920,3252419927,IQ
3252419928,3252419935,LT
3252419936,3252419943,IQ
@@ -80956,9 +90006,7 @@
3252420120,3252420143,IQ
3252420144,3252420191,LT
3252420192,3252420223,IQ
-3252420224,3252420263,LT
-3252420264,3252420271,IQ
-3252420272,3252420351,LT
+3252420224,3252420351,LT
3252420352,3252420415,IQ
3252420416,3252420431,GB
3252420432,3252420447,LT
@@ -80967,12 +90015,12 @@
3252420472,3252420583,LT
3252420584,3252420591,IQ
3252420592,3252421119,LT
-3252421120,3252421631,NO
-3252421632,3252424703,LT
+3252421120,3252423679,NO
+3252423680,3252424703,LT
3252424704,3252424719,GN
3252424720,3252424735,LT
-3252424736,3252424767,MA
-3252424768,3252424799,LT
+3252424736,3252424751,GA
+3252424752,3252424799,LT
3252424800,3252424815,NE
3252424816,3252425023,LT
3252425024,3252425215,SO
@@ -80983,13 +90031,13 @@
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
3252427776,3252428287,MW
-3252428288,3252428351,LT
+3252428288,3252428303,AO
+3252428304,3252428351,LT
3252428352,3252428383,AO
3252428384,3252428415,LT
3252428416,3252428447,KE
@@ -80998,10 +90046,10 @@
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,BF
+3252430560,3252430591,LT
3252430592,3252430847,GN
3252430848,3252431359,MW
3252431360,3252431871,LT
@@ -81020,28 +90068,30 @@
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
3252435296,3252435311,TZ
-3252435312,3252435319,LT
+3252435312,3252435319,CF
3252435320,3252435327,MZ
3252435328,3252435343,CD
-3252435344,3252435359,BF
-3252435360,3252435375,LT
+3252435344,3252435375,BF
3252435376,3252435415,GN
-3252435416,3252435423,CD
-3252435424,3252435455,LT
+3252435416,3252435423,LT
+3252435424,3252435455,CD
3252435456,3252435711,TZ
3252435712,3252435855,GH
3252435856,3252435871,MR
3252435872,3252435887,GH
-3252435888,3252435919,BW
+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
@@ -81053,9 +90103,8 @@
3252436336,3252436351,ZM
3252436352,3252436383,GN
3252436384,3252436399,LR
-3252436400,3252436407,SL
-3252436408,3252436431,ML
-3252436432,3252436447,LT
+3252436400,3252436415,SL
+3252436416,3252436447,LT
3252436448,3252436479,ER
3252436480,3252436991,LT
3252436992,3252437503,NG
@@ -81065,18 +90114,16 @@
3252438528,3252438783,CM
3252438784,3252439039,LT
3252439040,3252439055,BJ
-3252439056,3252439071,LT
-3252439072,3252439079,BJ
-3252439080,3252439263,LT
+3252439056,3252439263,LT
3252439264,3252439271,SN
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,3252440063,LT
-3252440064,3252440319,MW
-3252440320,3252444287,LT
+3252439872,3252444287,LT
3252444288,3252444351,TZ
3252444352,3252445183,LT
3252445184,3252445263,GN
@@ -81148,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
@@ -81185,7 +90234,7 @@
3252510720,3252514815,FR
3252514816,3252515071,SI
3252515072,3252515327,GB
-3252515328,3252515583,DE
+3252515328,3252515583,NL
3252515584,3252515839,SI
3252515840,3252516095,CH
3252516096,3252516351,FR
@@ -81202,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
@@ -81237,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
@@ -81293,7 +90345,7 @@
3252912896,3252913151,PL
3252913152,3252913407,ES
3252913408,3252913663,FR
-3252913664,3252913919,CZ
+3252913664,3252913919,RU
3252913920,3252914175,NO
3252914176,3252916223,FR
3252916224,3252920319,DE
@@ -81362,7 +90414,48 @@
3253265920,3253270527,RU
3253270528,3253271551,BY
3253271552,3253338111,RU
-3253338112,3253469183,SE
+3253338112,3253338367,PL
+3253338368,3253380863,SE
+3253380864,3253381119,IT
+3253381120,3253383935,SE
+3253383936,3253384191,NO
+3253384192,3253403647,SE
+3253403648,3253403903,PL
+3253403904,3253409791,SE
+3253409792,3253410047,GB
+3253410048,3253411327,SE
+3253411328,3253411583,NO
+3253411584,3253412351,SE
+3253412352,3253412607,US
+3253412608,3253416447,SE
+3253416448,3253416959,GB
+3253416960,3253428223,SE
+3253428224,3253428479,DE
+3253428480,3253429759,SE
+3253429760,3253430015,ES
+3253430016,3253433087,SE
+3253433088,3253433343,DE
+3253433344,3253434111,SE
+3253434112,3253434367,GB
+3253434368,3253434623,IT
+3253434624,3253434879,SE
+3253434880,3253435135,IT
+3253435136,3253440511,SE
+3253440512,3253440767,FR
+3253440768,3253453311,SE
+3253453312,3253453567,NO
+3253453568,3253454079,SE
+3253454080,3253454335,GB
+3253454336,3253455615,SE
+3253455616,3253455871,US
+3253455872,3253456383,SE
+3253456384,3253456639,US
+3253456640,3253460735,SE
+3253460736,3253460991,IT
+3253460992,3253461247,US
+3253461248,3253463039,SE
+3253463040,3253464063,GB
+3253464064,3253469183,SE
3253469184,3253471231,AO
3253471232,3253534719,PT
3253534720,3253600255,GB
@@ -81454,7 +90547,6 @@
3253697536,3253698559,PL
3253698560,3253699071,UA
3253699072,3253699583,RO
-3253699584,3253700095,UA
3253700096,3253700607,RO
3253700608,3253701119,PL
3253701120,3253702143,RO
@@ -81523,7 +90615,7 @@
3253888256,3253888511,BE
3253888512,3253888767,GB
3253888768,3253889023,SE
-3253889024,3253889279,PL
+3253889024,3253889279,RO
3253889280,3253889535,CH
3253889536,3253889791,DE
3253889792,3253890047,DK
@@ -81566,7 +90658,7 @@
3253968896,3253969407,DE
3253969408,3253969919,AT
3253969920,3253970431,NL
-3253970432,3253970687,DE
+3253970432,3253970687,RU
3253970688,3253970943,UA
3253970944,3253971967,RS
3253971968,3253972991,RU
@@ -81765,7 +90857,8 @@
3254707712,3254708223,RO
3254708224,3254708735,UA
3254708736,3254709247,RO
-3254709248,3254710271,DE
+3254709248,3254709759,DE
+3254709760,3254710271,PL
3254710272,3254710783,IT
3254710784,3254711295,RO
3254711296,3254711807,FR
@@ -81793,6 +90886,13 @@
3254785280,3254785535,KZ
3254785536,3254785791,DK
3254785792,3254786047,LU
+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
@@ -81804,7 +90904,7 @@
3254804480,3254806527,PL
3254806528,3254807551,UA
3254807552,3254808575,KZ
-3254808576,3254809599,PL
+3254808576,3254809599,RU
3254809600,3254810623,UA
3254810624,3254811647,RU
3254811648,3254812671,RO
@@ -81863,7 +90963,7 @@
3254827776,3254828031,UA
3254828032,3254828287,DE
3254828288,3254828799,RO
-3254828800,3254829055,BE
+3254828800,3254829055,SI
3254829056,3254829311,NO
3254829312,3254829567,GB
3254829568,3254829823,NL
@@ -81911,7 +91011,7 @@
3254840320,3254840575,DK
3254840576,3254840831,UA
3254840832,3254841343,GB
-3254841344,3254841599,IT
+3254841344,3254841599,PL
3254841600,3254841855,IE
3254841856,3254842111,LV
3254842112,3254842367,GB
@@ -81998,7 +91098,9 @@
3255006720,3255006975,A2
3255006976,3255017648,FR
3255017649,3255017649,LB
-3255017650,3255120639,FR
+3255017650,3255087103,FR
+3255087104,3255087359,SG
+3255087360,3255120639,FR
3255120640,3255120895,DE
3255120896,3255123711,FR
3255123712,3255123967,DE
@@ -82268,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
@@ -82278,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
@@ -82307,7 +91406,7 @@
3255326208,3255326719,DE
3255326720,3255327231,IL
3255327232,3255327743,DE
-3255327744,3255328255,SE
+3255327744,3255328255,GB
3255328256,3255328767,SI
3255328768,3255336959,DE
3255336960,3255341055,RU
@@ -82326,7 +91425,7 @@
3255366144,3255367167,DK
3255367168,3255367679,RU
3255367680,3255368191,UA
-3255368192,3255368703,MD
+3255368192,3255368703,FR
3255368704,3255369215,CZ
3255369216,3255369727,GB
3255369728,3255370239,LU
@@ -82363,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
@@ -82379,7 +91478,8 @@
3255401472,3255412479,DE
3255412480,3255412735,RO
3255412736,3255413247,DE
-3255413248,3255413759,LV
+3255413248,3255413503,LV
+3255413504,3255413759,UZ
3255413760,3255414271,GB
3255414272,3255414527,TR
3255414528,3255414783,LV
@@ -82389,7 +91489,6 @@
3255416832,3255417855,FR
3255417856,3255418879,GB
3255418880,3255422975,DE
-3255422976,3255426047,GB
3255426048,3255426559,IT
3255426560,3255426815,FR
3255426816,3255427071,PL
@@ -82488,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
@@ -82503,11 +91600,21 @@
3255660544,3255666431,NL
3255666432,3255666687,DE
3255666688,3255697407,NL
-3255697408,3255739647,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,3255745535,SE
+3255743488,3255743743,DE
+3255743744,3255745535,SE
3255745536,3255746047,DK
3255746048,3255762943,SE
3255762944,3255791615,DE
@@ -82539,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
@@ -82684,7 +91795,8 @@
3256699136,3256699391,NL
3256699392,3256700415,GB
3256700416,3256700671,NL
-3256700672,3256701183,EU
+3256700672,3256700927,FR
+3256700928,3256701183,DE
3256701184,3256701439,BE
3256701440,3256701695,GB
3256701696,3256705279,EU
@@ -82720,7 +91832,7 @@
3256788224,3256788479,RU
3256788480,3256788735,GB
3256788736,3256788991,DE
-3256788992,3256789247,UA
+3256788992,3256789247,RO
3256789248,3256789503,SE
3256789504,3256789759,UA
3256789760,3256790015,GB
@@ -82746,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
@@ -82760,7 +91874,6 @@
3256988672,3256989183,UA
3256989184,3256989439,FR
3256989440,3256989695,GB
-3256989696,3256989951,HU
3256989952,3256990207,PL
3256990208,3256990463,CH
3256990464,3256990719,PL
@@ -82816,7 +91929,7 @@
3257401344,3257466879,CH
3257466880,3257467135,DE
3257467136,3257467391,GB
-3257467392,3257467903,NL
+3257467392,3257467903,SE
3257467904,3257468927,IT
3257468928,3257469183,EU
3257469184,3257469439,IT
@@ -82864,68 +91977,7 @@
3257546688,3257546719,DE
3257546720,3257546751,DK
3257546752,3257548799,IE
-3257548800,3257549343,GB
-3257549344,3257549359,DE
-3257549360,3257549407,GB
-3257549408,3257549423,DE
-3257549424,3257549631,GB
-3257549632,3257549695,DE
-3257549696,3257549823,GB
-3257549824,3257549871,DE
-3257549872,3257550079,GB
-3257550080,3257550095,DE
-3257550096,3257551631,GB
-3257551632,3257551647,DE
-3257551648,3257551711,GB
-3257551712,3257551807,DE
-3257551808,3257551871,GB
-3257551872,3257552383,DE
-3257552384,3257552607,GB
-3257552608,3257552655,DE
-3257552656,3257552703,GB
-3257552704,3257552719,DE
-3257552720,3257552895,GB
-3257552896,3257552927,DE
-3257552928,3257553023,GB
-3257553024,3257553039,DE
-3257553040,3257553407,GB
-3257553408,3257553727,DE
-3257553728,3257553791,GB
-3257553792,3257553807,DE
-3257553808,3257553823,GB
-3257553824,3257553839,DE
-3257553840,3257553855,GB
-3257553856,3257553919,DE
-3257553920,3257554175,GB
-3257554176,3257554207,DE
-3257554208,3257554239,GB
-3257554240,3257554271,DE
-3257554272,3257554335,GB
-3257554336,3257554351,DE
-3257554352,3257554415,GB
-3257554416,3257554943,DE
-3257554944,3257555007,GB
-3257555008,3257555039,DE
-3257555040,3257555167,GB
-3257555168,3257555199,DE
-3257555200,3257555247,GB
-3257555248,3257555263,DE
-3257555264,3257555327,GB
-3257555328,3257555359,DE
-3257555360,3257555391,GB
-3257555392,3257555471,DE
-3257555472,3257555583,GB
-3257555584,3257555695,DE
-3257555696,3257555711,GB
-3257555712,3257555775,DE
-3257555776,3257555839,GB
-3257555840,3257555887,DE
-3257555888,3257555903,GB
-3257555904,3257555935,DE
-3257555936,3257556223,GB
-3257556224,3257556287,DE
-3257556288,3257556479,GB
-3257556480,3257556991,DE
+3257548800,3257556991,GB
3257556992,3257557503,MW
3257557504,3257558015,LU
3257558016,3257559551,RO
@@ -83753,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
@@ -84027,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
@@ -84061,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
@@ -84074,9 +93127,7 @@
3259035456,3259036031,DE
3259036032,3259036035,ES
3259036036,3259039743,DE
-3259039744,3259062015,PT
-3259062016,3259062271,GW
-3259062272,3259105279,PT
+3259039744,3259105279,PT
3259105280,3259170815,GB
3259170816,3259219967,RU
3259219968,3259220479,BY
@@ -84093,11 +93144,37 @@
3259228160,3259236351,RU
3259236352,3259236863,SE
3259236864,3259237119,CH
-3259237120,3259269375,SE
+3259237120,3259237887,SE
+3259237888,3259238143,FR
+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,3259266047,SE
+3259266048,3259266303,SG
+3259266304,3259269375,SE
3259269376,3259269631,FR
-3259269632,3259292415,SE
+3259269632,3259276287,SE
+3259276288,3259276543,ES
+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
+3259291136,3259292415,SE
3259292416,3259292671,IT
-3259292672,3259301887,SE
+3259292672,3259297535,SE
+3259297536,3259297791,GB
+3259297792,3259301887,SE
3259301888,3259302143,DE
3259302144,3259302399,AE
3259302400,3259303423,CH
@@ -84201,13 +93278,23 @@
3259367424,3259432959,GB
3259432960,3259435263,SE
3259435264,3259435519,IT
-3259435520,3259457279,SE
+3259435520,3259438079,SE
+3259438080,3259438335,ES
+3259438336,3259457279,SE
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,3259492351,SE
+3259465472,3259470847,SE
+3259470848,3259471871,US
+3259471872,3259479807,SE
+3259479808,3259480063,DK
+3259480064,3259480831,SE
+3259480832,3259481087,ES
+3259481088,3259492351,SE
3259492352,3259493375,GB
3259493376,3259498495,SE
3259498496,3259506943,GB
@@ -84299,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
@@ -84392,7 +93481,7 @@
3260587520,3260588031,PL
3260588032,3260596223,DE
3260596224,3260596735,CH
-3260596736,3260597247,RO
+3260596736,3260597247,SK
3260597248,3260597759,CH
3260597760,3260598271,DE
3260598272,3260598783,RU
@@ -84439,26 +93528,17 @@
3260809216,3260874751,PL
3260874752,3260875775,DK
3260875776,3260876031,GB
-3260876032,3260891391,DK
-3260891392,3260891647,IT
-3260891648,3260891903,NL
-3260891904,3260892159,ES
-3260892160,3260892415,GB
-3260892416,3260892671,FI
-3260892672,3260892927,PT
-3260892928,3260893183,SE
-3260893184,3260893439,AT
+3260876032,3260893439,DK
3260893440,3260894207,SE
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,FR
+3260906496,3260907519,PL
3260907520,3260915711,GB
3260915712,3260923903,UA
3260923904,3261071359,DE
@@ -84486,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
@@ -84513,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
@@ -84531,7 +93616,6 @@
3261775872,3261776383,PL
3261776384,3261777407,RU
3261777408,3261777663,IR
-3261777664,3261777919,KZ
3261777920,3261778431,PL
3261778432,3261778943,RU
3261778944,3261779455,RO
@@ -84622,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
@@ -84653,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
@@ -84718,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
@@ -84796,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
@@ -84818,8 +93926,10 @@
3262423040,3262423551,GB
3262423552,3262424063,UA
3262424064,3262424575,IT
-3262424576,3262425087,FR
-3262425088,3262425599,RO
+3262424576,3262424831,PL
+3262424832,3262425087,GB
+3262425088,3262425343,GR
+3262425344,3262425599,RU
3262425600,3262426111,UA
3262426112,3262426623,DE
3262426624,3262427135,GB
@@ -84864,7 +93974,6 @@
3262460416,3262460543,UA
3262460544,3262460671,RU
3262460672,3262460927,AE
-3262460928,3262461055,HU
3262461056,3262461183,DK
3262461184,3262461311,SN
3262461312,3262461439,NO
@@ -85620,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
@@ -86703,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
@@ -86802,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
@@ -87073,8 +96181,7 @@
3262479809,3262479809,FR
3262479810,3262479810,NL
3262479811,3262479811,ES
-3262479812,3262479812,GB
-3262479813,3262479816,DE
+3262479812,3262479816,DE
3262479817,3262479817,HU
3262479818,3262479818,DE
3262479819,3262479819,NL
@@ -87457,7 +96564,6 @@
3262510080,3262511103,FR
3262511104,3262511615,GB
3262511616,3262512127,DE
-3262512128,3262512639,GB
3262512640,3262513151,DE
3262513152,3262578687,AT
3262578688,3262611455,FR
@@ -87604,7 +96710,7 @@
3263072256,3263074303,LB
3263074304,3263074815,CH
3263074816,3263075327,RO
-3263075328,3263075839,GB
+3263075328,3263075839,IT
3263075840,3263076351,SE
3263076352,3263076863,RO
3263076864,3263077375,IT
@@ -87652,7 +96758,7 @@
3263096064,3263096319,PL
3263096320,3263096575,TR
3263096576,3263096831,SA
-3263096832,3263097087,NL
+3263096832,3263097087,PL
3263097088,3263097343,FR
3263097344,3263097599,DK
3263097600,3263097855,NL
@@ -87681,14 +96787,29 @@
3263138560,3263138815,AT
3263138816,3263168511,DE
3263168512,3263430655,GB
-3263430656,3263436799,SE
+3263430656,3263436543,SE
+3263436544,3263436799,ES
3263436800,3263437311,GB
-3263437312,3263461631,SE
+3263437312,3263458047,SE
+3263458048,3263458303,DE
+3263458304,3263459583,SE
+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,3263496191,SE
+3263478272,3263478527,SE
+3263478528,3263478783,ES
+3263478784,3263480831,SE
+3263480832,3263481855,JP
+3263481856,3263496191,SE
3263496192,3263497983,EU
3263497984,3263498239,GB
3263498240,3263498751,EU
@@ -87919,7 +97040,7 @@
3264320000,3264320255,DE
3264320256,3264321023,GB
3264321024,3264321535,DE
-3264321536,3264321791,SE
+3264321536,3264321791,GB
3264321792,3264322047,RS
3264322048,3264322303,FR
3264322304,3264322559,RO
@@ -87957,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
@@ -87965,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
@@ -87980,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
@@ -88017,7 +97142,9 @@
3264431104,3264431615,LI
3264431616,3264446207,CH
3264446208,3264446463,FR
-3264446464,3264463871,CH
+3264446464,3264447743,CH
+3264447744,3264447999,DE
+3264448000,3264463871,CH
3264463872,3264466943,LI
3264466944,3264483071,CH
3264483072,3264483327,LI
@@ -88054,54 +97181,37 @@
3264606976,3264607231,BE
3264607232,3264607487,IT
3264607488,3264610303,DE
-3264610304,3264611583,GB
-3264611584,3264612095,FR
-3264612096,3264612351,GB
-3264612352,3264612479,FR
-3264612480,3264612511,GB
-3264612512,3264612591,FR
-3264612592,3264613119,GB
-3264613120,3264614143,FR
-3264614144,3264614399,GB
-3264614400,3264614431,NL
-3264614432,3264614447,FR
-3264614448,3264614463,NL
-3264614464,3264614527,FR
-3264614528,3264614559,NL
-3264614560,3264614591,FR
-3264614592,3264614623,NL
-3264614624,3264614655,FR
-3264614656,3264615935,GB
-3264615936,3264615999,FR
-3264616000,3264616095,GB
-3264616096,3264616159,FR
-3264616160,3264616191,GB
-3264616192,3264616511,FR
-3264616512,3264616575,GB
-3264616576,3264616591,FR
-3264616592,3264616639,GB
-3264616640,3264616655,FR
-3264616656,3264616671,GB
-3264616672,3264616687,FR
-3264616688,3264616959,GB
-3264616960,3264617215,FR
-3264617216,3264617311,GB
-3264617312,3264617983,FR
-3264617984,3264618751,GB
-3264618752,3264619007,FR
-3264619008,3264619519,GB
-3264619520,3264619551,FR
-3264619552,3264619583,GB
-3264619584,3264619615,FR
-3264619616,3264619775,GB
-3264619776,3264620031,FR
-3264620032,3264620159,GB
-3264620160,3264620191,FR
-3264620192,3264620543,GB
-3264620544,3264620927,FR
-3264620928,3264621567,GB
-3264621568,3264621823,FR
-3264621824,3264622847,GB
+3264610304,3264612351,GB
+3264612352,3264612599,FR
+3264612600,3264612607,GB
+3264612608,3264613199,FR
+3264613200,3264613247,GB
+3264613248,3264613311,FR
+3264613312,3264613375,GB
+3264613376,3264613887,NL
+3264613888,3264613895,GB
+3264613896,3264613919,NL
+3264613920,3264614399,GB
+3264614400,3264614655,NL
+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,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
@@ -88122,7 +97232,7 @@
3264652288,3264652799,RU
3264652800,3264653311,PL
3264653312,3264653823,EU
-3264653824,3264654335,RO
+3264653824,3264654335,PL
3264654336,3264654847,DE
3264654848,3264655359,UA
3264655360,3264655871,GB
@@ -88243,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
@@ -88262,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
@@ -88400,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
@@ -88408,10 +97518,9 @@
3265605376,3265605631,CZ
3265605632,3265605887,PL
3265605888,3265606143,FR
-3265606144,3265606399,RU
-3265606400,3265606655,DE
+3265606400,3265606655,NL
3265606656,3265606911,AT
-3265606912,3265607167,FR
+3265606912,3265607167,RU
3265607168,3265607423,PL
3265607424,3265607935,DK
3265607936,3265608191,CZ
@@ -88587,38 +97696,17 @@
3266789376,3266796543,SM
3266796544,3266796799,IT
3266796800,3266797567,SM
-3266797568,3266797823,GB
-3266797824,3266798079,NL
-3266798080,3266799103,GB
+3266797568,3266799103,GB
3266799104,3266799615,NL
-3266799616,3266800127,GB
-3266800128,3266800319,NL
-3266800320,3266800639,GB
-3266800640,3266800695,NL
-3266800696,3266800727,GB
-3266800728,3266800735,NL
-3266800736,3266800895,GB
-3266800896,3266801215,NL
-3266801216,3266801407,GB
-3266801408,3266801471,NL
-3266801472,3266801487,GB
-3266801488,3266801519,NL
-3266801520,3266801535,GB
-3266801536,3266801599,NL
-3266801600,3266801615,GB
-3266801616,3266801647,NL
-3266801648,3266801663,GB
-3266801664,3266801919,NL
-3266801920,3266803727,GB
-3266803728,3266803751,NL
-3266803752,3266803759,GB
-3266803760,3266803831,NL
-3266803832,3266804223,GB
+3266799616,3266800895,GB
+3266800896,3266801151,NL
+3266801152,3266801487,GB
+3266801488,3266801503,NL
+3266801504,3266803815,GB
+3266803816,3266803823,NL
+3266803824,3266804223,GB
3266804224,3266804479,NL
-3266804480,3266804735,GB
-3266804736,3266804991,NL
-3266804992,3266805503,GB
-3266805504,3266805759,NL
+3266804480,3266805759,GB
3266805760,3266813951,AT
3266813952,3266822143,UA
3266822144,3266830335,FR
@@ -88813,8 +97901,8 @@
3267629568,3267629711,BE
3267629712,3267629719,EU
3267629720,3267629759,BE
-3267629760,3267629807,EU
-3267629808,3267629823,BE
+3267629760,3267629791,EU
+3267629792,3267629823,BE
3267629824,3267630079,GR
3267630080,3267630591,GB
3267630592,3267630847,SK
@@ -88913,9 +98001,7 @@
3267648512,3267648767,DE
3267648768,3267649023,NL
3267649024,3267649279,RU
-3267649280,3267649295,DE
-3267649296,3267649311,EU
-3267649312,3267649471,DE
+3267649280,3267649471,DE
3267649472,3267649791,EU
3267649792,3267650303,NL
3267650304,3267650319,EU
@@ -88957,18 +98043,22 @@
3267659520,3267659775,IT
3267659776,3267660287,EU
3267660288,3267660543,CH
-3267660544,3267660671,ES
+3267660544,3267660575,ES
+3267660576,3267660591,EU
+3267660592,3267660671,ES
3267660672,3267661311,EU
3267661312,3267661567,SK
-3267661568,3267661679,GB
+3267661568,3267661583,GB
+3267661584,3267661599,EU
+3267661600,3267661679,GB
3267661680,3267661695,EU
3267661696,3267661823,GB
3267661824,3267661847,ES
3267661848,3267661855,EU
3267661856,3267661887,ES
3267661888,3267662023,EU
-3267662024,3267662031,ES
-3267662032,3267662047,EU
+3267662024,3267662039,ES
+3267662040,3267662047,EU
3267662048,3267662079,ES
3267662080,3267662847,EU
3267662848,3267662879,IE
@@ -88979,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
@@ -89009,12 +98097,12 @@
3267666544,3267666575,EU
3267666576,3267667199,GB
3267667200,3267667455,NL
-3267667456,3267667967,GB
+3267667456,3267667759,GB
+3267667760,3267667775,EU
+3267667776,3267667967,GB
3267667968,3267670015,EU
3267670016,3267671551,ZA
-3267671552,3267671679,DE
-3267671680,3267671711,EU
-3267671712,3267671807,DE
+3267671552,3267671807,DE
3267671808,3267672063,NO
3267672064,3267672223,DE
3267672224,3267672255,EU
@@ -89030,9 +98118,7 @@
3267673024,3267673087,FR
3267673088,3267673439,DE
3267673440,3267673471,EU
-3267673472,3267673479,DE
-3267673480,3267673487,EU
-3267673488,3267673503,DE
+3267673472,3267673503,DE
3267673504,3267673599,EU
3267673600,3267673759,DE
3267673760,3267673807,EU
@@ -89099,8 +98185,8 @@
3267682560,3267683335,EU
3267683336,3267683359,PL
3267683360,3267683391,EU
-3267683392,3267683471,PL
-3267683472,3267683519,EU
+3267683392,3267683463,PL
+3267683464,3267683519,EU
3267683520,3267683527,PL
3267683528,3267683535,EU
3267683536,3267683551,PL
@@ -89109,9 +98195,7 @@
3267683576,3267683919,EU
3267683920,3267683935,PL
3267683936,3267684383,EU
-3267684384,3267684399,GB
-3267684400,3267684407,EU
-3267684408,3267685119,GB
+3267684384,3267685119,GB
3267685120,3267685375,DE
3267685376,3267685887,NL
3267685888,3267686399,CH
@@ -89215,9 +98299,7 @@
3268223232,3268224767,EU
3268224768,3268225023,US
3268225024,3268226367,EU
-3268226368,3268226663,GB
-3268226664,3268226671,EU
-3268226672,3268226815,GB
+3268226368,3268226815,GB
3268226816,3268227327,EU
3268227328,3268227391,GB
3268227392,3268227519,EU
@@ -89485,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
@@ -89554,7 +98638,11 @@
3268935680,3269057535,GB
3269057536,3269058047,NL
3269058048,3269066751,GB
-3269066752,3269131555,SE
+3269066752,3269118087,SE
+3269118088,3269118091,GB
+3269118092,3269122343,SE
+3269122344,3269122351,GB
+3269122352,3269131555,SE
3269131556,3269131559,NO
3269131560,3269132287,SE
3269132288,3269197823,GR
@@ -89616,13 +98704,12 @@
3269284864,3269285055,FR
3269285056,3269285087,EU
3269285088,3269285135,DE
-3269285136,3269285151,EU
+3269285136,3269285151,GB
3269285152,3269285215,DE
3269285216,3269285311,EU
3269285312,3269285327,DE
3269285328,3269285343,FR
-3269285344,3269285375,GB
-3269285376,3269285631,EU
+3269285344,3269285631,GB
3269285632,3269285887,DE
3269285888,3269286399,EU
3269286400,3269286463,DE
@@ -89733,7 +98820,9 @@
3269656576,3269722111,GB
3269722112,3269750799,CZ
3269750800,3269750815,CR
-3269750816,3269787647,CZ
+3269750816,3269771007,CZ
+3269771008,3269771263,GB
+3269771264,3269787647,CZ
3269787648,3269853183,NL
3269853184,3269918719,CH
3269918720,3269936063,DE
@@ -89936,7 +99025,7 @@
3270653440,3270653695,NL
3270653696,3270653951,GB
3270653952,3270654207,ES
-3270654208,3270654463,EU
+3270654208,3270654463,RO
3270654464,3270654719,BE
3270654720,3270655231,UA
3270655232,3270655487,IT
@@ -90017,6 +99106,7 @@
3270980608,3270980863,MD
3270980864,3270981631,RU
3270981632,3270981887,IT
+3270981888,3270982143,AT
3270982144,3270982399,RU
3270982400,3270982655,TR
3270982656,3270982911,UA
@@ -90207,7 +99297,14 @@
3271426304,3271491583,FR
3271491584,3271495679,DK
3271495680,3271495807,SE
-3271495808,3271557119,DK
+3271495808,3271501567,DK
+3271501568,3271501575,SE
+3271501576,3271501663,DK
+3271501664,3271501679,DE
+3271501680,3271501695,SE
+3271501696,3271501783,DK
+3271501784,3271501791,SE
+3271501792,3271557119,DK
3271557120,3271589887,BE
3271589888,3271688191,NO
3271688192,3271691775,EU
@@ -90288,9 +99385,7 @@
3271821247,3271821247,AT
3271821248,3271847487,DE
3271847488,3271847495,US
-3271847496,3271851879,DE
-3271851880,3271851887,NL
-3271851888,3271884799,DE
+3271847496,3271884799,DE
3271884800,3271901183,UA
3271901184,3271909375,ES
3271909376,3271909887,RO
@@ -90306,9 +99401,8 @@
3271915008,3271915519,SE
3271915520,3271916031,NL
3271916032,3271916543,GB
-3271916544,3271917055,UA
-3271917056,3271917567,RO
-3271917568,3271925759,RU
+3271916544,3271917311,UA
+3271917312,3271925759,RU
3271925760,3271926015,DE
3271926016,3271926271,MD
3271926272,3271926527,RU
@@ -90350,71 +99444,15 @@
3272040448,3272048639,FR
3272048640,3272056831,NL
3272056832,3272065023,RU
-3272065024,3272065215,GB
-3272065216,3272065279,NL
-3272065280,3272065343,GB
-3272065344,3272065439,NL
-3272065440,3272065535,GB
-3272065536,3272065551,NL
-3272065552,3272065559,GB
-3272065560,3272065575,NL
-3272065576,3272065583,GB
-3272065584,3272065599,NL
-3272065600,3272065615,GB
-3272065616,3272065663,NL
-3272065664,3272065791,GB
-3272065792,3272065823,NL
-3272065824,3272066335,GB
-3272066336,3272066431,NL
-3272066432,3272066815,GB
-3272066816,3272066847,NL
-3272066848,3272066911,GB
-3272066912,3272066943,NL
-3272066944,3272067063,GB
-3272067064,3272067071,NL
-3272067072,3272067615,GB
-3272067616,3272067647,NL
-3272067648,3272067711,GB
-3272067712,3272067775,NL
-3272067776,3272067807,GB
-3272067808,3272067839,NL
-3272067840,3272067871,GB
-3272067872,3272067887,NL
-3272067888,3272067927,GB
-3272067928,3272067967,NL
-3272067968,3272069343,GB
-3272069344,3272069375,IT
-3272069376,3272069503,GB
+3272065024,3272065631,GB
+3272065632,3272065663,NL
+3272065664,3272069503,GB
3272069504,3272069567,NL
-3272069568,3272069599,GB
-3272069600,3272069603,NL
-3272069604,3272069607,GB
-3272069608,3272069611,NL
-3272069612,3272069615,GB
-3272069616,3272069631,NL
-3272069632,3272070143,GB
-3272070144,3272070255,NL
-3272070256,3272070263,GB
-3272070264,3272070271,NL
-3272070272,3272070399,GB
-3272070400,3272070463,NL
-3272070464,3272070559,GB
-3272070560,3272070591,NL
-3272070592,3272070623,GB
-3272070624,3272070639,NL
-3272070640,3272070647,GB
-3272070648,3272070655,NL
-3272070656,3272071247,GB
-3272071248,3272071283,NL
-3272071284,3272071287,GB
-3272071288,3272071295,NL
-3272071296,3272071359,GB
-3272071360,3272071423,NL
-3272071424,3272071615,GB
-3272071616,3272071647,NL
-3272071648,3272072319,GB
-3272072320,3272072959,NL
-3272072960,3272081407,GB
+3272069568,3272070143,GB
+3272070144,3272070175,NL
+3272070176,3272070239,GB
+3272070240,3272070255,NL
+3272070256,3272081407,GB
3272081408,3272081919,PT
3272081920,3272082687,CV
3272082688,3272083455,PT
@@ -90426,7 +99464,8 @@
3272086016,3272086527,ST
3272086528,3272086655,AO
3272086656,3272086783,PT
-3272086784,3272086807,GH
+3272086784,3272086799,GH
+3272086800,3272086807,PT
3272086808,3272086815,RO
3272086816,3272086831,NI
3272086832,3272086879,AO
@@ -90434,9 +99473,7 @@
3272086976,3272087039,AN
3272087040,3272087295,PT
3272087296,3272087551,AO
-3272087552,3272088063,PT
-3272088064,3272088319,GH
-3272088320,3272089343,PT
+3272087552,3272089343,PT
3272089344,3272089479,ST
3272089480,3272089535,PT
3272089536,3272089551,ST
@@ -90478,8 +99515,7 @@
3272111872,3272112383,RO
3272112384,3272113151,DE
3272113152,3272113407,FR
-3272113408,3272113663,PL
-3272113664,3272113919,GB
+3272113408,3272113919,GB
3272113920,3272114175,AT
3272114176,3272122367,PL
3272122368,3272131071,GB
@@ -90542,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
@@ -90633,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
@@ -90660,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
@@ -90683,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
@@ -90731,28 +99804,41 @@
3272358912,3272359935,NL
3272359936,3272368127,RU
3272368128,3272376319,KZ
-3272376320,3272384511,SK
+3272376320,3272376447,SK
+3272376448,3272376479,SR
+3272376480,3272376495,SK
+3272376496,3272376527,SR
+3272376528,3272376535,SK
+3272376536,3272376543,SR
+3272376544,3272376607,SK
+3272376608,3272376639,SR
+3272376640,3272376735,SK
+3272376736,3272376751,SR
+3272376752,3272376767,SK
+3272376768,3272376831,SR
+3272376832,3272378183,SK
+3272378184,3272378201,SR
+3272378202,3272384511,SK
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
3272401280,3272401407,NL
3272401408,3272401919,ES
3272401920,3272401951,GB
-3272401952,3272401983,EU
-3272401984,3272402015,DE
-3272402016,3272402031,EU
+3272401952,3272401967,EU
+3272401968,3272401983,GB
+3272401984,3272402031,DE
3272402032,3272402039,GB
3272402040,3272402047,US
3272402048,3272402079,EU
3272402080,3272402111,SE
3272402112,3272402175,EU
3272402176,3272402191,GB
-3272402192,3272402239,EU
-3272402240,3272402303,GB
+3272402192,3272402303,EU
3272402304,3272402431,FR
3272402432,3272402447,EU
3272402448,3272402455,FR
@@ -90760,14 +99846,13 @@
3272402560,3272402623,GB
3272402624,3272402687,EU
3272402688,3272402815,SE
-3272402816,3272402879,GB
-3272402880,3272403007,EU
+3272402816,3272403007,EU
3272403008,3272403023,FR
3272403024,3272403039,EU
3272403040,3272403055,DE
3272403056,3272403071,NL
3272403072,3272403199,FR
-3272403200,3272403455,EU
+3272403200,3272403455,SE
3272403456,3272404991,FR
3272404992,3272406015,DE
3272406016,3272407039,NL
@@ -90877,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
@@ -90971,7 +100057,6 @@
3272897536,3272898047,FI
3272898048,3272898559,UA
3272898560,3272899071,DE
-3272899072,3272899583,GB
3272899584,3272900095,UA
3272900096,3272900607,LV
3272900608,3272900863,RU
@@ -91025,206 +100110,12 @@
3272923648,3272924159,PL
3272924160,3272924671,DE
3272924672,3272925183,GB
-3272925184,3272933375,DE
-3272933376,3272933759,GB
-3272933760,3272933775,DK
-3272933776,3272934687,GB
-3272934688,3272934703,DE
-3272934704,3272934847,GB
-3272934848,3272934911,DE
-3272934912,3272935167,GB
-3272935168,3272935679,DE
-3272935680,3272936447,GB
-3272936448,3272936479,DE
-3272936480,3272936703,GB
-3272936704,3272936719,DE
-3272936720,3272936735,GB
-3272936736,3272936895,DE
-3272936896,3272936959,GB
-3272936960,3272937087,DE
-3272937088,3272937471,GB
-3272937472,3272937535,DE
-3272937536,3272937791,GB
-3272937792,3272937903,DE
-3272937904,3272937919,GB
-3272937920,3272937983,DE
-3272937984,3272938015,GB
-3272938016,3272938063,DE
-3272938064,3272938239,GB
-3272938240,3272938271,DE
-3272938272,3272938479,GB
-3272938480,3272938495,DE
-3272938496,3272939775,GB
-3272939776,3272940223,DE
-3272940224,3272940287,GB
+3272925184,3272931135,DE
+3272931136,3272931151,GB
+3272931152,3272933375,DE
+3272933376,3272940287,GB
3272940288,3272940543,DE
-3272940544,3272940799,GB
-3272940800,3272940831,DE
-3272940832,3272941055,GB
-3272941056,3272941311,DE
-3272941312,3272943103,GB
-3272943104,3272943167,DE
-3272943168,3272943359,GB
-3272943360,3272943391,DE
-3272943392,3272943439,GB
-3272943440,3272943455,DE
-3272943456,3272943471,GB
-3272943472,3272943487,DE
-3272943488,3272943503,GB
-3272943504,3272943535,DE
-3272943536,3272943551,GB
-3272943552,3272943583,DE
-3272943584,3272944127,GB
-3272944128,3272944191,DE
-3272944192,3272944383,GB
-3272944384,3272944415,DE
-3272944416,3272944447,GB
-3272944448,3272944463,DE
-3272944464,3272944575,GB
-3272944576,3272944607,DE
-3272944608,3272944639,GB
-3272944640,3272944959,DE
-3272944960,3272945151,GB
-3272945152,3272945423,DE
-3272945424,3272945471,GB
-3272945472,3272945487,DE
-3272945488,3272945503,GB
-3272945504,3272945519,DE
-3272945520,3272945535,GB
-3272945536,3272945551,DE
-3272945552,3272945567,GB
-3272945568,3272945599,DE
-3272945600,3272945919,GB
-3272945920,3272946229,DE
-3272946230,3272946271,GB
-3272946272,3272946287,DE
-3272946288,3272946335,GB
-3272946336,3272946351,DE
-3272946352,3272946367,GB
-3272946368,3272946383,DE
-3272946384,3272946399,GB
-3272946400,3272946415,DE
-3272946416,3272946687,GB
-3272946688,3272946751,DE
-3272946752,3272946783,GB
-3272946784,3272946831,DE
-3272946832,3272946847,GB
-3272946848,3272946863,DE
-3272946864,3272947199,GB
-3272947200,3272947215,DE
-3272947216,3272947231,GB
-3272947232,3272947247,DE
-3272947248,3272947263,GB
-3272947264,3272947279,DE
-3272947280,3272947327,GB
-3272947328,3272947343,DE
-3272947344,3272962303,GB
-3272962304,3272962319,DE
-3272962320,3272962559,GB
-3272962560,3272962688,DE
-3272962689,3272964351,GB
-3272964352,3272964607,DE
-3272964608,3272966399,GB
-3272966400,3272966975,DE
-3272966976,3272967103,GB
-3272967104,3272967167,DE
-3272967168,3272967423,GB
-3272967424,3272968191,DE
-3272968192,3272968447,GB
-3272968448,3272968703,DE
-3272968704,3272968735,GB
-3272968736,3272968879,DE
-3272968880,3272968927,GB
-3272968928,3272968959,DE
-3272968960,3272969215,GB
-3272969216,3272969279,DE
-3272969280,3272969727,GB
-3272969728,3272969791,DE
-3272969792,3272970015,GB
-3272970016,3272970079,DE
-3272970080,3272970095,GB
-3272970096,3272970175,DE
-3272970176,3272971263,GB
-3272971264,3272971519,DE
-3272971520,3272972031,GB
-3272972032,3272972287,DE
-3272972288,3272974335,GB
-3272974336,3272974367,DE
-3272974368,3272975871,GB
-3272975872,3272976383,DE
-3272976384,3272976895,GB
-3272976896,3272976927,DE
-3272976928,3272976959,GB
-3272976960,3272976991,DE
-3272976992,3272977151,GB
-3272977152,3272977407,DE
-3272977408,3272978415,GB
-3272978416,3272978687,DE
-3272978688,3272979023,GB
-3272979024,3272979103,DE
-3272979104,3272979119,GB
-3272979120,3272979167,DE
-3272979168,3272979519,GB
-3272979520,3272979535,DE
-3272979536,3272979967,GB
-3272979968,3272979999,DE
-3272980000,3272980095,GB
-3272980096,3272980127,DE
-3272980128,3272980479,GB
-3272980480,3272980607,DE
-3272980608,3272980639,GB
-3272980640,3272980767,DE
-3272980768,3272980799,GB
-3272980800,3272980863,DE
-3272980864,3272980927,GB
-3272980928,3272980943,DE
-3272980944,3272981119,GB
-3272981120,3272981215,DE
-3272981216,3272981503,GB
-3272981504,3272981759,DE
-3272981760,3272982015,GB
-3272982016,3272982527,DE
-3272982528,3272982783,GB
-3272982784,3272983039,DE
-3272983040,3272983295,GB
-3272983296,3272983343,DE
-3272983344,3272983391,GB
-3272983392,3272983423,DE
-3272983424,3272983551,GB
-3272983552,3272983823,DE
-3272983824,3272984079,GB
-3272984080,3272984095,DE
-3272984096,3272984191,GB
-3272984192,3272984255,DE
-3272984256,3272985599,GB
-3272985600,3272985615,DE
-3272985616,3272985631,GB
-3272985632,3272985647,DE
-3272985648,3272985695,GB
-3272985696,3272985871,DE
-3272985872,3272985887,GB
-3272985888,3272985935,DE
-3272985936,3272985951,GB
-3272985952,3272986047,DE
-3272986048,3272986063,GB
-3272986064,3272986079,DE
-3272986080,3272986095,GB
-3272986096,3272986111,DE
-3272986112,3272988415,GB
-3272988416,3272988927,DE
-3272988928,3272989183,GB
-3272989184,3272989199,DE
-3272989200,3272990975,GB
-3272990976,3272991007,DE
-3272991008,3272994815,GB
-3272994816,3272994847,DE
-3272994848,3272994927,GB
-3272994928,3272995008,DE
-3272995009,3272995023,GB
-3272995024,3272995055,DE
-3272995056,3272996863,GB
-3272996864,3272997119,DE
-3272997120,3272998911,GB
+3272940544,3272998911,GB
3272998912,3273007103,PT
3273007104,3273015295,CZ
3273015296,3273023487,SE
@@ -91287,9 +100178,7 @@
3273056128,3273056255,HK
3273056256,3273064447,MD
3273064448,3273129983,PT
-3273129984,3273131999,DK
-3273132000,3273132015,NO
-3273132016,3273138175,DK
+3273129984,3273138175,DK
3273138176,3273146367,BG
3273146368,3273148415,RU
3273148416,3273150463,LU
@@ -91329,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
@@ -91359,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
@@ -91380,9 +100270,10 @@
3273331200,3273331711,EU
3273331712,3273331967,GB
3273331968,3273332031,DE
-3273332032,3273332095,EU
+3273332032,3273332095,GB
3273332096,3273332223,DE
-3273332224,3273332543,EU
+3273332224,3273332479,GB
+3273332480,3273332543,EU
3273332544,3273332575,DE
3273332576,3273332607,EU
3273332608,3273332671,DE
@@ -91549,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
@@ -91597,30 +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,3273441599,GB
-3273441600,3273441607,FR
-3273441608,3273441647,GB
-3273441648,3273441759,FR
-3273441760,3273442111,GB
-3273442112,3273442127,FR
-3273442128,3273442143,GB
-3273442144,3273442151,FR
-3273442152,3273442303,GB
-3273442304,3273442331,FR
-3273442332,3273442335,GB
-3273442336,3273442367,FR
-3273442368,3273442431,GB
-3273442432,3273442559,FR
-3273442560,3273443071,GB
-3273443072,3273443080,FR
-3273443081,3273443327,GB
-3273443328,3273443839,FR
-3273443840,3273449471,GB
+3273441280,3273443327,GB
+3273443328,3273444095,FR
+3273444096,3273449471,GB
3273449472,3273457663,CH
3273457664,3273523199,HR
3273523200,3273588735,DE
@@ -91712,7 +100586,6 @@
3273878528,3273879039,DE
3273879040,3273879551,BE
3273879552,3273880063,GB
-3273880064,3273880575,LV
3273880576,3273881087,RU
3273881088,3273881343,RO
3273881344,3273881599,CH
@@ -91769,7 +100642,8 @@
3274172416,3274172927,UA
3274172928,3274173439,DE
3274173440,3274173951,GR
-3274173952,3274174463,DE
+3274173952,3274174207,GB
+3274174208,3274174463,CZ
3274174464,3274175487,UA
3274175488,3274175999,BE
3274176000,3274176511,DE
@@ -91849,7 +100723,6 @@
3274398208,3274399231,RU
3274399232,3274399743,SC
3274399744,3274407935,LU
-3274407936,3274408191,ES
3274408192,3274408447,IT
3274408448,3274408703,NL
3274408704,3274408959,SI
@@ -91876,7 +100749,7 @@
3274414336,3274414591,CH
3274414592,3274414847,NL
3274414848,3274415103,IE
-3274415104,3274415359,GR
+3274415104,3274415359,PL
3274415360,3274415615,GB
3274415616,3274415871,NL
3274415872,3274416127,SI
@@ -92095,7 +100968,6 @@
3274692864,3274693119,AT
3274693120,3274693375,LT
3274693376,3274693631,UA
-3274693632,3274693887,NL
3274693888,3274694143,IT
3274694144,3274694399,DK
3274694400,3274694655,GB
@@ -92126,7 +100998,8 @@
3274700800,3274701055,UA
3274701056,3274701311,DE
3274701312,3274701567,TJ
-3274701568,3274702079,IT
+3274701568,3274701823,IT
+3274701824,3274702079,IL
3274702080,3274702335,UA
3274702336,3274702591,SE
3274702592,3274702847,KZ
@@ -92340,6 +101213,7 @@
3274964992,3275030527,DE
3275030528,3275096063,ES
3275096064,3275104767,RU
+3275104768,3275105279,DE
3275105280,3275105791,GB
3275105792,3275106303,NL
3275106304,3275106815,RU
@@ -92349,7 +101223,7 @@
3275108352,3275108863,FR
3275108864,3275109375,PL
3275109376,3275109887,UA
-3275109888,3275110399,DE
+3275109888,3275110399,RO
3275110400,3275110911,NL
3275110912,3275111423,GB
3275111424,3275111935,IT
@@ -92392,15 +101266,9 @@
3275423752,3275423775,EU
3275423776,3275423807,GB
3275423808,3275423871,EU
-3275423872,3275424719,GB
-3275424720,3275425791,EU
-3275425792,3275427271,GB
-3275427272,3275427279,EU
-3275427280,3275427615,GB
-3275427616,3275427839,EU
-3275427840,3275428375,GB
-3275428376,3275428383,EU
-3275428384,3275428399,GB
+3275423872,3275425159,GB
+3275425160,3275425791,EU
+3275425792,3275428399,GB
3275428400,3275428415,EU
3275428416,3275428447,GB
3275428448,3275429887,EU
@@ -92408,45 +101276,40 @@
3275430144,3275430271,EU
3275430272,3275430399,GB
3275430400,3275430591,EU
-3275430592,3275430623,GB
-3275430624,3275431935,EU
-3275431936,3275432703,GB
-3275432704,3275433983,EU
-3275433984,3275437567,GB
-3275437568,3275438079,EU
-3275438080,3275438623,GB
-3275438624,3275438719,EU
-3275438720,3275439103,GB
-3275439104,3275440127,EU
+3275430592,3275430631,GB
+3275430632,3275430655,EU
+3275430656,3275430911,GB
+3275430912,3275431935,EU
+3275431936,3275432831,GB
+3275432832,3275433983,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,3275447087,GB
-3275447088,3275448319,EU
+3275446272,3275447151,GB
+3275447152,3275448319,EU
3275448320,3275449519,GB
3275449520,3275449527,FR
3275449528,3275450879,GB
3275450880,3275451231,EU
3275451232,3275451263,GB
3275451264,3275452415,EU
-3275452416,3275453423,GB
-3275453424,3275453439,EU
-3275453440,3275454127,GB
+3275452416,3275454127,GB
3275454128,3275454143,EU
3275454144,3275457023,GB
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
-3275463528,3275463583,GB
-3275463584,3275463679,EU
-3275463680,3275464031,GB
+3275463528,3275464031,GB
3275464032,3275464047,IE
3275464048,3275468655,GB
3275468656,3275468671,IE
@@ -92456,8 +101319,18 @@
3275468768,3275468799,IE
3275468800,3275469071,GB
3275469072,3275469087,IE
-3275469088,3275471871,GB
-3275471872,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
@@ -92474,7 +101347,6 @@
3275510016,3275510079,SE
3275510080,3275510143,ES
3275510144,3275510207,FI
-3275510208,3275510271,SE
3275510336,3275510399,IE
3275510400,3275510463,NL
3275510464,3275510527,GB
@@ -92501,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
@@ -92517,7 +101389,6 @@
3275530752,3275531263,AT
3275531264,3275531775,GB
3275531776,3275532287,IE
-3275532288,3275532799,CH
3275532800,3275533823,GB
3275533824,3275534335,UA
3275534336,3275534847,IL
@@ -92534,9 +101405,8 @@
3275542528,3275543551,DE
3275543552,3275544575,NL
3275544576,3275545599,PL
-3275545600,3275546623,EU
+3275545600,3275546623,RU
3275546624,3275547647,UA
-3275547648,3275548671,RU
3275548672,3275549695,IL
3275549696,3275550719,SY
3275550720,3275551743,PL
@@ -92790,9 +101660,7 @@
3275808768,3275816959,UA
3275816960,3275818207,CH
3275818208,3275818215,DE
-3275818216,3275881335,CH
-3275881336,3275881343,DE
-3275881344,3275882495,CH
+3275818216,3275882495,CH
3275882496,3275884543,DE
3275884544,3275886591,IT
3275886592,3275888639,PL
@@ -92812,7 +101680,8 @@
3275902720,3275902975,UA
3275902976,3275903231,FR
3275903232,3275903487,GB
-3275903488,3275903999,DE
+3275903488,3275903743,FR
+3275903744,3275903999,DE
3275904000,3275904255,RU
3275904256,3275904511,CH
3275904512,3275904767,PL
@@ -92837,7 +101706,7 @@
3275909888,3275910143,SI
3275910144,3275910399,RU
3275910400,3275910655,DK
-3275910656,3275910911,CH
+3275910656,3275910911,UA
3275910912,3275911167,DE
3275911168,3275911423,FR
3275911424,3275911679,RO
@@ -92916,15 +101785,21 @@
3276014192,3276014207,GB
3276014208,3276014255,FR
3276014256,3276014263,GB
-3276014264,3276014471,FR
+3276014264,3276014335,FR
+3276014336,3276014343,GB
+3276014344,3276014471,FR
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
@@ -92986,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
@@ -93000,9 +101875,9 @@
3276019024,3276019071,GB
3276019072,3276019135,FR
3276019136,3276019151,GB
-3276019152,3276019463,FR
-3276019464,3276019471,GB
-3276019472,3276019503,FR
+3276019152,3276019479,FR
+3276019480,3276019487,GB
+3276019488,3276019503,FR
3276019504,3276019511,GB
3276019512,3276019535,FR
3276019536,3276019543,GB
@@ -93014,13 +101889,15 @@
3276019680,3276019687,GB
3276019688,3276019695,FR
3276019696,3276019703,GB
-3276019704,3276019823,FR
+3276019704,3276019719,FR
+3276019720,3276019743,GB
+3276019744,3276019823,FR
3276019824,3276019831,GB
3276019832,3276019839,FR
3276019840,3276019855,GB
3276019856,3276019863,FR
-3276019864,3276019887,GB
-3276019888,3276019919,FR
+3276019864,3276019871,GB
+3276019872,3276019919,FR
3276019920,3276019927,GB
3276019928,3276019959,FR
3276019960,3276019967,GB
@@ -93038,9 +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,3276022127,FR
+3276021600,3276021815,FR
+3276021816,3276021823,GB
+3276021824,3276021847,FR
+3276021848,3276021855,GB
+3276021856,3276022031,FR
+3276022032,3276022039,GB
+3276022040,3276022127,FR
3276022128,3276022143,GB
3276022144,3276022215,FR
3276022216,3276022223,GB
@@ -93050,7 +101935,9 @@
3276022456,3276022463,GB
3276022464,3276022479,FR
3276022480,3276022495,GB
-3276022496,3276022519,FR
+3276022496,3276022503,FR
+3276022504,3276022511,GB
+3276022512,3276022519,FR
3276022520,3276022527,GB
3276022528,3276022567,FR
3276022568,3276022639,GB
@@ -93096,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
@@ -93107,9 +101992,7 @@
3276026224,3276026319,FR
3276026320,3276026351,GB
3276026352,3276026423,FR
-3276026424,3276026431,GB
-3276026432,3276026439,FR
-3276026440,3276026447,GB
+3276026424,3276026447,GB
3276026448,3276026527,FR
3276026528,3276026535,GB
3276026536,3276026543,FR
@@ -93196,7 +102079,9 @@
3276030256,3276030263,GB
3276030264,3276030271,FR
3276030272,3276030303,GB
-3276030304,3276030407,FR
+3276030304,3276030319,FR
+3276030320,3276030335,GB
+3276030336,3276030407,FR
3276030408,3276030415,GB
3276030416,3276030463,FR
3276030464,3276030495,GB
@@ -93219,12 +102104,14 @@
3276031744,3276032007,FR
3276032008,3276032015,GB
3276032016,3276032023,FR
-3276032024,3276032031,GB
-3276032032,3276032055,FR
+3276032024,3276032047,GB
+3276032048,3276032055,FR
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
@@ -93268,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
@@ -93282,9 +102171,11 @@
3276037960,3276037983,GB
3276037984,3276038047,FR
3276038048,3276038111,GB
-3276038112,3276038143,FR
-3276038144,3276038399,GB
-3276038400,3276038703,FR
+3276038112,3276038159,FR
+3276038160,3276038399,GB
+3276038400,3276038663,FR
+3276038664,3276038671,GB
+3276038672,3276038703,FR
3276038704,3276038719,GB
3276038720,3276038735,FR
3276038736,3276038767,GB
@@ -93294,27 +102185,21 @@
3276038848,3276038911,GB
3276038912,3276038919,FR
3276038920,3276039167,GB
-3276039168,3276039199,FR
-3276039200,3276039247,GB
+3276039168,3276039207,FR
+3276039208,3276039247,GB
3276039248,3276039279,FR
3276039280,3276039295,GB
3276039296,3276039327,FR
3276039328,3276039343,GB
3276039344,3276039391,FR
3276039392,3276039423,GB
-3276039424,3276039551,FR
-3276039552,3276039567,GB
-3276039568,3276039647,FR
-3276039648,3276039663,GB
-3276039664,3276039967,FR
+3276039424,3276039967,FR
3276039968,3276040031,GB
3276040032,3276040063,FR
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
@@ -93332,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
@@ -93342,8 +102227,8 @@
3276041280,3276041311,GB
3276041312,3276041391,FR
3276041392,3276041407,GB
-3276041408,3276041487,FR
-3276041488,3276041503,GB
+3276041408,3276041495,FR
+3276041496,3276041503,GB
3276041504,3276041519,FR
3276041520,3276041535,GB
3276041536,3276041551,FR
@@ -93356,25 +102241,23 @@
3276041920,3276041951,GB
3276041952,3276041967,FR
3276041968,3276041983,GB
-3276041984,3276042031,FR
-3276042032,3276042143,GB
+3276041984,3276042047,FR
+3276042048,3276042143,GB
3276042144,3276042175,FR
3276042176,3276042191,GB
3276042192,3276042207,FR
3276042208,3276042239,GB
-3276042240,3276042767,FR
-3276042768,3276042815,GB
+3276042240,3276042775,FR
+3276042776,3276042815,GB
3276042816,3276042831,FR
3276042832,3276042847,GB
-3276042848,3276044303,FR
-3276044304,3276044319,GB
+3276042848,3276044311,FR
+3276044312,3276044319,GB
3276044320,3276044351,FR
3276044352,3276044359,GB
3276044360,3276044367,FR
3276044368,3276044375,GB
-3276044376,3276044447,FR
-3276044448,3276044463,GB
-3276044464,3276044479,FR
+3276044376,3276044479,FR
3276044480,3276044495,GB
3276044496,3276044511,FR
3276044512,3276044543,GB
@@ -93396,12 +102279,8 @@
3276044992,3276044999,GB
3276045000,3276045023,FR
3276045024,3276045039,GB
-3276045040,3276045063,FR
-3276045064,3276045071,GB
-3276045072,3276045111,FR
-3276045112,3276045127,GB
-3276045128,3276045135,FR
-3276045136,3276045151,GB
+3276045040,3276045111,FR
+3276045112,3276045151,GB
3276045152,3276045191,FR
3276045192,3276045199,GB
3276045200,3276045223,FR
@@ -93420,8 +102299,8 @@
3276045480,3276045487,GB
3276045488,3276045543,FR
3276045544,3276045551,GB
-3276045552,3276045575,FR
-3276045576,3276045607,GB
+3276045552,3276045583,FR
+3276045584,3276045607,GB
3276045608,3276045631,FR
3276045632,3276045647,GB
3276045648,3276045767,FR
@@ -93455,8 +102334,10 @@
3276073472,3276073983,SK
3276073984,3276074495,DE
3276074496,3276075007,GB
+3276075008,3276075519,RU
3276075520,3276076031,DE
-3276076032,3276076543,GB
+3276076032,3276076287,NL
+3276076288,3276076543,RU
3276076544,3276077055,DE
3276077056,3276077567,UA
3276077568,3276078079,FR
@@ -93496,7 +102377,6 @@
3276127232,3276128255,UZ
3276128256,3276129279,AT
3276129280,3276131327,UA
-3276131328,3276132351,DK
3276132352,3276133375,PL
3276133376,3276134399,GB
3276134400,3276135423,RU
@@ -93504,7 +102384,7 @@
3276136448,3276137471,NL
3276137472,3276138495,PL
3276138496,3276139519,NL
-3276139520,3276140543,IL
+3276139520,3276140543,RU
3276140544,3276141567,DE
3276141568,3276143615,UA
3276143616,3276144639,GB
@@ -93516,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
@@ -93535,11 +102411,9 @@
3276250096,3276275711,DE
3276275712,3276283903,SK
3276283904,3276292095,GB
-3276292096,3276292479,BE
-3276292480,3276292511,LU
-3276292512,3276299295,BE
-3276299296,3276299327,CH
-3276299328,3276300287,BE
+3276292096,3276294655,BE
+3276294656,3276294663,LU
+3276294664,3276300287,BE
3276300288,3276304383,DE
3276304384,3276304639,BG
3276304640,3276305407,GB
@@ -94163,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
@@ -95642,8 +104514,11 @@
3276474368,3276474623,EU
3276474624,3276474879,GB
3276474880,3276475015,EU
-3276475016,3276475135,IT
-3276475136,3276475903,EU
+3276475016,3276475023,IT
+3276475024,3276475039,FR
+3276475040,3276475055,EU
+3276475056,3276475071,IT
+3276475072,3276475903,EU
3276475904,3276476039,IT
3276476040,3276476047,EU
3276476048,3276476111,IT
@@ -95656,21 +104531,21 @@
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
3276479224,3276479279,FR
-3276479280,3276479295,EU
-3276479296,3276479343,FR
-3276479344,3276479359,EU
+3276479280,3276479343,EU
+3276479344,3276479351,GB
+3276479352,3276479359,EU
3276479360,3276479615,FR
3276479616,3276479647,EU
3276479648,3276479743,FR
3276479744,3276479999,EU
-3276480000,3276480159,FR
+3276480000,3276480143,FR
+3276480144,3276480151,EU
+3276480152,3276480159,FR
3276480160,3276480191,EU
3276480192,3276480319,FR
3276480320,3276480335,EU
@@ -95706,27 +104581,38 @@
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
-3276491856,3276492055,GB
-3276492056,3276492063,EU
-3276492064,3276492127,GB
+3276491856,3276492047,GB
+3276492048,3276492095,EU
+3276492096,3276492127,GB
3276492128,3276492143,EU
3276492144,3276492151,GB
3276492152,3276492287,EU
3276492288,3276492831,GB
3276492832,3276492839,EU
-3276492840,3276493215,GB
+3276492840,3276493135,GB
+3276493136,3276493151,EU
+3276493152,3276493215,GB
3276493216,3276493247,EU
-3276493248,3276494383,GB
-3276494384,3276494415,EU
-3276494416,3276495503,GB
+3276493248,3276494367,GB
+3276494368,3276494415,EU
+3276494416,3276494471,GB
+3276494472,3276494479,EU
+3276494480,3276495439,GB
+3276495440,3276495455,EU
+3276495456,3276495503,GB
3276495504,3276495519,EU
-3276495520,3276495679,GB
-3276495680,3276495775,EU
-3276495776,3276496639,GB
+3276495520,3276495543,GB
+3276495544,3276495551,EU
+3276495552,3276495763,GB
+3276495764,3276495767,EU
+3276495768,3276495831,GB
+3276495832,3276495839,EU
+3276495840,3276496639,GB
3276496640,3276496895,EU
3276496896,3276497151,DE
3276497152,3276497215,EU
@@ -95765,8 +104651,8 @@
3276500992,3276501023,DE
3276501024,3276501055,FR
3276501056,3276501119,EU
-3276501120,3276501167,DE
-3276501168,3276501247,EU
+3276501120,3276501183,DE
+3276501184,3276501247,EU
3276501248,3276501503,DE
3276501504,3276502271,EU
3276502272,3276505087,DE
@@ -95846,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
@@ -95903,7 +104789,9 @@
3276525528,3276525535,PL
3276525536,3276525567,HR
3276525568,3276526079,EU
-3276526080,3276526111,CH
+3276526080,3276526087,CH
+3276526088,3276526095,EU
+3276526096,3276526111,CH
3276526112,3276526143,EU
3276526144,3276526159,CH
3276526160,3276526335,EU
@@ -95932,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
@@ -95958,9 +104848,9 @@
3276529376,3276529391,EU
3276529392,3276529407,TR
3276529408,3276529663,EU
-3276529664,3276530455,NL
-3276530456,3276530463,EU
-3276530464,3276530495,NL
+3276529664,3276530447,NL
+3276530448,3276530455,EU
+3276530456,3276530495,NL
3276530496,3276530559,EU
3276530560,3276532735,NL
3276532736,3276532775,TR
@@ -95979,8 +104869,8 @@
3276533776,3276533791,GB
3276533792,3276533823,EU
3276533824,3276533887,IE
-3276533888,3276533919,EU
-3276533920,3276533951,IE
+3276533888,3276533927,EU
+3276533928,3276533951,IE
3276533952,3276533983,EU
3276533984,3276534015,IE
3276534016,3276534271,EU
@@ -95991,8 +104881,8 @@
3276534496,3276534543,EU
3276534544,3276534591,NL
3276534592,3276534623,EU
-3276534624,3276534671,NL
-3276534672,3276534687,EU
+3276534624,3276534655,NL
+3276534656,3276534687,EU
3276534688,3276534719,NL
3276534720,3276534783,EU
3276534784,3276534879,NL
@@ -96008,16 +104898,18 @@
3276535104,3276535311,EU
3276535312,3276535319,FI
3276535320,3276535335,EU
-3276535336,3276535359,FI
+3276535336,3276535343,FI
+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
3276536320,3276536430,ES
-3276536431,3276536447,EU
-3276536448,3276536511,ES
+3276536431,3276536439,EU
+3276536440,3276536511,ES
3276536512,3276536583,EU
3276536584,3276536591,HR
3276536592,3276536639,EU
@@ -96028,8 +104920,8 @@
3276536736,3276536743,HU
3276536744,3276536831,EU
3276536832,3276536895,ES
-3276536896,3276536967,EU
-3276536968,3276536991,ES
+3276536896,3276536959,EU
+3276536960,3276536991,ES
3276536992,3276537151,EU
3276537152,3276537215,AT
3276537216,3276537343,EU
@@ -96078,6 +104970,7 @@
3276697600,3276698111,UA
3276698112,3276699647,RU
3276699648,3276700159,NL
+3276700160,3276700671,CZ
3276700672,3276701183,RO
3276701184,3276701695,RU
3276701696,3276709887,SE
@@ -96462,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
@@ -96502,11 +105398,15 @@
3276869856,3276869887,GB
3276869888,3276870143,NL
3276870144,3276871679,IT
-3276871680,3276872479,DE
+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
@@ -96520,7 +105420,11 @@
3276877536,3276877551,AT
3276877552,3276878079,GB
3276878080,3276878335,BG
-3276878336,3276878591,GB
+3276878336,3276878399,GB
+3276878400,3276878431,FR
+3276878432,3276878463,GB
+3276878464,3276878559,FR
+3276878560,3276878591,GB
3276878592,3276878847,FR
3276878848,3276879359,ES
3276879360,3276879423,TR
@@ -96531,26 +105435,28 @@
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
-3276886272,3276886527,GB
-3276886528,3276886943,DE
+3276886272,3276886943,DE
3276886944,3276886959,GB
-3276886960,3276886975,DE
-3276886976,3276887071,GB
+3276886960,3276886991,DE
+3276886992,3276887047,GB
+3276887048,3276887055,DE
+3276887056,3276887071,GB
3276887072,3276888063,DE
3276888064,3276888575,GB
-3276888576,3276888831,AT
-3276888832,3276889087,GB
-3276889088,3276890111,AT
+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
@@ -96566,30 +105472,45 @@
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,3276900039,CH
+3276898784,3276899071,CH
+3276899072,3276899087,GB
+3276899088,3276900039,CH
3276900040,3276900047,GB
3276900048,3276900351,CH
3276900352,3276900607,GB
-3276900608,3276901471,CH
-3276901472,3276901631,GB
+3276900608,3276901503,CH
+3276901504,3276901519,ES
+3276901520,3276901551,CH
+3276901552,3276901559,GB
+3276901560,3276901623,CH
+3276901624,3276901631,GB
3276901632,3276902151,CH
3276902152,3276902159,GB
-3276902160,3276902191,CH
-3276902192,3276902207,GB
-3276902208,3276902271,CH
-3276902272,3276902399,GB
-3276902400,3276902583,SE
+3276902160,3276902335,CH
+3276902336,3276902399,GB
+3276902400,3276902559,SE
+3276902560,3276902575,GB
+3276902576,3276902583,SE
3276902584,3276902615,GB
3276902616,3276902639,SE
3276902640,3276902655,GB
3276902656,3276903319,SE
-3276903320,3276903423,GB
-3276903424,3276903935,SE
-3276903936,3276904191,GB
+3276903320,3276903327,GB
+3276903328,3276903359,NO
+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
@@ -96603,26 +105524,34 @@
3276906280,3276906287,GB
3276906288,3276906295,SE
3276906296,3276906495,GB
-3276906496,3276906823,NL
+3276906496,3276906623,NL
+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,3276907775,GB
-3276907776,3276908159,NL
+3276907644,3276907647,GB
+3276907648,3276907663,NL
+3276907664,3276907679,BE
+3276907680,3276907687,GB
+3276907688,3276908159,NL
3276908160,3276908175,CH
-3276908176,3276908287,GB
-3276908288,3276909055,NL
+3276908176,3276908183,NL
+3276908184,3276908191,GB
+3276908192,3276909055,NL
3276909056,3276909567,GB
3276909568,3276910591,NL
-3276910592,3276910967,IT
-3276910968,3276910975,GB
-3276910976,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
@@ -96630,12 +105559,11 @@
3276914096,3276914143,IT
3276914144,3276914159,GB
3276914160,3276914687,IT
-3276914688,3276914943,ES
-3276914944,3276915199,GB
-3276915200,3276915567,ES
+3276914688,3276915567,ES
3276915568,3276915583,NL
-3276915584,3276916079,ES
-3276916080,3276916095,GB
+3276915584,3276915711,GB
+3276915712,3276916087,ES
+3276916088,3276916095,GB
3276916096,3276916175,ES
3276916176,3276916183,GB
3276916184,3276917231,ES
@@ -96664,11 +105592,7 @@
3276923432,3276923439,GB
3276923440,3276923447,FR
3276923448,3276923455,DE
-3276923456,3276924071,FR
-3276924072,3276924079,GB
-3276924080,3276926751,FR
-3276926752,3276926783,GB
-3276926784,3276926847,FR
+3276923456,3276926847,FR
3276926848,3276931071,GB
3276931072,3276939263,KZ
3276939264,3276955647,DE
@@ -96701,7 +105625,7 @@
3277179392,3277179647,DE
3277179648,3277180159,BE
3277180160,3277180415,NL
-3277180416,3277180671,GB
+3277180416,3277180671,RU
3277180672,3277180927,FR
3277180928,3277181183,DE
3277181184,3277181439,PL
@@ -96730,7 +105654,7 @@
3277187072,3277187327,GB
3277187328,3277187583,UA
3277187584,3277188351,RU
-3277188352,3277188607,GB
+3277188352,3277188607,DE
3277188608,3277188863,RU
3277188864,3277189119,RO
3277189120,3277189375,DE
@@ -96817,7 +105741,6 @@
3277359616,3277360127,UA
3277360128,3277360639,BG
3277360640,3277361151,CZ
-3277361152,3277361663,UA
3277361664,3277362175,RU
3277362176,3277362687,ES
3277362688,3277363199,IE
@@ -96834,7 +105757,6 @@
3277368320,3277369343,RO
3277369344,3277369855,CY
3277369856,3277370367,RU
-3277370368,3277370879,SE
3277370880,3277371391,RO
3277371392,3277371903,RU
3277371904,3277372415,PL
@@ -96863,7 +105785,6 @@
3277386240,3277386751,UA
3277386752,3277387263,SA
3277387264,3277388287,RU
-3277388288,3277388799,SE
3277388800,3277389311,RU
3277389312,3277389823,AM
3277389824,3277394943,GB
@@ -96873,7 +105794,9 @@
3277395968,3277452647,GB
3277452648,3277452655,DK
3277452656,3277455359,GB
-3277455360,3277463551,DE
+3277455360,3277456895,DE
+3277456896,3277457151,CH
+3277457152,3277463551,DE
3277463552,3277463807,GB
3277463808,3277464063,US
3277464064,3277464575,FR
@@ -97005,7 +105928,7 @@
3277822208,3277822463,ES
3277822464,3277822719,PL
3277822720,3277822975,RU
-3277822976,3277823231,FR
+3277822976,3277823231,ES
3277823232,3277823487,UA
3277823488,3277823743,SI
3277823744,3277823999,UA
@@ -97045,8 +105968,8 @@
3277835776,3277836287,UA
3277836288,3277836799,FI
3277836800,3277837311,UA
-3277837312,3277838847,RU
-3277838848,3277839359,BY
+3277837312,3277839103,RU
+3277839104,3277839359,CH
3277839360,3277839871,DE
3277839872,3277840383,UA
3277840384,3277840895,FR
@@ -97065,19 +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
-3277885440,3277885727,LB
-3277885728,3277885951,IT
-3277885952,3277886207,LB
-3277886208,3277886463,IT
+3277884192,3277885439,A2
+3277885440,3277885695,IQ
+3277885696,3277885727,LB
+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,3277889535,IT
+3277888320,3277889023,A2
+3277889024,3277889279,IQ
+3277889280,3277889535,A2
3277889536,3277897727,RU
3277897728,3277905919,IT
3277905920,3277914111,BG
@@ -97100,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
@@ -97495,7 +106420,7 @@
3278939712,3278939715,CY
3278939716,3278939723,TR
3278939724,3278939727,MC
-3278939728,3278939731,TR
+3278939728,3278939731,DE
3278939732,3278939735,AT
3278939736,3278939739,RU
3278939740,3278939743,HU
@@ -97914,8 +106839,7 @@
3278942180,3278942183,FR
3278942184,3278942187,DK
3278942188,3278942191,IT
-3278942192,3278942199,DE
-3278942200,3278942203,GB
+3278942192,3278942203,DE
3278942204,3278942207,CH
3278942208,3278942211,TW
3278942212,3278942227,AU
@@ -98543,9 +107467,7 @@
3278943440,3278943440,DK
3278943441,3278943441,IT
3278943442,3278943442,FR
-3278943443,3278943443,DE
-3278943444,3278943444,GB
-3278943445,3278943445,DE
+3278943443,3278943445,DE
3278943446,3278943446,CH
3278943447,3278943447,DE
3278943448,3278943448,FR
@@ -98692,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
@@ -98919,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
@@ -99017,7 +107938,7 @@
3278944036,3278944036,US
3278944037,3278944037,FR
3278944038,3278944038,GB
-3278944039,3278944039,ES
+3278944039,3278944039,DE
3278944040,3278944040,FR
3278944041,3278944041,DE
3278944042,3278944042,FR
@@ -99641,7 +108562,7 @@
3279053312,3279053823,DE
3279053824,3279054335,NL
3279054336,3279054847,GB
-3279054848,3279055359,PL
+3279054848,3279055359,RU
3279055360,3279055871,SA
3279055872,3279056383,TR
3279056384,3279056895,GB
@@ -99659,9 +108580,8 @@
3279078656,3279078911,FR
3279078912,3279084543,ES
3279084544,3279085567,IT
-3279085568,3279090687,NL
-3279090688,3279090943,DE
-3279090944,3279093759,NL
+3279085568,3279093503,NL
+3279093504,3279093759,DE
3279093760,3279103103,FR
3279103104,3279103135,GB
3279103136,3279119295,FR
@@ -99828,8 +108748,8 @@
3279568896,3279577087,IT
3279577088,3279585279,BE
3279585280,3279585919,DE
-3279585920,3279585951,GB
-3279585952,3279585991,DE
+3279585920,3279585983,GB
+3279585984,3279585991,DE
3279585992,3279585999,GB
3279586000,3279586303,DE
3279586304,3279586559,GB
@@ -100037,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
@@ -100071,71 +108991,13 @@
3280355328,3280371711,GR
3280371712,3280379903,CH
3280379904,3280388095,FR
-3280388096,3280388159,GB
-3280388160,3280388191,FR
-3280388192,3280388735,GB
-3280388736,3280388759,FR
-3280388760,3280390719,GB
+3280388096,3280390719,GB
3280390720,3280390751,FR
-3280390752,3280390783,GB
-3280390784,3280390815,FR
-3280390816,3280390879,GB
-3280390880,3280390911,FR
-3280390912,3280391423,GB
-3280391424,3280391551,FR
-3280391552,3280391583,GB
-3280391584,3280391743,FR
-3280391744,3280391775,GB
-3280391776,3280391807,FR
-3280391808,3280391967,GB
-3280391968,3280392007,FR
-3280392008,3280392031,GB
-3280392032,3280392063,FR
-3280392064,3280392095,GB
-3280392096,3280392127,FR
-3280392128,3280392191,CH
-3280392192,3280392319,FR
-3280392320,3280392383,GB
-3280392384,3280392415,FR
-3280392416,3280392447,GB
-3280392448,3280392463,FR
-3280392464,3280392639,GB
-3280392640,3280392671,FR
-3280392672,3280392703,GB
+3280390752,3280392703,GB
3280392704,3280392831,FR
-3280392832,3280393023,GB
-3280393024,3280393055,FR
-3280393056,3280393087,GB
-3280393088,3280393151,FR
-3280393152,3280393343,GB
-3280393344,3280393375,FR
-3280393376,3280393407,GB
-3280393408,3280393503,FR
-3280393504,3280393599,GB
-3280393600,3280393631,FR
-3280393632,3280393695,GB
-3280393696,3280393727,FR
-3280393728,3280394367,GB
-3280394368,3280394431,FR
-3280394432,3280394463,GB
-3280394464,3280394495,FR
-3280394496,3280394527,GB
-3280394528,3280394559,FR
-3280394560,3280394623,GB
-3280394624,3280394751,FR
-3280394752,3280395263,GB
+3280392832,3280395263,GB
3280395264,3280395519,FR
-3280395520,3280395647,GB
-3280395648,3280395839,FR
-3280395840,3280396031,GB
-3280396032,3280396055,FR
-3280396056,3280396071,GB
-3280396072,3280396095,FR
-3280396096,3280396191,GB
-3280396192,3280396223,FR
-3280396224,3280396255,GB
-3280396256,3280396263,FR
-3280396264,3280396287,GB
+3280395520,3280396287,GB
3280396288,3280404479,FI
3280404480,3280437247,IT
3280437248,3280453631,DE
@@ -100147,10 +109009,10 @@
3280458752,3280459775,RU
3280459776,3280460799,DK
3280460800,3280462847,DE
-3280462848,3280463871,DK
+3280462848,3280463871,PL
3280463872,3280466943,RU
3280466944,3280467967,UA
-3280467968,3280468991,GB
+3280467968,3280468991,ES
3280468992,3280470015,CY
3280470016,3280535551,PL
3280535552,3280568319,GB
@@ -100198,7 +109060,8 @@
3280589312,3280590335,DE
3280590336,3280590847,NL
3280590848,3280591359,DE
-3280591360,3280592383,GB
+3280591360,3280591871,UA
+3280591872,3280592383,GB
3280592384,3280592895,TR
3280592896,3280593407,DE
3280593408,3280593919,UA
@@ -100222,9 +109085,7 @@
3280625664,3280633855,MD
3280633856,3280635807,BG
3280635808,3280635815,DE
-3280635816,3280638207,BG
-3280638208,3280638463,A2
-3280638464,3280642047,BG
+3280635816,3280642047,BG
3280642048,3280650239,UA
3280650240,3280650495,RO
3280650496,3280650751,UA
@@ -100546,8 +109407,12 @@
3280933632,3280933647,DE
3280933648,3280933687,GB
3280933688,3280933699,DE
-3280933700,3280933703,GB
-3280933704,3280933855,DE
+3280933700,3280933711,GB
+3280933712,3280933759,DE
+3280933760,3280933775,GB
+3280933776,3280933791,DE
+3280933792,3280933823,GB
+3280933824,3280933855,DE
3280933856,3280934219,GB
3280934220,3280934243,DE
3280934244,3280934655,GB
@@ -100848,10 +109713,14 @@
3280952328,3280952343,DE
3280952344,3280952351,GB
3280952352,3280952359,DE
-3280952360,3280952383,GB
-3280952384,3280952559,DE
-3280952560,3280952575,GB
-3280952576,3280952623,DE
+3280952360,3280952415,GB
+3280952416,3280952463,DE
+3280952464,3280952511,GB
+3280952512,3280952559,DE
+3280952560,3280952591,GB
+3280952592,3280952607,DE
+3280952608,3280952615,GB
+3280952616,3280952623,DE
3280952624,3280952631,GB
3280952632,3280952687,DE
3280952688,3280952695,GB
@@ -100898,8 +109767,12 @@
3280954368,3280954495,DE
3280954496,3280955391,GB
3280955392,3280955419,DE
-3280955420,3280955423,GB
-3280955424,3280955791,DE
+3280955420,3280955487,GB
+3280955488,3280955503,DE
+3280955504,3280955519,GB
+3280955520,3280955647,DE
+3280955648,3280955663,GB
+3280955664,3280955791,DE
3280955792,3280955799,GB
3280955800,3280956143,DE
3280956144,3280956415,GB
@@ -100942,9 +109815,13 @@
3280958880,3280958915,DE
3280958916,3280958919,GB
3280958920,3280958927,DE
-3280958928,3280958975,GB
-3280958976,3280959199,DE
-3280959200,3280959487,GB
+3280958928,3280958943,GB
+3280958944,3280959111,DE
+3280959112,3280959119,GB
+3280959120,3280959199,DE
+3280959200,3280959263,GB
+3280959264,3280959279,DE
+3280959280,3280959487,GB
3280959488,3280959711,DE
3280959712,3280959743,GB
3280959744,3280959935,DE
@@ -100977,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
@@ -101079,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
@@ -101754,23 +110635,21 @@
3281339392,3281339647,PL
3281339648,3281339903,GB
3281339904,3281340159,UA
-3281340160,3281340415,SA
+3281340160,3281340415,BG
3281340416,3281340927,RO
3281340928,3281341183,DE
3281341184,3281341439,AT
3281341440,3281341695,DE
3281341696,3281341951,PL
3281341952,3281342207,DK
-3281342208,3281342463,GB
-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
-3281345024,3281345279,UA
+3281344768,3281345279,RU
3281345280,3281345535,SA
3281345536,3281345791,CH
3281345792,3281346047,RU
@@ -101914,6 +110793,7 @@
3282149472,3282173951,RU
3282173952,3282174463,UA
3282174464,3282174975,GB
+3282174976,3282175487,DE
3282175488,3282177023,RU
3282177024,3282177535,GB
3282177536,3282178047,KZ
@@ -102078,6 +110958,7 @@
3283210752,3283211263,PL
3283211264,3283211775,GB
3283211776,3283212287,NL
+3283212288,3283212799,PL
3283212800,3283213311,BG
3283213312,3283213823,ES
3283213824,3283214335,UA
@@ -102204,7 +111085,7 @@
3283495680,3283495935,NL
3283495936,3283496191,BG
3283496192,3283496447,DE
-3283496448,3283496703,FR
+3283496448,3283496703,HR
3283496704,3283496959,LV
3283496960,3283497215,DE
3283497216,3283497471,GB
@@ -102214,7 +111095,6 @@
3283498496,3283498751,PL
3283498752,3283499007,AT
3283499008,3283499263,DE
-3283499264,3283499519,GB
3283499520,3283499775,DE
3283499776,3283500031,GB
3283500032,3283500287,DE
@@ -102271,12 +111151,10 @@
3283550624,3283550655,FR
3283550656,3283550719,GB
3283550720,3283552255,AT
-3283552256,3283552279,IT
-3283552280,3283552287,EU
-3283552288,3283552319,IT
+3283552256,3283552319,IT
3283552320,3283552351,EU
-3283552352,3283552415,IT
-3283552416,3283552447,EU
+3283552352,3283552431,IT
+3283552432,3283552447,EU
3283552448,3283552575,IT
3283552576,3283552639,DE
3283552640,3283552671,IT
@@ -102825,52 +111703,23 @@
3284016384,3284016639,CH
3284016640,3284017151,DK
3284017152,3284025343,GR
-3284025344,3284025359,DE
-3284025360,3284025439,GB
+3284025344,3284025439,GB
3284025440,3284025471,DE
-3284025472,3284025535,GB
-3284025536,3284025567,DE
-3284025568,3284026399,GB
-3284026400,3284026479,DE
-3284026480,3284026495,GB
-3284026496,3284026559,DE
-3284026560,3284026815,GB
-3284026816,3284026879,DE
-3284026880,3284027231,GB
-3284027232,3284027359,DE
-3284027360,3284027743,GB
-3284027744,3284027775,DE
-3284027776,3284027807,GB
-3284027808,3284027903,DE
-3284027904,3284028415,GB
+3284025472,3284027327,GB
+3284027328,3284027343,DE
+3284027344,3284028415,GB
3284028416,3284028671,DE
3284028672,3284028879,GB
3284028880,3284028895,DE
-3284028896,3284028911,GB
-3284028912,3284028927,DE
-3284028928,3284029215,GB
-3284029216,3284029311,DE
-3284029312,3284029759,GB
-3284029760,3284029791,DE
-3284029792,3284030207,GB
-3284030208,3284030463,DE
-3284030464,3284030655,GB
-3284030656,3284030687,DE
-3284030688,3284031039,GB
-3284031040,3284031103,DE
-3284031104,3284031551,GB
-3284031552,3284031615,DE
-3284031616,3284031743,GB
-3284031744,3284032031,DE
-3284032032,3284032063,GB
+3284028896,3284031743,GB
+3284031744,3284031999,DE
+3284032000,3284032063,GB
3284032064,3284032095,DE
-3284032096,3284032127,GB
-3284032128,3284032255,DE
-3284032256,3284032639,GB
-3284032640,3284032703,DE
-3284032704,3284032767,GB
-3284032768,3284032895,DE
-3284032896,3284033535,GB
+3284032096,3284032159,GB
+3284032160,3284032191,DE
+3284032192,3284032671,GB
+3284032672,3284032703,DE
+3284032704,3284033535,GB
3284033536,3284041727,RU
3284041728,3284041983,DK
3284041984,3284042239,SI
@@ -102895,7 +111744,7 @@
3284047104,3284047359,DK
3284047360,3284047615,DE
3284047616,3284047871,NL
-3284047872,3284048127,HU
+3284047872,3284048127,UA
3284048128,3284048383,DK
3284048384,3284048639,GB
3284048640,3284049151,FR
@@ -103035,7 +111884,6 @@
3284598784,3284664319,HU
3284664320,3284672511,GB
3284672512,3284680703,DE
-3284680704,3284681215,UA
3284681216,3284681727,RO
3284681728,3284682239,FI
3284682240,3284682751,DE
@@ -103044,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
@@ -103105,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
@@ -103124,7 +111966,9 @@
3284869632,3284869887,IT
3284869888,3284872959,DE
3284872960,3284873471,IT
-3284873472,3284926463,DE
+3284873472,3284913919,DE
+3284913920,3284914175,GB
+3284914176,3284926463,DE
3284926464,3284991999,NO
3284992000,3285057535,PL
3285057536,3285065727,IT
@@ -103209,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
@@ -103234,6 +112077,7 @@
3285419008,3285420031,SE
3285420032,3285424127,UA
3285424128,3285425151,RO
+3285425152,3285426175,LV
3285426176,3285427199,UA
3285427200,3285428223,GB
3285428224,3285429247,RU
@@ -103254,19 +112098,16 @@
3285449728,3285450751,UA
3285450752,3285453055,GB
3285453056,3285453119,EU
-3285453120,3285453415,GB
-3285453416,3285453423,EU
-3285453424,3285454847,GB
-3285454848,3285455695,DE
-3285455696,3285455711,EU
-3285455712,3285455743,DE
+3285453120,3285454847,GB
+3285454848,3285455103,EU
+3285455104,3285455743,DE
3285455744,3285455871,EU
3285455872,3285455887,DE
3285455888,3285455895,EU
3285455896,3285455903,GB
3285455904,3285455935,EU
-3285455936,3285456015,DE
-3285456016,3285456031,EU
+3285455936,3285456023,DE
+3285456024,3285456031,EU
3285456032,3285456255,DE
3285456256,3285456287,EU
3285456288,3285456351,DE
@@ -103282,7 +112123,8 @@
3285456896,3285456959,GB
3285456960,3285456975,EU
3285456976,3285457151,GB
-3285457152,3285457183,SE
+3285457152,3285457167,EU
+3285457168,3285457183,SE
3285457184,3285457231,EU
3285457232,3285457247,SE
3285457248,3285457279,EU
@@ -103291,10 +112133,8 @@
3285457664,3285457759,IT
3285457760,3285457791,EU
3285457792,3285457919,IT
-3285457920,3285457967,GB
-3285457968,3285457983,EU
-3285457984,3285458111,GB
-3285458112,3285458175,EU
+3285457920,3285458151,GB
+3285458152,3285458175,EU
3285458176,3285458943,GB
3285458944,3285458975,DK
3285458976,3285459007,EU
@@ -103312,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,3285461503,NL
-3285461504,3285461527,EU
-3285461528,3285461535,NL
+3285461456,3285461535,NL
3285461536,3285461567,EU
3285461568,3285461807,NL
3285461808,3285461855,EU
@@ -103335,9 +112170,7 @@
3285461992,3285461999,GB
3285462000,3285462007,NL
3285462008,3285462015,EU
-3285462016,3285462175,DE
-3285462176,3285462191,EU
-3285462192,3285462207,DE
+3285462016,3285462207,DE
3285462208,3285462223,GB
3285462224,3285462367,DE
3285462368,3285462399,EU
@@ -103346,37 +112179,35 @@
3285462544,3285462655,DE
3285462656,3285462783,EU
3285462784,3285462831,AT
-3285462832,3285462839,EU
-3285462840,3285462847,AT
-3285462848,3285462951,EU
+3285462832,3285462951,EU
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
3285463312,3285463319,BE
3285463320,3285463359,EU
3285463360,3285463455,BE
-3285463456,3285463519,EU
+3285463456,3285463487,EU
+3285463488,3285463503,GB
+3285463504,3285463519,EU
3285463520,3285463615,BE
3285463616,3285463647,FR
-3285463648,3285463743,BE
+3285463648,3285463663,BE
+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
3285464072,3285464095,BE
3285464096,3285464127,GB
3285464128,3285464319,EU
-3285464320,3285464351,BE
-3285464352,3285464359,EU
-3285464360,3285464383,BE
+3285464320,3285464383,BE
3285464384,3285464415,GB
3285464416,3285464431,BE
3285464432,3285464447,DE
@@ -103393,7 +112224,9 @@
3285465728,3285465855,EU
3285465856,3285465903,DE
3285465904,3285465911,EU
-3285465912,3285466367,DE
+3285465912,3285465951,DE
+3285465952,3285465983,EU
+3285465984,3285466367,DE
3285466368,3285466447,CH
3285466448,3285466455,EU
3285466456,3285466463,CH
@@ -103412,8 +112245,8 @@
3285467136,3285467391,DE
3285467392,3285467663,EU
3285467664,3285467679,DE
-3285467680,3285467775,EU
-3285467776,3285467823,DE
+3285467680,3285467711,EU
+3285467712,3285467823,DE
3285467824,3285467831,EU
3285467832,3285467839,DE
3285467840,3285467935,EU
@@ -103430,8 +112263,8 @@
3285469696,3285469727,EU
3285469728,3285471007,DE
3285471008,3285471039,EU
-3285471040,3285471055,DE
-3285471056,3285471103,EU
+3285471040,3285471071,DE
+3285471072,3285471103,EU
3285471104,3285471743,DE
3285471744,3285471807,EU
3285471808,3285471871,DE
@@ -103450,34 +112283,37 @@
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
3285473632,3285473663,DE
3285473664,3285473791,EU
3285473792,3285474047,DE
-3285474048,3285474079,EU
-3285474080,3285474095,DE
-3285474096,3285474175,EU
+3285474048,3285474095,EU
+3285474096,3285474111,DE
+3285474112,3285474175,EU
3285474176,3285474271,DE
3285474272,3285474303,EU
3285474304,3285474319,DE
3285474320,3285474335,EU
-3285474336,3285474815,DE
+3285474336,3285474367,DE
+3285474368,3285474383,EU
+3285474384,3285474815,DE
3285474816,3285475071,EU
3285475072,3285475135,DE
3285475136,3285475143,EU
3285475144,3285475167,DE
3285475168,3285475199,EU
3285475200,3285475207,DE
-3285475208,3285475231,EU
-3285475232,3285475327,DE
+3285475208,3285475215,EU
+3285475216,3285475327,DE
3285475328,3285475623,EU
3285475624,3285475647,AT
3285475648,3285475679,EU
-3285475680,3285475711,AT
+3285475680,3285475695,AT
+3285475696,3285475703,EU
+3285475704,3285475711,AT
3285475712,3285475775,EU
3285475776,3285475783,AT
3285475784,3285475807,EU
@@ -103494,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
@@ -103546,7 +112380,9 @@
3285485640,3285485647,SK
3285485648,3285485727,EU
3285485728,3285485743,SK
-3285485744,3285485799,EU
+3285485744,3285485751,EU
+3285485752,3285485759,SK
+3285485760,3285485799,EU
3285485800,3285485815,SK
3285485816,3285486591,EU
3285486592,3285487103,IT
@@ -103582,34 +112418,28 @@
3285492696,3285492735,GB
3285492736,3285493759,EU
3285493760,3285493775,ES
-3285493776,3285493783,EU
-3285493784,3285493887,ES
-3285493888,3285493967,EU
-3285493968,3285493983,ES
-3285493984,3285493991,GB
-3285493992,3285493999,EU
+3285493776,3285493791,EU
+3285493792,3285493887,ES
+3285493888,3285493951,EU
+3285493952,3285493983,ES
+3285493984,3285493999,EU
3285494000,3285494015,ES
3285494016,3285494079,IT
3285494080,3285494111,EU
3285494112,3285494783,IT
3285494784,3285495807,EU
3285495808,3285496319,DE
-3285496320,3285496335,ES
-3285496336,3285496351,EU
-3285496352,3285496383,ES
-3285496384,3285496463,EU
-3285496464,3285496471,ES
-3285496472,3285496479,EU
-3285496480,3285496495,ES
+3285496320,3285496383,ES
+3285496384,3285496447,EU
+3285496448,3285496471,ES
+3285496472,3285496495,EU
3285496496,3285496527,FR
3285496528,3285496543,EU
3285496544,3285496575,FR
3285496576,3285496607,EU
3285496608,3285497855,DE
3285497856,3285497887,EU
-3285497888,3285498031,DE
-3285498032,3285498047,EU
-3285498048,3285498079,DE
+3285497888,3285498079,DE
3285498080,3285498095,EU
3285498096,3285498111,DE
3285498112,3285498367,IT
@@ -103628,9 +112458,7 @@
3285500288,3285500415,CZ
3285500416,3285500927,GB
3285500928,3285501183,DK
-3285501184,3285501311,CZ
-3285501312,3285501319,EU
-3285501320,3285501327,CZ
+3285501184,3285501327,CZ
3285501328,3285501335,EU
3285501336,3285501343,CZ
3285501344,3285501375,GB
@@ -103639,8 +112467,8 @@
3285501440,3285501567,CZ
3285501568,3285501727,EU
3285501728,3285501759,GB
-3285501760,3285501767,CZ
-3285501768,3285502207,EU
+3285501760,3285501775,CZ
+3285501776,3285502207,EU
3285502208,3285502463,CZ
3285502464,3285502495,IL
3285502496,3285502503,CY
@@ -104402,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
@@ -104557,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
@@ -104570,7 +113398,8 @@
3285911552,3285912575,EU
3285912576,3285913087,GB
3285913088,3285913215,ES
-3285913216,3285913343,EU
+3285913216,3285913279,GB
+3285913280,3285913343,ES
3285913344,3285913599,GB
3285913600,3285915647,EU
3285915648,3285915903,GB
@@ -104581,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
@@ -104614,27 +113443,32 @@
3285926408,3285926415,ES
3285926416,3285926431,GB
3285926432,3285926463,CH
-3285926464,3285926479,GB
-3285926480,3285926783,EU
-3285926784,3285926799,GB
-3285926800,3285926847,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
+3285926816,3285926847,EU
3285926848,3285926911,GB
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,3285930495,GB
-3285930496,3285930559,EU
+3285929984,3285930559,GB
3285930560,3285930575,ES
3285930576,3285930623,GB
3285930624,3285930631,BE
@@ -104643,9 +113477,7 @@
3285930656,3285930671,NL
3285930672,3285930679,BE
3285930680,3285930687,DE
-3285930688,3285930703,GB
-3285930704,3285930751,EU
-3285930752,3285931007,GB
+3285930688,3285931007,GB
3285931008,3285932031,EU
3285932032,3285932287,NL
3285932288,3285932799,GB
@@ -104654,11 +113486,12 @@
3285933312,3285933567,ES
3285933568,3285934079,DE
3285934080,3285934591,GB
-3285934592,3285935103,EU
-3285935104,3285935615,GB
+3285934592,3285934847,ES
+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
@@ -104670,11 +113503,13 @@
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,3285940735,ES
-3285940736,3285941247,GB
+3285940224,3285940479,ES
+3285940480,3285941247,GB
3285941248,3285942655,EU
3285942656,3285942783,IR
3285942784,3285943039,ES
@@ -104683,17 +113518,19 @@
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,3285945727,GB
-3285945728,3285945855,EU
+3285945696,3285945743,GB
+3285945744,3285945855,EU
3285945856,3285946111,GB
3285946112,3285946367,ES
3285946368,3285946879,GB
@@ -104709,18 +113546,22 @@
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,3285950975,EU
+3285950784,3285950815,GB
+3285950816,3285950943,EU
+3285950944,3285950975,GB
3285950976,3285951231,NL
3285951232,3285951487,IT
-3285951488,3285951615,EU
+3285951488,3285951519,GB
+3285951520,3285951615,EU
3285951616,3285951647,GB
3285951648,3285951679,ES
-3285951680,3285951743,EU
+3285951680,3285951695,GB
+3285951696,3285951743,EU
3285951744,3285951999,GB
3285952000,3285952255,IT
3285952256,3285952511,SA
@@ -104734,7 +113575,11 @@
3285956864,3285957631,PT
3285957632,3285957887,PL
3285957888,3285958143,GB
-3285958144,3285958847,EU
+3285958144,3285958655,EU
+3285958656,3285958687,GB
+3285958688,3285958783,EU
+3285958784,3285958799,GB
+3285958800,3285958847,EU
3285958848,3285958895,NL
3285958896,3285959039,GB
3285959040,3285959167,DE
@@ -104755,7 +113600,10 @@
3285967616,3285968383,BE
3285968384,3285968639,ES
3285968640,3285968895,PL
-3285968896,3285971199,EU
+3285968896,3285971007,EU
+3285971008,3285971039,GB
+3285971040,3285971183,EU
+3285971184,3285971199,GB
3285971200,3285971455,FR
3285971456,3285971711,DE
3285971712,3285971967,GB
@@ -104763,7 +113611,13 @@
3285972224,3285972479,EU
3285972480,3285972735,PL
3285972736,3285972991,FR
-3285972992,3285975039,GB
+3285972992,3285973095,GB
+3285973096,3285973247,EU
+3285973248,3285973767,GB
+3285973768,3285973791,EU
+3285973792,3285973823,GB
+3285973824,3285974015,EU
+3285974016,3285975039,GB
3285975040,3286106111,FR
3286106112,3286106687,EE
3286106688,3286106691,FI
@@ -104791,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
@@ -104805,7 +113657,8 @@
3286313984,3286314495,CH
3286314496,3286315007,IL
3286315008,3286315519,UA
-3286315520,3286316031,DE
+3286315520,3286315775,SI
+3286315776,3286316031,BG
3286316032,3286316543,UA
3286316544,3286317055,NL
3286317056,3286317567,RU
@@ -104859,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
@@ -104889,7 +113744,7 @@
3286423808,3286424063,CZ
3286424064,3286424319,LV
3286424320,3286424575,FR
-3286424576,3286424831,UA
+3286424576,3286424831,RU
3286424832,3286425087,TR
3286425088,3286425343,RU
3286425344,3286425599,IT
@@ -104902,9 +113757,7 @@
3286566144,3286566271,TZ
3286566272,3286566655,AE
3286566656,3286567423,KW
-3286567424,3286568191,AE
-3286568192,3286568703,KW
-3286568704,3286571007,AE
+3286567424,3286571007,AE
3286571008,3286571775,KW
3286571776,3286630399,AE
3286630400,3286638591,BG
@@ -104913,6 +113766,7 @@
3286654976,3286655231,UA
3286655232,3286655487,KZ
3286655488,3286655743,LT
+3286655744,3286655999,RU
3286656000,3286656255,CH
3286656256,3286656511,RU
3286656512,3286656767,GR
@@ -104994,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
@@ -105103,7 +113890,6 @@
3286907392,3286907647,AT
3286907648,3286907903,ES
3286907904,3286908159,CH
-3286908160,3286908415,UA
3286908416,3286908671,FR
3286908672,3286908927,PL
3286908928,3286909951,CH
@@ -105261,9 +114047,7 @@
3287219712,3287220223,SE
3287220224,3287259375,RU
3287259376,3287259383,DK
-3287259384,3287267191,RU
-3287267192,3287267201,KZ
-3287267202,3287271119,RU
+3287259384,3287271119,RU
3287271120,3287271127,UZ
3287271128,3287285759,RU
3287285760,3287416831,NL
@@ -105292,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
@@ -105347,7 +114132,8 @@
3287468032,3287469055,UA
3287469056,3287471103,DE
3287471104,3287472127,GB
-3287472128,3287473151,FI
+3287472128,3287472639,RU
+3287472640,3287473151,UA
3287473152,3287474175,GB
3287474176,3287476223,DE
3287476224,3287477247,PL
@@ -105356,32 +114142,23 @@
3287479296,3287480319,RO
3287480320,3287481343,AT
3287481344,3287482367,PL
-3287482368,3287499279,DE
-3287499280,3287499287,FR
-3287499288,3287499295,US
-3287499296,3287499439,DE
+3287482368,3287499439,DE
3287499440,3287499471,GB
3287499472,3287499487,DE
3287499488,3287499503,GB
-3287499504,3287501359,DE
-3287501360,3287501367,NL
-3287501368,3287507983,DE
+3287499504,3287507983,DE
3287507984,3287507991,FR
3287507992,3287515375,DE
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
3287541096,3287542815,DE
3287542816,3287542831,US
-3287542832,3287544647,DE
-3287544648,3287544655,CH
-3287544656,3287548927,DE
+3287542832,3287548927,DE
3287548928,3287549439,UA
3287549440,3287549951,SE
3287549952,3287550463,UA
@@ -105400,7 +114177,9 @@
3287564288,3287572479,FI
3287572480,3287578863,DE
3287578864,3287578879,LI
-3287578880,3287580671,DE
+3287578880,3287580575,DE
+3287580576,3287580607,LI
+3287580608,3287580671,DE
3287580672,3287588863,LV
3287588864,3287597055,BE
3287597056,3287605247,GI
@@ -105411,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
@@ -105423,7 +114202,6 @@
3287638528,3287639039,DE
3287639040,3287639551,GB
3287639552,3287640063,RU
-3287640064,3287640575,DE
3287640576,3287641087,SI
3287641088,3287641599,A2
3287641600,3287642111,FI
@@ -105515,36 +114293,11 @@
3287710208,3287710719,RU
3287710720,3287711231,UA
3287711232,3287711743,PL
-3287711744,3287711983,GB
-3287711984,3287711999,FR
-3287712000,3287712512,GB
-3287712513,3287713023,FR
-3287713024,3287713439,GB
-3287713440,3287713471,FR
-3287713472,3287713535,GB
-3287713536,3287713567,FR
-3287713568,3287713591,GB
-3287713592,3287713598,FR
-3287713599,3287713599,GB
-3287713600,3287713603,FR
-3287713604,3287713611,GB
-3287713612,3287713615,FR
-3287713616,3287713623,GB
-3287713624,3287713667,FR
-3287713668,3287713775,GB
-3287713776,3287713791,FR
-3287713792,3287714047,GB
-3287714048,3287715071,FR
-3287715072,3287715327,GB
-3287715328,3287715839,FR
-3287715840,3287716127,GB
-3287716128,3287716143,FR
-3287716144,3287717631,GB
-3287717632,3287717887,FR
-3287717888,3287718719,GB
-3287718720,3287718731,FR
-3287718732,3287718735,GB
-3287718736,3287719935,FR
+3287711744,3287718911,GB
+3287718912,3287719167,FR
+3287719168,3287719423,GB
+3287719424,3287719679,FR
+3287719680,3287719935,GB
3287719936,3287728127,DE
3287728128,3287729407,IT
3287729408,3287729663,SE
@@ -105563,7 +114316,7 @@
3287736832,3287737343,LV
3287737344,3287737855,GB
3287737856,3287738367,FR
-3287738368,3287738879,GB
+3287738368,3287738879,CH
3287738880,3287739391,DE
3287739392,3287739903,NL
3287739904,3287740415,PT
@@ -105576,9 +114329,7 @@
3287743488,3287743999,LV
3287744000,3287744511,FR
3287744512,3287810047,DE
-3287810048,3287816495,FR
-3287816496,3287816511,A2
-3287816512,3287818239,FR
+3287810048,3287818239,FR
3287818240,3287826431,AT
3287826432,3287826687,LV
3287826688,3287826943,RO
@@ -105652,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
@@ -105670,7 +114422,6 @@
3287955712,3287955967,DE
3287955968,3287956223,SI
3287956224,3287956479,RO
-3287956480,3287956735,FR
3287956736,3287956991,SE
3287956992,3287957247,UA
3287957248,3287957503,GB
@@ -105773,7 +114524,6 @@
3288444928,3288449023,NG
3288449024,3288465407,SD
3288465408,3288465919,JM
-3288465920,3288466175,BW
3288466176,3288466431,MU
3288466432,3288467455,SY
3288467456,3288469503,BI
@@ -105948,9 +114698,11 @@
3290489344,3290489855,KE
3290489856,3290490367,EG
3290490880,3290492927,ZA
+3290492928,3290494975,TZ
3290497024,3290955775,ZA
3290955776,3290980351,CR
3290980352,3290984447,ZA
+3290988544,3290992639,KE
3291004928,3291021311,NG
3291021312,3291029503,ZA
3291029504,3291033343,TZ
@@ -105980,6 +114732,18 @@
3291205632,3291206143,ZA
3291206144,3291206399,AO
3291206400,3291206911,KE
+3291207168,3291207423,MG
+3291207424,3291207679,NG
+3291207680,3291207935,BW
+3291207936,3291208447,KE
+3291208448,3291208703,EG
+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
@@ -106004,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
@@ -106053,8 +114819,7 @@
3291437568,3291437823,NA
3291437824,3291439103,ZA
3291447296,3291463679,CI
-3291480064,3291480319,MU
-3291742208,3292004351,ZA
+3291480064,3292528639,ZA
3300917248,3300921343,MU
3300925440,3300929535,MG
3300933632,3300950015,MU
@@ -106131,6 +114896,7 @@
3302536192,3302537215,GH
3302537216,3302538239,NG
3302538240,3302539263,GH
+3302551552,3302552063,EG
3302552064,3302552575,KE
3302552576,3302552831,TZ
3302552832,3302553087,KE
@@ -106159,9 +114925,9 @@
3302776832,3302785023,ZW
3302801408,3302805503,NG
3302805504,3302809599,MW
-3302809600,3302817791,NG
+3302813696,3302817791,NG
3302817792,3302883327,EG
-3302883328,3302948863,MA
+3302883328,3302948863,RW
3302948864,3302949119,MU
3302949120,3302949375,AO
3302949376,3302949631,ZM
@@ -106182,38 +114948,75 @@
3302954240,3302954495,KE
3302954496,3302955007,ZA
3302955008,3302955263,LS
+3302955264,3302955519,UG
+3302955520,3302955775,ZW
+3302955776,3302956031,MW
3305111552,3307208703,TN
-3309305856,3310354431,ZA
-3311403008,3312451583,ZA
+3307208704,3309305855,EG
+3309305856,3312451583,ZA
+3312451584,3312975871,DZ
3312975872,3313500159,EG
3313500160,3313762303,MA
3313762304,3314024447,EG
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
3317694464,3318218751,EG
3318218752,3318743039,DZ
+3319398400,3319529471,MZ
3319529472,3319537663,ZM
-3319537664,3319545855,UG
+3319537664,3319545855,MW
+3319545856,3319554047,SO
+3319554048,3319562239,KE
+3319562240,3319570431,LS
+3319570432,3319578623,GH
+3319578624,3319595007,ZM
+3319595008,3319611391,ZA
+3319611392,3319619583,GH
+3319619584,3319627775,ZA
+3319627776,3319635967,UG
+3319635968,3319644159,ZA
+3319644160,3319652351,TZ
3319652352,3319660543,ZW
3319660544,3319791615,EG
3319791616,3320053759,MU
3320578048,3320643583,ZA
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
3321724928,3321757695,MA
3321757696,3321790463,KE
3321790464,3321806847,LS
3321806848,3321823231,SD
3321823232,3321839615,NG
-3321839616,3321855999,MU
+3321839616,3321855999,GH
3321856000,3321860095,CV
3321860096,3321864191,ZA
3321864192,3321868287,NG
3321868288,3321872383,CG
+3321872384,3321876479,GM
+3321876480,3321880575,NG
+3321880576,3321884671,KM
3321954304,3321970687,US
3322019840,3322023935,US
3322023936,3322028031,CL
@@ -106303,9 +115106,11 @@
3323662336,3323674623,US
3323723776,3324011007,US
3324011008,3324011263,KN
-3324011264,3324019711,US
-3324019712,3324019967,KN
-3324019968,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
@@ -106318,7 +115123,9 @@
3324379136,3324380159,CA
3324380160,3324391423,US
3324395520,3324399615,US
-3324411904,3324579839,US
+3324411904,3324470271,US
+3324470272,3324471295,GB
+3324471296,3324579839,US
3324579840,3324583935,NZ
3324583936,3324588031,CL
3324592128,3324596223,US
@@ -106572,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
@@ -106916,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
@@ -106938,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
@@ -106955,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
@@ -106966,20 +115781,27 @@
3339753472,3339754495,CA
3339754496,3339760639,US
3339760640,3339761663,CA
-3339761664,3339778303,US
-3339778304,3339778367,GB
-3339778368,3339778431,US
-3339778432,3339778495,CY
+3339761664,3339778431,US
+3339778432,3339778447,CY
+3339778448,3339778455,US
+3339778456,3339778471,CY
+3339778472,3339778479,US
+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
@@ -106992,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
@@ -107098,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
@@ -107137,7 +115962,9 @@
3341778944,3341807615,US
3341807616,3341808639,CA
3341808640,3341828095,US
-3341844480,3341854551,US
+3341844480,3341854079,US
+3341854080,3341854207,SG
+3341854208,3341854551,US
3341854552,3341854559,SG
3341854560,3341863935,US
3341863936,3341864959,AG
@@ -107172,15 +115999,69 @@
3342605312,3342605567,US
3342605568,3342663679,CA
3342663680,3343007743,US
-3343024128,3343055871,US
+3343024128,3343046915,US
+3343046916,3343046919,GB
+3343046920,3343046927,IT
+3343046928,3343046939,US
+3343046940,3343046943,RU
+3343046944,3343046947,KW
+3343046948,3343046951,PT
+3343046952,3343046955,US
+3343046956,3343046959,IT
+3343046960,3343046963,BE
+3343046964,3343046967,US
+3343046968,3343046971,NL
+3343046972,3343046979,US
+3343046980,3343046983,GB
+3343046984,3343046987,US
+3343046988,3343046991,CA
+3343046992,3343046999,US
+3343047000,3343047003,RU
+3343047004,3343047011,US
+3343047012,3343047015,AU
+3343047016,3343047039,US
+3343047040,3343047047,CA
+3343047048,3343047079,US
+3343047080,3343047087,GR
+3343047088,3343047111,US
+3343047112,3343047127,SG
+3343047128,3343047143,US
+3343047144,3343047159,IT
+3343047160,3343047327,US
+3343047328,3343047343,IT
+3343047344,3343047423,US
+3343047424,3343047439,RU
+3343047440,3343047455,UA
+3343047456,3343047471,IE
+3343047472,3343047519,US
+3343047520,3343047535,IN
+3343047536,3343047599,US
+3343047600,3343047615,GB
+3343047616,3343047687,US
+3343047688,3343047695,CA
+3343047696,3343047727,US
+3343047728,3343047735,CA
+3343047736,3343047743,US
+3343047744,3343047751,AU
+3343047752,3343047759,BR
+3343047760,3343047791,US
+3343047792,3343047799,PL
+3343047800,3343047847,US
+3343047848,3343047855,IT
+3343047856,3343047863,US
+3343047864,3343047871,RU
+3343047872,3343047879,AU
+3343047880,3343047903,US
+3343047904,3343047911,AR
+3343047912,3343047935,US
+3343047936,3343047967,CA
+3343047968,3343055871,US
3343055872,3343056895,CA
3343056896,3343167487,US
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
@@ -107197,7 +116078,9 @@
3344146432,3344154623,US
3344154624,3344156671,GD
3344156672,3344158719,CA
-3344158720,3344166911,US
+3344158720,3344165631,US
+3344165632,3344165663,MX
+3344165664,3344166911,US
3344166912,3344168959,CA
3344168960,3344171007,US
3344171008,3344255999,CA
@@ -107218,7 +116101,9 @@
3344302080,3344406527,US
3344406528,3344408575,CA
3344408576,3344429055,US
-3344429056,3344431103,CA
+3344429056,3344429343,CA
+3344429344,3344429375,US
+3344429376,3344431103,CA
3344431104,3344486399,US
3344486400,3344488447,NL
3344488448,3344633855,US
@@ -107226,9 +116111,7 @@
3344637952,3344642047,US
3344662528,3344670719,US
3344670720,3344671743,GP
-3344671744,3344673919,US
-3344673920,3344673983,GB
-3344673984,3344676863,US
+3344671744,3344676863,US
3344676864,3344678911,CA
3344678912,3344681983,US
3344681984,3344685055,CA
@@ -107248,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
@@ -107258,11 +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,3345418239,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,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,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
@@ -107309,10 +116298,55 @@
3346241536,3346243583,CA
3346243584,3346282495,US
3346282496,3346284543,PR
-3346333696,3346923519,US
+3346300928,3346323455,US
+3346323456,3346325503,CA
+3346325504,3346327551,US
+3346327552,3346328575,CA
+3346328576,3346481151,US
+3346497536,3346498559,CA
+3346498560,3346499583,US
+3346499584,3346501631,VI
+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
+3346521088,3346522347,US
+3346522348,3346522350,BD
+3346522351,3346522401,US
+3346522402,3346522404,IN
+3346522405,3346522411,US
+3346522412,3346522413,AE
+3346522414,3346522691,US
+3346522692,3346522704,PT
+3346522705,3346522773,US
+3346522774,3346522783,PT
+3346522784,3346523113,US
+3346523114,3346523121,TH
+3346523122,3346523135,US
+3346523136,3346523391,BO
+3346523392,3346523647,RU
+3346523648,3346523903,US
+3346523904,3346524159,FR
+3346524160,3346525183,CA
+3346525184,3346528255,US
+3346528256,3346529279,PR
+3346529280,3346530303,CA
+3346530304,3346923519,US
3346923520,3346989055,CA
3346989056,3347005439,US
-3347054592,3349268479,US
+3347021824,3347022847,CA
+3347022848,3347030527,US
+3347030528,3347030783,IN
+3347030784,3347033087,US
+3347033088,3347034111,CA
+3347034112,3347039231,US
+3347039232,3347040255,DM
+3347040256,3349268479,US
3349268480,3349268991,CA
3349268992,3349273087,US
3349273088,3349273343,CA
@@ -107329,7 +116363,33 @@
3349608448,3349609215,US
3349609216,3349610495,CA
3349610496,3349614591,US
-3349676032,3349987327,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,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,3349739551,CA
+3349739552,3349739559,US
+3349739560,3349740543,CA
+3349740544,3349987327,US
3349987328,3349996543,BM
3349996544,3349997055,KY
3349997056,3350003711,BM
@@ -107346,7 +116406,27 @@
3350470656,3350475775,US
3350475776,3350476799,CA
3350476800,3350478847,US
-3350528000,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
@@ -107355,14 +116435,50 @@
3350825984,3350855679,CA
3350855680,3350862079,US
3350862080,3350864639,CL
-3350864640,3350953983,US
-3350986752,3350994943,US
+3350864640,3350970367,US
+3350970368,3350971391,CA
+3350971392,3350979583,US
+3350979584,3350980607,CA
+3350980608,3350994943,US
3350994944,3350998015,CA
3350998016,3350999039,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
@@ -107468,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
@@ -107476,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
@@ -107487,7 +116607,9 @@
3352066048,3352067071,CA
3352067072,3352068095,US
3352068096,3352069119,CA
-3352069120,3352082431,US
+3352069120,3352069919,US
+3352069920,3352069935,CO
+3352069936,3352082431,US
3352082432,3352083455,JM
3352083456,3352088575,US
3352088576,3352090623,CA
@@ -107504,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
@@ -107534,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
@@ -107834,7 +116986,7 @@
3356102656,3356105727,CL
3356105728,3356106751,SV
3356106752,3356113919,BR
-3356113920,3356114431,UY
+3356113920,3356114943,UY
3356114944,3356123135,PE
3356123136,3356131839,AR
3356131840,3356132351,PE
@@ -107890,7 +117042,6 @@
3356157952,3356158207,CL
3356158208,3356158463,MX
3356158464,3356158719,CL
-3356158720,3356158975,AR
3356158976,3356159743,CL
3356159744,3356160255,MX
3356160256,3356160511,GT
@@ -108005,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
@@ -108024,6 +117175,8 @@
3356380928,3356381183,DO
3356381184,3356381439,CL
3356381440,3356381695,PA
+3356381696,3356381951,CL
+3356381952,3356382207,EC
3356382208,3356389375,CL
3356389376,3356389887,CO
3356389888,3356390399,CL
@@ -108044,9 +117197,15 @@
3356508160,3356508671,AR
3356508672,3356509183,CR
3356509184,3356510207,VE
-3356510208,3356514303,AR
+3356510208,3356511999,AR
+3356512000,3356512255,CO
+3356512256,3356514303,AR
3356514304,3356514559,US
3356514560,3356514815,AR
+3356514816,3356515327,DO
+3356515328,3356515839,AN
+3356515840,3356516095,EC
+3356516096,3356516351,VE
3356516352,3356520447,AR
3356520448,3356521471,CL
3356521472,3356521727,AR
@@ -108190,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
@@ -108213,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
@@ -108302,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
@@ -108436,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
@@ -108466,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
@@ -108532,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
@@ -108630,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
@@ -108647,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
@@ -108698,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
@@ -108722,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
@@ -108749,7 +117927,7 @@
3362529280,3362533375,PA
3362537472,3362545663,AR
3362545664,3362549759,PE
-3362549760,3362551807,AR
+3362549760,3362553855,AR
3362553856,3362557951,PY
3362562048,3362563071,BZ
3362563072,3362563199,PA
@@ -108829,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
@@ -108846,18 +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,3384147967,AR
+3384147968,3384213503,PA
3384279040,3384410111,CO
-3384541184,3384672255,CL
+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
@@ -108872,6 +118056,7 @@
3386458112,3386474495,EC
3386474496,3386490879,UY
3386490880,3386499071,CO
+3386499072,3386503167,AR
3386507264,3386523647,EC
3386523648,3386540031,PA
3386540032,3386548223,CL
@@ -109395,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
@@ -109531,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
@@ -109690,7 +118874,6 @@
3392440832,3392441343,BD
3392441344,3392441855,ID
3392441856,3392442111,AU
-3392442112,3392442367,IN
3392442368,3392442623,HK
3392442624,3392442879,AU
3392442880,3392443391,ID
@@ -111070,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
@@ -111399,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
@@ -111833,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
@@ -112026,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
@@ -112050,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
@@ -112346,6 +121513,7 @@
3411644928,3411645951,ID
3411645952,3411646207,SG
3411646208,3411647487,IN
+3411647488,3411648511,AU
3411648512,3411656703,NZ
3411656704,3411673087,AU
3411673088,3411674111,CN
@@ -112704,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
@@ -113629,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
@@ -113706,7 +122869,6 @@
3418963968,3418988543,AU
3418988544,3418992639,ID
3418992640,3418993919,SG
-3418993920,3418994175,MN
3418994176,3418994431,MY
3418994432,3418994687,AU
3418994688,3418995711,MY
@@ -113748,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
@@ -113799,7 +122963,7 @@
3419878144,3419878399,IN
3419878400,3419879423,GU
3419879424,3419880447,JP
-3419880448,3419881471,MY
+3419880448,3419881471,MM
3419881472,3419897855,PH
3419897856,3419899903,JP
3419899904,3419900159,FR
@@ -113832,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
@@ -113956,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
@@ -114031,7 +123195,9 @@
3423161480,3423161487,HK
3423161488,3423161613,US
3423161614,3423161621,CA
-3423161622,3423162303,US
+3423161622,3423162159,US
+3423162160,3423162167,MX
+3423162168,3423162303,US
3423162304,3423162311,GB
3423162312,3423162367,US
3423162368,3423163391,CA
@@ -114371,7 +123537,11 @@
3423370872,3423370879,VG
3423370880,3423371263,US
3423371264,3423375359,ZA
-3423375360,3423379455,CA
+3423375360,3423378175,CA
+3423378176,3423378303,US
+3423378304,3423378431,CA
+3423378432,3423378943,US
+3423378944,3423379455,CA
3423379456,3423393903,US
3423393904,3423393911,RU
3423393912,3423396487,US
@@ -114441,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
@@ -114450,9 +123622,7 @@
3423584424,3423584431,US
3423584432,3423584447,CA
3423584448,3423584455,US
-3423584456,3423584503,CA
-3423584504,3423584511,US
-3423584512,3423584687,CA
+3423584456,3423584687,CA
3423584688,3423584703,US
3423584704,3423584719,CA
3423584720,3423584735,US
@@ -114460,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
@@ -114512,33 +123680,55 @@
3423652000,3423653887,CA
3423653888,3423705599,US
3423705600,3423705855,CA
-3423705856,3423797247,US
-3423797248,3423823359,CA
+3423705856,3423797503,US
+3423797504,3423801087,CA
+3423801088,3423801343,US
+3423801344,3423823359,CA
3423823360,3423823871,US
3423823872,3423827711,CA
3423827712,3423827967,US
-3423827968,3423848447,CA
+3423827968,3423830271,CA
+3423830272,3423830527,US
+3423830528,3423838719,CA
+3423838720,3423838975,US
+3423838976,3423848447,CA
3423848448,3423849471,KN
-3423849984,3423858175,CA
+3423849472,3423849983,US
+3423849984,3423850495,CA
+3423850496,3423850751,US
+3423850752,3423854335,CA
+3423854336,3423854591,US
+3423854592,3423858175,CA
3423858176,3423858687,US
-3423858688,3423862783,CA
-3423862784,3424334847,US
+3423858688,3423858943,CA
+3423858944,3423859455,US
+3423859456,3423859711,CA
+3423859712,3423859967,US
+3423859968,3423862527,CA
+3423862528,3424334847,US
3424334848,3424335871,CA
3424335872,3424378879,US
3424378880,3424379135,PR
-3424379136,3424493823,US
+3424379136,3424412415,US
+3424412416,3424412671,CA
+3424412672,3424493823,US
3424493824,3424494079,CA
-3424494080,3424494335,US
-3424494592,3425173503,US
+3424494080,3424507135,US
+3424507136,3424507391,CA
+3424507392,3425173503,US
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,3425855231,CA
-3425855232,3425855487,US
-3425855488,3425869167,CA
+3425830832,3425850519,CA
+3425850520,3425850527,US
+3425850528,3425864711,CA
+3425864712,3425864719,US
+3425864720,3425869167,CA
3425869168,3425869183,US
3425869184,3425875391,CA
3425875392,3425875407,US
@@ -114555,26 +123745,43 @@
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,3426618911,US
-3426618912,3426618943,NZ
-3426618944,3426646015,US
+3426618704,3426618735,US
+3426618736,3426618751,NZ
+3426618752,3426618911,US
+3426618912,3426619071,NZ
+3426619072,3426619167,US
+3426619168,3426619247,NZ
+3426619248,3426619263,US
+3426619264,3426619295,NZ
+3426619296,3426646015,US
3426646016,3426647039,CA
-3426647040,3426744319,US
+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,3427128831,US
-3427129344,3427618303,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
@@ -114674,8 +123881,7 @@
3427773696,3427773951,FR
3427773952,3427774719,US
3427774720,3427775231,DE
-3427775232,3427775999,US
-3427776000,3427776511,HK
+3427775232,3427776511,US
3427776512,3427776767,CZ
3427776768,3427777023,US
3427777024,3427777279,NL
@@ -114730,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
@@ -114960,7 +124174,7 @@
3428646016,3428646079,CA
3428646080,3428646143,US
3428646144,3428646911,CA
-3428646912,3428739327,US
+3428679680,3428739327,US
3428739328,3428739343,GB
3428739344,3428743167,US
3428743168,3428744191,CA
@@ -115013,7 +124227,9 @@
3430703872,3430704127,PR
3430704128,3430705151,US
3430705152,3430706175,MX
-3430706176,3430747903,US
+3430706176,3430722303,US
+3430722304,3430722559,CA
+3430722560,3430747903,US
3430747904,3430748159,CA
3430748160,3430749951,US
3430749952,3430750207,CA
@@ -115101,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
@@ -115185,10 +124402,12 @@
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,HN
+3434427392,3434428415,HR
3434428416,3434433279,US
3434433280,3434433535,PR
3434433536,3434553343,US
@@ -115202,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
@@ -115232,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
@@ -115387,7 +124628,9 @@
3437792280,3437792287,SE
3437792288,3437792415,US
3437792416,3437792423,AU
-3437792424,3437792735,US
+3437792424,3437792527,US
+3437792528,3437792535,MX
+3437792536,3437792735,US
3437792736,3437792743,CA
3437792744,3437792775,US
3437792776,3437792783,CA
@@ -115576,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
@@ -115586,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
@@ -115746,7 +124989,9 @@
3448546176,3448546207,SG
3448546208,3448546431,US
3448546432,3448546455,AU
-3448546456,3448556671,US
+3448546456,3448547583,US
+3448547584,3448547599,SG
+3448547600,3448556671,US
3448556672,3448556735,GB
3448556736,3448556799,US
3448556800,3448556815,GB
@@ -115758,7 +125003,12 @@
3448563016,3448563031,GB
3448563032,3448569055,US
3448569056,3448569087,MX
-3448569088,3449001245,US
+3448569088,3448569735,US
+3448569736,3448569743,GB
+3448569744,3448983807,US
+3448983808,3448983871,GB
+3448983872,3448985599,US
+3448987648,3449001245,US
3449001246,3449001246,MC
3449001247,3449159679,US
3449159680,3449160703,CA
@@ -115957,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
@@ -115982,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
@@ -116221,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
@@ -116336,18 +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,3453599999,US
+3453555768,3453583615,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,3453607935,US
+3453601880,3453602175,US
+3453602176,3453602183,GB
+3453602184,3453602207,US
+3453602208,3453602223,GB
+3453602224,3453607935,US
3453607936,3453608959,KN
3453608960,3453609983,LC
3453609984,3453610495,AG
@@ -116361,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
@@ -116401,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
@@ -116570,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
@@ -116616,7 +125906,9 @@
3457859840,3457860095,CA
3457860096,3457862847,US
3457862848,3457862911,CA
-3457862912,3458084927,US
+3457862912,3457892351,US
+3457892352,3457892623,IN
+3457892624,3458084927,US
3458084928,3458084935,CA
3458084936,3458141631,US
3458141632,3458141655,GB
@@ -116826,7 +126118,11 @@
3459745536,3459745791,IT
3459745792,3459850431,US
3459850432,3459850495,CA
-3459850496,3460104703,US
+3459850496,3459852991,US
+3459852992,3459853007,CA
+3459853008,3459873807,US
+3459873808,3459873823,IT
+3459873824,3460104703,US
3460104704,3460105215,MX
3460105216,3460108895,US
3460108896,3460108903,FI
@@ -116844,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
@@ -117271,7 +126569,11 @@
3461286336,3461286399,US
3461286400,3461286463,FR
3461286464,3461286471,GB
-3461286472,3461330943,US
+3461286472,3461286503,US
+3461286504,3461286511,GB
+3461286512,3461286519,US
+3461286520,3461286543,GB
+3461286544,3461330943,US
3461330944,3461331199,SG
3461331200,3461331247,US
3461331248,3461331263,SG
@@ -117289,10 +126591,7 @@
3461332736,3461332991,SG
3461332992,3461408767,US
3461410816,3461414911,CA
-3461414912,3461435647,US
-3461435648,3461435903,CA
-3461435904,3461436159,US
-3461436416,3461513215,US
+3461414912,3461513215,US
3461513216,3461513727,CA
3461513728,3461513983,BF
3461513984,3461514495,CA
@@ -117466,8 +126765,8 @@
3464128000,3464128255,DE
3464128256,3464129535,US
3464129536,3464130047,DE
-3464130048,3464167423,US
-3464167424,3464171775,CA
+3464130048,3464167679,US
+3464167680,3464171775,CA
3464171776,3464172031,US
3464172032,3464180735,CA
3464180736,3464184487,US
@@ -117483,9 +126782,10 @@
3464191800,3464191807,AF
3464191808,3464191815,US
3464191816,3464191823,CA
-3464191824,3464191831,US
-3464191832,3464191847,CA
-3464191848,3464195543,US
+3464191824,3464191911,US
+3464191912,3464191919,ES
+3464191920,3464191927,SG
+3464191928,3464195543,US
3464195544,3464195551,IT
3464195552,3464195887,US
3464195888,3464195895,PR
@@ -117509,11 +126809,21 @@
3464340480,3464341503,CA
3464341504,3464341759,US
3464341760,3464341775,JP
-3464341776,3464341823,US
+3464341776,3464341783,AU
+3464341784,3464341799,US
+3464341800,3464341807,CA
+3464341808,3464341815,JP
+3464341816,3464341823,US
3464341824,3464341831,PT
-3464341832,3464341951,US
-3464341952,3464341959,CZ
-3464341960,3464342543,US
+3464341832,3464341871,US
+3464341872,3464341879,VN
+3464341880,3464341895,US
+3464341896,3464341903,GB
+3464341904,3464341927,US
+3464341928,3464341935,CV
+3464341936,3464341983,US
+3464341984,3464341991,PR
+3464341992,3464342543,US
3464342544,3464342559,SE
3464342560,3464342567,US
3464342568,3464342575,PT
@@ -117533,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
@@ -117608,9 +126893,29 @@
3465466880,3465466975,GB
3465466976,3465467071,US
3465467072,3465467079,GB
-3465467080,3465510911,US
+3465467080,3465468079,US
+3465468080,3465468087,GB
+3465468088,3465468351,US
+3465468352,3465468367,FI
+3465468368,3465468383,US
+3465468384,3465468399,GB
+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,3465982991,US
+3465543680,3465953503,US
+3465953504,3465953535,CA
+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
@@ -117624,7 +126929,9 @@
3465983464,3465983487,GB
3465983488,3466044903,US
3466044904,3466044911,PH
-3466044912,3466158079,US
+3466044912,3466067967,US
+3466067968,3466068247,CA
+3466068248,3466158079,US
3466158080,3466166271,PA
3466166272,3466282111,US
3466282112,3466282119,GB
@@ -117634,7 +126941,11 @@
3466283328,3466283391,CA
3466283392,3466286103,US
3466286104,3466286111,DE
-3466286112,3466313727,US
+3466286112,3466290687,US
+3466290688,3466290943,CH
+3466290944,3466294271,US
+3466294272,3466294319,CA
+3466294320,3466313727,US
3466313728,3466317823,CA
3466317824,3466489855,US
3466489856,3466490111,CA
@@ -117654,7 +126965,9 @@
3466756096,3466772479,CA
3466772480,3466846207,US
3466846208,3466854399,CA
-3466854400,3467051007,US
+3466854400,3466958079,US
+3466958080,3466958335,CA
+3466958336,3467051007,US
3467051008,3467116543,CA
3467116544,3467145351,US
3467145352,3467145359,DE
@@ -118033,7 +127346,9 @@
3468624552,3468624559,US
3468624560,3468625727,CA
3468625728,3468625743,US
-3468625744,3468627087,CA
+3468625744,3468627015,CA
+3468627016,3468627023,US
+3468627024,3468627087,CA
3468627088,3468627103,US
3468627104,3468627247,CA
3468627248,3468627263,US
@@ -118085,7 +127400,8 @@
3469186560,3469893631,US
3469893632,3469901823,CA
3469901824,3470131199,US
-3470131200,3470137343,AG
+3470131200,3470135295,AG
+3470135296,3470137343,LC
3470137344,3470139391,VG
3470139392,3470148095,US
3470148096,3470148351,CA
@@ -118095,13 +127411,11 @@
3470150656,3470150911,CA
3470150912,3470151295,US
3470151296,3470151359,CA
-3470151360,3470151935,US
-3470151936,3470152703,CA
+3470151360,3470151679,US
+3470151680,3470152703,CA
3470152704,3470152959,US
3470152960,3470152975,CA
-3470152976,3470153983,US
-3470153984,3470154239,CA
-3470154240,3470184454,US
+3470152976,3470184454,US
3470184455,3470184458,LK
3470184459,3470184460,RU
3470184461,3470184476,US
@@ -118333,7 +127647,7 @@
3470186746,3470186757,US
3470186758,3470186761,CA
3470186762,3470186765,US
-3470186766,3470186769,RO
+3470186766,3470186769,HU
3470186770,3470186785,US
3470186786,3470186789,GB
3470186790,3470186805,US
@@ -118576,26 +127890,41 @@
3470188542,3470192639,US
3470192640,3470196735,CA
3470196736,3470360623,US
-3470360624,3470360631,SG
-3470360632,3470360639,CA
+3470360624,3470360639,CA
3470360640,3470360687,US
3470360688,3470360695,AF
3470360696,3470360799,US
3470360800,3470360807,CA
-3470360808,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
3470362136,3470362143,NL
-3470362144,3470362175,US
+3470362144,3470362159,US
+3470362160,3470362167,AF
+3470362168,3470362175,US
3470362176,3470362191,CA
3470362192,3470362263,US
3470362264,3470362271,NZ
@@ -118603,15 +127932,12 @@
3470362320,3470362335,AF
3470362336,3470362455,US
3470362456,3470362471,CA
-3470362472,3470362487,US
-3470362488,3470362495,ES
-3470362496,3470362503,CA
-3470362504,3470362559,US
+3470362472,3470362543,US
+3470362544,3470362559,SE
3470362560,3470362623,CA
-3470362624,3470362719,US
-3470362720,3470362727,CA
-3470362728,3470362783,US
-3470362784,3470362791,AF
+3470362624,3470362731,US
+3470362732,3470362735,AE
+3470362736,3470362791,US
3470362792,3470362799,SG
3470362800,3470362847,US
3470362848,3470362855,AR
@@ -118624,15 +127950,21 @@
3470363544,3470363555,AF
3470363556,3470363559,US
3470363560,3470363567,CA
-3470363568,3470363871,US
-3470363872,3470363879,CA
-3470363880,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
-3470363984,3470364415,US
-3470364416,3470364503,CA
-3470364504,3470364655,US
+3470363984,3470364047,US
+3470364048,3470364063,CA
+3470364064,3470364095,US
+3470364096,3470364103,AU
+3470364104,3470364415,US
+3470364416,3470364479,CA
+3470364480,3470364655,US
3470364656,3470364663,CA
3470364664,3470458879,US
3470458880,3470475263,KR
@@ -118657,7 +127989,8 @@
3470645632,3470645655,US
3470645656,3470645663,RU
3470645664,3470645687,US
-3470645688,3470645703,ES
+3470645688,3470645695,ES
+3470645696,3470645703,NL
3470645704,3470645731,US
3470645732,3470645735,AU
3470645736,3470645739,CN
@@ -118665,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
@@ -118713,8 +128048,7 @@
3470646608,3470646623,ZA
3470646624,3470646631,DE
3470646632,3470646639,BR
-3470646640,3470646663,US
-3470646664,3470646671,PL
+3470646640,3470646671,US
3470646672,3470646679,BR
3470646680,3470646687,CA
3470646688,3470646703,US
@@ -118737,8 +128071,8 @@
3470646912,3470646919,RU
3470646920,3470646935,US
3470646936,3470646943,CA
-3470646944,3470646959,BR
-3470646960,3470646983,US
+3470646944,3470646951,BR
+3470646952,3470646983,US
3470646984,3470646991,AR
3470646992,3470646999,CN
3470647000,3470651391,US
@@ -118797,9 +128131,7 @@
3470660080,3470660087,CA
3470660088,3470660103,US
3470660104,3470660111,HK
-3470660112,3470660159,US
-3470660160,3470660191,IL
-3470660192,3470660199,US
+3470660112,3470660199,US
3470660200,3470660215,AU
3470660216,3470660223,US
3470660224,3470660255,PH
@@ -118811,8 +128143,7 @@
3470660832,3470660847,TR
3470660848,3470660911,US
3470660912,3470660919,ID
-3470660920,3470660927,US
-3470660928,3470660935,JP
+3470660920,3470660935,US
3470660936,3470660943,IR
3470660944,3470661039,US
3470661040,3470661047,GB
@@ -118917,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
@@ -119012,7 +128345,9 @@
3475745536,3475752703,US
3475752704,3475752959,AN
3475752960,3475881983,US
-3475881984,3475883487,CA
+3475881984,3475883007,CA
+3475883008,3475883039,US
+3475883040,3475883487,CA
3475883488,3475883519,US
3475883520,3475884031,CA
3475884032,3475884287,US
@@ -119076,11 +128411,15 @@
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
-3476722608,3476722759,US
+3476722608,3476722719,US
+3476722720,3476722727,CO
+3476722728,3476722759,US
3476722760,3476722767,IN
3476722768,3476722775,US
3476722776,3476722783,GB
@@ -119102,7 +128441,17 @@
3476725400,3476725415,CA
3476725416,3476725423,US
3476725424,3476725431,GB
-3476725432,3476732373,US
+3476725432,3476731909,US
+3476731910,3476731913,IN
+3476731914,3476732049,US
+3476732050,3476732053,IN
+3476732054,3476732073,US
+3476732074,3476732077,IN
+3476732078,3476732113,US
+3476732114,3476732117,IN
+3476732118,3476732341,US
+3476732342,3476732345,MX
+3476732346,3476732373,US
3476732374,3476732377,MX
3476732378,3476733603,US
3476733604,3476733604,MX
@@ -119128,7 +128477,15 @@
3478114304,3478118399,PE
3478118400,3478192127,US
3478192128,3478257663,CA
-3478257664,3478294527,US
+3478257664,3478261855,US
+3478261856,3478261887,SG
+3478261888,3478261903,US
+3478261904,3478261935,SG
+3478261936,3478262271,US
+3478262272,3478262279,SG
+3478262280,3478262655,US
+3478262656,3478262671,SG
+3478262672,3478294527,US
3478294528,3478294543,GB
3478294544,3478323391,US
3478323392,3478323399,CA
@@ -119162,7 +128519,7 @@
3479290208,3479290239,BD
3479290240,3479290351,US
3479290352,3479290359,IN
-3479290360,3479290367,TH
+3479290360,3479290367,US
3479290368,3479290431,BD
3479290432,3479290487,US
3479290488,3479290495,GB
@@ -119217,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
@@ -119227,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
@@ -119510,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
@@ -119554,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
@@ -119729,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
@@ -119740,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
@@ -120016,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
@@ -120040,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
@@ -120052,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
@@ -120169,7 +129537,9 @@
3491226688,3491226719,CA
3491226720,3491231807,US
3491231808,3491231823,PR
-3491231824,3491358183,US
+3491231824,3491351455,US
+3491351456,3491351463,HR
+3491351464,3491358183,US
3491358184,3491358191,PR
3491358192,3491381247,US
3491381248,3491389439,BM
@@ -120195,11 +129565,11 @@
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,3491921663,US
+3491826944,3491832575,US
+3491832576,3491832583,PR
+3491832584,3491921663,US
3491921664,3491921919,PR
3491921920,3491955711,US
3491955712,3491956735,CO
@@ -120234,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
@@ -120251,7 +129623,13 @@
3492827520,3492827647,AU
3492827648,3492827903,US
3492827904,3492827967,AU
-3492827968,3493018639,US
+3492827968,3492924991,US
+3492924992,3492925007,DE
+3492925008,3492947087,US
+3492947088,3492947103,DE
+3492947104,3492963087,US
+3492963088,3492963103,FR
+3492963104,3493018639,US
3493018640,3493018655,AE
3493018656,3493069055,US
3493069056,3493069311,A2
@@ -120272,7 +129650,9 @@
3493089024,3493089279,A2
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
@@ -120295,11 +129675,15 @@
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
-3493902224,3493903551,US
+3493902224,3493902295,US
+3493902296,3493902303,NG
+3493902304,3493903551,US
3493903552,3493903567,KW
3493903568,3493914239,US
3493914240,3493914367,CA
@@ -120346,7 +129730,9 @@
3494101408,3494101415,CO
3494101416,3494101429,US
3494101430,3494101437,GB
-3494101438,3494102623,US
+3494101438,3494102481,US
+3494102482,3494102489,CA
+3494102490,3494102623,US
3494102624,3494102639,SB
3494102640,3494102687,US
3494102688,3494102701,PE
@@ -120381,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
@@ -120472,9 +129856,7 @@
3494299728,3494299735,SC
3494299736,3494300367,US
3494300368,3494300383,TW
-3494300384,3494300927,US
-3494300928,3494301055,TW
-3494301056,3494301247,US
+3494300384,3494301247,US
3494301248,3494301311,SG
3494301312,3494301439,US
3494301440,3494301695,TW
@@ -120489,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
@@ -120580,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
@@ -120611,8 +129990,10 @@
3494501024,3494501039,AU
3494501040,3494510591,US
3494510592,3494512639,CA
-3494512640,3494513135,US
-3494513136,3494513151,NO
+3494512640,3494512895,US
+3494512896,3494512911,NO
+3494512912,3494512919,US
+3494512920,3494513151,NO
3494513152,3494516735,US
3494516736,3494517759,CA
3494517760,3494539263,US
@@ -120692,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
@@ -120702,16 +130083,14 @@
3494744064,3494744399,US
3494744400,3494744407,AU
3494744408,3494744703,US
-3494744704,3494744711,DK
+3494744704,3494744711,DE
3494744712,3494745151,US
3494745152,3494745159,AU
3494745160,3494745303,US
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
@@ -120757,13 +130136,29 @@
3494852608,3494854655,CA
3494854656,3494861087,US
3494861088,3494861095,CA
-3494861096,3494862639,US
+3494861096,3494861575,US
+3494861576,3494861583,CH
+3494861584,3494861615,US
+3494861616,3494861623,AU
+3494861624,3494861839,US
+3494861840,3494861855,AU
+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
@@ -120823,9 +130218,11 @@
3495098368,3495100415,CA
3495100416,3495120895,US
3495120896,3495122943,AG
-3495122944,3495136455,US
-3495136456,3495136463,IN
-3495136464,3495136471,US
+3495122944,3495127615,US
+3495127616,3495127647,CA
+3495127648,3495128991,US
+3495128992,3495129007,AE
+3495129008,3495136471,US
3495136472,3495136479,AR
3495136480,3495136495,US
3495136496,3495136503,IN
@@ -120835,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
@@ -120862,9 +130262,9 @@
3495161056,3495161087,TR
3495161088,3495161151,US
3495161152,3495161167,TR
-3495161168,3495161599,US
-3495161600,3495161855,BR
-3495161856,3495164239,US
+3495161168,3495161359,US
+3495161360,3495161367,IT
+3495161368,3495164239,US
3495164240,3495164247,CA
3495164248,3495187199,US
3495187200,3495187455,IM
@@ -120873,9 +130273,7 @@
3495193600,3495215103,US
3495215104,3495217151,VI
3495217152,3495219199,VC
-3495219200,3495235671,US
-3495235672,3495235679,AU
-3495235680,3495235687,US
+3495219200,3495235687,US
3495235688,3495235695,IN
3495235696,3495235703,FR
3495235704,3495235783,US
@@ -120884,13 +130282,18 @@
3495235824,3495235831,GB
3495235832,3495235903,US
3495235904,3495235911,CA
-3495235912,3495235991,US
-3495235992,3495235999,CA
-3495236000,3495236015,US
-3495236016,3495236023,GB
-3495236024,3495236367,US
+3495235912,3495235975,US
+3495235976,3495235983,VN
+3495235984,3495236015,US
+3495236016,3495236031,GB
+3495236032,3495236247,US
+3495236248,3495236255,AZ
+3495236256,3495236367,US
3495236368,3495236375,CA
-3495236376,3495251967,US
+3495236376,3495236423,US
+3495236424,3495236431,SG
+3495236432,3495236439,IN
+3495236440,3495251967,US
3495251968,3495254015,CA
3495254016,3495260159,US
3495260160,3495261183,CA
@@ -121016,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
@@ -121032,13 +130441,22 @@
3495547472,3495547479,GB
3495547480,3495547605,US
3495547606,3495547606,BD
-3495547607,3495548205,US
+3495547607,3495547633,US
+3495547634,3495547635,CO
+3495547636,3495548126,US
+3495548127,3495548129,NO
+3495548130,3495548205,US
3495548206,3495548207,ID
-3495548208,3495548544,US
+3495548208,3495548437,US
+3495548438,3495548438,ES
+3495548439,3495548544,US
3495548545,3495548545,BD
-3495548546,3495548549,US
+3495548546,3495548548,US
+3495548549,3495548549,ES
3495548550,3495548550,BD
-3495548551,3495548586,US
+3495548551,3495548558,US
+3495548559,3495548559,ES
+3495548560,3495548586,US
3495548587,3495548588,LK
3495548589,3495548635,US
3495548636,3495548637,BD
@@ -121072,11 +130490,9 @@
3495653376,3495654399,CA
3495654400,3495657551,US
3495657552,3495657567,GB
-3495657568,3495658015,US
-3495658016,3495658023,IN
-3495658024,3495658319,US
-3495658320,3495658327,IN
-3495658328,3495673855,US
+3495657568,3495658527,US
+3495658528,3495658559,FR
+3495658560,3495673855,US
3495673856,3495674623,GP
3495674624,3495674879,MF
3495674880,3495675903,VG
@@ -121101,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
@@ -121149,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
@@ -121198,9 +130616,7 @@
3496886448,3496886463,TR
3496886464,3496886495,US
3496886496,3496886503,CA
-3496886504,3496886511,US
-3496886512,3496886527,GB
-3496886528,3496886607,US
+3496886504,3496886607,US
3496886608,3496886623,CA
3496886624,3496886655,US
3496886656,3496886671,IN
@@ -121208,9 +130624,7 @@
3496886712,3496886727,AU
3496886728,3496886823,US
3496886824,3496886831,IN
-3496886832,3496886919,US
-3496886920,3496886927,PK
-3496886928,3496886935,US
+3496886832,3496886935,US
3496886936,3496886943,PK
3496886944,3496887135,US
3496887136,3496887167,AU
@@ -121367,7 +130781,9 @@
3497156864,3497156879,NL
3497156880,3497156983,US
3497156984,3497157006,DZ
-3497157007,3497160191,US
+3497157007,3497157375,US
+3497157376,3497158655,A2
+3497158656,3497160191,US
3497160192,3497160351,NL
3497160352,3497161215,US
3497161216,3497161343,HK
@@ -121433,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
@@ -121556,7 +130978,31 @@
3500486656,3500490751,CR
3500490752,3500613631,US
3500613632,3500614655,MZ
-3500614656,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
@@ -121573,17 +131019,25 @@
3500809992,3500809999,CA
3500810000,3500810247,US
3500810248,3500810255,CA
-3500810256,3500921279,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
3500921312,3501146951,US
3501146952,3501146959,CA
3501146960,3501146975,GB
-3501146976,3501181703,US
+3501146976,3501147039,US
+3501147040,3501147071,CA
+3501147072,3501181703,US
3501181704,3501181711,AU
3501181712,3501181727,KR
3501181728,3501181743,US
-3501181744,3501181759,JP
-3501181760,3501182975,US
+3501181744,3501181791,JP
+3501181792,3501182975,US
3501182976,3501183007,SG
3501183008,3501183023,US
3501183024,3501183047,SG
@@ -121666,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
@@ -121750,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
@@ -121774,29 +131223,9 @@
3507101920,3507101935,IL
3507101936,3507290111,US
3507290112,3507355647,AR
-3507355648,3507479075,US
-3507479076,3507479076,CA
-3507479077,3507479079,US
-3507479080,3507479080,CA
-3507479081,3507479108,US
-3507479109,3507479109,CA
-3507479110,3507479154,US
-3507479155,3507479155,CA
-3507479156,3507479184,US
-3507479185,3507479185,CA
-3507479186,3507481766,US
-3507481767,3507481767,CA
-3507481768,3507482153,US
-3507482154,3507482155,CA
-3507482156,3507482197,US
-3507482198,3507482198,CA
-3507482199,3507482303,US
-3507482304,3507482304,CA
-3507482305,3507484047,US
-3507484048,3507484063,CA
-3507484064,3507485103,US
-3507485104,3507485119,CA
-3507485120,3507540015,US
+3507355648,3507470335,US
+3507470336,3507486719,CA
+3507486720,3507540015,US
3507540016,3507540031,IN
3507540032,3507585023,US
3507585024,3507598911,CA
@@ -122572,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
@@ -122586,9 +132017,7 @@
3509779008,3509779039,IN
3509779040,3509822335,US
3509822336,3509822351,DE
-3509822352,3509825791,US
-3509825792,3509826303,CN
-3509826304,3509829503,US
+3509822352,3509829503,US
3509829504,3509829535,GB
3509829536,3509830287,US
3509830288,3509830295,BE
@@ -122638,7 +132067,11 @@
3509837752,3509837759,GB
3509837760,3509846015,US
3509846016,3509977087,CA
-3510042624,3510239231,US
+3509977088,3509993471,US
+3509993472,3509997567,CA
+3509997568,3510005759,US
+3510005760,3510009855,CA
+3510009856,3510239231,US
3510239232,3510240703,CA
3510240704,3510240735,AM
3510240736,3510240767,CA
@@ -122650,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
@@ -123316,7 +132751,13 @@
3512269824,3512270847,US
3512270848,3512336383,CA
3512336384,3512369151,US
-3512369152,3512385535,CA
+3512369152,3512377231,CA
+3512377232,3512377239,US
+3512377240,3512378435,CA
+3512378436,3512378436,US
+3512378437,3512378983,CA
+3512378984,3512378991,US
+3512378992,3512385535,CA
3512385536,3512397823,US
3512397824,3512399375,CA
3512399376,3512399383,US
@@ -123774,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
@@ -123784,15 +133223,17 @@
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
-3514433536,3514583479,US
-3514583480,3514583487,PA
-3514583488,3514583535,US
+3514433536,3514583535,US
3514583536,3514583543,JE
-3514583544,3514587511,US
+3514583544,3514585359,US
+3514585360,3514585375,GB
+3514585376,3514587511,US
3514587512,3514587519,PA
3514587520,3514589439,US
3514589440,3514589695,GT
@@ -123812,9 +133253,7 @@
3515149568,3515149583,AU
3515149584,3515170991,US
3515170992,3515170999,KR
-3515171000,3515185151,US
-3515185152,3515185407,CA
-3515185408,3515301887,US
+3515171000,3515301887,US
3515301888,3515318271,CA
3515318272,3515358975,US
3515358976,3515359231,MX
@@ -123824,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
@@ -123841,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
@@ -123878,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
@@ -123932,7 +133372,9 @@
3517100620,3517100635,CA
3517100636,3517100648,US
3517100649,3517100668,CA
-3517100669,3517100811,US
+3517100669,3517100720,US
+3517100721,3517100730,CA
+3517100731,3517100811,US
3517100812,3517100829,GB
3517100830,3517101597,US
3517101598,3517101613,GB
@@ -123991,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
@@ -124055,8 +133495,8 @@
3517416712,3517416727,US
3517416728,3517416735,CA
3517416736,3517416743,US
-3517416744,3517416775,CA
-3517416776,3517416783,US
+3517416744,3517416767,CA
+3517416768,3517416783,US
3517416784,3517416791,CA
3517416792,3517416799,US
3517416800,3517416823,CA
@@ -124166,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
@@ -124187,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
@@ -124237,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
@@ -124251,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
@@ -124286,7 +133727,8 @@
3517610200,3517610239,SE
3517610240,3517610495,US
3517610496,3517611263,IE
-3517611264,3517611303,SE
+3517611264,3517611295,SE
+3517611296,3517611303,DE
3517611304,3517611311,CA
3517611312,3517611367,SE
3517611368,3517611383,US
@@ -124322,8 +133764,7 @@
3518076672,3518076927,PA
3518076928,3518077103,US
3518077104,3518077111,GB
-3518077112,3518078975,US
-3518083072,3518374719,US
+3518077112,3518374719,US
3518374720,3518374783,IN
3518374784,3518380223,US
3518380224,3518380287,DE
@@ -124367,19 +133808,13 @@
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
3518912000,3518912511,US
3518912512,3518912767,IN
-3518912768,3518921447,US
-3518921448,3518921455,CN
-3518921456,3518929535,US
+3518912768,3518929535,US
3518929536,3518929599,CA
3518929600,3518995695,US
3518995696,3518995703,GB
@@ -124465,7 +133900,9 @@
3519412736,3519412751,RU
3519412752,3519412799,US
3519412800,3519412815,RU
-3519412816,3519413759,US
+3519412816,3519412999,US
+3519413000,3519413007,CY
+3519413008,3519413759,US
3519413760,3519414271,CA
3519414272,3519417071,US
3519417072,3519417075,PT
@@ -124475,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
@@ -124520,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
@@ -124532,9 +133971,7 @@
3519879768,3519879775,US
3519879776,3519879807,CA
3519879808,3519879815,US
-3519879816,3519879863,CA
-3519879864,3519879871,US
-3519879872,3519880767,CA
+3519879816,3519880767,CA
3519880768,3519880831,DE
3519880832,3519881375,CA
3519881376,3519881407,US
@@ -124786,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
@@ -124807,15 +134246,15 @@
3520078928,3520078943,EC
3520078944,3520081455,US
3520081456,3520081471,BR
-3520081472,3520081743,US
-3520081744,3520081759,VG
-3520081760,3520082151,US
+3520081472,3520082151,US
3520082152,3520082167,CA
3520082168,3520086271,US
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
@@ -124845,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
@@ -124873,11 +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,3521011719,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,3521005335,DE
+3521005336,3521009679,US
+3521009680,3521009687,MY
+3521009688,3521011719,US
3521011720,3521011727,BR
3521011728,3521011735,AU
3521011736,3521011743,US
@@ -124955,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
@@ -124972,7 +134431,9 @@
3521933414,3521933421,IN
3521933422,3521933429,MA
3521933430,3521933437,CA
-3521933438,3521933497,US
+3521933438,3521933485,US
+3521933486,3521933493,EG
+3521933494,3521933497,US
3521933498,3521933505,EG
3521933506,3521933537,GB
3521933538,3521933577,US
@@ -124994,35 +134455,41 @@
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
-3521934098,3521934169,US
+3521934098,3521934121,US
+3521934122,3521934129,ID
+3521934130,3521934137,US
+3521934138,3521934145,GR
+3521934146,3521934161,ID
+3521934162,3521934169,US
3521934170,3521934177,EG
-3521934178,3521934421,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
3521934744,3521934768,US
3521934769,3521934776,MA
-3521934777,3521935237,US
-3521935238,3521935245,EG
-3521935246,3521935310,US
+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,3521936162,US
-3521936163,3521936194,EG
-3521936195,3521936243,US
+3521936026,3521936049,US
+3521936050,3521936065,CA
+3521936066,3521936243,US
3521936244,3521936251,IN
3521936252,3521936291,US
3521936292,3521936299,IN
@@ -125030,7 +134497,10 @@
3521936394,3521936425,EG
3521936426,3521936669,US
3521936670,3521936677,PK
-3521936678,3521936766,US
+3521936678,3521936739,US
+3521936740,3521936747,ID
+3521936748,3521936758,US
+3521936759,3521936766,IN
3521936767,3521936774,PE
3521936775,3521936827,US
3521936828,3521936860,EG
@@ -125041,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
@@ -125050,14 +134522,14 @@
3521937261,3521937406,EG
3521937407,3521965055,US
3521965056,3521966079,DE
-3521966080,3522029439,US
+3521966080,3521989631,US
+3521989632,3521989887,A2
+3521989888,3522029439,US
3522029440,3522029503,FI
3522029504,3522029567,CA
3522029568,3522029823,US
3522029824,3522029855,A1
-3522029856,3522031871,US
-3522031872,3522032127,AT
-3522032128,3522034447,US
+3522029856,3522034447,US
3522034448,3522034463,GB
3522034464,3522101247,US
3522101248,3522109439,CA
@@ -125068,7 +134540,9 @@
3522121216,3522121471,US
3522121472,3522121983,LY
3522121984,3522122239,AW
-3522122240,3522131615,US
+3522122240,3522131487,US
+3522131488,3522131519,DE
+3522131520,3522131615,US
3522131616,3522131647,BR
3522131648,3522131711,US
3522131712,3522131743,GB
@@ -125089,16 +134563,13 @@
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
3522199552,3522759591,US
3522759592,3522759599,CA
-3522759600,3522763263,US
-3522763264,3522763519,CA
-3522763520,3522854911,US
+3522759600,3522854911,US
3522854912,3522859999,CA
3522860000,3522860031,IN
3522860032,3522871295,CA
@@ -125142,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
@@ -125369,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
@@ -125515,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
@@ -125540,7 +135007,11 @@
3556851712,3556868095,UA
3556868096,3556876287,GB
3556876288,3556884479,NL
-3556884480,3556900863,RU
+3556884480,3556886527,IR
+3556886528,3556888575,GB
+3556888576,3556890623,US
+3556890624,3556892671,GB
+3556892672,3556900863,RU
3556900864,3556909055,GB
3556909056,3556925439,DE
3556925440,3556933631,PL
@@ -125555,10 +135026,12 @@
3556984640,3556984647,DE
3556984648,3556984651,FR
3556984652,3556984655,DE
-3556984656,3556984663,FR
-3556984664,3556984671,DE
-3556984672,3556984719,FR
-3556984720,3556985663,DE
+3556984656,3556984719,FR
+3556984720,3556985119,DE
+3556985120,3556985135,ES
+3556985136,3556985207,DE
+3556985208,3556985215,ES
+3556985216,3556985663,DE
3556985664,3556985671,HU
3556985672,3556990975,DE
3556990976,3556999167,UA
@@ -125621,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
@@ -125660,8 +135134,8 @@
3557302272,3557310463,UA
3557310464,3557326847,ES
3557326848,3557335039,DE
-3557335040,3557335295,BE
-3557335296,3557335327,EU
+3557335040,3557335311,BE
+3557335312,3557335327,EU
3557335328,3557335391,BE
3557335392,3557335455,EU
3557335456,3557335951,BE
@@ -125672,16 +135146,16 @@
3557336192,3557336255,EU
3557336256,3557336319,BE
3557336320,3557336575,EU
-3557336576,3557336663,BE
-3557336664,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
@@ -125692,9 +135166,7 @@
3557340160,3557340191,EU
3557340192,3557340927,BE
3557340928,3557341183,EU
-3557341184,3557341439,BE
-3557341440,3557341471,EU
-3557341472,3557341527,BE
+3557341184,3557341527,BE
3557341528,3557341535,EU
3557341536,3557341551,BE
3557341552,3557341559,EU
@@ -125702,9 +135174,7 @@
3557341568,3557341663,EU
3557341664,3557341695,BE
3557341696,3557341951,EU
-3557341952,3557342479,BE
-3557342480,3557342495,EU
-3557342496,3557342511,BE
+3557341952,3557342511,BE
3557342512,3557342527,EU
3557342528,3557342543,BE
3557342544,3557342559,EU
@@ -125735,15 +135205,13 @@
3557360560,3557360575,JE
3557360576,3557360680,GB
3557360681,3557360687,JE
-3557360688,3557360863,GB
-3557360864,3557360895,JE
-3557360896,3557360927,GB
+3557360688,3557360927,GB
3557360928,3557360943,JE
3557360944,3557360959,GB
3557360960,3557360967,JE
3557360968,3557361055,GB
-3557361056,3557361151,JE
-3557361152,3557361159,GB
+3557361056,3557361087,JE
+3557361088,3557361159,GB
3557361160,3557361167,JE
3557361168,3557361183,GB
3557361184,3557361215,JE
@@ -125769,9 +135237,9 @@
3557363672,3557363679,JE
3557363680,3557364103,GB
3557364104,3557364107,JE
-3557364108,3557364135,GB
-3557364136,3557364223,JE
-3557364224,3557364479,GB
+3557364108,3557364195,GB
+3557364196,3557364199,JE
+3557364200,3557364479,GB
3557364480,3557364495,JE
3557364496,3557364527,GB
3557364528,3557364559,JE
@@ -125817,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
@@ -125888,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
@@ -125901,7 +135372,27 @@
3557860832,3557860847,FI
3557860848,3557860863,SE
3557860864,3557861119,NO
-3557861120,3557867519,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
+3557864288,3557864303,DK
+3557864304,3557864311,SE
+3557864312,3557864319,FI
+3557864320,3557864799,SE
+3557864800,3557864831,FI
+3557864832,3557867519,SE
3557867520,3557875711,RU
3557875712,3557883903,DE
3557883904,3557892095,RU
@@ -125960,7 +135451,9 @@
3558155048,3558155055,A2
3558155056,3558155059,AF
3558155060,3558155063,DE
-3558155064,3558155135,A2
+3558155064,3558155103,A2
+3558155104,3558155119,DE
+3558155120,3558155135,A2
3558155136,3558155263,SD
3558155264,3558155391,ET
3558155392,3558155399,A2
@@ -126010,7 +135503,9 @@
3558158336,3558158847,SE
3558158848,3558159359,DE
3558159360,3558159519,AF
-3558159520,3558159871,A2
+3558159520,3558159807,A2
+3558159808,3558159839,DE
+3558159840,3558159871,A2
3558159872,3558160127,SL
3558160128,3558160383,DE
3558160384,3558161151,A2
@@ -126043,9 +135538,7 @@
3558196368,3558196415,IT
3558196416,3558196543,ES
3558196544,3558196607,IT
-3558196608,3558196719,ES
-3558196720,3558196727,IT
-3558196728,3558196735,ES
+3558196608,3558196735,ES
3558196736,3558203391,US
3558203392,3558211583,ES
3558211584,3558219775,GB
@@ -126084,21 +135577,19 @@
3558288320,3558288383,CH
3558288384,3558288423,US
3558288424,3558288447,GB
-3558288448,3558288471,US
-3558288472,3558288479,GB
-3558288480,3558288483,US
+3558288448,3558288483,US
3558288484,3558288487,GB
3558288488,3558288639,US
-3558288640,3558288671,GB
+3558288640,3558288671,BE
3558288672,3558288687,DE
3558288688,3558288895,BE
-3558288896,3558289087,FR
-3558289088,3558289103,GB
-3558289104,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
@@ -126111,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
@@ -126142,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
@@ -126239,13 +135732,9 @@
3558547456,3558555647,FR
3558555648,3558572031,AT
3558572032,3558580223,DE
-3558580224,3558581119,CH
-3558581120,3558581151,DE
-3558581152,3558581423,CH
+3558580224,3558581423,CH
3558581424,3558581439,DE
-3558581440,3558586303,CH
-3558586304,3558586335,NL
-3558586336,3558588415,CH
+3558581440,3558588415,CH
3558588416,3558596607,CZ
3558596608,3558604799,EE
3558604800,3558612991,GB
@@ -126491,9 +135980,13 @@
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,3559089351,BE
+3559089028,3559089079,BE
+3559089080,3559089087,GB
+3559089088,3559089351,BE
3559089352,3559089359,GB
3559089360,3559089407,BE
3559089408,3559089411,GB
@@ -126501,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
@@ -126551,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
@@ -126565,17 +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,3559092287,BE
-3559092288,3559092303,GB
-3559092304,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
@@ -126592,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
@@ -126614,7 +136111,8 @@
3559093220,3559093239,BE
3559093240,3559093243,GB
3559093244,3559093511,BE
-3559093512,3559093567,GB
+3559093512,3559093535,GB
+3559093536,3559093567,BE
3559093568,3559093599,IT
3559093600,3559093663,BE
3559093664,3559093671,GB
@@ -126784,15 +136282,14 @@
3559490624,3559490687,NL
3559490688,3559490719,ES
3559490720,3559490751,NL
-3559490752,3559490791,ES
+3559490752,3559490783,ES
+3559490784,3559490791,NL
3559490792,3559490799,BE
3559490800,3559490815,NL
3559490816,3559491071,ES
3559491072,3559491135,NL
3559491136,3559491167,ES
-3559491168,3559491327,NL
-3559491328,3559491359,ES
-3559491360,3559491439,NL
+3559491168,3559491439,NL
3559491440,3559491455,ES
3559491456,3559491647,NL
3559491648,3559491711,ES
@@ -126800,8 +136297,8 @@
3559491728,3559491735,ES
3559491736,3559491871,NL
3559491872,3559491903,GB
-3559491904,3559491967,ES
-3559491968,3559492003,NL
+3559491904,3559491999,ES
+3559492000,3559492003,NL
3559492004,3559492007,ES
3559492008,3559492013,NL
3559492014,3559492015,ES
@@ -126863,7 +136360,9 @@
3559727104,3559735295,NL
3559735296,3559743487,BG
3559743488,3559745535,IT
-3559745536,3559747583,DE
+3559745536,3559746099,DE
+3559746100,3559746103,GB
+3559746104,3559747583,DE
3559747584,3559751679,DK
3559751680,3559759871,IT
3559759872,3559768063,NO
@@ -126871,7 +136370,11 @@
3559776256,3559792639,RU
3559792640,3559800831,SA
3559800832,3559809023,IT
-3559809024,3559817215,DE
+3559809024,3559815427,DE
+3559815428,3559815431,AT
+3559815432,3559815595,DE
+3559815596,3559815599,NL
+3559815600,3559817215,DE
3559817216,3559825407,GB
3559825408,3559833599,IT
3559833600,3559849983,RU
@@ -126883,9 +136386,7 @@
3559877968,3559882751,LT
3559882752,3559890943,AZ
3559890944,3559899135,CH
-3559899136,3559899391,UA
-3559899392,3559899395,EE
-3559899396,3559899487,UA
+3559899136,3559899487,UA
3559899488,3559899519,EE
3559899520,3559899903,UA
3559899904,3559899907,EE
@@ -126900,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
@@ -126930,22 +136425,24 @@
3559902056,3559902071,UA
3559902072,3559902079,EE
3559902080,3559902175,UA
-3559902176,3559902187,EE
-3559902188,3559902191,UA
+3559902176,3559902183,EE
+3559902184,3559902191,UA
3559902192,3559902215,EE
3559902216,3559902223,UA
3559902224,3559902239,EE
3559902240,3559902431,UA
3559902432,3559902463,EE
3559902464,3559902975,UA
-3559902976,3559903295,EE
-3559903296,3559903487,UA
-3559903488,3559903999,EE
-3559904000,3559904015,UA
-3559904016,3559904023,EE
-3559904024,3559904127,UA
-3559904128,3559904799,EE
-3559904800,3559905019,UA
+3559902976,3559903631,EE
+3559903632,3559903679,UA
+3559903680,3559904003,EE
+3559904004,3559904015,UA
+3559904016,3559904043,EE
+3559904044,3559904127,UA
+3559904128,3559904767,EE
+3559904768,3559904799,UA
+3559904800,3559904815,EE
+3559904816,3559905019,UA
3559905020,3559905031,EE
3559905032,3559905047,UA
3559905048,3559905051,EE
@@ -126966,17 +136463,23 @@
3559905300,3559905317,EE
3559905318,3559905319,LT
3559905320,3559905323,UA
-3559905324,3559905327,EE
-3559905328,3559905535,UA
-3559905536,3559905623,EE
-3559905624,3559905631,UA
-3559905632,3559905695,EE
-3559905696,3559905703,UA
-3559905704,3559905903,EE
+3559905324,3559905331,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
-3559906258,3559906259,UA
-3559906260,3559906975,EE
+3559905912,3559906239,EE
+3559906240,3559906247,UA
+3559906248,3559906257,EE
+3559906258,3559906263,UA
+3559906264,3559906267,EE
+3559906268,3559906271,UA
+3559906272,3559906287,EE
+3559906288,3559906303,UA
+3559906304,3559906975,EE
3559906976,3559907071,UA
3559907072,3559907327,EE
3559907328,3559915519,FR
@@ -127025,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
@@ -127140,8 +136645,7 @@
3560939656,3560939659,CH
3560939660,3560939663,DE
3560939664,3560939667,DK
-3560939668,3560939675,DE
-3560939676,3560939679,PL
+3560939668,3560939679,DE
3560939680,3560939683,IT
3560939684,3560939687,AT
3560939688,3560939691,ES
@@ -127428,8 +136932,7 @@
3560941124,3560941127,FR
3560941128,3560941131,DE
3560941132,3560941135,GB
-3560941136,3560941139,ES
-3560941140,3560941147,DE
+3560941136,3560941147,DE
3560941148,3560941151,IT
3560941152,3560941155,DK
3560941156,3560941159,ES
@@ -127799,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
@@ -127890,7 +137391,7 @@
3560943189,3560943192,DE
3560943193,3560943193,ES
3560943194,3560943194,AT
-3560943195,3560943195,PL
+3560943195,3560943195,DE
3560943196,3560943197,IT
3560943198,3560943198,DE
3560943199,3560943199,PT
@@ -128423,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
@@ -129222,10 +138723,12 @@
3561206656,3561206663,BE
3561206664,3561209855,NL
3561209856,3561214975,GB
-3561214976,3561215230,ES
-3561215231,3561218047,GB
+3561214976,3561215231,ES
+3561215232,3561218047,GB
3561218048,3561226239,AT
-3561226240,3561234431,FI
+3561226240,3561228663,FI
+3561228664,3561228671,AX
+3561228672,3561234431,FI
3561234432,3561242623,TR
3561242624,3561259007,DE
3561259008,3561267199,IL
@@ -129244,7 +138747,9 @@
3561381888,3561382479,AT
3561382480,3561382495,DE
3561382496,3561390079,AT
-3561390080,3561396223,BG
+3561390080,3561395455,BG
+3561395456,3561395711,GR
+3561395712,3561396223,BG
3561396224,3561396480,MK
3561396481,3561398271,BG
3561398272,3561406463,LV
@@ -129362,15 +138867,17 @@
3561611560,3561611567,FR
3561611568,3561612287,GB
3561612288,3561612415,FR
-3561612416,3561614175,GB
+3561612416,3561613311,GB
+3561613312,3561613319,FR
+3561613320,3561614175,GB
3561614176,3561614199,FR
3561614200,3561614335,GB
3561614336,3561614591,FR
3561614592,3561615359,GB
3561615360,3561615615,FR
3561615616,3561615871,IT
-3561615872,3561616383,FR
-3561616384,3561616495,GB
+3561615872,3561616415,FR
+3561616416,3561616495,GB
3561616496,3561616543,FR
3561616544,3561616559,GB
3561616560,3561616575,FR
@@ -129464,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
@@ -129502,9 +139011,13 @@
3561930680,3561930719,NL
3561930720,3561930727,GB
3561930728,3561938943,NL
-3561938944,3561940991,IE
+3561938944,3561939832,IE
+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
@@ -129544,159 +139057,39 @@
3562086400,3562087423,SE
3562087424,3562088447,GB
3562088448,3562094591,SE
-3562094592,3562094975,GB
-3562094976,3562095775,FR
-3562095776,3562095807,GB
-3562095808,3562095887,FR
-3562095888,3562095903,GB
-3562095904,3562096383,FR
-3562096384,3562096639,GB
-3562096640,3562096767,FR
-3562096768,3562096927,GB
-3562096928,3562097055,FR
-3562097056,3562097151,GB
-3562097152,3562097687,FR
-3562097688,3562097695,GB
-3562097696,3562097727,FR
-3562097728,3562097791,GB
-3562097792,3562097919,FR
-3562097920,3562098175,GB
-3562098176,3562098207,FR
-3562098208,3562098223,GB
-3562098224,3562098271,FR
-3562098272,3562098367,GB
+3562094592,3562095607,GB
+3562095608,3562095615,FR
+3562095616,3562096063,GB
+3562096064,3562096127,FR
+3562096128,3562098367,GB
3562098368,3562098375,FR
-3562098376,3562098383,GB
-3562098384,3562098431,FR
-3562098432,3562098687,GB
-3562098688,3562098879,FR
-3562098880,3562098895,BE
-3562098896,3562098903,GB
-3562098904,3562098911,FR
-3562098912,3562099199,GB
-3562099200,3562099359,FR
-3562099360,3562099391,GB
-3562099392,3562099423,FR
-3562099424,3562099519,GB
-3562099520,3562099583,FR
-3562099584,3562099615,GB
-3562099616,3562099647,FR
-3562099648,3562099903,GB
-3562099904,3562099935,FR
-3562099936,3562100223,GB
-3562100224,3562100351,FR
-3562100352,3562100415,GB
-3562100416,3562100479,FR
-3562100480,3562100543,GB
-3562100544,3562100575,FR
-3562100576,3562100703,GB
-3562100704,3562100735,FR
-3562100736,3562100991,GB
-3562100992,3562101055,FR
-3562101056,3562101087,GB
-3562101088,3562101215,FR
-3562101216,3562101375,GB
-3562101376,3562101439,FR
-3562101440,3562101471,GB
-3562101472,3562101535,FR
-3562101536,3562101631,GB
-3562101632,3562101647,FR
-3562101648,3562101663,GB
-3562101664,3562101695,FR
-3562101696,3562101759,GB
-3562101760,3562101887,FR
-3562101888,3562101951,GB
-3562101952,3562101983,FR
-3562101984,3562102015,GB
-3562102016,3562102111,FR
-3562102112,3562102143,GB
-3562102144,3562102335,FR
-3562102336,3562102367,GB
-3562102368,3562102415,FR
-3562102416,3562102431,NL
-3562102432,3562102463,DE
-3562102464,3562102655,FR
-3562102656,3562102719,GB
-3562102720,3562102735,FR
-3562102736,3562102751,GB
-3562102752,3562102783,FR
-3562102784,3562103039,GB
-3562103040,3562103295,FR
-3562103296,3562103423,GB
-3562103424,3562103647,FR
-3562103648,3562103711,GB
-3562103712,3562103743,FR
-3562103744,3562103807,GB
-3562103808,3562103903,FR
-3562103904,3562103967,GB
-3562103968,3562103999,FR
-3562104000,3562104351,GB
-3562104352,3562104383,FR
-3562104384,3562104447,GB
-3562104448,3562104511,FR
-3562104512,3562104831,GB
-3562104832,3562104927,FR
-3562104928,3562104959,GB
-3562104960,3562105007,FR
-3562105008,3562105119,GB
-3562105120,3562105151,FR
-3562105152,3562105167,GB
-3562105168,3562105199,FR
-3562105200,3562105247,GB
-3562105248,3562105343,FR
-3562105344,3562105471,GB
-3562105472,3562105487,FR
-3562105488,3562105503,GB
-3562105504,3562105535,DE
-3562105536,3562105567,FR
-3562105568,3562105599,GB
+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,3562106143,GB
-3562106144,3562106159,FR
-3562106160,3562106191,GB
-3562106192,3562106271,FR
-3562106272,3562106527,GB
-3562106528,3562106559,FR
-3562106560,3562106623,GB
-3562106624,3562106911,FR
-3562106912,3562106927,GB
-3562106928,3562106959,FR
-3562106960,3562107007,GB
-3562107008,3562107103,FR
-3562107104,3562107119,GB
-3562107120,3562107135,FR
-3562107136,3562107231,GB
+3562105856,3562106879,GB
+3562106880,3562106911,FR
+3562106912,3562106943,GB
+3562106944,3562106959,FR
+3562106960,3562107071,GB
+3562107072,3562107103,FR
+3562107104,3562107231,GB
3562107232,3562107263,FR
-3562107264,3562107327,GB
-3562107328,3562107391,FR
-3562107392,3562107503,GB
-3562107504,3562107583,FR
-3562107584,3562107647,GB
-3562107648,3562107711,FR
-3562107712,3562107775,GB
-3562107776,3562107807,FR
-3562107808,3562107887,GB
-3562107888,3562107967,FR
-3562107968,3562108031,GB
-3562108032,3562108063,FR
-3562108064,3562108159,GB
-3562108160,3562108415,FR
-3562108416,3562108959,GB
-3562108960,3562108991,FR
-3562108992,3562109119,GB
-3562109120,3562109183,FR
-3562109184,3562109567,GB
+3562107264,3562107519,GB
+3562107520,3562107583,FR
+3562107584,3562108959,GB
+3562108960,3562108975,FR
+3562108976,3562109567,GB
3562109568,3562109583,FR
-3562109584,3562109759,GB
-3562109760,3562109791,FR
-3562109792,3562109823,GB
-3562109824,3562110207,FR
-3562110208,3562110399,GB
-3562110400,3562110719,FR
-3562110720,3562110943,GB
-3562110944,3562110959,FR
-3562110960,3562110967,GB
-3562110968,3562110975,FR
+3562109584,3562110399,GB
+3562110400,3562110431,FR
+3562110432,3562110463,GB
+3562110464,3562110719,FR
+3562110720,3562110975,GB
3562110976,3562143743,ES
3562143744,3562151935,GB
3562151936,3562160127,DE
@@ -129713,16 +139106,17 @@
3562192896,3562201087,UA
3562201088,3562209279,DE
3562209280,3562217471,RU
-3562217472,3562220287,DE
-3562220288,3562220799,CH
-3562220800,3562225663,DE
+3562217472,3562225663,DE
3562225664,3562233855,NL
3562233856,3562242047,FI
3562242048,3562258431,FR
3562258432,3562263975,NL
3562263976,3562263983,BE
3562263984,3562283007,NL
-3562283008,3562291199,IT
+3562283008,3562285055,IT
+3562285056,3562287103,IE
+3562287104,3562289151,IT
+3562289152,3562291199,FR
3562291200,3562307583,GB
3562307584,3562315775,NL
3562315776,3562321231,GB
@@ -129744,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
@@ -129765,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
@@ -129789,9 +139182,7 @@
3562668032,3562676223,IT
3562676224,3562684415,UA
3562684416,3562692607,FI
-3562692608,3562695375,UA
-3562695376,3562695379,CZ
-3562695380,3562700799,UA
+3562692608,3562700799,UA
3562700800,3562708991,DE
3562708992,3562717183,UA
3562717184,3562725375,CH
@@ -129836,10 +139227,7 @@
3563005952,3563006463,TR
3563006464,3563006591,DE
3563006592,3563006719,CA
-3563006720,3563006729,DE
-3563006730,3563006847,CN
-3563006848,3563006911,US
-3563006912,3563007487,DE
+3563006720,3563007487,DE
3563007488,3563007999,TR
3563008000,3563008255,DE
3563008256,3563008511,PL
@@ -129847,11 +139235,7 @@
3563009280,3563009535,LT
3563009536,3563009791,DE
3563009792,3563010047,HK
-3563010048,3563010063,DE
-3563010064,3563010079,KZ
-3563010080,3563010303,DE
-3563010304,3563010559,NL
-3563010560,3563010815,DE
+3563010048,3563010815,DE
3563010816,3563011071,PL
3563011072,3563011583,DE
3563011584,3563011839,ES
@@ -129872,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
@@ -129887,6 +139271,7 @@
3563097344,3563102207,DE
3563102208,3563110399,CZ
3563110400,3563118591,RU
+3563118592,3563126783,PL
3563126784,3563134975,KG
3563134976,3563143167,IT
3563143168,3563151359,GB
@@ -129913,13 +139298,7 @@
3563356160,3563364351,RU
3563364352,3563372543,BE
3563372544,3563380735,SA
-3563380736,3563381951,GB
-3563381952,3563381959,IT
-3563381960,3563382383,GB
-3563382384,3563382391,AU
-3563382392,3563382495,GB
-3563382496,3563382503,AT
-3563382504,3563382583,GB
+3563380736,3563382583,GB
3563382584,3563382587,AT
3563382588,3563382589,DE
3563382590,3563382767,GB
@@ -130080,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
@@ -130093,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
@@ -130104,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
@@ -130116,9 +139495,11 @@
3563853328,3563853375,NL
3563853376,3563853439,ES
3563853440,3563853567,NL
-3563853568,3563854103,ES
-3563854104,3563854175,NL
-3563854176,3563854239,ES
+3563853568,3563854079,ES
+3563854080,3563854095,NL
+3563854096,3563854103,ES
+3563854104,3563854191,NL
+3563854192,3563854239,ES
3563854240,3563854259,NL
3563854260,3563854591,ES
3563854592,3563854847,NL
@@ -130159,10 +139540,14 @@
3564024104,3564024135,GB
3564024136,3564024143,IT
3564024144,3564027903,GB
-3564027904,3564041215,DE
+3564027904,3564036351,DE
+3564036352,3564039423,A2
+3564039424,3564039679,DE
+3564039680,3564041215,A2
3564041216,3564041727,RU
-3564041728,3564044031,DE
-3564044032,3564044287,GB
+3564041728,3564043263,A2
+3564043264,3564043519,DE
+3564043520,3564044287,A2
3564044288,3564052479,CZ
3564052480,3564060671,GB
3564060672,3564068863,RU
@@ -130191,7 +139576,9 @@
3564153200,3564153207,NL
3564153208,3564156415,SE
3564156416,3564156419,NO
-3564156420,3564156919,SE
+3564156420,3564156815,SE
+3564156816,3564156819,FI
+3564156820,3564156919,SE
3564156920,3564156927,FI
3564156928,3564157207,SE
3564157208,3564157215,NO
@@ -130230,131 +139617,23 @@
3564314624,3564322815,GB
3564322816,3564331007,IT
3564331008,3564339199,ES
-3564339200,3564339967,GB
-3564339968,3564339999,NL
-3564340000,3564340479,GB
-3564340480,3564340735,NL
-3564340736,3564340991,GB
-3564340992,3564341119,NL
-3564341120,3564341183,GB
-3564341184,3564341247,NL
-3564341248,3564342015,GB
-3564342016,3564342063,NL
-3564342064,3564342335,GB
-3564342336,3564342431,NL
-3564342432,3564343583,GB
-3564343584,3564343615,NL
-3564343616,3564343679,GB
-3564343680,3564343743,NL
-3564343744,3564343775,GB
-3564343776,3564343807,NL
-3564343808,3564343839,GB
-3564343840,3564343871,NL
-3564343872,3564343967,GB
-3564343968,3564343999,NL
-3564344000,3564344031,GB
-3564344032,3564344215,NL
-3564344216,3564344223,GB
-3564344224,3564344231,NL
-3564344232,3564344239,GB
-3564344240,3564344247,NL
-3564344248,3564344895,GB
-3564344896,3564344959,NL
-3564344960,3564345023,GB
-3564345024,3564345087,NL
-3564345088,3564345127,GB
-3564345128,3564345131,NL
-3564345132,3564345135,GB
-3564345136,3564345151,NL
-3564345152,3564345247,GB
-3564345248,3564345343,NL
-3564345344,3564346143,GB
-3564346144,3564346175,NL
-3564346176,3564346207,GB
-3564346208,3564346239,NL
-3564346240,3564346271,GB
-3564346272,3564346303,NL
-3564346304,3564347391,GB
-3564347392,3564347583,NL
-3564347584,3564348191,GB
-3564348192,3564348239,NL
-3564348240,3564348255,GB
-3564348256,3564348287,NL
-3564348288,3564348399,GB
-3564348400,3564348415,NL
-3564348416,3564348479,GB
-3564348480,3564348495,NL
-3564348496,3564348527,GB
-3564348528,3564348543,NL
-3564348544,3564348559,GB
-3564348560,3564348639,NL
-3564348640,3564348927,GB
-3564348928,3564348991,NL
-3564348992,3564349183,GB
-3564349184,3564349311,NL
-3564349312,3564349375,GB
-3564349376,3564349407,NL
-3564349408,3564349503,GB
-3564349504,3564349583,NL
-3564349584,3564349615,GB
-3564349616,3564349695,NL
-3564349696,3564350335,GB
-3564350336,3564350351,NL
-3564350352,3564350367,GB
-3564350368,3564350719,NL
-3564350720,3564351231,GB
-3564351232,3564351295,NL
-3564351296,3564351375,GB
-3564351376,3564351391,NL
-3564351392,3564351439,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,3564351471,GB
-3564351472,3564351487,NL
-3564351488,3564351503,GB
-3564351504,3564351679,NL
-3564351680,3564351999,GB
-3564352000,3564352063,NL
-3564352064,3564352095,GB
-3564352096,3564352127,NL
-3564352128,3564352191,GB
-3564352192,3564352511,NL
-3564352512,3564352543,GB
-3564352544,3564352575,NL
-3564352576,3564352735,GB
-3564352736,3564352767,NL
-3564352768,3564353023,GB
-3564353024,3564353087,NL
-3564353088,3564353111,GB
-3564353112,3564353151,NL
-3564353152,3564353199,GB
-3564353200,3564353215,NL
-3564353216,3564353223,GB
-3564353224,3564353263,NL
-3564353264,3564353295,GB
-3564353296,3564353311,NL
-3564353312,3564353343,GB
-3564353344,3564353359,NL
-3564353360,3564353407,GB
-3564353408,3564353487,NL
-3564353488,3564353503,GB
-3564353504,3564353535,NL
-3564353536,3564353855,GB
-3564353856,3564353919,NL
-3564353920,3564354063,GB
-3564354064,3564354079,NL
-3564354080,3564354303,GB
-3564354304,3564354335,NL
-3564354336,3564354367,GB
-3564354368,3564354431,NL
-3564354432,3564354495,GB
-3564354496,3564354559,NL
-3564354560,3564354943,GB
-3564354944,3564355039,NL
-3564355040,3564355135,GB
-3564355136,3564355199,NL
-3564355200,3564355295,GB
-3564355296,3564355311,NL
-3564355312,3564355583,GB
+3564351456,3564351551,GB
+3564351552,3564351615,NL
+3564351616,3564353207,GB
+3564353208,3564353215,NL
+3564353216,3564355583,GB
3564355584,3564363775,NL
3564363776,3564371967,UA
3564371968,3564380159,DE
@@ -130622,8 +139901,8 @@
3564855296,3564862863,DE
3564862864,3564862871,AE
3564862872,3564863487,DE
-3564863488,3564880935,NL
-3564880936,3564880943,GB
+3564863488,3564880927,NL
+3564880928,3564880943,GB
3564880944,3564880951,NL
3564880952,3564880967,FR
3564880968,3564880975,NL
@@ -130637,21 +139916,19 @@
3564881232,3564881247,NL
3564881248,3564881343,GB
3564881344,3564881359,NL
-3564881360,3564881375,GB
-3564881376,3564881439,NL
+3564881360,3564881391,GB
+3564881392,3564881439,NL
3564881440,3564881455,GB
3564881456,3564881463,NL
3564881464,3564881471,GB
3564881472,3564881551,NL
3564881552,3564881599,GB
-3564881600,3564881631,NL
-3564881632,3564881663,GB
+3564881600,3564881615,NL
+3564881616,3564881663,GB
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
@@ -130659,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
@@ -130675,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
@@ -130837,8 +140112,8 @@
3564896256,3564904447,RU
3564904448,3564912639,DE
3564912640,3564920831,BG
-3564920832,3564922879,ES
-3564922880,3564929023,US
+3564920832,3564921855,ES
+3564921856,3564929023,US
3564929024,3564937215,AT
3564937216,3564945407,RS
3564945408,3564947175,GB
@@ -131036,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
@@ -131057,7 +140333,11 @@
3565037568,3565037823,IE
3565037824,3565038591,GB
3565038592,3565038663,IE
-3565038664,3565039615,GB
+3565038664,3565038687,GB
+3565038688,3565038719,IE
+3565038720,3565038727,GB
+3565038728,3565038823,IE
+3565038824,3565039615,GB
3565039616,3565042175,IE
3565042176,3565043711,GB
3565043712,3565047807,AT
@@ -131068,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
@@ -131227,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
@@ -131428,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
@@ -131588,7 +140862,9 @@
3567352760,3567352767,NL
3567352768,3567353855,GB
3567353856,3567386623,CH
-3567386624,3567386879,GB
+3567386624,3567386671,GB
+3567386672,3567386687,DE
+3567386688,3567386879,GB
3567386880,3567386883,DE
3567386884,3567386975,GB
3567386976,3567387007,DE
@@ -131625,7 +140901,10 @@
3567392768,3567393023,DE
3567393024,3567393279,FR
3567393280,3567393535,HU
-3567393536,3567394975,GB
+3567393536,3567393791,GB
+3567393792,3567394047,SI
+3567394048,3567394175,HR
+3567394176,3567394975,GB
3567394976,3567395007,DE
3567395008,3567395071,GB
3567395072,3567395327,DE
@@ -131678,7 +140957,9 @@
3567444480,3567445951,GB
3567445952,3567445983,NL
3567445984,3567452159,GB
-3567452160,3567507455,ES
+3567452160,3567463135,ES
+3567463136,3567463151,IT
+3567463152,3567507455,ES
3567507456,3567509503,NL
3567509504,3567512575,ES
3567512576,3567513599,NL
@@ -131869,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
@@ -131886,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
@@ -132254,7 +141535,9 @@
3570106368,3570139135,PL
3570139136,3570170079,DE
3570170080,3570170111,BE
-3570170112,3570171903,DE
+3570170112,3570171655,DE
+3570171656,3570171663,AU
+3570171664,3570171903,DE
3570171904,3570204671,NL
3570204672,3570215679,GR
3570215680,3570215807,DE
@@ -132283,7 +141566,9 @@
3570617344,3570617855,GB
3570617856,3570622463,DE
3570622464,3570630655,GB
-3570630656,3570663423,DE
+3570630656,3570640383,DE
+3570640384,3570640415,CH
+3570640416,3570663423,DE
3570663424,3570728959,GB
3570728960,3570729983,FI
3570729984,3570731007,SE
@@ -132307,444 +141592,116 @@
3571056640,3571122175,DE
3571122176,3571187711,GB
3571187712,3571253247,RU
-3571253248,3571259551,BE
-3571259552,3571259583,LU
-3571259584,3571261359,BE
-3571261360,3571261367,LU
-3571261368,3571262335,BE
-3571262336,3571262367,LU
-3571262368,3571264607,BE
+3571253248,3571264607,BE
3571264608,3571264639,FR
-3571264640,3571265935,BE
-3571265936,3571265951,LU
-3571265952,3571267199,BE
-3571267200,3571267263,LU
-3571267264,3571268607,BE
+3571264640,3571268607,BE
3571268608,3571268639,LU
-3571268640,3571269823,BE
-3571269824,3571269855,LU
-3571269856,3571271423,BE
-3571271424,3571271439,LU
-3571271440,3571271551,BE
-3571271552,3571271679,LU
-3571271680,3571272447,BE
-3571272448,3571272575,LU
-3571272576,3571277119,BE
-3571277120,3571277151,DE
-3571277152,3571286015,BE
-3571286016,3571318911,DE
-3571318912,3571319167,GB
-3571319168,3571319295,DE
-3571319296,3571319711,GB
-3571319712,3571319935,DE
-3571319936,3571320063,GB
-3571320064,3571320575,DE
-3571320576,3571320855,GB
+3571268640,3571286015,BE
+3571286016,3571318783,DE
+3571318784,3571319807,GB
+3571319808,3571319935,DE
+3571319936,3571320855,GB
3571320856,3571320863,DE
-3571320864,3571320927,GB
-3571320928,3571320991,DE
-3571320992,3571321023,GB
-3571321024,3571321055,DE
-3571321056,3571321151,GB
-3571321152,3571321247,DE
-3571321248,3571321279,GB
-3571321280,3571321727,DE
-3571321728,3571321791,GB
-3571321792,3571321855,DE
-3571321856,3571321887,GB
-3571321888,3571321919,DE
-3571321920,3571321983,GB
+3571320864,3571320943,GB
+3571320944,3571320959,DE
+3571320960,3571321599,GB
+3571321600,3571321727,DE
+3571321728,3571321823,GB
+3571321824,3571321855,DE
+3571321856,3571321983,GB
3571321984,3571321999,DE
-3571322000,3571322015,GB
-3571322016,3571322111,DE
-3571322112,3571322559,GB
-3571322560,3571322591,DE
-3571322592,3571323391,GB
-3571323392,3571323455,DE
-3571323456,3571323487,GB
-3571323488,3571323519,DE
-3571323520,3571323711,GB
-3571323712,3571323743,DE
-3571323744,3571323775,GB
-3571323776,3571323903,DE
-3571323904,3571323935,GB
-3571323936,3571324031,DE
-3571324032,3571324095,GB
-3571324096,3571324127,DE
-3571324128,3571324415,GB
-3571324416,3571324527,DE
-3571324528,3571324927,GB
-3571324928,3571324959,DE
-3571324960,3571324991,GB
-3571324992,3571325023,DE
-3571325024,3571325183,GB
-3571325184,3571325247,DE
-3571325248,3571325407,GB
-3571325408,3571325439,DE
-3571325440,3571325567,GB
-3571325568,3571325631,DE
-3571325632,3571326207,GB
-3571326208,3571326255,DE
-3571326256,3571326259,BE
-3571326260,3571326263,DE
-3571326264,3571326463,GB
-3571326464,3571326591,DE
-3571326592,3571326975,GB
-3571326976,3571327039,DE
-3571327040,3571327135,GB
-3571327136,3571327167,DE
-3571327168,3571327615,GB
-3571327616,3571327679,DE
-3571327680,3571327711,GB
-3571327712,3571328063,DE
-3571328064,3571328223,GB
-3571328224,3571328255,DE
-3571328256,3571328447,GB
-3571328448,3571328543,DE
-3571328544,3571328767,GB
-3571328768,3571328831,DE
-3571328832,3571328863,GB
-3571328864,3571329119,DE
-3571329120,3571329183,GB
-3571329184,3571329247,DE
-3571329248,3571329439,GB
-3571329440,3571329455,DE
-3571329456,3571329535,GB
-3571329536,3571329791,DE
-3571329792,3571330047,GB
-3571330048,3571330079,DE
-3571330080,3571330111,GB
-3571330112,3571330175,DE
-3571330176,3571330239,GB
-3571330240,3571330271,DE
-3571330272,3571330911,GB
-3571330912,3571331071,DE
-3571331072,3571331455,GB
-3571331456,3571331519,DE
-3571331520,3571331647,GB
-3571331648,3571331775,DE
-3571331776,3571331807,GB
-3571331808,3571332415,DE
-3571332416,3571332479,GB
-3571332480,3571332607,DE
-3571332608,3571332735,GB
-3571332736,3571332751,DE
-3571332752,3571332831,GB
-3571332832,3571332863,DE
-3571332864,3571333759,GB
-3571333760,3571333791,DE
-3571333792,3571333887,GB
-3571333888,3571333951,DE
-3571333952,3571334079,GB
-3571334080,3571334111,DE
-3571334112,3571334175,GB
-3571334176,3571334207,DE
-3571334208,3571334303,GB
-3571334304,3571334335,DE
-3571334336,3571334911,GB
-3571334912,3571334943,DE
-3571334944,3571335103,GB
-3571335104,3571335455,DE
-3571335456,3571335487,GB
-3571335488,3571335519,DE
-3571335520,3571335583,GB
-3571335584,3571335647,DE
-3571335648,3571335807,GB
+3571322000,3571323967,GB
+3571323968,3571324031,DE
+3571324032,3571326207,GB
+3571326208,3571326215,DE
+3571326216,3571326231,GB
+3571326232,3571326247,DE
+3571326248,3571326983,GB
+3571326984,3571326991,DE
+3571326992,3571328511,GB
+3571328512,3571328543,DE
+3571328544,3571328863,GB
+3571328864,3571328879,DE
+3571328880,3571329215,GB
+3571329216,3571329247,DE
+3571329248,3571331647,GB
+3571331648,3571331679,DE
+3571331680,3571331839,GB
+3571331840,3571332351,DE
+3571332352,3571335807,GB
3571335808,3571335935,DE
-3571335936,3571336063,GB
-3571336064,3571336191,DE
-3571336192,3571336223,GB
-3571336224,3571336255,DE
-3571336256,3571336319,GB
-3571336320,3571336447,DE
-3571336448,3571336927,GB
-3571336928,3571336959,DE
-3571336960,3571337215,GB
-3571337216,3571337279,DE
-3571337280,3571337407,GB
-3571337408,3571337439,DE
-3571337440,3571338367,GB
-3571338368,3571338751,DE
-3571338752,3571338879,GB
-3571338880,3571338975,DE
-3571338976,3571339135,GB
-3571339136,3571339199,DE
-3571339200,3571339391,GB
-3571339392,3571339583,DE
-3571339584,3571339903,GB
-3571339904,3571339967,DE
-3571339968,3571340095,GB
-3571340096,3571340159,DE
-3571340160,3571340383,GB
-3571340384,3571340447,DE
-3571340448,3571340511,GB
-3571340512,3571340543,DE
-3571340544,3571340799,GB
-3571340800,3571341375,DE
-3571341376,3571341487,GB
-3571341488,3571341503,DE
-3571341504,3571342015,GB
-3571342016,3571342047,DE
-3571342048,3571342079,GB
-3571342080,3571342591,DE
-3571342592,3571342623,GB
-3571342624,3571342655,DE
-3571342656,3571342719,GB
-3571342720,3571342751,DE
-3571342752,3571343039,GB
-3571343040,3571343071,DE
-3571343072,3571343103,GB
-3571343104,3571343359,DE
-3571343360,3571343391,GB
+3571335936,3571340415,GB
+3571340416,3571340447,DE
+3571340448,3571342079,GB
+3571342080,3571342335,DE
+3571342336,3571343391,GB
3571343392,3571343455,DE
-3571343456,3571343487,GB
-3571343488,3571343495,DE
-3571343496,3571343503,ES
-3571343504,3571343515,DE
-3571343516,3571343519,GB
-3571343520,3571343551,DE
-3571343552,3571343615,GB
-3571343616,3571343871,DE
-3571343872,3571344095,GB
-3571344096,3571344127,DE
-3571344128,3571344191,GB
-3571344192,3571344255,DE
-3571344256,3571345215,GB
-3571345216,3571345407,DE
-3571345408,3571346431,GB
-3571346432,3571346463,DE
-3571346464,3571346495,GB
-3571346496,3571346559,DE
-3571346560,3571346591,GB
-3571346592,3571346623,DE
-3571346624,3571346831,GB
-3571346832,3571346847,DE
-3571346848,3571346879,GB
-3571346880,3571346911,DE
-3571346912,3571347071,GB
-3571347072,3571347191,DE
-3571347192,3571347199,GB
-3571347200,3571347455,DE
+3571343456,3571347455,GB
3571347456,3571347711,BE
-3571347712,3571347967,GB
-3571347968,3571348223,DE
-3571348224,3571348255,GB
-3571348256,3571348287,DE
-3571348288,3571348383,GB
-3571348384,3571348399,DE
-3571348400,3571348447,GB
-3571348448,3571348511,DE
-3571348512,3571348543,GB
-3571348544,3571348735,DE
-3571348736,3571348991,GB
-3571348992,3571349135,DE
-3571349136,3571349151,GB
-3571349152,3571349231,DE
-3571349232,3571349239,GB
-3571349240,3571349263,DE
-3571349264,3571349311,GB
-3571349312,3571349343,DE
-3571349344,3571349743,GB
-3571349744,3571349759,CH
-3571349760,3571349791,DE
-3571349792,3571349799,SE
-3571349800,3571349807,DE
-3571349808,3571349815,BE
-3571349816,3571349819,SE
-3571349820,3571349887,GB
-3571349888,3571349919,DE
-3571349920,3571350511,GB
-3571350512,3571350527,DE
-3571350528,3571351551,GB
+3571347712,3571348387,GB
+3571348388,3571348391,DE
+3571348392,3571349087,GB
+3571349088,3571349119,DE
+3571349120,3571351551,GB
3571351552,3571351807,DE
-3571351808,3571351871,GB
-3571351872,3571352031,DE
-3571352032,3571352063,GB
-3571352064,3571352415,DE
-3571352416,3571352527,GB
-3571352528,3571352639,DE
-3571352640,3571352735,GB
-3571352736,3571352783,DE
-3571352784,3571352831,GB
-3571352832,3571353215,DE
-3571353216,3571353231,GB
-3571353232,3571353279,DE
-3571353280,3571353311,GB
-3571353312,3571353343,DE
-3571353344,3571353471,GB
-3571353472,3571353599,DE
-3571353600,3571353791,GB
-3571353792,3571353807,DE
-3571353808,3571353855,GB
-3571353856,3571354111,DE
-3571354112,3571354463,GB
+3571351808,3571354463,GB
3571354464,3571354495,DE
-3571354496,3571355007,GB
-3571355008,3571355135,DE
-3571355136,3571355167,GB
-3571355168,3571355183,DE
-3571355184,3571355391,GB
-3571355392,3571355935,DE
-3571355936,3571355967,GB
-3571355968,3571356031,DE
-3571356032,3571356159,GB
-3571356160,3571356415,DE
-3571356416,3571356671,GB
-3571356672,3571357071,DE
-3571357072,3571357183,GB
+3571354496,3571355071,GB
+3571355072,3571355135,DE
+3571355136,3571355391,GB
+3571355392,3571355903,DE
+3571355904,3571355999,GB
+3571356000,3571356031,DE
+3571356032,3571357183,GB
3571357184,3571357695,DE
-3571357696,3571357791,GB
-3571357792,3571357855,DE
-3571357856,3571357871,GB
+3571357696,3571357871,GB
3571357872,3571357919,DE
-3571357920,3571358047,GB
-3571358048,3571358079,DE
-3571358080,3571358223,GB
-3571358224,3571358255,DE
-3571358256,3571358319,GB
-3571358320,3571358335,DE
-3571358336,3571358399,GB
-3571358400,3571358415,DE
-3571358416,3571358431,GB
-3571358432,3571358447,DE
-3571358448,3571358463,GB
-3571358464,3571358495,DE
-3571358496,3571358503,GB
-3571358504,3571358527,DE
-3571358528,3571358531,GB
-3571358532,3571358559,DE
-3571358560,3571358575,GB
-3571358576,3571358591,DE
-3571358592,3571358975,GB
-3571358976,3571358991,DE
-3571358992,3571358999,GB
-3571359000,3571359079,DE
-3571359080,3571359095,GB
-3571359096,3571359151,DE
-3571359152,3571359159,GB
-3571359160,3571359167,DE
-3571359168,3571359175,GB
-3571359176,3571359207,DE
-3571359208,3571359215,GB
-3571359216,3571359319,DE
-3571359320,3571359327,GB
-3571359328,3571359335,DE
-3571359336,3571359343,GB
-3571359344,3571359351,DE
-3571359352,3571359359,GB
-3571359360,3571359415,DE
-3571359416,3571359419,GB
-3571359420,3571359463,DE
-3571359464,3571359471,GB
-3571359472,3571359487,DE
-3571359488,3571359999,GB
-3571360000,3571360767,DE
-3571360768,3571361151,GB
-3571361152,3571361215,DE
-3571361216,3571361247,GB
-3571361248,3571361407,DE
-3571361408,3571361439,GB
-3571361440,3571361455,DE
-3571361456,3571361471,GB
+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,3571361471,GB
3571361472,3571361535,DE
-3571361536,3571361983,GB
-3571361984,3571362303,DE
-3571362304,3571362559,GB
-3571362560,3571362879,DE
-3571362880,3571363007,GB
-3571363008,3571363039,DE
-3571363040,3571363327,GB
-3571363328,3571364095,DE
-3571364096,3571364287,GB
-3571364288,3571364319,DE
-3571364320,3571364919,GB
-3571364920,3571364927,DE
-3571364928,3571364955,GB
-3571364956,3571364975,DE
-3571364976,3571364983,GB
-3571364984,3571364991,DE
-3571364992,3571365023,GB
-3571365024,3571365031,DE
-3571365032,3571365039,GB
-3571365040,3571365047,DE
-3571365048,3571365055,GB
-3571365056,3571365071,DE
-3571365072,3571365079,GB
-3571365080,3571365087,DE
-3571365088,3571365183,GB
-3571365184,3571365247,DE
-3571365248,3571365999,GB
-3571366000,3571366007,DE
-3571366008,3571366399,GB
-3571366400,3571366511,NL
-3571366512,3571366519,DE
-3571366520,3571366559,GB
-3571366560,3571366591,DE
-3571366592,3571366655,GB
-3571366656,3571366911,DE
-3571366912,3571368447,GB
-3571368448,3571368479,DE
-3571368480,3571368511,GB
-3571368512,3571368575,DE
-3571368576,3571368623,GB
-3571368624,3571368687,DE
-3571368688,3571368695,GB
-3571368696,3571368959,DE
-3571368960,3571369215,GB
-3571369216,3571369279,DE
-3571369280,3571369727,GB
-3571369728,3571369759,DE
-3571369760,3571369807,GB
-3571369808,3571369823,DE
-3571369824,3571369983,GB
-3571369984,3571371299,DE
-3571371300,3571371303,GB
-3571371304,3571371319,DE
-3571371320,3571371327,GB
+3571361536,3571361999,GB
+3571362000,3571362015,DE
+3571362016,3571362815,GB
+3571362816,3571362879,DE
+3571362880,3571363583,GB
+3571363584,3571364095,DE
+3571364096,3571368623,GB
+3571368624,3571368639,DE
+3571368640,3571368703,GB
+3571368704,3571368959,DE
+3571368960,3571371327,GB
3571371328,3571371359,DE
-3571371360,3571372303,GB
-3571372304,3571372319,DE
-3571372320,3571375327,GB
-3571375328,3571375343,DE
-3571375344,3571379199,GB
-3571379200,3571379231,DE
-3571379232,3571379247,GB
-3571379248,3571379311,DE
-3571379312,3571379315,NL
-3571379316,3571379351,DE
+3571371360,3571379343,GB
+3571379344,3571379351,DE
3571379352,3571379359,GB
3571379360,3571379367,DE
3571379368,3571379375,GB
-3571379376,3571379631,DE
-3571379632,3571379647,GB
-3571379648,3571379871,DE
-3571379872,3571379887,GB
-3571379888,3571379903,DE
-3571379904,3571381151,GB
-3571381152,3571381631,DE
-3571381632,3571381695,AT
-3571381696,3571381711,DE
-3571381712,3571381727,GB
-3571381728,3571381791,DE
-3571381792,3571381887,GB
-3571381888,3571381951,DE
-3571381952,3571382015,GB
-3571382016,3571382207,DE
-3571382208,3571382271,GB
-3571382272,3571382303,DE
-3571382304,3571382351,GB
-3571382352,3571382367,DE
-3571382368,3571382623,GB
-3571382624,3571382783,DE
-3571382784,3571383039,AT
-3571383040,3571383135,DE
-3571383136,3571383151,AT
-3571383152,3571383167,GB
-3571383168,3571383175,DE
-3571383176,3571383999,GB
-3571384000,3571384063,DE
-3571384064,3571384191,GB
-3571384192,3571385151,DE
+3571379376,3571379391,DE
+3571379392,3571379535,GB
+3571379536,3571379559,DE
+3571379560,3571379887,GB
+3571379888,3571379895,DE
+3571379896,3571382623,GB
+3571382624,3571382655,DE
+3571382656,3571384319,GB
+3571384320,3571385151,DE
3571385152,3571385183,GB
3571385184,3571385631,DE
3571385632,3571385663,GB
@@ -132760,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
@@ -132772,13 +141731,15 @@
3571473152,3571473407,NL
3571473408,3571482367,DE
3571482368,3571482623,CH
-3571482624,3571515391,BE
+3571482624,3571485191,BE
+3571485192,3571485195,NL
+3571485196,3571515391,BE
3571515392,3571548159,GB
3571548160,3571580927,ES
-3571580928,3571595727,FI
-3571595728,3571595743,AX
-3571595744,3571646463,FI
-3571646464,3571675679,DE
+3571580928,3571646463,FI
+3571646464,3571655560,DE
+3571655561,3571655561,RO
+3571655562,3571675679,DE
3571675680,3571675687,GB
3571675688,3571710207,DE
3571710208,3571710463,GB
@@ -132839,15 +141800,7 @@
3572826112,3572891647,IT
3572891648,3572957175,FI
3572957176,3572957183,AX
-3572957184,3572975359,SE
-3572975360,3572975615,A2
-3572975616,3572980991,SE
-3572980992,3572981247,A2
-3572981248,3572984319,SE
-3572984320,3572984575,A2
-3572984576,3572986367,SE
-3572986368,3572986623,A2
-3572986624,3573022719,SE
+3572957184,3573022719,SE
3573022720,3573055487,RU
3573055488,3573088255,GB
3573088256,3573088263,CH
@@ -132898,9 +141851,7 @@
3573940224,3574005759,PS
3574005760,3574071295,CY
3574071296,3574136831,IL
-3574136832,3574137783,DE
-3574137784,3574137791,AT
-3574137792,3574137823,DE
+3574136832,3574137823,DE
3574137824,3574137855,NL
3574137856,3574138559,DE
3574138560,3574138623,NL
@@ -132948,20 +141899,25 @@
3574563808,3574563823,FI
3574563824,3574594559,SE
3574594560,3574595583,GB
-3574595584,3574596351,FR
+3574595584,3574595839,GP
+3574595840,3574596095,MQ
+3574596096,3574596351,FR
3574596352,3574596607,MQ
-3574596608,3574597631,FR
-3574597632,3574597887,MQ
-3574597888,3574598655,FR
+3574596608,3574596863,GP
+3574596864,3574597119,GF
+3574597120,3574597631,MQ
+3574597632,3574598143,GP
+3574598144,3574598399,MQ
+3574598400,3574598655,GP
3574598656,3574599679,MQ
-3574599680,3574600191,FR
-3574600192,3574601215,MQ
-3574601216,3574601471,RE
+3574599680,3574599935,GP
+3574599936,3574600959,MQ
+3574600960,3574601471,GP
3574601472,3574601983,MQ
-3574601984,3574602239,GF
-3574602240,3574602495,FR
+3574601984,3574602495,GF
3574602496,3574603263,MQ
-3574603264,3574603775,FR
+3574603264,3574603519,GP
+3574603520,3574603775,GF
3574603776,3574611967,BG
3574611968,3574628351,HU
3574628352,3574661119,GR
@@ -133018,15 +141974,25 @@
3575316480,3575349247,RU
3575349248,3575351679,ES
3575351680,3575351687,NL
-3575351688,3575355231,ES
+3575351688,3575351943,ES
+3575351944,3575351951,FR
+3575351952,3575354599,ES
+3575354600,3575354607,GB
+3575354608,3575355231,ES
3575355232,3575355247,GB
3575355248,3575360199,ES
3575360200,3575360207,FR
-3575360208,3575367111,ES
+3575360208,3575366135,ES
+3575366136,3575366143,GB
+3575366144,3575367111,ES
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
@@ -133253,8 +142219,7 @@
3575634456,3575634463,DE
3575634464,3575634495,BE
3575634496,3575634511,FI
-3575634512,3575634519,CH
-3575634520,3575634591,BE
+3575634512,3575634591,BE
3575634592,3575634599,ES
3575634600,3575634607,BE
3575634608,3575634615,GB
@@ -133303,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
@@ -133780,9 +142745,7 @@
3576091408,3576091423,GB
3576091424,3576091455,EU
3576091456,3576091479,GB
-3576091480,3576091519,EU
-3576091520,3576091535,GB
-3576091536,3576091967,EU
+3576091480,3576091967,EU
3576091968,3576091983,GB
3576091984,3576091999,EU
3576092000,3576092031,GB
@@ -133799,129 +142762,47 @@
3576096768,3576099071,EU
3576099072,3576100863,GB
3576100864,3576101375,EU
-3576101376,3576102911,GB
-3576102912,3576103167,FR
-3576103168,3576103247,GB
-3576103248,3576103295,FR
-3576103296,3576103327,GB
-3576103328,3576103367,FR
-3576103368,3576103375,GB
-3576103376,3576103455,FR
-3576103456,3576103583,GB
-3576103584,3576103599,FR
-3576103600,3576103615,GB
-3576103616,3576103631,FR
-3576103632,3576103679,GB
-3576103680,3576103935,FR
-3576103936,3576104111,GB
-3576104112,3576104127,FR
-3576104128,3576104175,GB
-3576104176,3576104191,FR
-3576104192,3576104319,GB
-3576104320,3576104351,FR
-3576104352,3576104447,GB
-3576104448,3576104495,FR
-3576104496,3576104575,GB
-3576104576,3576104607,FR
-3576104608,3576104639,GB
-3576104640,3576104655,FR
-3576104656,3576104703,GB
-3576104704,3576104959,FR
-3576104960,3576105055,GB
-3576105056,3576105183,FR
-3576105184,3576105215,GB
-3576105216,3576105535,FR
-3576105536,3576105599,GB
-3576105600,3576105727,FR
-3576105728,3576105759,GB
-3576105760,3576105855,FR
-3576105856,3576105999,GB
-3576106000,3576106047,FR
-3576106048,3576106055,GB
-3576106056,3576106111,FR
-3576106112,3576106239,GB
-3576106240,3576106287,FR
-3576106288,3576106559,GB
-3576106560,3576106751,FR
-3576106752,3576107007,GB
-3576107008,3576107135,FR
-3576107136,3576107183,GB
-3576107184,3576107231,FR
-3576107232,3576107263,GB
-3576107264,3576107295,FR
-3576107296,3576107391,GB
-3576107392,3576107519,FR
-3576107520,3576107647,GB
-3576107648,3576107679,FR
-3576107680,3576107695,GB
-3576107696,3576107759,FR
-3576107760,3576107775,GB
-3576107776,3576107903,FR
-3576107904,3576108031,GB
-3576108032,3576108063,FR
-3576108064,3576108079,GB
-3576108080,3576108159,FR
-3576108160,3576108255,GB
-3576108256,3576108263,FR
-3576108264,3576108271,GB
-3576108272,3576108351,FR
-3576108352,3576108511,GB
-3576108512,3576108799,FR
-3576108800,3576108815,GB
-3576108816,3576108863,FR
-3576108864,3576108991,GB
-3576108992,3576109023,FR
-3576109024,3576109055,DE
-3576109056,3576109311,GB
-3576109312,3576109567,FR
-3576109568,3576109695,GB
-3576109696,3576109791,FR
-3576109792,3576109799,GB
-3576109800,3576109815,FR
-3576109816,3576110079,GB
-3576110080,3576110207,FR
-3576110208,3576110271,GB
-3576110272,3576110335,FR
-3576110336,3576110367,GB
-3576110368,3576110463,FR
-3576110464,3576110575,GB
-3576110576,3576110847,FR
-3576110848,3576111103,GB
-3576111104,3576111231,FR
-3576111232,3576111423,GB
-3576111424,3576111599,FR
-3576111600,3576111615,GB
-3576111616,3576111647,FR
-3576111648,3576111679,GB
-3576111680,3576111711,FR
-3576111712,3576111727,GB
-3576111728,3576111807,FR
-3576111808,3576112511,GB
-3576112512,3576112543,FR
-3576112544,3576113407,GB
-3576113408,3576113535,FR
-3576113536,3576119295,GB
-3576119296,3576119455,CH
-3576119456,3576119471,BE
-3576119472,3576127487,CH
-3576127488,3576127615,GB
-3576127616,3576127647,FR
-3576127648,3576127679,GB
-3576127680,3576127687,FR
-3576127688,3576127695,GB
-3576127696,3576127703,FR
-3576127704,3576131583,GB
-3576131584,3576135679,CH
+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,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,3576135295,GB
+3576135296,3576135359,CH
+3576135360,3576135679,GB
3576135680,3576168447,DE
3576168448,3576233983,GB
-3576233984,3576236671,FR
-3576236672,3576236719,GB
+3576233984,3576236703,FR
+3576236704,3576236719,GB
3576236720,3576236743,FR
3576236744,3576236751,GB
3576236752,3576236775,FR
3576236776,3576236783,GB
-3576236784,3576236879,FR
-3576236880,3576236927,GB
+3576236784,3576236887,FR
+3576236888,3576236927,GB
3576236928,3576237063,FR
3576237064,3576237071,GB
3576237072,3576237087,FR
@@ -133938,21 +142819,13 @@
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
-3576238576,3576238615,FR
-3576238616,3576238623,GB
-3576238624,3576238639,FR
-3576238640,3576238655,GB
-3576238656,3576238863,FR
+3576238336,3576238567,FR
+3576238568,3576238575,GB
+3576238576,3576238863,FR
3576238864,3576238879,GB
3576238880,3576238895,FR
3576238896,3576238911,GB
@@ -133964,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
@@ -134003,9 +142873,7 @@
3576242320,3576242327,GB
3576242328,3576242335,FR
3576242336,3576242343,GB
-3576242344,3576243967,FR
-3576243968,3576243983,GB
-3576243984,3576244103,FR
+3576242344,3576244103,FR
3576244104,3576244111,GB
3576244112,3576244127,FR
3576244128,3576244143,GB
@@ -134040,14 +142908,14 @@
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
-3576254648,3576254655,FR
-3576254656,3576254687,GB
-3576254688,3576254847,FR
+3576254648,3576254847,FR
3576254848,3576254855,GB
3576254856,3576254863,FR
3576254864,3576254879,GB
@@ -134057,15 +142925,19 @@
3576255152,3576255199,GB
3576255200,3576255215,FR
3576255216,3576255231,GB
-3576255232,3576255247,FR
-3576255248,3576255263,GB
-3576255264,3576255375,FR
+3576255232,3576255239,FR
+3576255240,3576255247,GB
+3576255248,3576255375,FR
3576255376,3576255383,GB
3576255384,3576255407,FR
3576255408,3576255423,GB
3576255424,3576255431,FR
3576255432,3576255439,GB
-3576255440,3576255519,FR
+3576255440,3576255447,FR
+3576255448,3576255455,GB
+3576255456,3576255471,FR
+3576255472,3576255479,GB
+3576255480,3576255519,FR
3576255520,3576255527,GB
3576255528,3576255543,FR
3576255544,3576255551,GB
@@ -134106,8 +142978,8 @@
3576256960,3576256991,FR
3576256992,3576257007,GB
3576257008,3576257103,FR
-3576257104,3576257111,GB
-3576257112,3576257135,FR
+3576257104,3576257119,GB
+3576257120,3576257135,FR
3576257136,3576257151,GB
3576257152,3576257159,FR
3576257160,3576257167,GB
@@ -134120,9 +142992,7 @@
3576257376,3576257455,FR
3576257456,3576257471,GB
3576257472,3576257487,FR
-3576257488,3576257495,GB
-3576257496,3576257503,FR
-3576257504,3576257535,GB
+3576257488,3576257535,GB
3576257536,3576257551,FR
3576257552,3576257583,GB
3576257584,3576257631,FR
@@ -134137,11 +143007,7 @@
3576257888,3576257903,GB
3576257904,3576257975,FR
3576257976,3576258015,GB
-3576258016,3576258055,FR
-3576258056,3576258063,GB
-3576258064,3576258079,FR
-3576258080,3576258095,GB
-3576258096,3576258167,FR
+3576258016,3576258167,FR
3576258168,3576258175,GB
3576258176,3576258351,FR
3576258352,3576258399,GB
@@ -134159,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
@@ -134171,8 +143037,8 @@
3576259080,3576259087,GB
3576259088,3576259103,FR
3576259104,3576259199,GB
-3576259200,3576259231,FR
-3576259232,3576259247,GB
+3576259200,3576259215,FR
+3576259216,3576259247,GB
3576259248,3576259279,FR
3576259280,3576259295,GB
3576259296,3576259311,FR
@@ -134233,51 +143099,37 @@
3576261392,3576261631,GB
3576261632,3576263463,FR
3576263464,3576263471,GB
-3576263472,3576263503,FR
-3576263504,3576263527,GB
-3576263528,3576263535,FR
-3576263536,3576263551,GB
-3576263552,3576263567,FR
+3576263472,3576263519,FR
+3576263520,3576263527,GB
+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
3576263752,3576263759,GB
3576263760,3576263791,FR
-3576263792,3576263887,GB
-3576263888,3576263911,FR
+3576263792,3576263903,GB
+3576263904,3576263911,FR
3576263912,3576263919,GB
3576263920,3576264295,FR
3576264296,3576264319,GB
3576264320,3576264383,FR
3576264384,3576264399,GB
3576264400,3576264447,FR
-3576264448,3576264511,GB
-3576264512,3576264543,FR
+3576264448,3576264527,GB
+3576264528,3576264543,FR
3576264544,3576264559,GB
3576264560,3576264575,FR
3576264576,3576264623,GB
3576264624,3576264639,FR
3576264640,3576264687,GB
-3576264688,3576265287,FR
-3576265288,3576265295,GB
-3576265296,3576265303,FR
-3576265304,3576265311,GB
-3576265312,3576265319,FR
-3576265320,3576265335,GB
-3576265336,3576265343,FR
-3576265344,3576265367,GB
-3576265368,3576265375,FR
-3576265376,3576265383,GB
-3576265384,3576265399,FR
-3576265400,3576265431,GB
-3576265432,3576265447,FR
-3576265448,3576265455,GB
-3576265456,3576265463,FR
+3576264688,3576265319,FR
+3576265320,3576265327,GB
+3576265328,3576265423,FR
+3576265424,3576265431,GB
+3576265432,3576265463,FR
3576265464,3576265471,GB
3576265472,3576265759,FR
3576265760,3576265775,GB
@@ -134291,12 +143143,10 @@
3576265880,3576265903,GB
3576265904,3576265919,FR
3576265920,3576265935,GB
-3576265936,3576266247,FR
-3576266248,3576266495,GB
-3576266496,3576266663,FR
-3576266664,3576266671,GB
-3576266672,3576266687,FR
-3576266688,3576266751,GB
+3576265936,3576266255,FR
+3576266256,3576266495,GB
+3576266496,3576266671,FR
+3576266672,3576266751,GB
3576266752,3576299519,FR
3576299520,3576365055,AE
3576365056,3576430591,TR
@@ -134332,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
@@ -134359,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
@@ -134373,13 +143223,13 @@
3577559776,3577559783,FR
3577559784,3577562391,DE
3577562392,3577562399,GB
-3577562400,3577567711,DE
+3577562400,3577564631,DE
+3577564632,3577564639,GB
+3577564640,3577567711,DE
3577567712,3577567719,IT
3577567720,3577571391,DE
3577571392,3577571399,DK
-3577571400,3577572391,DE
-3577572392,3577572399,GB
-3577572400,3577577231,DE
+3577571400,3577577231,DE
3577577232,3577577247,US
3577577248,3577592431,DE
3577592432,3577592447,FR
@@ -134445,8 +143295,8 @@
3577625208,3577625215,GB
3577625216,3577625231,EU
3577625232,3577625599,GB
-3577625600,3577625823,EU
-3577625824,3577626623,GB
+3577625600,3577625791,EU
+3577625792,3577626623,GB
3577626624,3577627135,FR
3577627136,3577627391,EU
3577627392,3577627647,GB
@@ -134454,8 +143304,8 @@
3577627968,3577627999,EU
3577628000,3577628671,FR
3577628672,3577630719,CH
-3577630720,3577631743,GB
-3577631744,3577633791,EU
+3577630720,3577632255,GB
+3577632256,3577633791,EU
3577633792,3577633951,CZ
3577633952,3577633959,EU
3577633960,3577633967,CZ
@@ -134473,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
@@ -134487,21 +143337,17 @@
3577640720,3577640735,EU
3577640736,3577641151,FR
3577641152,3577641159,EU
-3577641160,3577641199,FR
-3577641200,3577641215,EU
-3577641216,3577641391,FR
+3577641160,3577641391,FR
3577641392,3577641399,EU
-3577641400,3577641423,FR
-3577641424,3577641983,EU
-3577641984,3577642023,GB
-3577642024,3577642031,EU
-3577642032,3577642111,GB
-3577642112,3577642175,EU
-3577642176,3577642239,GB
+3577641400,3577641439,FR
+3577641440,3577641983,EU
+3577641984,3577642007,GB
+3577642008,3577642015,EU
+3577642016,3577642055,GB
+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
@@ -134629,7 +143475,9 @@
3578988096,3578988099,CH
3578988100,3578992959,DE
3578992960,3578992975,GB
-3578992976,3578996999,DE
+3578992976,3578995015,DE
+3578995016,3578995023,BE
+3578995024,3578996999,DE
3578997000,3578997007,CH
3578997008,3578997935,DE
3578997936,3578997943,FR
@@ -134667,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
@@ -134901,21 +143751,34 @@
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,SE
+3580204544,3580205055,NL
3580205056,3580207103,HR
3580207104,3580208127,SE
-3580208128,3580208639,EE
-3580208640,3580213247,SE
+3580208128,3580209151,EE
+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
3580232448,3580233727,LT
-3580233728,3580235263,SE
+3580233728,3580234751,NO
+3580234752,3580235263,SE
3580235264,3580236799,LT
3580236800,3580237567,LV
3580237568,3580237823,LT
@@ -135076,10 +143939,21 @@
3582050304,3582058495,NL
3582058496,3582066687,AT
3582066688,3582074879,UA
-3582074880,3582078631,GB
+3582074880,3582076079,GB
+3582076080,3582076095,AE
+3582076096,3582076863,GB
+3582076864,3582076895,DE
+3582076896,3582076927,GB
+3582076928,3582077111,ES
+3582077112,3582077439,GB
+3582077440,3582077471,DE
+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
@@ -135088,10 +143962,11 @@
3582107648,3582115839,NL
3582115840,3582116095,SE
3582116096,3582116351,EE
-3582116352,3582116863,SE
+3582116352,3582116863,NO
3582116864,3582117887,EE
3582117888,3582119423,LT
-3582119424,3582120959,SE
+3582119424,3582120447,SE
+3582120448,3582120959,NO
3582120960,3582121983,EE
3582121984,3582124031,LT
3582124032,3582125383,FI
@@ -135103,25 +143978,13 @@
3582156800,3582164991,GB
3582164992,3582173183,SE
3582173184,3582181375,GB
-3582181376,3582190847,DE
-3582190848,3582190879,CH
-3582190880,3582190927,DE
+3582181376,3582190927,DE
3582190928,3582190931,FR
-3582190932,3582191023,DE
-3582191024,3582191031,BE
-3582191032,3582192127,DE
+3582190932,3582192127,DE
3582192128,3582192143,NL
-3582192144,3582192287,DE
-3582192288,3582192303,CH
-3582192304,3582194775,DE
+3582192144,3582194775,DE
3582194776,3582194783,CY
-3582194784,3582194863,DE
-3582194864,3582194879,CH
-3582194880,3582195135,DE
-3582195136,3582195143,CH
-3582195144,3582196183,DE
-3582196184,3582196191,BE
-3582196192,3582197127,DE
+3582194784,3582197127,DE
3582197128,3582197135,BZ
3582197136,3582197759,DE
3582197760,3582205951,DK
@@ -135133,11 +143996,11 @@
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,3582226599,SE
+3582224380,3582225719,SE
+3582225720,3582225727,FI
+3582225728,3582226599,SE
3582226600,3582226607,FI
3582226608,3582230527,SE
3582230528,3582238719,BE
@@ -135149,13 +144012,10 @@
3582287872,3582296063,DE
3582296064,3582304255,GB
3582304256,3582312447,UA
-3582312448,3582312703,GB
-3582312704,3582313215,JE
-3582313216,3582313231,GB
-3582313232,3582313249,JE
+3582312448,3582313249,JE
3582313250,3582313250,GB
-3582313251,3582313255,JE
-3582313256,3582313260,GB
+3582313251,3582313256,JE
+3582313257,3582313260,GB
3582313261,3582313271,JE
3582313272,3582313342,GB
3582313343,3582313343,JE
@@ -135380,9 +144240,7 @@
3582566752,3582566767,BE
3582566768,3582566783,EU
3582566784,3582566847,BE
-3582566848,3582566863,EU
-3582566864,3582566879,BE
-3582566880,3582566911,EU
+3582566848,3582566911,EU
3582566912,3582567019,BE
3582567020,3582567023,EU
3582567024,3582567039,BE
@@ -135426,12 +144284,13 @@
3582569472,3582569535,FR
3582569536,3582569983,EU
3582569984,3582570239,FR
-3582570240,3582570367,DE
-3582570368,3582570399,EU
+3582570240,3582570399,GB
3582570400,3582570431,FR
3582570432,3582570463,EU
3582570464,3582570471,FR
-3582570472,3582570751,EU
+3582570472,3582570483,EU
+3582570484,3582570487,FR
+3582570488,3582570751,EU
3582570752,3582570823,FR
3582570824,3582570847,EU
3582570848,3582570855,FR
@@ -135444,8 +144303,8 @@
3582570976,3582570983,EU
3582570984,3582571031,FR
3582571032,3582571135,EU
-3582571136,3582571199,FR
-3582571200,3582571303,EU
+3582571136,3582571263,FR
+3582571264,3582571303,EU
3582571304,3582571307,CH
3582571308,3582571375,EU
3582571376,3582571391,FR
@@ -135456,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
@@ -135497,15 +144358,13 @@
3582573552,3582573567,DE
3582573568,3582573599,EU
3582573600,3582573615,CH
-3582573616,3582573631,EU
-3582573632,3582573695,CH
-3582573696,3582573823,EU
+3582573616,3582573823,EU
3582573824,3582573887,CH
3582573888,3582573895,EU
3582573896,3582573903,CH
-3582573904,3582573911,EU
-3582573912,3582574015,CH
-3582574016,3582574431,EU
+3582573904,3582573919,EU
+3582573920,3582573951,CH
+3582573952,3582574431,EU
3582574432,3582574435,CH
3582574436,3582574455,EU
3582574456,3582574463,CH
@@ -135534,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
@@ -135558,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
@@ -135622,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
@@ -135708,9 +144565,9 @@
3583533056,3583541247,DE
3583541248,3583549439,RU
3583549440,3583557631,NL
-3583557632,3583558399,IT
-3583558400,3583558527,SM
-3583558528,3583565823,IT
+3583557632,3583561471,IT
+3583561472,3583561503,SM
+3583561504,3583565823,IT
3583565824,3583574015,GB
3583574016,3583582207,NO
3583582208,3583590399,AT
@@ -135728,9 +144585,7 @@
3583705240,3583705247,NA
3583705248,3583705255,UA
3583705256,3583705263,NA
-3583705264,3583705287,UA
-3583705288,3583705295,NA
-3583705296,3583705303,UA
+3583705264,3583705303,UA
3583705304,3583705319,NA
3583705320,3583705335,UA
3583705336,3583705343,NA
@@ -135748,22 +144603,15 @@
3583705848,3583705855,NA
3583705856,3583705859,UA
3583705860,3583705863,NA
-3583705864,3583705903,UA
-3583705904,3583705911,NA
-3583705912,3583705919,RU
-3583705920,3583706023,UA
+3583705864,3583706023,UA
3583706024,3583706031,NA
3583706032,3583706055,UA
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,3583706223,UA
-3583706224,3583706231,NA
-3583706232,3583706295,UA
+3583706200,3583706295,UA
3583706296,3583706319,NA
3583706320,3583706463,UA
3583706464,3583706471,NA
@@ -135779,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
@@ -135793,8 +144639,8 @@
3583706864,3583706879,NA
3583706880,3583706883,UA
3583706884,3583706887,NA
-3583706888,3583706895,UA
-3583706896,3583706911,NA
+3583706888,3583706903,UA
+3583706904,3583706911,NA
3583706912,3583706927,UA
3583706928,3583706943,NA
3583706944,3583706959,UA
@@ -135813,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
@@ -135845,21 +144687,16 @@
3583709504,3583709511,RU
3583709512,3583709607,UA
3583709608,3583709615,RU
-3583709616,3583709663,UA
-3583709664,3583709671,DE
-3583709672,3583709699,UA
+3583709616,3583709699,UA
3583709700,3583709703,NA
-3583709704,3583709727,UA
-3583709728,3583709743,NA
+3583709704,3583709735,UA
+3583709736,3583709743,NA
3583709744,3583709759,UA
3583709760,3583709767,NA
-3583709768,3583709791,UA
-3583709792,3583709799,NA
-3583709800,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
@@ -135888,14 +144725,9 @@
3583710704,3583710711,NA
3583710712,3583710743,UA
3583710744,3583710751,BE
-3583710752,3583710855,UA
-3583710856,3583710863,NA
-3583710864,3583710887,UA
+3583710752,3583710887,UA
3583710888,3583710895,NA
-3583710896,3583710991,UA
-3583710992,3583710999,NA
-3583711000,3583711007,UA
-3583711008,3583711015,RU
+3583710896,3583711015,UA
3583711016,3583711023,NA
3583711024,3583711247,UA
3583711248,3583711255,NA
@@ -135905,32 +144737,28 @@
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
3583712128,3583712159,UA
3583712160,3583712191,NA
-3583712192,3583712311,UA
-3583712312,3583712319,NA
-3583712320,3583712455,UA
+3583712192,3583712455,UA
3583712456,3583712463,NA
3583712464,3583712471,UA
3583712472,3583712479,NA
-3583712480,3583712775,UA
+3583712480,3583712527,UA
+3583712528,3583712535,IN
+3583712536,3583712775,UA
3583712776,3583712783,NA
-3583712784,3583712927,UA
-3583712928,3583712943,NA
+3583712784,3583712935,UA
+3583712936,3583712943,NA
3583712944,3583713007,UA
3583713008,3583713015,RU
3583713016,3583713279,UA
@@ -135949,7 +144777,9 @@
3583743520,3583743551,FR
3583743552,3583743615,EU
3583743616,3583743743,GB
-3583743744,3583743975,EU
+3583743744,3583743775,EU
+3583743776,3583743807,NL
+3583743808,3583743975,EU
3583743976,3583743983,GB
3583743984,3583744063,EU
3583744064,3583744067,FR
@@ -135958,23 +144788,20 @@
3583744096,3583744099,DE
3583744100,3583744103,FR
3583744104,3583744111,GB
-3583744112,3583744127,EU
-3583744128,3583744255,GB
-3583744256,3583744287,EU
+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
3583745000,3583745003,NL
-3583745004,3583745279,EU
+3583745004,3583745215,EU
+3583745216,3583745279,SE
3583745280,3583745535,GB
3583745536,3583745663,SE
3583745664,3583745719,EU
@@ -135982,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
@@ -136018,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
@@ -136180,7 +145011,9 @@
3584614752,3584614759,GB
3584614760,3584614763,IE
3584614764,3584614767,GB
-3584614768,3584622335,IE
+3584614768,3584615167,IE
+3584615168,3584615327,GB
+3584615328,3584622335,IE
3584622336,3584622591,GB
3584622592,3584630783,FI
3584630784,3584638975,BG
@@ -136230,54 +145063,22 @@
3584929600,3584929727,DE
3584929728,3584931375,CH
3584931376,3584931391,ES
-3584931392,3584933887,CH
-3584933888,3584933919,SE
-3584933920,3584933927,PL
-3584933928,3584934079,SE
-3584934080,3584934087,PL
-3584934088,3584934167,SE
-3584934168,3584934171,PL
-3584934172,3584934219,SE
-3584934220,3584934223,PL
-3584934224,3584934431,SE
-3584934432,3584934439,PL
-3584934440,3584935487,SE
-3584935488,3584935491,PL
-3584935492,3584935735,SE
-3584935736,3584935739,PL
-3584935740,3584935775,SE
-3584935776,3584935779,PL
-3584935780,3584936227,SE
-3584936228,3584936231,PL
-3584936232,3584936327,SE
-3584936328,3584936331,PL
-3584936332,3584938607,SE
-3584938608,3584938611,PL
-3584938612,3584938711,SE
-3584938712,3584938715,PL
-3584938716,3584938719,SE
-3584938720,3584938723,PL
-3584938724,3584941111,SE
-3584941112,3584941115,PL
-3584941116,3584941131,SE
-3584941132,3584941135,PL
-3584941136,3584942079,SE
+3584931392,3584932295,CH
+3584932296,3584932303,DE
+3584932304,3584933887,CH
+3584933888,3584942079,NO
3584942080,3584950271,DK
3584950272,3584958463,UA
3584958464,3584966655,DE
3584966656,3584974847,DK
3584974848,3584983039,FR
-3584983040,3584988255,US
-3584988256,3584988287,UA
-3584988288,3584988575,US
+3584983040,3584988575,US
3584988576,3584988591,UA
3584988592,3584988623,US
3584988624,3584988639,UA
3584988640,3584988655,US
3584988656,3584988671,UA
-3584988672,3584988927,US
-3584988928,3584989183,UA
-3584989184,3584990303,US
+3584988672,3584990303,US
3584990304,3584990335,UA
3584990336,3584990463,US
3584990464,3584990495,NL
@@ -136293,15 +145094,9 @@
3585024000,3585032191,CZ
3585032192,3585048575,LV
3585048576,3585050623,IQ
-3585050624,3585054719,GB
-3585054720,3585055063,NG
-3585055064,3585055071,GB
-3585055072,3585055087,NG
-3585055088,3585056767,GB
+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
@@ -136334,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
@@ -136365,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
@@ -136417,8 +145211,7 @@
3585699840,3585700095,IQ
3585700096,3585700159,NG
3585700160,3585700191,A2
-3585700192,3585700222,US
-3585700223,3585700223,NG
+3585700192,3585700223,NG
3585700224,3585700231,A2
3585700232,3585700239,US
3585700240,3585700255,ZA
@@ -136446,8 +145239,7 @@
3585702656,3585702911,TG
3585702912,3585703167,NG
3585703168,3585703423,FR
-3585703424,3585703679,A2
-3585703680,3585703935,GB
+3585703424,3585703935,A2
3585703936,3585712127,DE
3585712128,3585716335,AT
3585716336,3585716351,DE
@@ -136482,8 +145274,8 @@
3585835008,3585835023,GB
3585835024,3585835583,NL
3585835584,3585835647,IQ
-3585835648,3585835791,NL
-3585835792,3585835839,GQ
+3585835648,3585835775,NL
+3585835776,3585835839,GQ
3585835840,3585835847,AO
3585835848,3585835871,NL
3585835872,3585835879,IQ
@@ -136543,17 +145335,23 @@
3585902272,3585902447,NO
3585902448,3585902463,GB
3585902464,3585908735,NO
-3585908736,3585909759,FR
-3585909760,3585910271,MQ
-3585910272,3585910783,FR
-3585910784,3585911039,MQ
-3585911040,3585911551,FR
-3585911552,3585911807,GP
-3585911808,3585912063,FR
-3585912064,3585912319,GP
-3585912320,3585912575,FR
-3585912576,3585912831,GP
-3585912832,3585916671,FR
+3585908736,3585908991,GP
+3585908992,3585909759,GF
+3585909760,3585910015,GP
+3585910016,3585910271,MQ
+3585910272,3585910527,GP
+3585910528,3585910783,FR
+3585910784,3585911039,GP
+3585911040,3585911295,FR
+3585911296,3585913087,GP
+3585913088,3585913343,FR
+3585913344,3585914623,GP
+3585914624,3585914879,GF
+3585914880,3585915135,MQ
+3585915136,3585915647,GP
+3585915648,3585915903,FR
+3585915904,3585916159,GP
+3585916160,3585916671,FR
3585916672,3585916927,MQ
3585916928,3585925119,IT
3585925120,3585933311,CH
@@ -136644,8 +145442,8 @@
3586272800,3586272807,IT
3586272808,3586272815,ES
3586272816,3586272823,IT
-3586272824,3586272831,ES
-3586272832,3586272895,NL
+3586272824,3586272863,ES
+3586272864,3586272895,NL
3586272896,3586272959,IT
3586272960,3586272991,ES
3586272992,3586273007,IT
@@ -136673,19 +145471,19 @@
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,3586476431,HU
+3586476408,3586476415,BG
+3586476416,3586476431,HU
3586476432,3586476439,SK
3586476440,3586478079,HU
3586478080,3586478591,SK
3586478592,3586478847,HU
3586478848,3586479103,SK
3586479104,3586479359,TR
-3586479360,3586490367,HU
+3586479360,3586479615,SK
+3586479616,3586490367,HU
3586490368,3586506751,LT
3586506752,3586523135,NL
3586523136,3586542559,DE
@@ -136696,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
@@ -136745,8 +145553,7 @@
3586679648,3586679711,IT
3586679712,3586679727,FR
3586679728,3586679743,IT
-3586679744,3586680063,FR
-3586680064,3586680319,IT
+3586679744,3586680319,FR
3586680320,3586680447,ES
3586680448,3586680463,FR
3586680464,3586680543,ES
@@ -136756,11 +145563,7 @@
3586680608,3586680615,ES
3586680616,3586680767,FR
3586680768,3586680831,ES
-3586680832,3586681087,FR
-3586681088,3586681343,IT
-3586681344,3586682111,FR
-3586682112,3586682175,US
-3586682176,3586682239,FR
+3586680832,3586682239,FR
3586682240,3586682367,US
3586682368,3586682399,AT
3586682400,3586682879,FR
@@ -136769,56 +145572,29 @@
3586703360,3586719743,CH
3586719744,3586752511,ES
3586752512,3586785279,NL
-3586785280,3586793471,RU
+3586785280,3586793471,OM
3586793472,3586801663,CH
-3586801664,3586818047,HR
+3586801664,3586804751,HR
+3586804752,3586804767,HU
+3586804768,3586818047,HR
3586818048,3586834431,IE
3586834432,3586850495,DE
3586850496,3586850511,US
-3586850512,3586850543,DE
-3586850544,3586850559,GR
-3586850560,3586850815,DE
+3586850512,3586850815,DE
3586850816,3586867199,NO
3586867200,3586883583,FR
3586883584,3586899967,IT
3586899968,3586900287,DE
3586900288,3586900351,NL
-3586900352,3586902271,DE
-3586902272,3586902335,CH
-3586902336,3586902411,DE
-3586902412,3586902415,CH
-3586902416,3586903263,DE
-3586903264,3586903295,CH
-3586903296,3586904223,DE
-3586904224,3586904255,CH
-3586904256,3586904319,DE
-3586904320,3586904415,CH
-3586904416,3586904831,DE
+3586900352,3586901311,DE
+3586901312,3586901375,ES
+3586901376,3586904831,DE
3586904832,3586904839,VG
-3586904840,3586905039,DE
-3586905040,3586905055,CH
-3586905056,3586905071,DE
-3586905072,3586905079,CH
-3586905080,3586905087,DE
-3586905088,3586905119,CH
-3586905120,3586905167,DE
-3586905168,3586905199,CH
+3586904840,3586905199,DE
3586905200,3586905215,GB
-3586905216,3586905247,DE
-3586905248,3586905279,CH
-3586905280,3586905287,DE
+3586905216,3586905287,DE
3586905288,3586905295,CY
-3586905296,3586906391,DE
-3586906392,3586906399,CH
-3586906400,3586906423,DE
-3586906424,3586906427,CH
-3586906428,3586906719,DE
-3586906720,3586906735,CH
-3586906736,3586907903,DE
-3586907904,3586908031,CH
-3586908032,3586909695,DE
-3586909696,3586909823,CH
-3586909824,3586910559,DE
+3586905296,3586910559,DE
3586910560,3586910567,NL
3586910568,3586910575,CY
3586910576,3586910587,NL
@@ -136829,12 +145605,10 @@
3586910688,3586910711,DE
3586910712,3586910719,NL
3586910720,3586910991,DE
-3586910992,3586911007,BE
-3586911008,3586911103,DE
+3586910992,3586911039,BE
+3586911040,3586911103,DE
3586911104,3586911167,NL
-3586911168,3586911191,DE
-3586911192,3586911195,BE
-3586911196,3586916351,DE
+3586911168,3586916351,DE
3586916352,3586924031,IT
3586924032,3586924047,US
3586924048,3586924543,IT
@@ -136903,15 +145677,7 @@
3587053056,3587053823,FR
3587053824,3587055615,GB
3587055616,3587063807,UZ
-3587063808,3587071583,NL
-3587071584,3587071599,BE
-3587071600,3587071615,NL
-3587071616,3587071631,DE
-3587071632,3587072095,NL
-3587072096,3587072127,DE
-3587072128,3587074415,NL
-3587074416,3587074431,BE
-3587074432,3587080191,NL
+3587063808,3587080191,NL
3587080192,3587082367,GB
3587082368,3587082431,US
3587082432,3587088383,GB
@@ -136927,14 +145693,15 @@
3587178796,3587178799,US
3587178800,3587179439,AT
3587179440,3587179455,GB
-3587179456,3587179463,AT
-3587179464,3587179471,CH
-3587179472,3587186687,AT
-3587186688,3587190783,DE
-3587190784,3587191039,GB
-3587191040,3587194495,DE
+3587179456,3587186687,AT
+3587186688,3587186815,DE
+3587186816,3587187199,A2
+3587187200,3587187455,GB
+3587187456,3587188479,A2
+3587188480,3587188735,DE
+3587188736,3587194495,A2
3587194496,3587194511,RU
-3587194512,3587194879,DE
+3587194512,3587194879,A2
3587194880,3587211263,GB
3587211264,3587211531,AT
3587211532,3587211535,DE
@@ -136942,7 +145709,9 @@
3587213912,3587213919,UY
3587213920,3587219455,AT
3587219456,3587227647,RU
-3587227648,3587227759,NL
+3587227648,3587227663,NL
+3587227664,3587227679,GB
+3587227680,3587227759,NL
3587227760,3587227775,GB
3587227776,3587227903,NL
3587227904,3587227967,GB
@@ -136982,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
@@ -136997,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
@@ -137018,16 +145787,18 @@
3587233952,3587233967,NL
3587233968,3587233983,GB
3587233984,3587233999,NL
-3587234000,3587234015,GB
-3587234016,3587234031,NL
-3587234032,3587234047,GB
+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
@@ -137045,35 +145816,45 @@
3587237496,3587237519,GB
3587237520,3587237567,NL
3587237568,3587237887,GB
-3587237888,3587238471,NL
-3587238472,3587238479,GB
+3587237888,3587238463,NL
+3587238464,3587238479,GB
3587238480,3587238527,NL
3587238528,3587238543,GB
3587238544,3587238567,NL
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,3587239903,NL
-3587239904,3587239935,GB
-3587239936,3587239975,NL
-3587239976,3587239983,GB
-3587239984,3587240087,NL
-3587240088,3587240095,GB
-3587240096,3587240103,NL
+3587239312,3587239359,NL
+3587239360,3587239423,GB
+3587239424,3587239911,NL
+3587239912,3587239919,GB
+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,3587241143,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
3587241152,3587241223,NL
3587241224,3587241247,GB
@@ -137081,21 +145862,26 @@
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,3587243943,GB
-3587243944,3587243967,NL
+3587243936,3587243951,GB
+3587243952,3587243967,NL
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
@@ -137227,12 +146013,18 @@
3587391488,3587407871,KZ
3587407872,3587408383,NL
3587408384,3587408895,BE
-3587408896,3587424255,NL
+3587408896,3587409407,RU
+3587409408,3587410431,BE
+3587410432,3587410687,NL
+3587410688,3587412223,BE
+3587412224,3587424255,NL
3587424256,3587440639,DE
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
@@ -137247,9 +146039,7 @@
3587620864,3587637247,SE
3587637248,3587653631,FR
3587653632,3587670015,SK
-3587670016,3587679135,IT
-3587679136,3587679143,ES
-3587679144,3587683327,IT
+3587670016,3587683327,IT
3587683328,3587683359,FR
3587683360,3587686031,IT
3587686032,3587686039,FR
@@ -137261,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
@@ -137281,7 +146073,9 @@
3587866624,3587874815,FR
3587874816,3587877407,DE
3587877408,3587877439,NL
-3587877440,3587878527,DE
+3587877440,3587878335,DE
+3587878336,3587878399,BA
+3587878400,3587878527,DE
3587878528,3587878559,AT
3587878560,3587883007,DE
3587883008,3587915775,GB
@@ -137334,12 +146128,9 @@
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,3588554255,DE
-3588554256,3588554687,GB
+3588554240,3588554687,GB
3588554688,3588554751,IE
3588554752,3588571135,AT
3588571136,3588587519,GB
@@ -137347,7 +146138,11 @@
3588588568,3588588575,IT
3588588576,3588590175,ES
3588590176,3588590207,BE
-3588590208,3588598607,ES
+3588590208,3588590591,ES
+3588590592,3588590847,FR
+3588590848,3588595199,ES
+3588595200,3588595455,FR
+3588595456,3588598607,ES
3588598608,3588598615,IT
3588598616,3588603903,ES
3588603904,3588620287,SI
@@ -137370,7 +146165,9 @@
3588782272,3588782279,A2
3588782280,3588784127,GB
3588784128,3588800511,CH
-3588800512,3588816895,RU
+3588800512,3588802687,RU
+3588802688,3588802815,CH
+3588802816,3588816895,RU
3588816896,3588833279,IT
3588833280,3588848767,RO
3588848768,3588848775,FR
@@ -137516,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
@@ -137534,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
@@ -137554,7 +146355,9 @@
3589685248,3589718015,GB
3589718016,3589719343,BE
3589719344,3589719347,LU
-3589719348,3589719847,BE
+3589719348,3589719383,BE
+3589719384,3589719391,GB
+3589719392,3589719847,BE
3589719848,3589719855,AT
3589719856,3589719967,BE
3589719968,3589719975,GB
@@ -137763,10 +146566,10 @@
3589828640,3589828671,NL
3589828672,3589828735,EU
3589828736,3589828991,NL
-3589828992,3589829119,EU
+3589828992,3589829119,ES
3589829120,3589829183,GB
-3589829184,3589829375,EU
-3589829376,3589830655,GB
+3589829184,3589829631,EU
+3589829632,3589830655,GB
3589830656,3589831167,DE
3589831168,3589831679,US
3589831680,3589832703,FR
@@ -137785,32 +146588,14 @@
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,3589996575,GB
-3589996576,3589996623,NL
-3589996624,3589996639,GB
-3589996640,3589996655,NL
-3589996656,3589996735,GB
-3589996736,3589996799,NL
-3589996800,3589996863,GB
-3589996864,3589996879,NL
-3589996880,3589996911,GB
-3589996912,3589996931,NL
-3589996932,3589996959,GB
-3589996960,3589996991,NL
-3589996992,3589997055,GB
+3589996544,3589997055,GB
3589997056,3589997311,NL
-3589997312,3589997439,GB
-3589997440,3589997503,NL
-3589997504,3589997535,GB
-3589997536,3589997543,NL
-3589997544,3589997559,GB
+3589997312,3589997559,GB
3589997560,3589997567,NL
3589997568,3590012927,GB
3590012928,3590029311,BE
@@ -137840,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
@@ -137857,8 +146644,8 @@
3590157568,3590157631,SI
3590157632,3590157679,RS
3590157680,3590157687,SI
-3590157688,3590157695,RS
-3590157696,3590157743,SI
+3590157688,3590157719,RS
+3590157720,3590157743,SI
3590157744,3590157751,RS
3590157752,3590157759,SI
3590157760,3590157767,RS
@@ -137870,12 +146657,14 @@
3590157856,3590157951,RS
3590157952,3590158079,SI
3590158080,3590158343,RS
-3590158344,3590158407,SI
+3590158344,3590158359,SI
+3590158360,3590158367,RS
+3590158368,3590158407,SI
3590158408,3590158415,RS
-3590158416,3590158431,SI
+3590158416,3590158431,ME
3590158432,3590158439,RS
-3590158440,3590158455,SI
-3590158456,3590158479,RS
+3590158440,3590158447,SI
+3590158448,3590158479,RS
3590158480,3590158527,SI
3590158528,3590158535,RS
3590158536,3590158591,SI
@@ -137891,18 +146680,17 @@
3590225920,3590234111,TR
3590234112,3590242303,GB
3590242304,3590244351,US
-3590244352,3590244863,DE
-3590244864,3590245119,GR
-3590245120,3590245183,BE
-3590245184,3590245279,FR
-3590245280,3590245311,BE
+3590244352,3590244607,DE
+3590244608,3590244863,IT
+3590244864,3590245119,FR
+3590245120,3590245135,BE
+3590245136,3590245143,FR
+3590245144,3590245183,BE
+3590245184,3590245311,FR
3590245312,3590245439,US
3590245440,3590245503,FR
3590245504,3590245567,GB
-3590245568,3590245631,US
-3590245632,3590245887,FR
-3590245888,3590245983,US
-3590245984,3590246175,FR
+3590245568,3590246175,FR
3590246176,3590246207,AU
3590246208,3590246271,FR
3590246272,3590246287,DE
@@ -137927,46 +146715,40 @@
3590248448,3590248959,US
3590248960,3590249471,ES
3590249472,3590249983,IE
-3590249984,3590250495,GR
+3590249984,3590250239,FR
+3590250240,3590250495,GR
3590250496,3590250751,IE
-3590250752,3590251007,GR
-3590251008,3590251263,IT
+3590250752,3590251263,FR
3590251264,3590251519,DE
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
3590253376,3590253407,US
3590253408,3590254079,FR
-3590254080,3590254087,DE
-3590254088,3590254095,FR
-3590254096,3590254111,DE
+3590254080,3590254111,DE
3590254112,3590254127,FR
3590254128,3590254135,RU
3590254136,3590254143,FR
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,IT
+3590256384,3590256639,FR
3590256640,3590256703,US
3590256704,3590256719,BE
3590256720,3590256735,FR
@@ -137988,13 +146770,16 @@
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,3590308063,A2
-3590308064,3590308071,ZW
+3590308064,3590308071,SO
3590308072,3590308079,RW
-3590308080,3590308095,A2
+3590308080,3590308087,IQ
+3590308088,3590308095,A2
3590308096,3590308103,IQ
3590308104,3590308119,A2
3590308120,3590308127,IQ
@@ -138008,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
@@ -138016,29 +146803,32 @@
3590308392,3590308399,A2
3590308400,3590308407,IQ
3590308408,3590308415,A2
-3590308416,3590308455,IQ
-3590308456,3590308463,A2
-3590308464,3590308471,IQ
-3590308472,3590308479,A2
+3590308416,3590308431,IQ
+3590308432,3590308439,A2
+3590308440,3590308455,IQ
+3590308456,3590308479,A2
3590308480,3590308487,IQ
-3590308488,3590308503,A2
-3590308504,3590308511,IQ
-3590308512,3590308519,A2
+3590308488,3590308519,A2
3590308520,3590308527,IQ
-3590308528,3590308551,A2
+3590308528,3590308535,A2
+3590308536,3590308543,IQ
+3590308544,3590308551,A2
3590308552,3590308559,IQ
3590308560,3590308567,A2
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
@@ -138051,9 +146841,9 @@
3590309072,3590309079,MW
3590309080,3590309103,NG
3590309104,3590309111,ZW
-3590309112,3590309119,A2
-3590309120,3590309375,GB
-3590309376,3590309511,A2
+3590309112,3590309251,A2
+3590309252,3590309255,SO
+3590309256,3590309511,A2
3590309512,3590309519,AO
3590309520,3590309527,NG
3590309528,3590309535,CM
@@ -138071,8 +146861,8 @@
3590309712,3590309719,IQ
3590309720,3590309727,A2
3590309728,3590309759,IQ
-3590309760,3590309767,A2
-3590309768,3590309791,IQ
+3590309760,3590309775,A2
+3590309776,3590309791,IQ
3590309792,3590309799,A2
3590309800,3590309807,IQ
3590309808,3590309815,A2
@@ -138084,11 +146874,11 @@
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,3590310263,A2
-3590310264,3590310271,SD
+3590310256,3590310271,A2
3590310272,3590310279,IQ
3590310280,3590310287,A2
3590310288,3590310303,IQ
@@ -138096,11 +146886,10 @@
3590310312,3590310319,IQ
3590310320,3590310327,A2
3590310328,3590310335,NG
-3590310336,3590310343,IQ
-3590310344,3590310351,A2
-3590310352,3590310367,IQ
-3590310368,3590310383,A2
-3590310384,3590310391,IQ
+3590310336,3590310359,A2
+3590310360,3590310367,IQ
+3590310368,3590310375,A2
+3590310376,3590310391,IQ
3590310392,3590310655,A2
3590310656,3590310911,GB
3590310912,3590310919,IQ
@@ -138108,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
@@ -138125,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
@@ -138140,9 +146928,9 @@
3590311320,3590311327,CI
3590311328,3590311335,CD
3590311336,3590311343,SD
-3590311344,3590311351,A2
+3590311344,3590311351,LY
3590311352,3590311359,CD
-3590311360,3590311367,CI
+3590311360,3590311367,LY
3590311368,3590311383,CD
3590311384,3590311391,NG
3590311392,3590311423,A2
@@ -138151,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
@@ -138167,16 +146953,11 @@
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
-3590314744,3590314767,A2
-3590314768,3590314775,US
-3590314776,3590314823,A2
-3590314824,3590314831,ZW
-3590314832,3590314887,A2
+3590314744,3590314887,A2
3590314888,3590314895,NG
3590314896,3590314903,A2
3590314904,3590314911,KE
@@ -138222,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
@@ -138278,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
@@ -138292,7 +147069,7 @@
3590324176,3590324183,LR
3590324184,3590324191,SD
3590324192,3590324199,VG
-3590324200,3590324207,UG
+3590324200,3590324207,A2
3590324208,3590324215,CD
3590324216,3590324223,NG
3590324224,3623890943,US
@@ -138346,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
@@ -138379,7 +147158,9 @@
3624376656,3624376679,GB
3624376680,3624377319,US
3624377320,3624377323,GB
-3624377324,3624377863,US
+3624377324,3624377599,US
+3624377600,3624377855,A2
+3624377856,3624377863,US
3624377864,3624377871,GB
3624377872,3624377879,US
3624377880,3624377887,GB
@@ -138397,8 +147178,8 @@
3624378088,3624378095,GB
3624378096,3624379391,US
3624379392,3624379399,SG
-3624379400,3624380415,US
-3624380416,3624380447,CA
+3624379400,3624380423,US
+3624380424,3624380447,CA
3624380448,3624380455,GB
3624380456,3624380511,US
3624380512,3624380519,HK
@@ -138421,9 +147202,7 @@
3624380936,3624380943,SA
3624380944,3624380967,GB
3624380968,3624380983,TW
-3624380984,3624381471,US
-3624381472,3624381487,AU
-3624381488,3624381567,US
+3624380984,3624381567,US
3624381568,3624381583,MY
3624381584,3624381631,US
3624381632,3624381647,GB
@@ -138516,11 +147295,55 @@
3624549080,3624549087,A2
3624549088,3624549103,US
3624549104,3624549111,A2
-3624549112,3624549375,US
-3624549376,3624550143,A2
+3624549112,3624549383,US
+3624549384,3624549471,A2
+3624549472,3624549479,US
+3624549480,3624549583,A2
+3624549584,3624549615,US
+3624549616,3624550143,A2
3624550144,3624587263,US
3624587264,3624591359,JM
-3624595456,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
@@ -138690,7 +147513,13 @@
3624911648,3624911651,RU
3624911652,3624911999,US
3624912000,3624912127,CA
-3624912128,3624912959,US
+3624912128,3624912679,US
+3624912680,3624912687,IN
+3624912688,3624912727,US
+3624912728,3624912735,TT
+3624912736,3624912759,US
+3624912760,3624912767,MY
+3624912768,3624912959,US
3624912960,3624913087,IN
3624913088,3624913247,US
3624913248,3624913279,CA
@@ -138782,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
@@ -138805,7 +147635,7 @@
3625042328,3625042335,IT
3625042336,3625058303,US
3625058304,3625091071,CA
-3625099264,3625116671,US
+3625091072,3625116671,US
3625116672,3625116767,CA
3625116768,3625116927,US
3625116928,3625117183,SE
@@ -138948,11 +147778,11 @@
3625423104,3625426943,CA
3625426944,3625508863,US
3625508864,3625512959,CA
-3625517056,3625528541,US
+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
@@ -139002,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
@@ -139303,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
@@ -139316,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
@@ -139356,15 +148187,18 @@
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
3626385102,3626385113,US
3626385114,3626385117,JP
-3626385118,3626385125,US
+3626385118,3626385121,US
+3626385122,3626385125,IN
3626385126,3626385129,ID
-3626385130,3626385133,GR
+3626385130,3626385133,IN
3626385134,3626385137,CA
3626385138,3626385141,GB
3626385142,3626385145,IN
@@ -139388,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
@@ -139559,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
@@ -139568,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
@@ -139605,7 +148442,9 @@
3627524988,3627532287,US
3627532288,3627544575,CA
3627544576,3627659263,US
-3627659264,3627663359,CA
+3627659264,3627661951,CA
+3627661952,3627662015,US
+3627662016,3627663359,CA
3627663360,3627665407,US
3627665408,3627665439,CA
3627665440,3627666255,US
@@ -139623,9 +148462,7 @@
3627745376,3627745439,US
3627745440,3627745471,IN
3627745472,3627745503,CA
-3627745504,3627745919,US
-3627745920,3627745983,IL
-3627745984,3627746399,US
+3627745504,3627746399,US
3627746400,3627746431,CA
3627746432,3627747159,US
3627747160,3627747167,IN
@@ -139732,8 +148569,7 @@
3628179456,3628187647,CA
3628187648,3628208127,US
3628208128,3628208383,IT
-3628208384,3628208639,CN
-3628208640,3628223983,US
+3628208384,3628223983,US
3628223984,3628223999,CA
3628224000,3628224735,US
3628224736,3628224743,IT
@@ -139830,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
@@ -139864,9 +148699,11 @@
3629201856,3629201887,US
3629201888,3629201903,CA
3629201904,3629201919,US
-3629201920,3629201959,CA
-3629201960,3629201967,US
-3629201968,3629201983,CA
+3629201920,3629201935,CA
+3629201936,3629201951,US
+3629201952,3629201959,CA
+3629201960,3629201971,US
+3629201972,3629201983,CA
3629201984,3629201991,US
3629201992,3629201999,CA
3629202000,3629202003,US
@@ -139875,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
@@ -140490,7 +149327,9 @@
3631333376,3631333679,CA
3631333680,3631333695,US
3631333696,3631341567,CA
-3631341568,3631435007,US
+3631341568,3631415295,US
+3631415296,3631419391,A2
+3631419392,3631435007,US
3631435008,3631435263,GB
3631435264,3631480831,US
3631482880,3631484927,CA
@@ -140621,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
@@ -140639,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
@@ -140661,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
@@ -140679,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
@@ -140693,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
@@ -140720,7 +149553,7 @@
3632484384,3632484391,GB
3632484392,3632484623,US
3632484624,3632484639,GB
-3632484640,3632484647,CA
+3632484640,3632484647,SG
3632484648,3632484655,JP
3632484656,3632484687,US
3632484688,3632484695,GI
@@ -140737,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
@@ -140757,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
@@ -140779,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
@@ -140795,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
@@ -140805,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
@@ -140820,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
@@ -140841,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
@@ -140877,9 +149711,7 @@
3632490960,3632490967,CA
3632490968,3632490983,US
3632490984,3632490991,HK
-3632490992,3632491071,US
-3632491072,3632491087,GB
-3632491088,3632491151,US
+3632490992,3632491151,US
3632491152,3632491167,IN
3632491168,3632491239,US
3632491240,3632491247,CA
@@ -140897,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
@@ -140907,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
@@ -140916,8 +149746,8 @@
3632492240,3632492255,US
3632492256,3632492263,CH
3632492264,3632492271,US
-3632492272,3632492279,CA
-3632492280,3632492319,US
+3632492272,3632492287,CA
+3632492288,3632492319,US
3632492320,3632492327,CH
3632492328,3632492367,US
3632492368,3632492375,GB
@@ -140925,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
@@ -140944,10 +149772,10 @@
3632493088,3632493119,IO
3632493120,3632493151,US
3632493152,3632493159,GR
-3632493160,3632493191,US
+3632493160,3632493183,US
+3632493184,3632493191,BZ
3632493192,3632493199,CA
-3632493200,3632493207,GB
-3632493208,3632493215,US
+3632493200,3632493215,US
3632493216,3632493223,DE
3632493224,3632493239,US
3632493240,3632493247,TW
@@ -140955,9 +149783,7 @@
3632493256,3632493263,DE
3632493264,3632493271,US
3632493272,3632493279,SK
-3632493280,3632493287,US
-3632493288,3632493295,IN
-3632493296,3632493439,US
+3632493280,3632493439,US
3632493440,3632493455,MX
3632493456,3632493471,JP
3632493472,3632493479,TK
@@ -141206,7 +150032,9 @@
3633776416,3633776463,US
3633776464,3633776479,CN
3633776480,3633815551,US
-3633815552,3633816079,CA
+3633815552,3633815843,CA
+3633815844,3633815847,US
+3633815848,3633816079,CA
3633816080,3633816095,US
3633816096,3633816119,CA
3633816120,3633816127,IN
@@ -141240,24 +150068,34 @@
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,3633819135,CA
+3633818712,3633818751,CA
+3633818752,3633818767,US
+3633818768,3633818863,CA
+3633818864,3633818879,US
+3633818880,3633819135,CA
3633819136,3633819199,IN
3633819200,3633819391,CA
3633819392,3633819423,IN
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
@@ -141288,7 +150126,9 @@
3634136104,3634136111,CA
3634136112,3634138127,US
3634138128,3634138143,CA
-3634138144,3634204255,US
+3634138144,3634189055,US
+3634189056,3634189311,GB
+3634189312,3634204255,US
3634204256,3634204263,AT
3634204264,3634204591,US
3634204592,3634204607,GB
@@ -141328,7 +150168,9 @@
3635110304,3635113983,CA
3635113984,3635142655,US
3635142656,3635146751,CA
-3635146752,3635314687,US
+3635146752,3635159039,US
+3635159040,3635163135,CA
+3635163136,3635314687,US
3635314688,3635322879,CA
3635322880,3635425279,US
3635425280,3635429375,CA
@@ -141365,9 +150207,71 @@
3635533000,3635533007,NO
3635533008,3635533535,US
3635533536,3635533551,IN
-3635533552,3635658751,US
-3635658752,3635660799,CN
-3635660800,3635847791,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
+3635655936,3635656191,US
+3635656192,3635656223,JP
+3635656224,3635656319,US
+3635656320,3635656447,JP
+3635656448,3635656703,CA
+3635656704,3635656967,JP
+3635656968,3635657023,US
+3635657024,3635657215,JP
+3635657216,3635659263,US
+3635659264,3635660031,ID
+3635660032,3635660287,CN
+3635660288,3635660799,US
+3635660800,3635661823,HK
+3635661824,3635662847,JP
+3635662848,3635847791,US
3635847792,3635847807,CA
3635847808,3635856511,US
3635856512,3635856543,CA
@@ -141391,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
@@ -141400,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
@@ -141492,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
@@ -141511,13 +150429,7 @@
3636206080,3636206335,AU
3636206336,3636266879,US
3636266880,3636266911,HK
-3636266912,3636284415,US
-3636284416,3636284671,FR
-3636284672,3636290815,US
-3636290816,3636291327,FR
-3636291328,3636296959,US
-3636296960,3636297727,FR
-3636297728,3636396031,US
+3636266912,3636396031,US
3636396032,3636461567,CA
3636461568,3636577647,US
3636577648,3636577663,CA
@@ -141548,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
@@ -141732,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
@@ -141816,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
@@ -141847,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
@@ -141973,12 +150893,19 @@
3639439632,3639439639,RO
3639439640,3639440767,US
3639440768,3639440895,IN
-3639440896,3639533567,US
+3639440896,3639498767,US
+3639498768,3639498783,SI
+3639498784,3639498791,US
+3639498792,3639498799,NL
+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
@@ -142077,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
@@ -142114,7 +151043,9 @@
3640027416,3640027423,GB
3640027424,3640028207,US
3640028208,3640028215,GB
-3640028216,3640028295,US
+3640028216,3640028247,US
+3640028248,3640028255,IN
+3640028256,3640028295,US
3640028296,3640028303,CA
3640028304,3640028311,GB
3640028312,3640028335,US
@@ -142216,7 +151147,9 @@
3640450048,3640451071,US
3640451072,3640459263,A2
3640459264,3640557567,US
-3640557568,3640560511,CA
+3640557568,3640559567,CA
+3640559568,3640559575,US
+3640559576,3640560511,CA
3640560512,3640560527,US
3640560528,3640564455,CA
3640564456,3640564463,US
@@ -142232,17 +151165,11 @@
3641078560,3641078567,BE
3641078568,3641085687,DE
3641085688,3641085695,CZ
-3641085696,3641087695,DE
-3641087696,3641087703,GB
-3641087704,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
@@ -142317,7 +151244,8 @@
3641353808,3641353831,GB
3641353832,3641353839,A2
3641353840,3641353855,GB
-3641353856,3641353983,A2
+3641353856,3641353879,NG
+3641353880,3641353983,A2
3641353984,3641354239,AF
3641354240,3641354311,A2
3641354312,3641354319,GB
@@ -142325,9 +151253,7 @@
3641354328,3641354335,GB
3641354336,3641354339,A2
3641354340,3641354367,GB
-3641354368,3641354383,A2
-3641354384,3641354479,IT
-3641354480,3641354495,A2
+3641354368,3641354495,A2
3641354496,3641354751,GB
3641354752,3641355263,NG
3641355264,3641355519,AO
@@ -142337,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
@@ -142405,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
@@ -142438,17 +151364,11 @@
3641670792,3641670911,GB
3641670912,3641671679,LS
3641671680,3641679871,RU
-3641679872,3641680127,DK
-3641680128,3641681151,GB
-3641681152,3641681407,SE
-3641681408,3641681663,FR
-3641681664,3641681791,DK
-3641681792,3641681919,FR
-3641681920,3641682431,GB
-3641682432,3641683967,EU
+3641679872,3641683967,A1
3641683968,3641688063,KZ
3641688064,3641692159,RU
3641692160,3641696255,IT
+3641696256,3641700351,BE
3641700352,3641704447,SE
3641704448,3641708543,FR
3641708544,3641712639,RU
@@ -142533,14 +151453,18 @@
3641925632,3641933823,RU
3641933824,3641937919,GB
3641937920,3641942015,IT
-3641942016,3641950207,DE
+3641942016,3641947495,DE
+3641947496,3641947503,US
+3641947504,3641950207,DE
3641950208,3641954303,FR
3641954304,3641956863,MD
3641956864,3641957631,GB
3641957632,3641957887,MD
3641957888,3641958399,GB
-3641958400,3641960699,BE
-3641960700,3641960703,NL
+3641958400,3641960447,BE
+3641960448,3641960519,NL
+3641960520,3641960527,BE
+3641960528,3641960703,NL
3641960704,3641961727,BE
3641961728,3641961743,NL
3641961744,3641961791,BE
@@ -142590,10 +151514,11 @@
3642064896,3642068991,SE
3642068992,3642073087,AL
3642073088,3642077183,LV
-3642077184,3642081271,BE
+3642077184,3642078999,BE
+3642079000,3642079007,NL
+3642079008,3642081271,BE
3642081272,3642081278,US
-3642081279,3642081279,BE
-3642081280,3642085375,NL
+3642081279,3642085375,NL
3642085376,3642089471,RU
3642089472,3642093567,SE
3642093568,3642097663,NL
@@ -142704,10 +151629,8 @@
3642253312,3642257407,FI
3642257408,3642261503,RU
3642261504,3642265599,BA
-3642265600,3642266111,AE
-3642266112,3642266367,IR
-3642266368,3642266623,AE
-3642266624,3642269695,IR
+3642265600,3642265855,AE
+3642265856,3642269695,IR
3642269696,3642273791,UA
3642273792,3642277887,RU
3642277888,3642290175,DE
@@ -142750,7 +151673,8 @@
3642415636,3642415651,GB
3642415652,3642415655,MT
3642415656,3642417151,GB
-3642417152,3642421247,IT
+3642417152,3642419199,DE
+3642419200,3642421247,GB
3642421248,3642423091,A2
3642423092,3642423099,NG
3642423100,3642424151,A2
@@ -142764,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
@@ -142807,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
@@ -142817,12 +151743,12 @@
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,3642553139,LV
-3642553140,3642553143,UA
-3642553144,3642553161,LV
+3642553104,3642553161,LV
3642553162,3642553163,UA
3642553164,3642553175,LV
3642553176,3642553183,UA
@@ -142844,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
@@ -142860,31 +151785,35 @@
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,3642554567,LT
-3642554568,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
-3642554752,3642554791,LV
-3642554792,3642554807,UA
+3642554676,3642554703,LV
+3642554704,3642554751,UA
+3642554752,3642554795,LV
+3642554796,3642554807,UA
3642554808,3642554831,LV
3642554832,3642554851,UA
3642554852,3642554879,LV
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
@@ -142907,7 +151836,9 @@
3642555068,3642555069,NL
3642555070,3642555071,DE
3642555072,3642555087,GE
-3642555088,3642555135,UA
+3642555088,3642555103,DE
+3642555104,3642555111,CZ
+3642555112,3642555135,UA
3642555136,3642555153,LT
3642555154,3642555167,UA
3642555168,3642555183,LT
@@ -142916,19 +151847,20 @@
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,3642555455,PL
-3642555456,3642555475,UA
-3642555476,3642555493,PL
-3642555494,3642555495,UA
-3642555496,3642555503,PL
+3642555444,3642555463,PL
+3642555464,3642555475,UA
+3642555476,3642555503,PL
3642555504,3642555647,UA
3642555648,3642555683,SE
-3642555684,3642555691,UA
+3642555684,3642555685,GB
+3642555686,3642555691,UA
3642555692,3642555695,SE
3642555696,3642555703,UA
3642555704,3642555707,FI
@@ -142937,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
@@ -143095,7 +152027,9 @@
3645132800,3645136895,HR
3645136896,3645145087,NO
3645145088,3645149183,GB
-3645149184,3645149887,DE
+3645149184,3645149487,DE
+3645149488,3645149495,GB
+3645149496,3645149887,DE
3645149888,3645149951,HK
3645149952,3645150559,DE
3645150560,3645150591,HK
@@ -143123,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
@@ -143178,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
@@ -143219,7 +152151,10 @@
3645435904,3645439999,GB
3645440000,3645444095,SE
3645444096,3645448191,SK
-3645448192,3645456383,DE
+3645448192,3645454335,DE
+3645454336,3645455359,RU
+3645455360,3645455487,DE
+3645455488,3645456383,RU
3645456384,3645460479,GB
3645460480,3645464575,UA
3645464576,3645468671,SE
@@ -143240,7 +152175,8 @@
3645507596,3645507599,DE
3645507600,3645507607,AT
3645507608,3645509631,DE
-3645509632,3645513727,GB
+3645509632,3645511679,NL
+3645511680,3645513727,TR
3645513728,3645517823,RU
3645517824,3645521919,IE
3645521920,3645526015,PL
@@ -143270,7 +152206,9 @@
3645594712,3645594719,SR
3645594720,3645594743,SK
3645594744,3645594751,SR
-3645594752,3645595647,SK
+3645594752,3645594863,SK
+3645594864,3645594871,SR
+3645594872,3645595647,SK
3645595648,3645597751,SE
3645597752,3645597759,GB
3645597760,3645601471,SE
@@ -143280,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
@@ -143388,9 +152327,7 @@
3645763663,3645763663,HU
3645763664,3645763665,DE
3645763666,3645763666,NL
-3645763667,3645763667,DE
-3645763668,3645763668,IT
-3645763669,3645763670,DE
+3645763667,3645763670,DE
3645763671,3645763671,FR
3645763672,3645763672,DE
3645763673,3645763673,BE
@@ -143413,7 +152350,7 @@
3645763693,3645763693,NL
3645763694,3645763696,DE
3645763697,3645763697,NL
-3645763698,3645763698,LU
+3645763698,3645763698,DE
3645763699,3645763699,BE
3645763700,3645763700,NL
3645763701,3645763701,DE
@@ -143706,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
@@ -143849,8 +152784,8 @@
3645764262,3645764262,BE
3645764263,3645764264,IT
3645764265,3645764265,TR
-3645764266,3645764268,DE
-3645764269,3645764270,ES
+3645764266,3645764269,DE
+3645764270,3645764270,ES
3645764271,3645764271,IT
3645764272,3645764272,DE
3645764273,3645764273,IT
@@ -144251,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
@@ -144276,7 +153209,9 @@
3647886188,3647886207,GB
3647886208,3647886271,DE
3647886272,3647886303,GB
-3647886304,3647889663,DE
+3647886304,3647888143,DE
+3647888144,3647888151,IT
+3647888152,3647889663,DE
3647889664,3647889671,BE
3647889672,3647890463,DE
3647890464,3647890471,FR
@@ -144331,10 +153266,8 @@
3647965296,3647965303,DE
3647965304,3647965311,ES
3647965312,3647965319,DE
-3647965320,3647965359,ES
-3647965360,3647965375,DE
-3647965376,3647965407,ES
-3647965408,3647965439,DE
+3647965320,3647965431,ES
+3647965432,3647965439,DE
3647965440,3647965695,ES
3647965696,3647966207,CH
3647966208,3647966575,GB
@@ -144352,10 +153285,10 @@
3647972200,3647972259,GB
3647972260,3647972263,DE
3647972264,3647972351,GB
-3647972352,3647973623,IT
-3647973624,3647973631,DE
-3647973632,3647973679,IT
-3647973680,3647973711,DE
+3647972352,3647973679,IT
+3647973680,3647973695,DE
+3647973696,3647973703,IT
+3647973704,3647973711,BE
3647973712,3647973735,IT
3647973736,3647973743,DE
3647973744,3647973783,IT
@@ -144366,7 +153299,8 @@
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
@@ -144381,8 +153315,8 @@
3647976800,3647976927,BE
3647976928,3647976935,DE
3647976936,3647977119,BE
-3647977120,3647977143,DE
-3647977144,3647977151,BE
+3647977120,3647977135,DE
+3647977136,3647977151,BE
3647977152,3647977215,DE
3647977216,3647977471,BE
3647977472,3647977791,GB
@@ -144394,19 +153328,18 @@
3647978776,3647978783,DE
3647978784,3647978895,NL
3647978896,3647978911,DE
-3647978912,3647978951,NL
-3647978952,3647979007,DE
+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,3647980343,FR
-3647980344,3647980351,DE
-3647980352,3647980495,FR
+3647980248,3647980471,FR
+3647980472,3647980479,DE
+3647980480,3647980495,FR
3647980496,3647980503,DE
3647980504,3647980543,FR
3647980544,3647981055,GB
@@ -144415,7 +153348,9 @@
3647982592,3647983615,IT
3647983616,3647984639,NL
3647984640,3647985151,DK
-3647985152,3647985663,BE
+3647985152,3647985415,BE
+3647985416,3647985423,AT
+3647985424,3647985663,BE
3647985664,3647985919,ES
3647985920,3647985935,BE
3647985936,3647986431,ES
@@ -144423,14 +153358,28 @@
3647986688,3647986943,DE
3647986944,3647986951,ES
3647986952,3647986975,DE
-3647986976,3647986999,ES
-3647987000,3647987455,DE
-3647987456,3647987527,ES
-3647987528,3647987543,DE
+3647986976,3647987071,ES
+3647987072,3647987087,DE
+3647987088,3647987119,ES
+3647987120,3647987127,DE
+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,3647989759,BE
-3647989760,3647995903,DE
+3647988736,3647988991,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
@@ -144461,11 +153410,11 @@
3648035040,3648035071,NL
3648035072,3648036863,EU
3648036864,3648040959,CZ
-3648040960,3648041020,BE
-3648041021,3648041021,FR
-3648041022,3648041052,BE
-3648041053,3648041053,NL
-3648041054,3648045055,BE
+3648040960,3648041024,BE
+3648041025,3648041028,FR
+3648041029,3648041047,BE
+3648041048,3648041055,NL
+3648041056,3648045055,BE
3648045056,3648049151,FI
3648049152,3648053247,UA
3648053248,3648057343,FR
@@ -144480,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
@@ -144497,15 +153445,16 @@
3648081056,3648081407,BE
3648081408,3648082175,MW
3648082176,3648082239,BE
-3648082240,3648082687,ZM
-3648082688,3648085759,BE
-3648085760,3648086015,LR
+3648082240,3648082311,NE
+3648082312,3648082431,BE
+3648082432,3648082479,ZM
+3648082480,3648084991,BE
+3648084992,3648085759,GB
+3648085760,3648086015,ZM
3648086016,3648090111,AT
3648090112,3648094207,RU
3648094208,3648102399,PL
-3648102400,3648104767,GB
-3648104768,3648104783,IE
-3648104784,3648104791,GB
+3648102400,3648104791,GB
3648104792,3648104799,IE
3648104800,3648106495,GB
3648106496,3648110591,DE
@@ -144558,7 +153507,9 @@
3648181632,3648181647,AT
3648181648,3648181887,DE
3648181888,3648181903,AT
-3648181904,3648182143,DE
+3648181904,3648182111,DE
+3648182112,3648182127,CY
+3648182128,3648182143,DE
3648182144,3648182159,BR
3648182160,3648182175,DE
3648182176,3648182207,RU
@@ -144575,8 +153526,7 @@
3648182824,3648182831,RU
3648182832,3648182847,DE
3648182848,3648182879,AT
-3648182880,3648182911,SG
-3648182912,3648183551,DE
+3648182880,3648183551,DE
3648183552,3648183679,BR
3648183680,3648183871,DE
3648183872,3648183935,GB
@@ -144584,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
@@ -144592,8 +153544,12 @@
3648225280,3648231263,DE
3648231264,3648231295,NL
3648231296,3648233471,DE
-3648233472,3648237311,FR
-3648237312,3648237567,GB
+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
@@ -144635,7 +153591,9 @@
3648356352,3648360447,PL
3648360448,3648362251,FR
3648362252,3648362255,GB
-3648362256,3648364543,FR
+3648362256,3648362263,FR
+3648362264,3648362271,GB
+3648362272,3648364543,FR
3648364544,3648368639,CH
3648368640,3648372735,RU
3648372736,3648376831,LU
@@ -144657,8 +153615,7 @@
3648418048,3648418079,GB
3648418080,3648418247,ES
3648418248,3648418255,CH
-3648418256,3648418263,ES
-3648418264,3648418271,GB
+3648418256,3648418271,GB
3648418272,3648418303,ES
3648418304,3648419327,GB
3648419328,3648419455,FR
@@ -144666,7 +153623,9 @@
3648419520,3648419583,ES
3648419584,3648419839,GB
3648419840,3648419901,BE
-3648419902,3648420095,GB
+3648419902,3648419903,GB
+3648419904,3648419967,BE
+3648419968,3648420095,GB
3648420096,3648420351,NL
3648420352,3648420863,GB
3648420864,3648421119,US
@@ -144680,9 +153639,7 @@
3648433152,3648434175,NL
3648434176,3648438271,RU
3648438272,3648442367,CH
-3648442368,3648443743,SE
-3648443744,3648443759,PA
-3648443760,3648446463,SE
+3648442368,3648446463,SE
3648446464,3648447055,FR
3648447056,3648447063,ES
3648447064,3648449119,FR
@@ -144696,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
@@ -144744,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
@@ -144760,7 +153722,7 @@
3650093056,3650097151,JO
3650097152,3650101247,SK
3650101248,3650105343,DE
-3650105344,3650109439,CH
+3650105344,3650109439,HU
3650109440,3650113535,NO
3650113536,3650117631,GB
3650117632,3650121727,RU
@@ -144793,12 +153755,16 @@
3650228224,3650228735,US
3650228736,3650228991,A2
3650228992,3650232319,US
-3650232320,3650236415,RU
+3650232320,3650233343,RU
+3650233344,3650233599,CY
+3650233600,3650236415,RU
3650236416,3650240511,GB
3650240512,3650244607,EE
3650244608,3650256895,GB
3650256896,3650265087,DE
-3650265088,3650269183,CH
+3650265088,3650265559,CH
+3650265560,3650265571,DE
+3650265572,3650269183,CH
3650269184,3650273071,GB
3650273072,3650273279,IR
3650273280,3650277375,IT
@@ -144888,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
@@ -144897,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
@@ -145007,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
@@ -145061,7 +154032,11 @@
3651204224,3651204351,DE
3651204352,3651204607,PL
3651204608,3651205119,ES
-3651205120,3651207167,DE
+3651205120,3651205375,GB
+3651205376,3651205887,ES
+3651205888,3651206143,DE
+3651206144,3651206399,PL
+3651206400,3651207167,DE
3651207168,3651207199,GB
3651207200,3651207223,EU
3651207224,3651207295,GB
@@ -145130,8 +154105,7 @@
3651682304,3651686399,RU
3651686400,3651690495,NO
3651690496,3651694591,FR
-3651694592,3651694719,GH
-3651694720,3651694847,PT
+3651694592,3651694847,PT
3651694848,3651694975,NG
3651694976,3651695103,PT
3651695104,3651695359,CV
@@ -145180,14 +154154,10 @@
3651870720,3651874815,IT
3651874816,3651878911,PL
3651878912,3651883007,RU
-3651883008,3651884031,CD
-3651884032,3651884287,BE
-3651884288,3651885847,CD
-3651885848,3651885851,BE
-3651885852,3651885855,CD
-3651885856,3651885867,BE
-3651885868,3651885875,CD
-3651885876,3651885903,BE
+3651883008,3651885871,CD
+3651885872,3651885895,BE
+3651885896,3651885899,CD
+3651885900,3651885903,BE
3651885904,3651885927,CD
3651885928,3651886079,BE
3651886080,3651886347,CD
@@ -145378,7 +154348,9 @@
3652050536,3652050567,IE
3652050568,3652050615,GB
3652050616,3652050619,IE
-3652050620,3652050671,GB
+3652050620,3652050627,GB
+3652050628,3652050631,IE
+3652050632,3652050671,GB
3652050672,3652050943,IE
3652050944,3652055039,LI
3652055040,3652059135,NO
@@ -145446,7 +154418,7 @@
3653386240,3653390335,DE
3653390336,3653394431,FR
3653394432,3653402623,NL
-3653402624,3653403135,AT
+3653402624,3653403135,A2
3653403136,3653403647,CD
3653403648,3653403903,ZW
3653403904,3653403911,A2
@@ -145512,35 +154484,31 @@
3653407072,3653407103,A2
3653407104,3653407111,UG
3653407112,3653407119,ZM
-3653407120,3653407127,ZW
-3653407128,3653407167,A2
+3653407120,3653407135,A2
+3653407136,3653407151,MZ
+3653407152,3653407167,A2
3653407168,3653407231,NG
3653407232,3653407391,A2
3653407392,3653407399,NG
-3653407400,3653407423,A2
-3653407424,3653407487,ZW
-3653407488,3653407615,A2
+3653407400,3653407615,A2
3653407616,3653407639,NG
3653407640,3653407647,ZM
3653407648,3653407679,A2
3653407680,3653407695,UG
3653407696,3653407703,CD
3653407704,3653407711,NG
-3653407712,3653407727,A2
-3653407728,3653407743,ZW
+3653407712,3653407743,A2
3653407744,3653407999,AT
3653408000,3653408023,A2
3653408024,3653408031,UG
-3653408032,3653408047,ZW
-3653408048,3653408063,A2
+3653408032,3653408063,A2
3653408064,3653408071,ZM
3653408072,3653408079,NG
3653408080,3653408119,A2
3653408120,3653408127,NG
3653408128,3653408143,A2
3653408144,3653408151,NG
-3653408152,3653408167,A2
-3653408168,3653408175,ZW
+3653408152,3653408175,A2
3653408176,3653408183,US
3653408184,3653408191,MW
3653408192,3653408199,A2
@@ -145596,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
@@ -145627,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
@@ -145679,7 +154643,9 @@
3653525504,3653529599,RU
3653529600,3653533695,CZ
3653533696,3653537791,IT
-3653537792,3653541887,AT
+3653537792,3653539031,AT
+3653539032,3653539039,US
+3653539040,3653541887,AT
3653541888,3653545983,UA
3653545984,3653550079,CH
3653550080,3653554175,GB
@@ -145695,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
@@ -145710,9 +154678,13 @@
3653656576,3653660671,GB
3653660672,3653664767,CZ
3653664768,3653664895,DE
-3653664896,3653665023,NL
-3653665024,3653665071,DE
-3653665072,3653668863,NL
+3653664896,3653664911,FR
+3653664912,3653665023,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
@@ -145739,11 +154711,7 @@
3653722112,3653730303,LV
3653730304,3653734399,BA
3653734400,3653738495,KE
-3653738496,3653740295,GB
-3653740296,3653740303,US
-3653740304,3653744895,GB
-3653744896,3653744959,AE
-3653744960,3653746687,GB
+3653738496,3653746687,GB
3653746688,3653750783,DE
3653750784,3653753087,RU
3653753088,3653753215,VG
@@ -145773,7 +154741,9 @@
3654608128,3654608383,SE
3654608384,3654608895,PL
3654608896,3654609919,NO
-3654609920,3654613007,SE
+3654609920,3654610431,SE
+3654610432,3654610943,FR
+3654610944,3654613007,SE
3654613008,3654613015,RU
3654613016,3654613055,SE
3654613056,3654613071,RU
@@ -145781,9 +154751,7 @@
3654613088,3654613151,RU
3654613152,3654613247,SE
3654613248,3654614015,NO
-3654614016,3654614031,SE
-3654614032,3654614047,US
-3654614048,3654614079,SE
+3654614016,3654614079,SE
3654614080,3654614271,FI
3654614272,3654614527,SE
3654614528,3654614783,RU
@@ -145796,10 +154764,7 @@
3656229704,3656229711,ES
3656229712,3656233999,DE
3656234000,3656234007,NL
-3656234008,3656236527,DE
-3656236528,3656236535,GB
-3656236536,3656236543,US
-3656236544,3656633487,DE
+3656234008,3656633487,DE
3656633488,3656633495,GB
3656633496,3656633503,US
3656633504,3656650583,DE
@@ -145916,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
@@ -146160,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
@@ -146220,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 a12d56b73..67adf504d 100644
--- a/src/or/Makefile.am
+++ b/src/or/Makefile.am
@@ -7,7 +7,7 @@ else
tor_platform_source=
endif
-EXTRA_DIST=ntmain.c or_sha1.i
+EXTRA_DIST=ntmain.c or_sha1.i Makefile.nmake
if USE_EXTERNAL_EVDNS
evdns_source=
@@ -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 \
@@ -137,11 +139,13 @@ micro-revision.i: FORCE
mv micro-revision.tmp micro-revision.i; \
fi; true
-or_sha1.i: $(tor_SOURCES)
+or_sha1.i: $(tor_SOURCES) $(libtor_a_SOURCES)
if test "@SHA1SUM@" != none; then \
- @SHA1SUM@ $(tor_SOURCES) | @SED@ -n 's/^\(.*\)$$/"\1\\n"/p' > or_sha1.i; \
+ @SHA1SUM@ $(tor_SOURCES) $(libtor_a_SOURCES) | \
+ @SED@ -n 's/^\(.*\)$$/"\1\\n"/p' > or_sha1.i; \
elif test "@OPENSSL@" != none; then \
- @OPENSSL@ sha1 $(tor_SOURCES) | @SED@ -n 's/SHA1(\(.*\))= \(.*\)/"\2 \1\\n"/p' > or_sha1.i; \
+ @OPENSSL@ sha1 $(tor_SOURCES) $(libtor_a_SOURCES) | \
+ @SED@ -n 's/SHA1(\(.*\))= \(.*\)/"\2 \1\\n"/p' > or_sha1.i; \
else \
rm or_sha1.i; \
touch or_sha1.i; \
diff --git a/src/or/Makefile.nmake b/src/or/Makefile.nmake
new file mode 100644
index 000000000..919edbbf2
--- /dev/null
+++ b/src/or/Makefile.nmake
@@ -0,0 +1,28 @@
+all: tor.exe
+
+CFLAGS = /I ..\win32 /I ..\..\..\build-alpha\include /I ..\common
+
+LIBS = ..\..\..\build-alpha\lib\libevent.a \
+ ..\..\..\build-alpha\lib\libcrypto.a \
+ ..\..\..\build-alpha\lib\libssl.a \
+ ..\..\..\build-alpha\lib\libz.a \
+ ws2_32.lib advapi32.lib shell32.lib
+
+LIBTOR_OBJECTS = buffers.obj circuitbuild.obj circuitlist.obj circuituse.obj \
+ command.obj config.obj connection.obj connection_edge.obj \
+ connection_or.obj control.obj cpuworker.obj directory.obj \
+ dirserv.obj dirvote.obj dns.obj dnsserv.obj geoip.obj \
+ hibernate.obj main.obj microdesc.obj networkstatus.obj \
+ nodelist.obj onion.obj policies.obj reasons.obj relay.obj \
+ rendclient.obj rendcommon.obj rendmid.obj rendservice.obj \
+ rephist.obj router.obj routerlist.obj routerparse.obj status.obj \
+ config_codedigest.obj ntmain.obj
+
+libtor.lib: $(LIBTOR_OBJECTS)
+ lib $(LIBTOR_OBJECTS) /out:libtor.lib
+
+tor.exe: libtor.lib tor_main.obj
+ $(CC) $(CFLAGS) $(LIBS) libtor.lib ..\common\*.lib tor_main.obj
+
+clean:
+ del $(LIBTOR_OBJECTS) *.lib tor.exe
diff --git a/src/or/buffers.c b/src/or/buffers.c
index 70f8b4a52..f4aac0f0e 100644
--- a/src/or/buffers.c
+++ b/src/or/buffers.c
@@ -557,6 +557,39 @@ buf_free(buf_t *buf)
tor_free(buf);
}
+/** Return a new copy of <b>in_chunk</b> */
+static chunk_t *
+chunk_copy(const chunk_t *in_chunk)
+{
+ chunk_t *newch = tor_memdup(in_chunk, CHUNK_ALLOC_SIZE(in_chunk->memlen));
+ newch->next = NULL;
+ if (in_chunk->data) {
+ off_t offset = in_chunk->data - in_chunk->mem;
+ newch->data = newch->mem + offset;
+ }
+ return newch;
+}
+
+/** Return a new copy of <b>buf</b> */
+buf_t *
+buf_copy(const buf_t *buf)
+{
+ chunk_t *ch;
+ buf_t *out = buf_new();
+ out->default_chunk_size = buf->default_chunk_size;
+ for (ch = buf->head; ch; ch = ch->next) {
+ chunk_t *newch = chunk_copy(ch);
+ if (out->tail) {
+ out->tail->next = newch;
+ out->tail = newch;
+ } else {
+ out->head = out->tail = newch;
+ }
+ }
+ out->datalen = buf->datalen;
+ return out;
+}
+
/** Append a new chunk with enough capacity to hold <b>capacity</b> bytes to
* the tail of <b>buf</b>. If <b>capped</b>, don't allocate a chunk bigger
* than MAX_CHUNK_ALLOC. */
@@ -588,7 +621,7 @@ buf_add_chunk_with_capacity(buf_t *buf, size_t capacity, int capped)
* *<b>reached_eof</b> to 1. Return -1 on error, 0 on eof or blocking,
* and the number of bytes read otherwise. */
static INLINE int
-read_to_chunk(buf_t *buf, chunk_t *chunk, int fd, size_t at_most,
+read_to_chunk(buf_t *buf, chunk_t *chunk, tor_socket_t fd, size_t at_most,
int *reached_eof, int *socket_error)
{
ssize_t read_result;
@@ -645,7 +678,7 @@ read_to_chunk_tls(buf_t *buf, chunk_t *chunk, tor_tls_t *tls,
*/
/* XXXX023 indicate "read blocked" somehow? */
int
-read_to_buf(int s, size_t at_most, buf_t *buf, int *reached_eof,
+read_to_buf(tor_socket_t s, size_t at_most, buf_t *buf, int *reached_eof,
int *socket_error)
{
/* XXXX023 It's stupid to overload the return values for these functions:
@@ -744,7 +777,7 @@ read_to_buf_tls(tor_tls_t *tls, size_t at_most, buf_t *buf)
* written on success, 0 on blocking, -1 on failure.
*/
static INLINE int
-flush_chunk(int s, buf_t *buf, chunk_t *chunk, size_t sz,
+flush_chunk(tor_socket_t s, buf_t *buf, chunk_t *chunk, size_t sz,
size_t *buf_flushlen)
{
ssize_t write_result;
@@ -816,7 +849,7 @@ flush_chunk_tls(tor_tls_t *tls, buf_t *buf, chunk_t *chunk,
* -1 on failure. Return 0 if write() would block.
*/
int
-flush_buf(int s, buf_t *buf, size_t sz, size_t *buf_flushlen)
+flush_buf(tor_socket_t s, buf_t *buf, size_t sz, size_t *buf_flushlen)
{
/* XXXX023 It's stupid to overload the return values for these functions:
* "error status" and "number of bytes flushed" are not mutually exclusive.
@@ -972,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.
@@ -986,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)
@@ -999,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));
@@ -1021,14 +1075,14 @@ fetch_var_cell_from_buf(buf_t *buf, var_cell_t **out, int linkproto)
#ifdef USE_BUFFEREVENTS
/** Try to read <b>n</b> bytes from <b>buf</b> at <b>pos</b> (which may be
* NULL for the start of the buffer), copying the data only if necessary. Set
- * *<b>data</b> to a pointer to the desired bytes. Set <b>free_out</b> to 1
- * if we needed to malloc *<b>data</b> because the original bytes were
+ * *<b>data_out</b> to a pointer to the desired bytes. Set <b>free_out</b>
+ * to 1 if we needed to malloc *<b>data</b> because the original bytes were
* noncontiguous; 0 otherwise. Return the number of bytes actually available
- * at <b>data</b>.
+ * at *<b>data_out</b>.
*/
static ssize_t
-inspect_evbuffer(struct evbuffer *buf, char **data, size_t n, int *free_out,
- struct evbuffer_ptr *pos)
+inspect_evbuffer(struct evbuffer *buf, char **data_out, size_t n,
+ int *free_out, struct evbuffer_ptr *pos)
{
int n_vecs, i;
@@ -1042,25 +1096,15 @@ inspect_evbuffer(struct evbuffer *buf, char **data, size_t n, int *free_out,
struct evbuffer_iovec v;
i = evbuffer_peek(buf, n, pos, &v, 1);
tor_assert(i == 1);
- *data = v.iov_base;
+ *data_out = v.iov_base;
*free_out = 0;
return v.iov_len;
} else {
- struct evbuffer_iovec *vecs =
- tor_malloc(sizeof(struct evbuffer_iovec)*n_vecs);
- size_t copied = 0;
- i = evbuffer_peek(buf, n, NULL, vecs, n_vecs);
- tor_assert(i == n_vecs);
- *data = tor_malloc(n);
- for (i=0; i < n_vecs; ++i) {
- size_t copy = n - copied;
- if (copy > vecs[i].iov_len)
- copy = vecs[i].iov_len;
- tor_assert(copied+copy <= n);
- memcpy(data+copied, vecs[i].iov_base, copy);
- copied += copy;
- }
+ ev_ssize_t copied;
+ *data_out = tor_malloc(n);
*free_out = 1;
+ copied = evbuffer_copyout(buf, *data_out, n);
+ tor_assert(copied >= 0 && (size_t)copied == n);
return copied;
}
}
@@ -1078,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);
@@ -1090,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;
}
@@ -1459,7 +1501,7 @@ log_unsafe_socks_warning(int socks_protocol, const char *address,
{
static ratelim_t socks_ratelim = RATELIM_INIT(SOCKS_WARN_INTERVAL);
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
char *m = NULL;
if (! options->WarnUnsafeSocks)
return;
@@ -1486,6 +1528,31 @@ log_unsafe_socks_warning(int socks_protocol, const char *address,
* actually significantly higher than the longest possible socks message. */
#define MAX_SOCKS_MESSAGE_LEN 512
+/** Return a new socks_request_t. */
+socks_request_t *
+socks_request_new(void)
+{
+ return tor_malloc_zero(sizeof(socks_request_t));
+}
+
+/** Free all storage held in the socks_request_t <b>req</b>. */
+void
+socks_request_free(socks_request_t *req)
+{
+ if (!req)
+ return;
+ if (req->username) {
+ memset(req->username, 0x10, req->usernamelen);
+ tor_free(req->username);
+ }
+ if (req->password) {
+ memset(req->password, 0x04, req->passwordlen);
+ tor_free(req->password);
+ }
+ memset(req, 0xCC, sizeof(socks_request_t));
+ tor_free(req);
+}
+
/** There is a (possibly incomplete) socks handshake on <b>buf</b>, of one
* of the forms
* - socks4: "socksheader username\\0"
@@ -1536,9 +1603,8 @@ fetch_from_buf_socks(buf_t *buf, socks_request_t *req,
else if (n_drain > 0)
buf_remove_from_front(buf, n_drain);
- } while (res == 0 && buf->head &&
- buf->datalen > buf->head->datalen &&
- want_length < buf->head->datalen);
+ } while (res == 0 && buf->head && want_length < buf->datalen &&
+ buf->datalen >= 2);
return res;
}
@@ -1563,12 +1629,12 @@ fetch_from_evbuffer_socks(struct evbuffer *buf, socks_request_t *req,
*/
struct evbuffer_iovec v;
int i;
- want_length = evbuffer_get_contiguous_space(buf);
n_drain = 0;
- i = evbuffer_peek(buf, want_length, NULL, &v, 1);
+ i = evbuffer_peek(buf, -1, NULL, &v, 1);
tor_assert(i == 1);
data = v.iov_base;
datalen = v.iov_len;
+ want_length = 0;
res = parse_socks(data, datalen, req, log_sockstype,
safe_socks, &n_drain, &want_length);
@@ -1589,12 +1655,14 @@ fetch_from_evbuffer_socks(struct evbuffer *buf, socks_request_t *req,
* will need more data than we currently have. */
/* Loop while we have more data that we haven't given parse_socks() yet. */
- while (evbuffer_get_length(buf) > datalen) {
+ do {
int free_data = 0;
+ const size_t last_wanted = want_length;
n_drain = 0;
data = NULL;
datalen = inspect_evbuffer(buf, &data, want_length, &free_data, NULL);
+ want_length = 0;
res = parse_socks(data, datalen, req, log_sockstype,
safe_socks, &n_drain, &want_length);
@@ -1606,20 +1674,16 @@ fetch_from_evbuffer_socks(struct evbuffer *buf, socks_request_t *req,
else if (n_drain > 0)
evbuffer_drain(buf, n_drain);
- if (res) /* If res is nonzero, parse_socks() made up its mind. */
- return res;
-
- /* If parse_socks says that we want less data than we actually tried to
- give it, we've got some kind of weird situation; just exit the loop for
- now.
- */
- if (want_length <= datalen)
+ if (res == 0 && n_drain == 0 && want_length <= last_wanted) {
+ /* If we drained nothing, and we didn't ask for more than last time,
+ * then we probably wanted more data than the buffer actually had,
+ * and we're finding out that we're not satisified with it. It's
+ * time to break until we have more data. */
break;
- /* Otherwise, it wants more data than we gave it. If we can provide more
- * data than we gave it, we'll try to do so in the next iteration of the
- * loop. If we can't, the while loop will exit. It's okay if it asked for
- * more than we have total; maybe it doesn't really need so much. */
- }
+ }
+
+ buflen = evbuffer_get_length(buf);
+ } while (res == 0 && want_length <= buflen && buflen >= 2);
return res;
}
@@ -1642,47 +1706,114 @@ parse_socks(const char *data, size_t datalen, socks_request_t *req,
tor_addr_t destaddr;
uint32_t destip;
uint8_t socksver;
- enum {socks4, socks4a} socks4_prot = socks4a;
char *next, *startaddr;
+ unsigned char usernamelen, passlen;
struct in_addr in;
+ if (datalen < 2) {
+ /* We always need at least 2 bytes. */
+ *want_length_out = 2;
+ return 0;
+ }
+
+ if (req->socks_version == 5 && !req->got_auth) {
+ /* See if we have received authentication. Strictly speaking, we should
+ also check whether we actually negotiated username/password
+ authentication. But some broken clients will send us authentication
+ even if we negotiated SOCKS_NO_AUTH. */
+ if (*data == 1) { /* username/pass version 1 */
+ /* Format is: authversion [1 byte] == 1
+ usernamelen [1 byte]
+ username [usernamelen bytes]
+ passlen [1 byte]
+ password [passlen bytes] */
+ usernamelen = (unsigned char)*(data + 1);
+ if (datalen < 2u + usernamelen + 1u) {
+ *want_length_out = 2u + usernamelen + 1u;
+ return 0;
+ }
+ passlen = (unsigned char)*(data + 2u + usernamelen);
+ if (datalen < 2u + usernamelen + 1u + passlen) {
+ *want_length_out = 2u + usernamelen + 1u + passlen;
+ return 0;
+ }
+ req->replylen = 2; /* 2 bytes of response */
+ req->reply[0] = 5;
+ req->reply[1] = 0; /* authentication successful */
+ log_debug(LD_APP,
+ "socks5: Accepted username/password without checking.");
+ if (usernamelen) {
+ req->username = tor_memdup(data+2u, usernamelen);
+ req->usernamelen = usernamelen;
+ }
+ if (passlen) {
+ req->password = tor_memdup(data+3u+usernamelen, passlen);
+ req->passwordlen = passlen;
+ }
+ *drain_out = 2u + usernamelen + 1u + passlen;
+ req->got_auth = 1;
+ *want_length_out = 7; /* Minimal socks5 sommand. */
+ return 0;
+ } else if (req->auth_type == SOCKS_USER_PASS) {
+ /* unknown version byte */
+ log_warn(LD_APP, "Socks5 username/password version %d not recognized; "
+ "rejecting.", (int)*data);
+ return -1;
+ }
+ }
+
socksver = *data;
switch (socksver) { /* which version of socks? */
-
case 5: /* socks5 */
if (req->socks_version != 5) { /* we need to negotiate a method */
unsigned char nummethods = (unsigned char)*(data+1);
+ int r=0;
tor_assert(!req->socks_version);
if (datalen < 2u+nummethods) {
*want_length_out = 2u+nummethods;
return 0;
}
- if (!nummethods || !memchr(data+2, 0, nummethods)) {
+ if (!nummethods)
+ return -1;
+ req->replylen = 2; /* 2 bytes of response */
+ req->reply[0] = 5; /* socks5 reply */
+ if (memchr(data+2, SOCKS_NO_AUTH, nummethods)) {
+ req->reply[1] = SOCKS_NO_AUTH; /* tell client to use "none" auth
+ method */
+ req->socks_version = 5; /* remember we've already negotiated auth */
+ log_debug(LD_APP,"socks5: accepted method 0 (no authentication)");
+ r=0;
+ } else if (memchr(data+2, SOCKS_USER_PASS, nummethods)) {
+ req->auth_type = SOCKS_USER_PASS;
+ req->reply[1] = SOCKS_USER_PASS; /* tell client to use "user/pass"
+ auth method */
+ req->socks_version = 5; /* remember we've already negotiated auth */
+ log_debug(LD_APP,"socks5: accepted method 2 (username/password)");
+ r=0;
+ } else {
log_warn(LD_APP,
- "socks5: offered methods don't include 'no auth'. "
- "Rejecting.");
- req->replylen = 2; /* 2 bytes of response */
- req->reply[0] = 5;
+ "socks5: offered methods don't include 'no auth' or "
+ "username/password. Rejecting.");
req->reply[1] = '\xFF'; /* reject all methods */
- return -1;
+ r=-1;
}
- /* remove packet from buf. also remove any other extraneous
- * bytes, to support broken socks clients. */
- *drain_out = -1;
+ /* Remove packet from buf. Some SOCKS clients will have sent extra
+ * junk at this point; let's hope it's an authentication message. */
+ *drain_out = 2u + nummethods;
- req->replylen = 2; /* 2 bytes of response */
- req->reply[0] = 5; /* socks5 reply */
- req->reply[1] = 0; /* tell client to use "none" auth method */
- req->socks_version = 5; /* remember we've already negotiated auth */
- log_debug(LD_APP,"socks5: accepted method 0");
- return 0;
+ return r;
+ }
+ if (req->auth_type != SOCKS_NO_AUTH && !req->got_auth) {
+ log_warn(LD_APP,
+ "socks5: negotiated authentication, but none provided");
+ return -1;
}
/* we know the method; read in the request */
log_debug(LD_APP,"socks5: checking request");
- if (datalen < 8) {/* basic info plus >=2 for addr plus 2 for port */
- *want_length_out = 8;
+ if (datalen < 7) {/* basic info plus >=1 for addr plus 2 for port */
+ *want_length_out = 7;
return 0; /* not yet */
}
req->command = (unsigned char) *(data+1);
@@ -1761,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.",
@@ -1771,9 +1902,11 @@ parse_socks(const char *data, size_t datalen, socks_request_t *req,
return -1;
}
tor_assert(0);
- case 4: /* socks4 */
- /* http://archive.socks.permeo.com/protocol/socks4.protocol */
- /* http://archive.socks.permeo.com/protocol/socks4a.protocol */
+ case 4: { /* socks4 */
+ enum {socks4, socks4a} socks4_prot = socks4a;
+ const char *authstart, *authend;
+ /* http://ss5.sourceforge.net/socks4.protocol.txt */
+ /* http://ss5.sourceforge.net/socks4A.protocol.txt */
req->socks_version = 4;
if (datalen < SOCKS4_NETWORK_LEN) {/* basic info available? */
@@ -1812,7 +1945,8 @@ parse_socks(const char *data, size_t datalen, socks_request_t *req,
socks4_prot = socks4;
}
- next = memchr(data+SOCKS4_NETWORK_LEN, 0,
+ authstart = data + SOCKS4_NETWORK_LEN;
+ next = memchr(authstart, 0,
datalen-SOCKS4_NETWORK_LEN);
if (!next) {
if (datalen >= 1024) {
@@ -1820,9 +1954,10 @@ parse_socks(const char *data, size_t datalen, socks_request_t *req,
return -1;
}
log_debug(LD_APP,"socks4: Username not here yet.");
- *want_length_out = datalen+1024; /* ???? */
+ *want_length_out = datalen+1024; /* More than we need, but safe */
return 0;
}
+ authend = next;
tor_assert(next < data+datalen);
startaddr = NULL;
@@ -1847,7 +1982,7 @@ parse_socks(const char *data, size_t datalen, socks_request_t *req,
return -1;
}
log_debug(LD_APP,"socks4: Destaddr not all here yet.");
- *want_length_out = datalen + 1024;
+ *want_length_out = datalen + 1024; /* More than we need, but safe */
return 0;
}
if (MAX_SOCKS_ADDR_LEN <= next-startaddr) {
@@ -1858,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,
@@ -1872,15 +2007,20 @@ parse_socks(const char *data, size_t datalen, socks_request_t *req,
req->port, escaped(req->address));
return -1;
}
+ if (authend != authstart) {
+ req->got_auth = 1;
+ req->usernamelen = authend - authstart;
+ req->username = tor_memdup(authstart, authend - authstart);
+ }
/* next points to the final \0 on inbuf */
*drain_out = next - data + 1;
return 1;
-
+ }
case 'G': /* get */
case 'H': /* head */
case 'P': /* put/post */
case 'C': /* connect */
- strlcpy(req->reply,
+ strlcpy((char*)req->reply,
"HTTP/1.0 501 Tor is not an HTTP Proxy\r\n"
"Content-Type: text/html; charset=iso-8859-1\r\n\r\n"
"<html>\n"
@@ -1906,7 +2046,7 @@ parse_socks(const char *data, size_t datalen, socks_request_t *req,
"</body>\n"
"</html>\n"
, MAX_SOCKS_REPLY_LEN);
- req->replylen = strlen(req->reply)+1;
+ req->replylen = strlen((char*)req->reply)+1;
/* fall through */
default: /* version is not socks4 or socks5 */
log_warn(LD_APP,
@@ -2240,7 +2380,6 @@ write_to_evbuffer_zlib(struct evbuffer *buf, tor_zlib_state_t *state,
int over = 0, n;
struct evbuffer_iovec vec[1];
do {
- int need_new_chunk = 0;
{
size_t cap = data_len / 4;
if (cap < 128)
@@ -2269,7 +2408,6 @@ write_to_evbuffer_zlib(struct evbuffer *buf, tor_zlib_state_t *state,
if (avail) {
/* Zlib says we need more room (ZLIB_BUF_FULL). Start a new chunk
* automatically, whether were going to or not. */
- need_new_chunk = 1;
}
break;
}
@@ -2284,6 +2422,43 @@ write_to_evbuffer_zlib(struct evbuffer *buf, tor_zlib_state_t *state,
}
#endif
+/** Set *<b>output</b> to contain a copy of the data in *<b>input</b> */
+int
+generic_buffer_set_to_copy(generic_buffer_t **output,
+ const generic_buffer_t *input)
+{
+#ifdef USE_BUFFEREVENTS
+ struct evbuffer_ptr ptr;
+ size_t remaining = evbuffer_get_length(input);
+ if (*output) {
+ evbuffer_drain(*output, evbuffer_get_length(*output));
+ } else {
+ if (!(*output = evbuffer_new()))
+ return -1;
+ }
+ evbuffer_ptr_set((struct evbuffer*)input, &ptr, 0, EVBUFFER_PTR_SET);
+ while (remaining) {
+ struct evbuffer_iovec v[4];
+ int n_used, i;
+ n_used = evbuffer_peek((struct evbuffer*)input, -1, &ptr, v, 4);
+ if (n_used < 0)
+ return -1;
+ for (i=0;i<n_used;++i) {
+ evbuffer_add(*output, v[i].iov_base, v[i].iov_len);
+ tor_assert(v[i].iov_len <= remaining);
+ remaining -= v[i].iov_len;
+ evbuffer_ptr_set((struct evbuffer*)input,
+ &ptr, v[i].iov_len, EVBUFFER_PTR_ADD);
+ }
+ }
+#else
+ if (*output)
+ buf_free(*output);
+ *output = buf_copy(input);
+#endif
+ return 0;
+}
+
/** Log an error and exit if <b>buf</b> is corrupted.
*/
void
diff --git a/src/or/buffers.h b/src/or/buffers.h
index ef64bcce5..7b2a2acc3 100644
--- a/src/or/buffers.h
+++ b/src/or/buffers.h
@@ -16,6 +16,7 @@ buf_t *buf_new(void);
buf_t *buf_new_with_capacity(size_t size);
void buf_free(buf_t *buf);
void buf_clear(buf_t *buf);
+buf_t *buf_copy(const buf_t *buf);
void buf_shrink(buf_t *buf);
void buf_shrink_freelists(int free_all);
void buf_dump_freelist_sizes(int severity);
@@ -24,11 +25,11 @@ size_t buf_datalen(const buf_t *buf);
size_t buf_allocation(const buf_t *buf);
size_t buf_slack(const buf_t *buf);
-int read_to_buf(int s, size_t at_most, buf_t *buf, int *reached_eof,
+int read_to_buf(tor_socket_t s, size_t at_most, buf_t *buf, int *reached_eof,
int *socket_error);
int read_to_buf_tls(tor_tls_t *tls, size_t at_most, buf_t *buf);
-int flush_buf(int s, buf_t *buf, size_t sz, size_t *buf_flushlen);
+int flush_buf(tor_socket_t s, buf_t *buf, size_t sz, size_t *buf_flushlen);
int flush_buf_tls(tor_tls_t *tls, buf_t *buf, size_t sz, size_t *buf_flushlen);
int write_to_buf(const char *string, size_t string_len, buf_t *buf);
@@ -41,6 +42,8 @@ int fetch_from_buf_http(buf_t *buf,
char **headers_out, size_t max_headerlen,
char **body_out, size_t *body_used, size_t max_bodylen,
int force_complete);
+socks_request_t *socks_request_new(void);
+void socks_request_free(socks_request_t *req);
int fetch_from_buf_socks(buf_t *buf, socks_request_t *req,
int log_sockstype, int safe_socks);
int fetch_from_buf_socks_client(buf_t *buf, int state, char **reason);
@@ -65,6 +68,24 @@ int write_to_evbuffer_zlib(struct evbuffer *buf, tor_zlib_state_t *state,
int done);
#endif
+#ifdef USE_BUFFEREVENTS
+#define generic_buffer_new() evbuffer_new()
+#define generic_buffer_len(b) evbuffer_get_length((b))
+#define generic_buffer_add(b,dat,len) evbuffer_add((b),(dat),(len))
+#define generic_buffer_get(b,buf,buflen) evbuffer_remove((b),(buf),(buflen))
+#define generic_buffer_clear(b) evbuffer_drain((b), evbuffer_get_length((b)))
+#define generic_buffer_free(b) evbuffer_free((b))
+#else
+#define generic_buffer_new() buf_new()
+#define generic_buffer_len(b) buf_datalen((b))
+#define generic_buffer_add(b,dat,len) write_to_buf((dat),(len),(b))
+#define generic_buffer_get(b,buf,buflen) fetch_from_buf((buf),(buflen),(b))
+#define generic_buffer_clear(b) buf_clear((b))
+#define generic_buffer_free(b) buf_free((b))
+#endif
+int generic_buffer_set_to_copy(generic_buffer_t **output,
+ const generic_buffer_t *input);
+
void assert_buf_ok(buf_t *buf);
#ifdef BUFFERS_PRIVATE
diff --git a/src/or/circuitbuild.c b/src/or/circuitbuild.c
index ac0df919d..b04bd1012 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"
@@ -79,6 +80,28 @@ typedef struct {
* at which we last failed to connect to it. */
} entry_guard_t;
+/** Information about a configured bridge. Currently this just matches the
+ * ones in the torrc file, but one day we may be able to learn about new
+ * bridges on our own, and remember them in the state file. */
+typedef struct {
+ /** Address of the bridge. */
+ tor_addr_t addr;
+ /** TLS port for the bridge. */
+ uint16_t port;
+ /** Boolean: We are re-parsing our bridge list, and we are going to remove
+ * this one if we don't find it in the list of configured bridges. */
+ unsigned marked_for_removal : 1;
+ /** Expected identity digest, or all zero bytes if we don't know what the
+ * digest should be. */
+ char identity[DIGEST_LEN];
+
+ /** Name of pluggable transport protocol taken from its config line. */
+ char *transport_name;
+
+ /** When should we next try to fetch a descriptor for this bridge? */
+ download_status_t fetch_status;
+} bridge_info_t;
+
/** A list of our chosen entry guards. */
static smartlist_t *entry_guards = NULL;
/** A value of 1 means that the entry_guards list has changed
@@ -101,6 +124,8 @@ static int onion_append_hop(crypt_path_t **head_ptr, extend_info_t *choice);
static void entry_guards_changed(void);
+static void bridge_free(bridge_info_t *bridge);
+
/**
* This function decides if CBT learning should be disabled. It returns
* true if one or more of the following four conditions are met:
@@ -263,7 +288,7 @@ circuit_build_times_test_frequency(void)
}
/**
- * Retrieve and bounds-check the cbtmintimeout consensus paramter.
+ * Retrieve and bounds-check the cbtmintimeout consensus parameter.
*
* Effect: This is the minimum allowed timeout value in milliseconds.
* The minimum is to prevent rounding to 0 (we only check once
@@ -679,7 +704,15 @@ circuit_build_times_shuffle_and_store_array(circuit_build_times_t *cbt,
log_notice(LD_CIRC, "The number of circuit times that this Tor version "
"uses to calculate build times is less than the number stored "
"in your state file. Decreasing the circuit time history from "
- "%d to %d.", num_times, CBT_NCIRCUITS_TO_OBSERVE);
+ "%lu to %d.", (unsigned long)num_times,
+ CBT_NCIRCUITS_TO_OBSERVE);
+ }
+
+ if (n > INT_MAX-1) {
+ log_warn(LD_CIRC, "For some insane reasons, you had %lu circuit build "
+ "observations in your state file. That's far too many; probably "
+ "there's a bug here.", (unsigned long)n);
+ n = INT_MAX-1;
}
/* This code can only be run on a compact array */
@@ -1230,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;
@@ -1374,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);
@@ -1407,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) {
@@ -1422,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);
@@ -1494,7 +1527,7 @@ get_unique_circ_id_by_conn(or_connection_t *conn)
}
/** If <b>verbose</b> is false, allocate and return a comma-separated list of
- * the currently built elements of circuit_t. If <b>verbose</b> is true, also
+ * the currently built elements of <b>circ</b>. If <b>verbose</b> is true, also
* list information about link status in a more verbose format using spaces.
* If <b>verbose_names</b> is false, give nicknames for Named routers and hex
* digests for others; if <b>verbose_names</b> is true, use $DIGEST=Name style
@@ -1580,7 +1613,7 @@ circuit_list_path_impl(origin_circuit_t *circ, int verbose, int verbose_names)
}
/** If <b>verbose</b> is false, allocate and return a comma-separated
- * list of the currently built elements of circuit_t. If
+ * list of the currently built elements of <b>circ</b>. If
* <b>verbose</b> is true, also list information about link status in
* a more verbose format using spaces.
*/
@@ -1591,7 +1624,7 @@ circuit_list_path(origin_circuit_t *circ, int verbose)
}
/** Allocate and return a comma-separated list of the currently built elements
- * of circuit_t, giving each as a verbose nickname.
+ * of <b>circ</b>, giving each as a verbose nickname.
*/
char *
circuit_list_path_for_controller(origin_circuit_t *circ)
@@ -1600,7 +1633,7 @@ circuit_list_path_for_controller(origin_circuit_t *circ)
}
/** Log, at severity <b>severity</b>, the nicknames of each router in
- * circ's cpath. Also log the length of the cpath, and the intended
+ * <b>circ</b>'s cpath. Also log the length of the cpath, and the intended
* exit point.
*/
void
@@ -1612,7 +1645,7 @@ circuit_log_path(int severity, unsigned int domain, origin_circuit_t *circ)
}
/** Tell the rep(utation)hist(ory) module about the status of the links
- * in circ. Hops that have become OPEN are marked as successfully
+ * in <b>circ</b>. Hops that have become OPEN are marked as successfully
* extended; the _first_ hop that isn't open (if any) is marked as
* unable to extend.
*/
@@ -1748,10 +1781,9 @@ circuit_handle_first_hop(origin_circuit_t *circ)
if (!n_conn) {
/* not currently connected in a useful way. */
- const char *name = strlen(firsthop->extend_info->nickname) ?
- firsthop->extend_info->nickname : fmt_addr(&firsthop->extend_info->addr);
log_info(LD_CIRC, "Next router is %s: %s",
- safe_str_client(name), msg?msg:"???");
+ safe_str_client(extend_info_describe(firsthop->extend_info)),
+ msg?msg:"???");
circ->_base.n_hop = extend_info_dup(firsthop->extend_info);
if (should_launch) {
@@ -1941,7 +1973,7 @@ inform_testing_reachability(void)
static INLINE int
should_use_create_fast_for_circuit(origin_circuit_t *circ)
{
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
tor_assert(circ->cpath);
tor_assert(circ->cpath->extend_info);
@@ -1949,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;
}
@@ -2034,7 +2067,7 @@ circuit_send_next_onion_skin(origin_circuit_t *circ)
circuit_set_state(TO_CIRCUIT(circ), CIRCUIT_STATE_BUILDING);
log_info(LD_CIRC,"First hop: finished sending %s cell to '%s'",
fast ? "CREATE_FAST" : "CREATE",
- node ? node_get_nickname(node) : "<unnamed>");
+ node ? node_describe(node) : "<unnamed>");
} else {
tor_assert(circ->cpath->state == CPATH_STATE_OPEN);
tor_assert(circ->_base.state == CIRCUIT_STATE_BUILDING);
@@ -2076,7 +2109,7 @@ circuit_send_next_onion_skin(origin_circuit_t *circ)
if (circ->build_state->onehop_tunnel)
control_event_bootstrap(BOOTSTRAP_STATUS_REQUESTING_STATUS, 0);
if (!can_complete_circuit && !circ->build_state->onehop_tunnel) {
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
can_complete_circuit=1;
/* FFFF Log a count of known routers here */
log_notice(LD_GENERAL,
@@ -2084,6 +2117,7 @@ circuit_send_next_onion_skin(origin_circuit_t *circ)
"Looks like client functionality is working.");
control_event_bootstrap(BOOTSTRAP_STATUS_DONE, 0);
control_event_client_status(LOG_NOTICE, "CIRCUIT_ESTABLISHED");
+ clear_broken_connection_map(1);
if (server_mode(options) && !check_whether_orport_reachable()) {
inform_testing_reachability();
consider_testing_reachability(1, 1);
@@ -2600,7 +2634,7 @@ node_handles_some_port(const node_t *node, smartlist_t *needed_ports)
port = *(uint16_t *)smartlist_get(needed_ports, i);
tor_assert(port);
if (node)
- r = compare_addr_to_node_policy(0, port, node);
+ r = compare_tor_addr_to_node_policy(NULL, port, node);
else
continue;
if (r != ADDR_POLICY_REJECTED && r != ADDR_POLICY_PROBABLY_REJECTED)
@@ -2614,14 +2648,18 @@ node_handles_some_port(const node_t *node, smartlist_t *needed_ports)
static int
ap_stream_wants_exit_attention(connection_t *conn)
{
- if (conn->type == CONN_TYPE_AP &&
- conn->state == AP_CONN_STATE_CIRCUIT_WAIT &&
+ entry_connection_t *entry;
+ if (conn->type != CONN_TYPE_AP)
+ return 0;
+ entry = TO_ENTRY_CONN(conn);
+
+ if (conn->state == AP_CONN_STATE_CIRCUIT_WAIT &&
!conn->marked_for_close &&
- !(TO_EDGE_CONN(conn)->want_onehop) && /* ignore one-hop streams */
- !(TO_EDGE_CONN(conn)->use_begindir) && /* ignore targeted dir fetches */
- !(TO_EDGE_CONN(conn)->chosen_exit_name) && /* ignore defined streams */
+ !(entry->want_onehop) && /* ignore one-hop streams */
+ !(entry->use_begindir) && /* ignore targeted dir fetches */
+ !(entry->chosen_exit_name) && /* ignore defined streams */
!connection_edge_is_rendezvous_stream(TO_EDGE_CONN(conn)) &&
- !circuit_stream_is_being_handled(TO_EDGE_CONN(conn), 0,
+ !circuit_stream_is_being_handled(TO_ENTRY_CONN(conn), 0,
MIN_CIRCUITS_HANDLING_STREAM))
return 1;
return 0;
@@ -2643,7 +2681,7 @@ choose_good_exit_server_general(int need_uptime, int need_capacity)
smartlist_t *connections;
int best_support = -1;
int n_best_support=0;
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
const smartlist_t *the_nodes;
const node_t *node=NULL;
@@ -2686,8 +2724,7 @@ choose_good_exit_server_general(int need_uptime, int need_capacity)
n_supported[i] = -1;
continue; /* skip routers that are known to be down or bad exits */
}
- if (options->_ExcludeExitNodesUnion &&
- routerset_contains_node(options->_ExcludeExitNodesUnion, node)) {
+ if (routerset_contains_node(options->_ExcludeExitNodesUnion, node)) {
n_supported[i] = -1;
continue; /* user asked us not to use it, no matter what */
}
@@ -2727,7 +2764,7 @@ choose_good_exit_server_general(int need_uptime, int need_capacity)
SMARTLIST_FOREACH_BEGIN(connections, connection_t *, conn) {
if (!ap_stream_wants_exit_attention(conn))
continue; /* Skip everything but APs in CIRCUIT_WAIT */
- if (connection_ap_can_use_exit(TO_EDGE_CONN(conn), node)) {
+ if (connection_ap_can_use_exit(TO_ENTRY_CONN(conn), node)) {
++n_supported[i];
// log_fn(LOG_DEBUG,"%s is supported. n_supported[%d] now %d.",
// router->nickname, i, n_supported[i]);
@@ -2818,7 +2855,7 @@ choose_good_exit_server_general(int need_uptime, int need_capacity)
tor_free(n_supported);
if (node) {
- log_info(LD_CIRC, "Chose exit server '%s'", node_get_nickname(node));
+ log_info(LD_CIRC, "Chose exit server '%s'", node_describe(node));
return node;
}
if (options->ExitNodes) {
@@ -2844,7 +2881,7 @@ static const node_t *
choose_good_exit_server(uint8_t purpose,
int need_uptime, int need_capacity, int is_internal)
{
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
router_crn_flags_t flags = CRN_NEED_DESC;
if (need_uptime)
flags |= CRN_NEED_UPTIME;
@@ -2874,7 +2911,7 @@ choose_good_exit_server(uint8_t purpose,
static void
warn_if_last_router_excluded(origin_circuit_t *circ, const extend_info_t *exit)
{
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
routerset_t *rs = options->ExcludeNodes;
const char *description;
uint8_t purpose = circ->_base.purpose;
@@ -2925,7 +2962,7 @@ warn_if_last_router_excluded(origin_circuit_t *circ, const extend_info_t *exit)
log_warn(LD_BUG, "Using %s '%s' which is listed in ExcludeNodes%s, "
"even though StrictNodes is set. Please report. "
"(Circuit purpose: %s)",
- description, exit->nickname,
+ description, extend_info_describe(exit),
rs==options->ExcludeNodes?"":" or ExcludeExitNodes",
circuit_purpose_to_string(purpose));
} else {
@@ -2934,7 +2971,7 @@ warn_if_last_router_excluded(origin_circuit_t *circ, const extend_info_t *exit)
"prevent this (and possibly break your Tor functionality), "
"set the StrictNodes configuration option. "
"(Circuit purpose: %s)",
- description, exit->nickname,
+ description, extend_info_describe(exit),
rs==options->ExcludeNodes?"":" or ExcludeExitNodes",
circuit_purpose_to_string(purpose));
}
@@ -2964,7 +3001,8 @@ onion_pick_cpath_exit(origin_circuit_t *circ, extend_info_t *exit)
if (exit) { /* the circuit-builder pre-requested one */
warn_if_last_router_excluded(circ, exit);
- log_info(LD_CIRC,"Using requested exit node '%s'", exit->nickname);
+ log_info(LD_CIRC,"Using requested exit node '%s'",
+ extend_info_describe(exit));
exit = extend_info_dup(exit);
} else { /* we have to decide one */
const node_t *node =
@@ -3014,8 +3052,8 @@ circuit_extend_to_new_exit(origin_circuit_t *circ, extend_info_t *exit)
circuit_append_new_exit(circ, exit);
circuit_set_state(TO_CIRCUIT(circ), CIRCUIT_STATE_BUILDING);
if ((err_reason = circuit_send_next_onion_skin(circ))<0) {
- log_warn(LD_CIRC, "Couldn't extend circuit to new point '%s'.",
- exit->nickname);
+ log_warn(LD_CIRC, "Couldn't extend circuit to new point %s.",
+ extend_info_describe(exit));
circuit_mark_for_close(TO_CIRCUIT(circ), -err_reason);
return -1;
}
@@ -3087,7 +3125,7 @@ choose_good_middle_server(uint8_t purpose,
const node_t *r, *choice;
crypt_path_t *cpath;
smartlist_t *excluded;
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
router_crn_flags_t flags = CRN_NEED_DESC;
tor_assert(_CIRCUIT_PURPOSE_MIN <= purpose &&
purpose <= _CIRCUIT_PURPOSE_MAX);
@@ -3095,13 +3133,11 @@ choose_good_middle_server(uint8_t purpose,
log_debug(LD_CIRC, "Contemplating intermediate hop: random choice.");
excluded = smartlist_create();
if ((r = build_state_get_exit_node(state))) {
- smartlist_add(excluded, (void*) r);
- nodelist_add_node_family(excluded, r);
+ nodelist_add_node_and_family(excluded, r);
}
for (i = 0, cpath = head; i < cur_len; ++i, cpath=cpath->next) {
if ((r = node_get_by_id(cpath->extend_info->identity_digest))) {
- smartlist_add(excluded, (void*)r);
- nodelist_add_node_family(excluded, r);
+ nodelist_add_node_and_family(excluded, r);
}
}
@@ -3129,7 +3165,7 @@ choose_good_entry_server(uint8_t purpose, cpath_build_state_t *state)
{
const node_t *choice;
smartlist_t *excluded;
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
router_crn_flags_t flags = CRN_NEED_GUARD|CRN_NEED_DESC;
const node_t *node;
@@ -3145,8 +3181,7 @@ choose_good_entry_server(uint8_t purpose, cpath_build_state_t *state)
if (state && (node = build_state_get_exit_node(state))) {
/* Exclude the exit node from the state, if we have one. Also exclude its
* family. */
- smartlist_add(excluded, (void*)node);
- nodelist_add_node_family(excluded, node);
+ nodelist_add_node_and_family(excluded, node);
}
if (firewall_is_fascist_or()) {
/* Exclude all ORs that we can't reach through our firewall */
@@ -3161,8 +3196,7 @@ choose_good_entry_server(uint8_t purpose, cpath_build_state_t *state)
SMARTLIST_FOREACH(entry_guards, entry_guard_t *, entry,
{
if ((node = node_get_by_id(entry->identity))) {
- smartlist_add(excluded, (void*)node);
- nodelist_add_node_family(excluded, node);
+ nodelist_add_node_and_family(excluded, node);
}
});
}
@@ -3239,7 +3273,8 @@ onion_extend_cpath(origin_circuit_t *circ)
}
log_debug(LD_CIRC,"Chose router %s for hop %d (exit is %s)",
- info->nickname, cur_len+1, build_state_get_exit_nickname(state));
+ extend_info_describe(info),
+ cur_len+1, build_state_get_exit_nickname(state));
onion_append_hop(&circ->cpath, info);
extend_info_free(info);
@@ -3379,7 +3414,8 @@ build_state_get_exit_nickname(cpath_build_state_t *state)
*/
static int
entry_guard_set_status(entry_guard_t *e, const node_t *node,
- time_t now, or_options_t *options, const char **reason)
+ time_t now, const or_options_t *options,
+ const char **reason)
{
char buf[HEX_DIGEST_LEN+1];
int changed = 0;
@@ -3394,6 +3430,8 @@ entry_guard_set_status(entry_guard_t *e, const node_t *node,
else if (options->UseBridges && (!node->ri ||
node->ri->purpose != ROUTER_PURPOSE_BRIDGE))
*reason = "not a bridge";
+ else if (options->UseBridges && !node_is_a_configured_bridge(node))
+ *reason = "not a configured bridge";
else if (!options->UseBridges && !node->is_possible_guard &&
!routerset_contains_node(options->EntryNodes,node))
*reason = "not recommended as a guard";
@@ -3460,7 +3498,7 @@ entry_is_live(entry_guard_t *e, int need_uptime, int need_capacity,
int assume_reachable, const char **msg)
{
const node_t *node;
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
tor_assert(msg);
if (e->bad_since) {
@@ -3483,14 +3521,17 @@ entry_is_live(entry_guard_t *e, int need_uptime, int need_capacity,
*msg = "not a bridge";
return NULL;
}
+ if (!node_is_a_configured_bridge(node)) {
+ *msg = "not a configured bridge";
+ return NULL;
+ }
} else { /* !get_options()->UseBridges */
if (node_get_purpose(node) != ROUTER_PURPOSE_GENERAL) {
*msg = "not general-purpose";
return NULL;
}
}
- if (options->EntryNodes &&
- routerset_contains_node(options->EntryNodes, node)) {
+ if (routerset_contains_node(options->EntryNodes, node)) {
/* they asked for it, they get it */
need_uptime = need_capacity = 0;
}
@@ -3541,20 +3582,24 @@ log_entry_guards(int severity)
smartlist_t *elements = smartlist_create();
char *s;
- SMARTLIST_FOREACH(entry_guards, entry_guard_t *, e,
+ SMARTLIST_FOREACH_BEGIN(entry_guards, entry_guard_t *, e)
{
const char *msg = NULL;
char *cp;
if (entry_is_live(e, 0, 1, 0, &msg))
- tor_asprintf(&cp, "%s (up %s)",
+ tor_asprintf(&cp, "%s [%s] (up %s)",
e->nickname,
+ hex_str(e->identity, DIGEST_LEN),
e->made_contact ? "made-contact" : "never-contacted");
else
- tor_asprintf(&cp, "%s (%s, %s)",
- e->nickname, msg,
+ tor_asprintf(&cp, "%s [%s] (%s, %s)",
+ e->nickname,
+ hex_str(e->identity, DIGEST_LEN),
+ msg,
e->made_contact ? "made-contact" : "never-contacted");
smartlist_add(elements, cp);
- });
+ }
+ SMARTLIST_FOREACH_END(e);
s = smartlist_join_strings(elements, ",", 0, NULL);
SMARTLIST_FOREACH(elements, char*, cp, tor_free(cp));
@@ -3578,7 +3623,7 @@ control_event_guard_deferred(void)
#if 0
int n = 0;
const char *msg;
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
if (!entry_guards)
return;
SMARTLIST_FOREACH(entry_guards, entry_guard_t *, entry,
@@ -3601,7 +3646,7 @@ control_event_guard_deferred(void)
* already in our entry_guards list, put it at the *beginning*.
* Else, put the one we pick at the end of the list. */
static const node_t *
-add_an_entry_guard(const node_t *chosen, int reset_status)
+add_an_entry_guard(const node_t *chosen, int reset_status, int prepend)
{
const node_t *node;
entry_guard_t *entry;
@@ -3622,8 +3667,8 @@ add_an_entry_guard(const node_t *chosen, int reset_status)
return NULL;
}
entry = tor_malloc_zero(sizeof(entry_guard_t));
- log_info(LD_CIRC, "Chose '%s' as new entry guard.",
- node_get_nickname(node));
+ log_info(LD_CIRC, "Chose %s as new entry guard.",
+ node_describe(node));
strlcpy(entry->nickname, node_get_nickname(node), sizeof(entry->nickname));
memcpy(entry->identity, node->identity, DIGEST_LEN);
/* Choose expiry time smudged over the past month. The goal here
@@ -3633,9 +3678,9 @@ add_an_entry_guard(const node_t *chosen, int reset_status)
* this guard. For details, see the Jan 2010 or-dev thread. */
entry->chosen_on_date = time(NULL) - crypto_rand_int(3600*24*30);
entry->chosen_by_version = tor_strdup(VERSION);
- if (chosen) /* prepend */
+ if (prepend)
smartlist_insert(entry_guards, 0, entry);
- else /* append */
+ else
smartlist_add(entry_guards, entry);
control_event_guard(entry->nickname, entry->identity, "NEW");
control_event_guard_deferred();
@@ -3646,14 +3691,14 @@ add_an_entry_guard(const node_t *chosen, int reset_status)
/** If the use of entry guards is configured, choose more entry guards
* until we have enough in the list. */
static void
-pick_entry_guards(or_options_t *options)
+pick_entry_guards(const or_options_t *options)
{
int changed = 0;
tor_assert(entry_guards);
while (num_live_entry_guards() < options->NumEntryGuards) {
- if (!add_an_entry_guard(NULL, 0))
+ if (!add_an_entry_guard(NULL, 0, 0))
break;
changed = 1;
}
@@ -3779,10 +3824,9 @@ remove_dead_entry_guards(time_t now)
* think that things are unlisted.
*/
void
-entry_guards_compute_status(or_options_t *options, time_t now)
+entry_guards_compute_status(const or_options_t *options, time_t now)
{
int changed = 0;
- int severity = LOG_DEBUG;
digestmap_t *reasons;
if (! entry_guards)
@@ -3809,15 +3853,14 @@ entry_guards_compute_status(or_options_t *options, time_t now)
if (remove_dead_entry_guards(now))
changed = 1;
- severity = changed ? LOG_DEBUG : LOG_INFO;
-
if (changed) {
SMARTLIST_FOREACH_BEGIN(entry_guards, entry_guard_t *, entry) {
const char *reason = digestmap_get(reasons, entry->identity);
const char *live_msg = "";
const node_t *r = entry_is_live(entry, 0, 1, 0, &live_msg);
- log_info(LD_CIRC, "Summary: Entry '%s' is %s, %s%s%s, and %s%s.",
+ log_info(LD_CIRC, "Summary: Entry %s [%s] is %s, %s%s%s, and %s%s.",
entry->nickname,
+ hex_str(entry->identity, DIGEST_LEN),
entry->unreachable_since ? "unreachable" : "reachable",
entry->bad_since ? "unusable" : "usable",
reason ? ", ": "",
@@ -3968,12 +4011,12 @@ entry_nodes_should_be_added(void)
should_add_entry_nodes = 1;
}
-/** Add all nodes in EntryNodes that aren't currently guard nodes to the list
- * of guard nodes, at the front. */
+/** Adjust the entry guards list so that it only contains entries from
+ * EntryNodes, adding new entries from EntryNodes to the list as needed. */
static void
-entry_guards_prepend_from_config(or_options_t *options)
+entry_guards_set_from_config(const or_options_t *options)
{
- smartlist_t *entry_nodes, *entry_fps;
+ smartlist_t *entry_nodes, *worse_entry_nodes, *entry_fps;
smartlist_t *old_entry_guards_on_list, *old_entry_guards_not_on_list;
tor_assert(entry_guards);
@@ -3994,18 +4037,13 @@ entry_guards_prepend_from_config(or_options_t *options)
}
entry_nodes = smartlist_create();
+ worse_entry_nodes = smartlist_create();
entry_fps = smartlist_create();
old_entry_guards_on_list = smartlist_create();
old_entry_guards_not_on_list = smartlist_create();
/* Split entry guards into those on the list and those not. */
- /* XXXX023 Now that we allow countries and IP ranges in EntryNodes, this is
- * potentially an enormous list. For now, we disable such values for
- * EntryNodes in options_validate(); really, this wants a better solution.
- * Perhaps we should do this calculation once whenever the list of routers
- * changes or the entrynodes setting changes.
- */
routerset_get_all_nodes(entry_nodes, options->EntryNodes,
options->ExcludeNodes, 0);
SMARTLIST_FOREACH(entry_nodes, const node_t *,node,
@@ -4018,27 +4056,47 @@ entry_guards_prepend_from_config(or_options_t *options)
smartlist_add(old_entry_guards_not_on_list, e);
});
- /* Remove all currently configured entry guards from entry_routers. */
- SMARTLIST_FOREACH(entry_nodes, const node_t *, node, {
+ /* Remove all currently configured guard nodes, excluded nodes, unreachable
+ * nodes, or non-Guard nodes from entry_nodes. */
+ SMARTLIST_FOREACH_BEGIN(entry_nodes, const node_t *, node) {
if (is_an_entry_guard(node->identity)) {
SMARTLIST_DEL_CURRENT(entry_nodes, node);
+ continue;
+ } else if (routerset_contains_node(options->ExcludeNodes, node)) {
+ SMARTLIST_DEL_CURRENT(entry_nodes, node);
+ continue;
+ } else if (!fascist_firewall_allows_node(node)) {
+ SMARTLIST_DEL_CURRENT(entry_nodes, node);
+ continue;
+ } else if (! node->is_possible_guard) {
+ smartlist_add(worse_entry_nodes, (node_t*)node);
+ SMARTLIST_DEL_CURRENT(entry_nodes, node);
}
- });
+ } SMARTLIST_FOREACH_END(node);
/* Now build the new entry_guards list. */
smartlist_clear(entry_guards);
/* First, the previously configured guards that are in EntryNodes. */
smartlist_add_all(entry_guards, old_entry_guards_on_list);
+ /* Next, scramble the rest of EntryNodes, putting the guards first. */
+ smartlist_shuffle(entry_nodes);
+ smartlist_shuffle(worse_entry_nodes);
+ smartlist_add_all(entry_nodes, worse_entry_nodes);
+
/* Next, the rest of EntryNodes */
- SMARTLIST_FOREACH(entry_nodes, const node_t *, node, {
- add_an_entry_guard(node, 0);
- });
+ SMARTLIST_FOREACH_BEGIN(entry_nodes, const node_t *, node) {
+ add_an_entry_guard(node, 0, 0);
+ if (smartlist_len(entry_guards) > options->NumEntryGuards * 10)
+ break;
+ } SMARTLIST_FOREACH_END(node);
+ log_notice(LD_GENERAL, "%d entries in guards", smartlist_len(entry_guards));
/* Finally, free the remaining previously configured guards that are not in
* EntryNodes. */
SMARTLIST_FOREACH(old_entry_guards_not_on_list, entry_guard_t *, e,
entry_guard_free(e));
smartlist_free(entry_nodes);
+ smartlist_free(worse_entry_nodes);
smartlist_free(entry_fps);
smartlist_free(old_entry_guards_on_list);
smartlist_free(old_entry_guards_not_on_list);
@@ -4050,7 +4108,7 @@ entry_guards_prepend_from_config(or_options_t *options)
* list already and we must stick to it.
*/
int
-entry_list_is_constrained(or_options_t *options)
+entry_list_is_constrained(const or_options_t *options)
{
if (options->EntryNodes)
return 1;
@@ -4067,7 +4125,7 @@ entry_list_is_constrained(or_options_t *options)
const node_t *
choose_random_entry(cpath_build_state_t *state)
{
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
smartlist_t *live_entry_guards = smartlist_create();
smartlist_t *exit_family = smartlist_create();
const node_t *chosen_exit =
@@ -4078,7 +4136,7 @@ choose_random_entry(cpath_build_state_t *state)
int preferred_min, consider_exit_family = 0;
if (chosen_exit) {
- nodelist_add_node_family(exit_family, chosen_exit);
+ nodelist_add_node_and_family(exit_family, chosen_exit);
consider_exit_family = 1;
}
@@ -4086,7 +4144,7 @@ choose_random_entry(cpath_build_state_t *state)
entry_guards = smartlist_create();
if (should_add_entry_nodes)
- entry_guards_prepend_from_config(options);
+ entry_guards_set_from_config(options);
if (!entry_list_is_constrained(options) &&
smartlist_len(entry_guards) < options->NumEntryGuards)
@@ -4111,7 +4169,7 @@ choose_random_entry(cpath_build_state_t *state)
goto choose_and_finish; /* only choose from the ones we like */
if (options->StrictNodes) {
/* in theory this case should never happen, since
- * entry_guards_prepend_from_config() drops unwanted relays */
+ * entry_guards_set_from_config() drops unwanted relays */
tor_fragile_assert();
} else {
log_info(LD_CIRC,
@@ -4128,7 +4186,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)) {
@@ -4149,7 +4207,7 @@ choose_random_entry(cpath_build_state_t *state)
/* XXX if guard doesn't imply fast and stable, then we need
* to tell add_an_entry_guard below what we want, or it might
* be a long time til we get it. -RD */
- node = add_an_entry_guard(NULL, 0);
+ node = add_an_entry_guard(NULL, 0, 0);
if (node) {
entry_guards_changed();
/* XXX we start over here in case the new node we added shares
@@ -4480,24 +4538,6 @@ getinfo_helper_entry_guards(control_connection_t *conn,
return 0;
}
-/** Information about a configured bridge. Currently this just matches the
- * ones in the torrc file, but one day we may be able to learn about new
- * bridges on our own, and remember them in the state file. */
-typedef struct {
- /** Address of the bridge. */
- tor_addr_t addr;
- /** TLS port for the bridge. */
- uint16_t port;
- /** Boolean: We are re-parsing our bridge list, and we are going to remove
- * this one if we don't find it in the list of configured bridges. */
- unsigned marked_for_removal : 1;
- /** Expected identity digest, or all zero bytes if we don't know what the
- * digest should be. */
- char identity[DIGEST_LEN];
- /** When should we next try to fetch a descriptor for this bridge? */
- download_status_t fetch_status;
-} bridge_info_t;
-
/** A list of configured bridges. Whenever we actually get a descriptor
* for one, we add it as an entry guard. Note that the order of bridges
* in this list does not necessarily correspond to the order of bridges
@@ -4525,7 +4565,7 @@ sweep_bridge_list(void)
SMARTLIST_FOREACH_BEGIN(bridge_list, bridge_info_t *, b) {
if (b->marked_for_removal) {
SMARTLIST_DEL_CURRENT(bridge_list, b);
- tor_free(b);
+ bridge_free(b);
}
} SMARTLIST_FOREACH_END(b);
}
@@ -4536,10 +4576,243 @@ clear_bridge_list(void)
{
if (!bridge_list)
bridge_list = smartlist_create();
- SMARTLIST_FOREACH(bridge_list, bridge_info_t *, b, tor_free(b));
+ SMARTLIST_FOREACH(bridge_list, bridge_info_t *, b, bridge_free(b));
smartlist_clear(bridge_list);
}
+/** Free the bridge <b>bridge</b>. */
+static void
+bridge_free(bridge_info_t *bridge)
+{
+ if (!bridge)
+ return;
+
+ tor_free(bridge->transport_name);
+ tor_free(bridge);
+}
+
+/** A list of pluggable transports found in torrc. */
+static smartlist_t *transport_list = NULL;
+
+/** Mark every entry of the transport list to be removed on our next call to
+ * sweep_transport_list unless it has first been un-marked. */
+void
+mark_transport_list(void)
+{
+ if (!transport_list)
+ transport_list = smartlist_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
+clear_transport_list(void)
+{
+ if (!transport_list)
+ transport_list = smartlist_create();
+ SMARTLIST_FOREACH(transport_list, transport_t *, t, transport_free(t));
+ smartlist_clear(transport_list);
+}
+
+/** Free the pluggable transport struct <b>transport</b>. */
+void
+transport_free(transport_t *transport)
+{
+ if (!transport)
+ return;
+
+ tor_free(transport->name);
+ tor_free(transport);
+}
+
+/** Returns the transport in our transport list that has the name <b>name</b>.
+ * Else returns NULL. */
+transport_t *
+transport_get_by_name(const char *name)
+{
+ tor_assert(name);
+
+ if (!transport_list)
+ return NULL;
+
+ SMARTLIST_FOREACH_BEGIN(transport_list, transport_t *, transport) {
+ if (!strcmp(transport->name, name))
+ return transport;
+ } SMARTLIST_FOREACH_END(transport);
+
+ return NULL;
+}
+
+/** Returns a transport_t struct for a transport proxy supporting the
+ protocol <b>name</b> listening at <b>addr</b>:<b>port</b> using
+ SOCKS version <b>socks_ver</b>. */
+transport_t *
+transport_create(const tor_addr_t *addr, uint16_t port,
+ const char *name, int socks_ver)
+{
+ transport_t *t = tor_malloc_zero(sizeof(transport_t));
+
+ tor_addr_copy(&t->addr, addr);
+ t->port = port;
+ t->name = tor_strdup(name);
+ t->socks_version = socks_ver;
+
+ return t;
+}
+
+/** Resolve any conflicts that the insertion of transport <b>t</b>
+ * might cause.
+ * Return 0 if <b>t</b> is OK and should be registered, 1 if there is
+ * a transport identical to <b>t</b> already registered and -1 if
+ * <b>t</b> cannot be added due to conflicts. */
+static int
+transport_resolve_conflicts(transport_t *t)
+{
+ /* This is how we resolve transport conflicts:
+
+ If there is already a transport with the same name and addrport,
+ we either have duplicate torrc lines OR we are here post-HUP and
+ this transport was here pre-HUP as well. In any case, mark the
+ old transport so that it doesn't get removed and ignore the new
+ one. Our caller has to free the new transport so we return '1' to
+ signify this.
+
+ If there is already a transport with the same name but different
+ addrport:
+ * if it's marked for removal, it means that it either has a lower
+ priority than 't' in torrc (otherwise the mark would have been
+ cleared by the paragraph above), or it doesn't exist at all in
+ the post-HUP torrc. We destroy the old transport and register 't'.
+ * if it's *not* marked for removal, it means that it was newly
+ added in the post-HUP torrc or that it's of higher priority, in
+ this case we ignore 't'. */
+ transport_t *t_tmp = transport_get_by_name(t->name);
+ if (t_tmp) { /* same name */
+ if (tor_addr_eq(&t->addr, &t_tmp->addr) && (t->port == t_tmp->port)) {
+ /* same name *and* addrport */
+ t_tmp->marked_for_removal = 0;
+ return 1;
+ } else { /* same name but different addrport */
+ 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;
+ }
+ }
+ }
+
+ return 0;
+}
+
+/** Add transport <b>t</b> to the internal list of pluggable
+ * transports.
+ * Returns 0 if the transport was added correctly, 1 if the same
+ * transport was already registered (in this case the caller must
+ * free the transport) and -1 if there was an error. */
+int
+transport_add(transport_t *t)
+{
+ int r;
+ tor_assert(t);
+
+ r = transport_resolve_conflicts(t);
+
+ switch (r) {
+ case 0: /* should register transport */
+ if (!transport_list)
+ transport_list = smartlist_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)
+{
+ /* 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)
+ continue;
+ /* See if the user has Bridges that specify nonexistent
+ pluggable transports. We should warn the user in such case,
+ since it's probably misconfiguration. */
+ if (!transport_get_by_name(b->transport_name))
+ log_warn(LD_CONFIG, "You have a Bridge line using the %s "
+ "pluggable transport, but there doesn't seem to be a "
+ "corresponding ClientTransportPlugin line.",
+ b->transport_name);
+ } SMARTLIST_FOREACH_END(b);
+
+ return 0;
+ } else {
+ return -1;
+ }
+}
+
/** Return a bridge pointer if <b>ri</b> is one of our known bridges
* (either by comparing keys if possible, else by comparing addr/port).
* Else return NULL. */
@@ -4581,6 +4854,24 @@ routerinfo_is_a_configured_bridge(const routerinfo_t *ri)
return get_configured_bridge_by_routerinfo(ri) ? 1 : 0;
}
+/** Return 1 if <b>node</b> is one of our configured bridges, else 0. */
+int
+node_is_a_configured_bridge(const node_t *node)
+{
+ tor_addr_t addr;
+ uint16_t orport;
+ if (!node)
+ return 0;
+ if (node_get_addr(node, &addr) < 0)
+ return 0;
+ orport = node_get_orport(node);
+ if (orport == 0)
+ return 0;
+
+ return get_configured_bridge_by_addr_port_digest(
+ &addr, orport, node->identity) != NULL;
+}
+
/** We made a connection to a router at <b>addr</b>:<b>port</b>
* without knowing its digest. Its digest turned out to be <b>digest</b>.
* If it was a bridge, and we still don't know its digest, record it.
@@ -4600,10 +4891,12 @@ learned_router_identity(const tor_addr_t *addr, uint16_t port,
/** Remember a new bridge at <b>addr</b>:<b>port</b>. If <b>digest</b>
* is set, it tells us the identity key too. If we already had the
- * bridge in our list, unmark it, and don't actually add anything new. */
+ * bridge in our list, unmark it, and don't actually add anything new.
+ * If <b>transport_name</b> is non-NULL - the bridge is associated with a
+ * pluggable transport - we assign the transport to the bridge. */
void
bridge_add_from_config(const tor_addr_t *addr, uint16_t port,
- const char *digest)
+ const char *digest, const char *transport_name)
{
bridge_info_t *b;
@@ -4617,6 +4910,8 @@ bridge_add_from_config(const tor_addr_t *addr, uint16_t port,
b->port = port;
if (digest)
memcpy(b->identity, digest, DIGEST_LEN);
+ if (transport_name)
+ b->transport_name = tor_strdup(transport_name);
b->fetch_status.schedule = DL_SCHED_BRIDGE;
if (!bridge_list)
bridge_list = smartlist_create();
@@ -4654,19 +4949,54 @@ find_bridge_by_digest(const char *digest)
return NULL;
}
+/** If <b>addr</b> and <b>port</b> match the address and port of a
+ * bridge of ours that uses pluggable transports, place its transport
+ * in <b>transport</b>.
+ *
+ * Return 0 on success (found a transport, or found a bridge with no
+ * transport, or found no bridge); return -1 if we should be using a
+ * transport, but the transport could not be found.
+ */
+int
+find_transport_by_bridge_addrport(const tor_addr_t *addr, uint16_t port,
+ const transport_t **transport)
+{
+ *transport = NULL;
+ if (!bridge_list)
+ return 0;
+
+ SMARTLIST_FOREACH_BEGIN(bridge_list, const bridge_info_t *, bridge) {
+ if (tor_addr_eq(&bridge->addr, addr) &&
+ (bridge->port == port)) { /* bridge matched */
+ if (bridge->transport_name) { /* it also uses pluggable transports */
+ *transport = transport_get_by_name(bridge->transport_name);
+ if (*transport == NULL) { /* it uses pluggable transports, but
+ the transport could not be found! */
+ return -1;
+ }
+ return 0;
+ } else { /* bridge matched, but it doesn't use transports. */
+ break;
+ }
+ }
+ } SMARTLIST_FOREACH_END(bridge);
+
+ *transport = NULL;
+ return 0;
+}
+
/** We need to ask <b>bridge</b> for its server descriptor. */
static void
launch_direct_bridge_descriptor_fetch(bridge_info_t *bridge)
{
char *address;
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
if (connection_get_by_type_addr_port_purpose(
CONN_TYPE_DIR, &bridge->addr, bridge->port,
DIR_PURPOSE_FETCH_SERVERDESC))
return; /* it's already on the way */
- 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.",
@@ -4674,6 +5004,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 */
@@ -4700,7 +5032,7 @@ retry_bridge_descriptor_fetch_directly(const char *digest)
* descriptor, fetch a new copy of its descriptor -- either directly
* from the bridge or via a bridge authority. */
void
-fetch_bridge_descriptors(or_options_t *options, time_t now)
+fetch_bridge_descriptors(const or_options_t *options, time_t now)
{
int num_bridge_auths = get_n_authorities(BRIDGE_DIRINFO);
int ask_bridge_directly;
@@ -4709,6 +5041,11 @@ fetch_bridge_descriptors(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,
@@ -4840,7 +5177,7 @@ learned_bridge_descriptor(routerinfo_t *ri, int from_cache)
node = node_get_mutable_by_id(ri->cache_info.identity_digest);
tor_assert(node);
rewrite_node_address_for_bridge(bridge, node);
- add_an_entry_guard(node, 1);
+ add_an_entry_guard(node, 1, 1);
log_notice(LD_DIR, "new bridge descriptor '%s' (%s)", ri->nickname,
from_cache ? "cached" : "fresh");
@@ -4894,7 +5231,7 @@ any_pending_bridge_descriptor_fetches(void)
* down. Else return 0. If <b>act</b> is 1, then mark the down guards
* up; else just observe and report. */
static int
-entries_retry_helper(or_options_t *options, int act)
+entries_retry_helper(const or_options_t *options, int act)
{
const node_t *node;
int any_known = 0;
@@ -4933,7 +5270,7 @@ entries_retry_helper(or_options_t *options, int act)
/** Do we know any descriptors for our bridges / entrynodes, and are
* all the ones we have descriptors for down? */
int
-entries_known_but_down(or_options_t *options)
+entries_known_but_down(const or_options_t *options)
{
tor_assert(entry_list_is_constrained(options));
return entries_retry_helper(options, 0);
@@ -4941,7 +5278,7 @@ entries_known_but_down(or_options_t *options)
/** Mark all down known bridges / entrynodes up. */
void
-entries_retry_all(or_options_t *options)
+entries_retry_all(const or_options_t *options)
{
tor_assert(entry_list_is_constrained(options));
entries_retry_helper(options, 1);
@@ -4959,7 +5296,10 @@ entry_guards_free_all(void)
entry_guards = NULL;
}
clear_bridge_list();
+ clear_transport_list();
smartlist_free(bridge_list);
+ smartlist_free(transport_list);
bridge_list = NULL;
+ transport_list = NULL;
}
diff --git a/src/or/circuitbuild.h b/src/or/circuitbuild.h
index 87adb9a1e..1052db615 100644
--- a/src/or/circuitbuild.h
+++ b/src/or/circuitbuild.h
@@ -12,6 +12,21 @@
#ifndef _TOR_CIRCUITBUILD_H
#define _TOR_CIRCUITBUILD_H
+/** Represents a pluggable transport proxy used by a bridge. */
+typedef struct {
+ /** SOCKS version: One of PROXY_SOCKS4, PROXY_SOCKS5. */
+ int socks_version;
+ /** Name of pluggable transport protocol */
+ char *name;
+ /** Address of proxy */
+ tor_addr_t addr;
+ /** Port of proxy */
+ uint16_t port;
+ /** Boolean: We are re-parsing our transport list, and we are going to remove
+ * this one if we don't find it in the list of configured transports. */
+ unsigned marked_for_removal : 1;
+} transport_t;
+
char *circuit_list_path(origin_circuit_t *circ, int verbose);
char *circuit_list_path_for_controller(origin_circuit_t *circ);
void circuit_log_path(int severity, unsigned int domain,
@@ -51,11 +66,11 @@ void extend_info_free(extend_info_t *info);
const node_t *build_state_get_exit_node(cpath_build_state_t *state);
const char *build_state_get_exit_nickname(cpath_build_state_t *state);
-void entry_guards_compute_status(or_options_t *options, time_t now);
+void entry_guards_compute_status(const or_options_t *options, time_t now);
int entry_guard_register_connect_status(const char *digest, int succeeded,
int mark_relay_status, time_t now);
void entry_nodes_should_be_added(void);
-int entry_list_is_constrained(or_options_t *options);
+int entry_list_is_constrained(const or_options_t *options);
const node_t *choose_random_entry(cpath_build_state_t *state);
int entry_guards_parse_state(or_state_t *state, int set, char **msg);
void entry_guards_update_state(or_state_t *state);
@@ -65,18 +80,23 @@ 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,
const char *digest);
void bridge_add_from_config(const tor_addr_t *addr, uint16_t port,
- const char *digest);
+ const char *digest,
+ const char *transport_name);
void retry_bridge_descriptor_fetch_directly(const char *digest);
-void fetch_bridge_descriptors(or_options_t *options, time_t now);
+void fetch_bridge_descriptors(const or_options_t *options, time_t now);
void learned_bridge_descriptor(routerinfo_t *ri, int from_cache);
int any_bridge_descriptors_known(void);
int any_pending_bridge_descriptor_fetches(void);
-int entries_known_but_down(or_options_t *options);
-void entries_retry_all(or_options_t *options);
+int entries_known_but_down(const or_options_t *options);
+void entries_retry_all(const or_options_t *options);
void entry_guards_free_all(void);
@@ -125,5 +145,19 @@ void circuit_build_times_network_circ_success(circuit_build_times_t *cbt);
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);
+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 7c5fd2570..25b80f11f 100644
--- a/src/or/circuitlist.c
+++ b/src/or/circuitlist.c
@@ -272,8 +272,10 @@ circuit_count_pending_on_or_conn(or_connection_t *or_conn)
circuit_get_all_pending_on_or_conn(sl, or_conn);
cnt = smartlist_len(sl);
smartlist_free(sl);
- log_debug(LD_CIRC,"or_conn to %s, %d pending circs",
- or_conn->nickname ? or_conn->nickname : "NULL", cnt);
+ log_debug(LD_CIRC,"or_conn to %s at %s, %d pending circs",
+ or_conn->nickname ? or_conn->nickname : "NULL",
+ or_conn->_base.address,
+ cnt);
return cnt;
}
@@ -548,6 +550,16 @@ circuit_free(circuit_t *circ)
crypto_free_pk_env(ocirc->intro_key);
rend_data_free(ocirc->rend_data);
+
+ tor_free(ocirc->dest_address);
+ if (ocirc->socks_username) {
+ memset(ocirc->socks_username, 0x12, ocirc->socks_username_len);
+ tor_free(ocirc->socks_username);
+ }
+ if (ocirc->socks_password) {
+ memset(ocirc->socks_password, 0x06, ocirc->socks_password_len);
+ tor_free(ocirc->socks_password);
+ }
} else {
or_circuit_t *ocirc = TO_OR_CIRCUIT(circ);
/* Remember cell statistics for this circuit before deallocating. */
@@ -771,8 +783,8 @@ circuit_get_by_circid_orconn_impl(circid_t circ_id, or_connection_t *conn)
return found->circuit;
return NULL;
-
/* The rest of this checks for bugs. Disabled by default. */
+ /* We comment it out because coverity complains otherwise.
{
circuit_t *circ;
for (circ=global_circuitlist;circ;circ = circ->next) {
@@ -791,7 +803,7 @@ circuit_get_by_circid_orconn_impl(circid_t circ_id, or_connection_t *conn)
}
}
return NULL;
- }
+ } */
}
/** Return a circ such that:
@@ -862,7 +874,7 @@ circuit_unlink_all_from_or_conn(or_connection_t *conn, int reason)
}
/** Return a circ such that:
- * - circ-\>rend_data-\>query is equal to <b>rend_query</b>, and
+ * - circ-\>rend_data-\>onion_address is equal to <b>rend_query</b>, and
* - circ-\>purpose is equal to <b>purpose</b>.
*
* Return NULL if no such circuit exists.
@@ -977,7 +989,7 @@ circuit_find_to_cannibalize(uint8_t purpose, extend_info_t *info,
int need_uptime = (flags & CIRCLAUNCH_NEED_UPTIME) != 0;
int need_capacity = (flags & CIRCLAUNCH_NEED_CAPACITY) != 0;
int internal = (flags & CIRCLAUNCH_IS_INTERNAL) != 0;
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
/* Make sure we're not trying to create a onehop circ by
* cannibalization. */
@@ -999,7 +1011,8 @@ circuit_find_to_cannibalize(uint8_t purpose, extend_info_t *info,
(!need_capacity || circ->build_state->need_capacity) &&
(internal == circ->build_state->is_internal) &&
circ->remaining_relay_early_cells &&
- !circ->build_state->onehop_tunnel) {
+ !circ->build_state->onehop_tunnel &&
+ !circ->isolation_values_set) {
if (info) {
/* need to make sure we don't duplicate hops */
crypt_path_t *hop = circ->cpath;
@@ -1096,7 +1109,7 @@ void
circuit_expire_all_dirty_circs(void)
{
circuit_t *circ;
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
for (circ=global_circuitlist; circ; circ = circ->next) {
if (CIRCUIT_IS_ORIGIN(circ) &&
@@ -1115,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
@@ -1186,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 f176f346f..23efe0534 100644
--- a/src/or/circuituse.c
+++ b/src/or/circuituse.c
@@ -18,6 +18,7 @@
#include "connection_edge.h"
#include "control.h"
#include "nodelist.h"
+#include "networkstatus.h"
#include "policies.h"
#include "rendclient.h"
#include "rendcommon.h"
@@ -39,19 +40,19 @@ static void circuit_increment_failure_count(void);
* Else return 0.
*/
static int
-circuit_is_acceptable(circuit_t *circ, edge_connection_t *conn,
+circuit_is_acceptable(const origin_circuit_t *origin_circ,
+ const entry_connection_t *conn,
int must_be_open, uint8_t purpose,
int need_uptime, int need_internal,
time_t now)
{
+ const circuit_t *circ = TO_CIRCUIT(origin_circ);
const node_t *exitnode;
cpath_build_state_t *build_state;
tor_assert(circ);
tor_assert(conn);
tor_assert(conn->socks_request);
- if (!CIRCUIT_IS_ORIGIN(circ))
- return 0; /* this circ doesn't start at us */
if (must_be_open && (circ->state != CIRCUIT_STATE_OPEN || !circ->n_conn))
return 0; /* ignore non-open circs */
if (circ->marked_for_close)
@@ -74,7 +75,8 @@ circuit_is_acceptable(circuit_t *circ, edge_connection_t *conn,
return 0;
}
- if (purpose == CIRCUIT_PURPOSE_C_GENERAL)
+ if (purpose == CIRCUIT_PURPOSE_C_GENERAL ||
+ purpose == CIRCUIT_PURPOSE_C_REND_JOINED)
if (circ->timestamp_dirty &&
circ->timestamp_dirty+get_options()->MaxCircuitDirtiness <= now)
return 0;
@@ -85,7 +87,7 @@ circuit_is_acceptable(circuit_t *circ, edge_connection_t *conn,
* circuit, it's the magical extra bob hop. so just check the nickname
* of the one we meant to finish at.
*/
- build_state = TO_ORIGIN_CIRCUIT(circ)->build_state;
+ build_state = origin_circ->build_state;
exitnode = build_state_get_exit_node(build_state);
if (need_uptime && !build_state->need_uptime)
@@ -115,7 +117,7 @@ circuit_is_acceptable(circuit_t *circ, edge_connection_t *conn,
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)
@@ -133,25 +135,38 @@ circuit_is_acceptable(circuit_t *circ, edge_connection_t *conn,
return 0;
}
} else { /* not general */
- origin_circuit_t *ocirc = TO_ORIGIN_CIRCUIT(circ);
- if ((conn->rend_data && !ocirc->rend_data) ||
- (!conn->rend_data && ocirc->rend_data) ||
- (conn->rend_data && ocirc->rend_data &&
- rend_cmp_service_ids(conn->rend_data->onion_address,
- ocirc->rend_data->onion_address))) {
+ const edge_connection_t *edge_conn = ENTRY_TO_EDGE_CONN(conn);
+ if ((edge_conn->rend_data && !origin_circ->rend_data) ||
+ (!edge_conn->rend_data && origin_circ->rend_data) ||
+ (edge_conn->rend_data && origin_circ->rend_data &&
+ rend_cmp_service_ids(edge_conn->rend_data->onion_address,
+ origin_circ->rend_data->onion_address))) {
/* this circ is not for this conn */
return 0;
}
}
+
+ if (!connection_edge_compatible_with_circuit(conn, origin_circ)) {
+ /* conn needs to be isolated from other conns that have already used
+ * origin_circ */
+ return 0;
+ }
+
return 1;
}
/** Return 1 if circuit <b>a</b> is better than circuit <b>b</b> for
- * <b>purpose</b>, and return 0 otherwise. Used by circuit_get_best.
+ * <b>conn</b>, and return 0 otherwise. Used by circuit_get_best.
*/
static int
-circuit_is_better(circuit_t *a, circuit_t *b, uint8_t purpose)
+circuit_is_better(const origin_circuit_t *oa, const origin_circuit_t *ob,
+ const entry_connection_t *conn)
{
+ const circuit_t *a = TO_CIRCUIT(oa);
+ const circuit_t *b = TO_CIRCUIT(ob);
+ const uint8_t purpose = ENTRY_TO_CONN(conn)->purpose;
+ int a_bits, b_bits;
+
switch (purpose) {
case CIRCUIT_PURPOSE_C_GENERAL:
/* if it's used but less dirty it's best;
@@ -165,8 +180,7 @@ circuit_is_better(circuit_t *a, circuit_t *b, uint8_t purpose)
if (a->timestamp_dirty ||
timercmp(&a->timestamp_created, &b->timestamp_created, >))
return 1;
- if (CIRCUIT_IS_ORIGIN(b) &&
- TO_ORIGIN_CIRCUIT(b)->build_state->is_internal)
+ if (ob->build_state->is_internal)
/* XXX023 what the heck is this internal thing doing here. I
* think we can get rid of it. circuit_is_acceptable() already
* makes sure that is_internal is exactly what we need it to
@@ -185,6 +199,29 @@ circuit_is_better(circuit_t *a, circuit_t *b, uint8_t purpose)
return 1;
break;
}
+
+ /* XXXX023 Maybe this check should get a higher priority to avoid
+ * using up circuits too rapidly. */
+
+ a_bits = connection_edge_update_circuit_isolation(conn,
+ (origin_circuit_t*)oa, 1);
+ b_bits = connection_edge_update_circuit_isolation(conn,
+ (origin_circuit_t*)ob, 1);
+ /* if x_bits < 0, then we have not used x for anything; better not to dirty
+ * a connection if we can help it. */
+ if (a_bits < 0) {
+ return 0;
+ } else if (b_bits < 0) {
+ return 1;
+ }
+ a_bits &= ~ oa->isolation_flags_mixed;
+ a_bits &= ~ ob->isolation_flags_mixed;
+ if (n_bits_set_u8(a_bits) < n_bits_set_u8(b_bits)) {
+ /* The fewer new restrictions we need to make on a circuit for stream
+ * isolation, the better. */
+ return 1;
+ }
+
return 0;
}
@@ -205,10 +242,12 @@ circuit_is_better(circuit_t *a, circuit_t *b, uint8_t purpose)
* closest introduce-purposed circuit that you can find.
*/
static origin_circuit_t *
-circuit_get_best(edge_connection_t *conn, int must_be_open, uint8_t purpose,
+circuit_get_best(const entry_connection_t *conn,
+ int must_be_open, uint8_t purpose,
int need_uptime, int need_internal)
{
- circuit_t *circ, *best=NULL;
+ circuit_t *circ;
+ origin_circuit_t *best=NULL;
struct timeval now;
int intro_going_on_but_too_old = 0;
@@ -221,7 +260,11 @@ circuit_get_best(edge_connection_t *conn, int must_be_open, uint8_t purpose,
tor_gettimeofday(&now);
for (circ=global_circuitlist;circ;circ = circ->next) {
- if (!circuit_is_acceptable(circ,conn,must_be_open,purpose,
+ origin_circuit_t *origin_circ;
+ if (!CIRCUIT_IS_ORIGIN(circ))
+ continue;
+ origin_circ = TO_ORIGIN_CIRCUIT(circ);
+ if (!circuit_is_acceptable(origin_circ,conn,must_be_open,purpose,
need_uptime,need_internal,now.tv_sec))
continue;
@@ -235,8 +278,8 @@ circuit_get_best(edge_connection_t *conn, int must_be_open, uint8_t purpose,
/* now this is an acceptable circ to hand back. but that doesn't
* mean it's the *best* circ to hand back. try to decide.
*/
- if (!best || circuit_is_better(circ,best,purpose))
- best = circ;
+ if (!best || circuit_is_better(origin_circ,best,conn))
+ best = origin_circ;
}
if (!best && intro_going_on_but_too_old)
@@ -244,7 +287,28 @@ circuit_get_best(edge_connection_t *conn, int must_be_open, uint8_t purpose,
"right now, but it has already taken quite a while. Starting "
"one in parallel.");
- return best ? TO_ORIGIN_CIRCUIT(best) : NULL;
+ return best;
+}
+
+/** Return the number of not-yet-open general-purpose origin circuits. */
+static int
+count_pending_general_client_circuits(void)
+{
+ const circuit_t *circ;
+
+ int count = 0;
+
+ for (circ = global_circuitlist; circ; circ = circ->next) {
+ if (circ->marked_for_close ||
+ circ->state == CIRCUIT_STATE_OPEN ||
+ circ->purpose != CIRCUIT_PURPOSE_C_GENERAL ||
+ !CIRCUIT_IS_ORIGIN(circ))
+ continue;
+
+ ++count;
+ }
+
+ return count;
}
#if 0
@@ -289,7 +353,6 @@ circuit_expire_building(void)
struct timeval general_cutoff, begindir_cutoff, fourhop_cutoff,
cannibalize_cutoff, close_cutoff, extremely_old_cutoff;
struct timeval now;
- struct timeval introcirc_cutoff;
cpath_build_state_t *build_state;
tor_gettimeofday(&now);
@@ -308,8 +371,6 @@ circuit_expire_building(void)
SET_CUTOFF(close_cutoff, circ_times.close_ms);
SET_CUTOFF(extremely_old_cutoff, circ_times.close_ms*2 + 1000);
- introcirc_cutoff = begindir_cutoff;
-
while (next_circ) {
struct timeval cutoff;
victim = next_circ;
@@ -326,8 +387,6 @@ circuit_expire_building(void)
cutoff = fourhop_cutoff;
else if (TO_ORIGIN_CIRCUIT(victim)->has_opened)
cutoff = cannibalize_cutoff;
- else if (victim->purpose == CIRCUIT_PURPOSE_C_INTRODUCING)
- cutoff = introcirc_cutoff;
else if (victim->purpose == CIRCUIT_PURPOSE_C_MEASURE_TIMEOUT)
cutoff = close_cutoff;
else
@@ -338,12 +397,6 @@ circuit_expire_building(void)
#if 0
/* some debug logs, to help track bugs */
- if (victim->purpose == CIRCUIT_PURPOSE_C_INTRODUCING &&
- victim->timestamp_created.tv_sec <= introcirc_cutoff &&
- victim->timestamp_created.tv_sec > general_cutoff)
- log_info(LD_REND|LD_CIRC, "Timing out introduction circuit which we "
- "would not have done if it had been a general circuit.");
-
if (victim->purpose >= CIRCUIT_PURPOSE_C_INTRODUCING &&
victim->purpose <= CIRCUIT_PURPOSE_C_REND_READY_INTRO_ACKED) {
if (!victim->timestamp_dirty)
@@ -492,7 +545,7 @@ circuit_remove_handled_ports(smartlist_t *needed_ports)
* Else return 0.
*/
int
-circuit_stream_is_being_handled(edge_connection_t *conn,
+circuit_stream_is_being_handled(entry_connection_t *conn,
uint16_t port, int min)
{
circuit_t *circ;
@@ -519,7 +572,7 @@ circuit_stream_is_being_handled(edge_connection_t *conn,
ok = connection_ap_can_use_exit(conn, exitnode);
} else {
addr_policy_result_t r;
- r = compare_addr_to_node_policy(0, port, exitnode);
+ r = compare_tor_addr_to_node_policy(NULL, port, exitnode);
ok = r != ADDR_POLICY_REJECTED && r != ADDR_POLICY_PROBABLY_REJECTED;
}
if (ok) {
@@ -646,7 +699,7 @@ void
circuit_build_needed_circs(time_t now)
{
static time_t time_to_new_circuit = 0;
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
/* launch a new circ for any pending streams that need one */
connection_ap_attach_pending();
@@ -686,7 +739,11 @@ circuit_detach_stream(circuit_t *circ, edge_connection_t *conn)
tor_assert(circ);
tor_assert(conn);
- conn->cpath_layer = NULL; /* make sure we don't keep a stale pointer */
+ if (conn->_base.type == CONN_TYPE_AP) {
+ entry_connection_t *entry_conn = EDGE_TO_ENTRY_CONN(conn);
+ entry_conn->may_use_optimistic_data = 0;
+ }
+ conn->cpath_layer = NULL; /* don't keep a stale pointer */
conn->on_circuit = NULL;
if (CIRCUIT_IS_ORIGIN(circ)) {
@@ -947,6 +1004,7 @@ circuit_testing_failed(origin_circuit_t *circ, int at_last_hop)
void
circuit_has_opened(origin_circuit_t *circ)
{
+ int can_try_clearing_isolation = 0, tried_clearing_isolation = 0;
control_event_circuit_status(circ, CIRC_EVENT_BUILT, 0);
/* Remember that this circuit has finished building. Now if we start
@@ -954,9 +1012,12 @@ circuit_has_opened(origin_circuit_t *circ)
* to consider its build time. */
circ->has_opened = 1;
+ again:
+
switch (TO_CIRCUIT(circ)->purpose) {
case CIRCUIT_PURPOSE_C_ESTABLISH_REND:
rend_client_rendcirc_has_opened(circ);
+ can_try_clearing_isolation = 1;
connection_ap_attach_pending();
break;
case CIRCUIT_PURPOSE_C_INTRODUCING:
@@ -965,6 +1026,7 @@ circuit_has_opened(origin_circuit_t *circ)
case CIRCUIT_PURPOSE_C_GENERAL:
/* Tell any AP connections that have been waiting for a new
* circuit that one is ready. */
+ can_try_clearing_isolation = 1;
connection_ap_attach_pending();
break;
case CIRCUIT_PURPOSE_S_ESTABLISH_INTRO:
@@ -982,6 +1044,24 @@ circuit_has_opened(origin_circuit_t *circ)
* This won't happen in normal operation, but might happen if the
* controller did it. Just let it slide. */
}
+
+ if (/* The circuit may have become non-open if it was cannibalized.*/
+ circ->_base.state == CIRCUIT_STATE_OPEN &&
+ /* Only if the purpose is clearable, and only if we haven't tried
+ * to clear isolation yet, do we try. */
+ can_try_clearing_isolation && !tried_clearing_isolation &&
+ /* If !isolation_values_set, there is nothing to clear. */
+ circ->isolation_values_set &&
+ /* It's not legal to clear a circuit's isolation info if it's ever had
+ * streams attached */
+ !circ->isolation_any_streams_attached) {
+ /* If we have any isolation information set on this circuit, and
+ * we didn't manage to attach any streams to it, then we can
+ * and should clear it and try again. */
+ circuit_clear_isolation(circ);
+ tried_clearing_isolation = 1;
+ goto again;
+ }
}
/** Called whenever a circuit could not be successfully built.
@@ -1210,7 +1290,7 @@ circuit_reset_failure_count(int timeout)
* Write the found or in-progress or launched circ into *circp.
*/
static int
-circuit_get_open_circ_or_launch(edge_connection_t *conn,
+circuit_get_open_circ_or_launch(entry_connection_t *conn,
uint8_t desired_circuit_purpose,
origin_circuit_t **circp)
{
@@ -1218,15 +1298,15 @@ circuit_get_open_circ_or_launch(edge_connection_t *conn,
int check_exit_policy;
int need_uptime, need_internal;
int want_onehop;
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
tor_assert(conn);
tor_assert(circp);
- tor_assert(conn->_base.state == AP_CONN_STATE_CIRCUIT_WAIT);
+ tor_assert(ENTRY_TO_CONN(conn)->state == AP_CONN_STATE_CIRCUIT_WAIT);
check_exit_policy =
conn->socks_request->command == SOCKS_COMMAND_CONNECT &&
!conn->use_begindir &&
- !connection_edge_is_rendezvous_stream(conn);
+ !connection_edge_is_rendezvous_stream(ENTRY_TO_EDGE_CONN(conn));
want_onehop = conn->want_onehop;
need_uptime = !conn->want_onehop && !conn->use_begindir &&
@@ -1272,10 +1352,12 @@ circuit_get_open_circ_or_launch(edge_connection_t *conn,
if (check_exit_policy) {
if (!conn->chosen_exit_name) {
struct in_addr in;
- uint32_t addr = 0;
- if (tor_inet_aton(conn->socks_request->address, &in))
- addr = ntohl(in.s_addr);
- if (router_exit_policy_all_nodes_reject(addr,
+ tor_addr_t addr, *addrp=NULL;
+ if (tor_inet_aton(conn->socks_request->address, &in)) {
+ tor_addr_from_in(&addr, &in);
+ addrp = &addr;
+ }
+ if (router_exit_policy_all_nodes_reject(addrp,
conn->socks_request->port,
need_uptime)) {
log_notice(LD_APP,
@@ -1315,22 +1397,37 @@ circuit_get_open_circ_or_launch(edge_connection_t *conn,
if (!circ) {
extend_info_t *extend_info=NULL;
uint8_t new_circ_purpose;
+ const int n_pending = count_pending_general_client_circuits();
+
+ if (n_pending >= options->MaxClientCircuitsPending) {
+ static ratelim_t delay_limit = RATELIM_INIT(10*60);
+ char *m;
+ if ((m = rate_limit_log(&delay_limit, approx_time()))) {
+ log_notice(LD_APP, "We'd like to launch a circuit to handle a "
+ "connection, but we already have %d general-purpose client "
+ "circuits pending. Waiting until some finish.",
+ n_pending);
+ tor_free(m);
+ }
+ return 0;
+ }
if (desired_circuit_purpose == CIRCUIT_PURPOSE_C_INTRODUCE_ACK_WAIT) {
/* need to pick an intro point */
- tor_assert(conn->rend_data);
- extend_info = rend_client_get_random_intro(conn->rend_data);
+ rend_data_t *rend_data = ENTRY_TO_EDGE_CONN(conn)->rend_data;
+ tor_assert(rend_data);
+ extend_info = rend_client_get_random_intro(rend_data);
if (!extend_info) {
log_info(LD_REND,
"No intro points for '%s': re-fetching service descriptor.",
- safe_str_client(conn->rend_data->onion_address));
- rend_client_refetch_v2_renddesc(conn->rend_data);
- conn->_base.state = AP_CONN_STATE_RENDDESC_WAIT;
+ safe_str_client(rend_data->onion_address));
+ rend_client_refetch_v2_renddesc(rend_data);
+ ENTRY_TO_CONN(conn)->state = AP_CONN_STATE_RENDDESC_WAIT;
return 0;
}
- log_info(LD_REND,"Chose '%s' as intro point for '%s'.",
- extend_info->nickname,
- safe_str_client(conn->rend_data->onion_address));
+ log_info(LD_REND,"Chose %s as intro point for '%s'.",
+ extend_info_describe(extend_info),
+ safe_str_client(rend_data->onion_address));
}
/* If we have specified a particular exit node for our
@@ -1357,7 +1454,7 @@ circuit_get_open_circ_or_launch(edge_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;
@@ -1419,18 +1516,26 @@ circuit_get_open_circ_or_launch(edge_connection_t *conn,
rep_hist_note_used_internal(time(NULL), need_uptime, 1);
if (circ) {
/* write the service_id into circ */
- circ->rend_data = rend_data_dup(conn->rend_data);
+ circ->rend_data = rend_data_dup(ENTRY_TO_EDGE_CONN(conn)->rend_data);
if (circ->_base.purpose == CIRCUIT_PURPOSE_C_ESTABLISH_REND &&
circ->_base.state == CIRCUIT_STATE_OPEN)
rend_client_rendcirc_has_opened(circ);
}
}
- }
- if (!circ)
+ } /* endif (!circ) */
+ if (circ) {
+ /* Mark the circuit with the isolation fields for this connection.
+ * When the circuit arrives, we'll clear these flags: this is
+ * just some internal bookkeeping to make sure that we have
+ * launched enough circuits.
+ */
+ connection_edge_update_circuit_isolation(conn, circ, 0);
+ } else {
log_info(LD_APP,
"No safe circuit (purpose %d) ready for edge "
"connection; delaying.",
desired_circuit_purpose);
+ }
*circp = circ;
return 0;
}
@@ -1449,39 +1554,86 @@ cpath_is_on_circuit(origin_circuit_t *circ, crypt_path_t *crypt_path)
return 0;
}
+/** Return true iff client-side optimistic data is supported. */
+static int
+optimistic_data_enabled(void)
+{
+ const or_options_t *options = get_options();
+ if (options->OptimisticData < 0) {
+ /* XXX023 consider having auto default to 1 rather than 0 before
+ * the 0.2.3 branch goes stable. See bug 3617. -RD */
+ const int32_t enabled =
+ networkstatus_get_param(NULL, "UseOptimisticData", 0, 0, 1);
+ return (int)enabled;
+ }
+ return options->OptimisticData;
+}
+
/** Attach the AP stream <b>apconn</b> to circ's linked list of
* p_streams. Also set apconn's cpath_layer to <b>cpath</b>, or to the last
* hop in circ's cpath if <b>cpath</b> is NULL.
*/
static void
-link_apconn_to_circ(edge_connection_t *apconn, origin_circuit_t *circ,
+link_apconn_to_circ(entry_connection_t *apconn, origin_circuit_t *circ,
crypt_path_t *cpath)
{
+ const node_t *exitnode;
+
/* add it into the linked list of streams on this circuit */
log_debug(LD_APP|LD_CIRC, "attaching new conn to circ. n_circ_id %d.",
circ->_base.n_circ_id);
/* reset it, so we can measure circ timeouts */
- apconn->_base.timestamp_lastread = time(NULL);
- apconn->next_stream = circ->p_streams;
- apconn->on_circuit = TO_CIRCUIT(circ);
+ ENTRY_TO_CONN(apconn)->timestamp_lastread = time(NULL);
+ ENTRY_TO_EDGE_CONN(apconn)->next_stream = circ->p_streams;
+ ENTRY_TO_EDGE_CONN(apconn)->on_circuit = TO_CIRCUIT(circ);
/* assert_connection_ok(conn, time(NULL)); */
- circ->p_streams = apconn;
+ 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));
- apconn->cpath_layer = cpath;
- } else { /* use the last hop in the circuit */
+ } else {
+ /* use the last hop in the circuit */
tor_assert(circ->cpath);
tor_assert(circ->cpath->prev);
tor_assert(circ->cpath->prev->state == CPATH_STATE_OPEN);
- apconn->cpath_layer = circ->cpath->prev;
+ cpath = circ->cpath->prev;
+ }
+ ENTRY_TO_EDGE_CONN(apconn)->cpath_layer = cpath;
+
+ circ->isolation_any_streams_attached = 1;
+ connection_edge_update_circuit_isolation(apconn, circ, 0);
+
+ /* See if we can use optimistic data on this circuit */
+ if (cpath->extend_info &&
+ (exitnode = node_get_by_id(cpath->extend_info->identity_digest)) &&
+ exitnode->rs) {
+ /* Okay; we know what exit node this is. */
+ if (optimistic_data_enabled() &&
+ circ->_base.purpose == CIRCUIT_PURPOSE_C_GENERAL &&
+ exitnode->rs->version_supports_optimistic_data)
+ apconn->may_use_optimistic_data = 1;
+ else
+ apconn->may_use_optimistic_data = 0;
+ log_info(LD_APP, "Looks like completed circuit to %s %s allow "
+ "optimistic data for connection to %s",
+ safe_str_client(node_describe(exitnode)),
+ apconn->may_use_optimistic_data ? "does" : "doesn't",
+ safe_str_client(apconn->socks_request->address));
}
}
/** Return true iff <b>address</b> is matched by one of the entries in
* TrackHostExits. */
int
-hostname_in_track_host_exits(or_options_t *options, const char *address)
+hostname_in_track_host_exits(const or_options_t *options, const char *address)
{
if (!options->TrackHostExits)
return 0;
@@ -1503,9 +1655,10 @@ hostname_in_track_host_exits(or_options_t *options, const char *address)
* <b>conn</b>'s destination.
*/
static void
-consider_recording_trackhost(edge_connection_t *conn, origin_circuit_t *circ)
+consider_recording_trackhost(const entry_connection_t *conn,
+ const origin_circuit_t *circ)
{
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
char *new_address = NULL;
char fp[HEX_DIGEST_LEN+1];
@@ -1540,18 +1693,19 @@ consider_recording_trackhost(edge_connection_t *conn, origin_circuit_t *circ)
* indicated by <b>cpath</b>, or from the last hop in circ's cpath if
* <b>cpath</b> is NULL. */
int
-connection_ap_handshake_attach_chosen_circuit(edge_connection_t *conn,
+connection_ap_handshake_attach_chosen_circuit(entry_connection_t *conn,
origin_circuit_t *circ,
crypt_path_t *cpath)
{
+ connection_t *base_conn = ENTRY_TO_CONN(conn);
tor_assert(conn);
- tor_assert(conn->_base.state == AP_CONN_STATE_CIRCUIT_WAIT ||
- conn->_base.state == AP_CONN_STATE_CONTROLLER_WAIT);
+ tor_assert(base_conn->state == AP_CONN_STATE_CIRCUIT_WAIT ||
+ base_conn->state == AP_CONN_STATE_CONTROLLER_WAIT);
tor_assert(conn->socks_request);
tor_assert(circ);
tor_assert(circ->_base.state == CIRCUIT_STATE_OPEN);
- conn->_base.state = AP_CONN_STATE_CIRCUIT_WAIT;
+ base_conn->state = AP_CONN_STATE_CIRCUIT_WAIT;
if (!circ->_base.timestamp_dirty)
circ->_base.timestamp_dirty = time(NULL);
@@ -1581,21 +1735,22 @@ connection_ap_handshake_attach_chosen_circuit(edge_connection_t *conn,
/* XXXX this function should mark for close whenever it returns -1;
* its callers shouldn't have to worry about that. */
int
-connection_ap_handshake_attach_circuit(edge_connection_t *conn)
+connection_ap_handshake_attach_circuit(entry_connection_t *conn)
{
+ connection_t *base_conn = ENTRY_TO_CONN(conn);
int retval;
int conn_age;
int want_onehop;
tor_assert(conn);
- tor_assert(conn->_base.state == AP_CONN_STATE_CIRCUIT_WAIT);
+ tor_assert(base_conn->state == AP_CONN_STATE_CIRCUIT_WAIT);
tor_assert(conn->socks_request);
want_onehop = conn->want_onehop;
- conn_age = (int)(time(NULL) - conn->_base.timestamp_created);
+ conn_age = (int)(time(NULL) - base_conn->timestamp_created);
if (conn_age >= get_options()->SocksTimeout) {
- int severity = (tor_addr_is_null(&conn->_base.addr) && !conn->_base.port) ?
+ int severity = (tor_addr_is_null(&base_conn->addr) && !base_conn->port) ?
LOG_INFO : LOG_NOTICE;
log_fn(severity, LD_APP,
"Tried for %d seconds to get a connection to %s:%d. Giving up.",
@@ -1604,7 +1759,8 @@ connection_ap_handshake_attach_circuit(edge_connection_t *conn)
return -1;
}
- if (!connection_edge_is_rendezvous_stream(conn)) { /* we're a general conn */
+ if (!connection_edge_is_rendezvous_stream(ENTRY_TO_EDGE_CONN(conn))) {
+ /* we're a general conn */
origin_circuit_t *circ=NULL;
if (conn->chosen_exit_name) {
@@ -1659,7 +1815,7 @@ connection_ap_handshake_attach_circuit(edge_connection_t *conn)
} else { /* we're a rendezvous conn */
origin_circuit_t *rendcirc=NULL, *introcirc=NULL;
- tor_assert(!conn->cpath_layer);
+ tor_assert(!ENTRY_TO_EDGE_CONN(conn)->cpath_layer);
/* start by finding a rendezvous circuit for us */
@@ -1715,8 +1871,9 @@ connection_ap_handshake_attach_circuit(edge_connection_t *conn)
!c->marked_for_close && CIRCUIT_IS_ORIGIN(c)) {
origin_circuit_t *oc = TO_ORIGIN_CIRCUIT(c);
if (oc->rend_data &&
- !rend_cmp_service_ids(conn->rend_data->onion_address,
- oc->rend_data->onion_address)) {
+ !rend_cmp_service_ids(
+ ENTRY_TO_EDGE_CONN(conn)->rend_data->onion_address,
+ oc->rend_data->onion_address)) {
log_info(LD_REND|LD_CIRC, "Closing introduction circuit that we "
"built in parallel.");
circuit_mark_for_close(c, END_CIRC_REASON_TIMEOUT);
diff --git a/src/or/circuituse.h b/src/or/circuituse.h
index 8e10212f1..9867fd820 100644
--- a/src/or/circuituse.h
+++ b/src/or/circuituse.h
@@ -14,7 +14,7 @@
void circuit_expire_building(void);
void circuit_remove_handled_ports(smartlist_t *needed_ports);
-int circuit_stream_is_being_handled(edge_connection_t *conn, uint16_t port,
+int circuit_stream_is_being_handled(entry_connection_t *conn, uint16_t port,
int min);
#if 0
int circuit_conforms_to_options(const origin_circuit_t *circ,
@@ -45,12 +45,13 @@ origin_circuit_t *circuit_launch_by_extend_info(uint8_t purpose,
int flags);
origin_circuit_t *circuit_launch(uint8_t purpose, int flags);
void circuit_reset_failure_count(int timeout);
-int connection_ap_handshake_attach_chosen_circuit(edge_connection_t *conn,
+int connection_ap_handshake_attach_chosen_circuit(entry_connection_t *conn,
origin_circuit_t *circ,
crypt_path_t *cpath);
-int connection_ap_handshake_attach_circuit(edge_connection_t *conn);
+int connection_ap_handshake_attach_circuit(entry_connection_t *conn);
-int hostname_in_track_host_exits(or_options_t *options, const char *address);
+int hostname_in_track_host_exits(const or_options_t *options,
+ const char *address);
#endif
diff --git a/src/or/command.c b/src/or/command.c
index 4b70deeef..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,
@@ -276,8 +368,8 @@ command_process_create_cell(cell_t *cell, or_connection_t *conn)
if (node) {
char *p = esc_for_log(node_get_platform(node));
log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
- "Details: nickname \"%s\", platform %s.",
- node_get_nickname(node), p);
+ "Details: router %s, platform %s.",
+ node_describe(node), p);
tor_free(p);
}
return;
@@ -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) {
@@ -649,14 +869,411 @@ command_process_netinfo_cell(cell_t *cell, or_connection_t *conn)
/* XXX maybe act on my_apparent_addr, if the source is sufficiently
* trustworthy. */
+ (void)my_apparent_addr;
- if (connection_or_set_state_open(conn)<0)
+ 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 5a153b01b..b8ff6e848 100644
--- a/src/or/config.c
+++ b/src/or/config.c
@@ -33,13 +33,18 @@
#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
#include "procmon.h"
+/* From main.c */
+extern int quiet_level;
+
/* Includes for the process attaching prevention */
#if defined(HAVE_SYS_PRCTL_H) && defined(__linux__)
#include <sys/prctl.h>
@@ -187,6 +192,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"),
@@ -211,8 +218,9 @@ static config_var_t _option_vars[] = {
V(CircuitStreamTimeout, INTERVAL, "0"),
V(CircuitPriorityHalflife, DOUBLE, "-100.0"), /*negative:'Use default'*/
V(ClientDNSRejectInternalAddresses, BOOL,"1"),
- V(ClientRejectInternalAddresses, BOOL, "1"),
V(ClientOnly, BOOL, "0"),
+ V(ClientRejectInternalAddresses, BOOL, "1"),
+ V(ClientTransportPlugin, LINELIST, NULL),
V(ConsensusParams, STRING, NULL),
V(ConnLimit, UINT, "1000"),
V(ConnDirectionStatistics, BOOL, "0"),
@@ -224,7 +232,7 @@ static config_var_t _option_vars[] = {
V(ControlPortFileGroupReadable,BOOL, "0"),
V(ControlPortWriteToFile, FILENAME, NULL),
V(ControlSocket, LINELIST, NULL),
- V(ControlSocketsGroupWritable, BOOL, "0"),
+ V(ControlSocketsGroupWritable, BOOL, "0"),
V(CookieAuthentication, BOOL, "0"),
V(CookieAuthFileGroupReadable, BOOL, "0"),
V(CookieAuthFile, STRING, NULL),
@@ -248,7 +256,7 @@ static config_var_t _option_vars[] = {
V(DisableAllSwap, BOOL, "0"),
V(DisableDebuggerAttachment, BOOL, "1"),
V(DisableIOCP, BOOL, "1"),
- V(DNSPort, PORT, "0"),
+ V(DNSPort, LINELIST, NULL),
V(DNSListenAddress, LINELIST, NULL),
V(DownloadExtraInfo, BOOL, "0"),
V(EnforceDistinctSubnets, BOOL, "1"),
@@ -285,6 +293,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"),
@@ -306,6 +316,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),
@@ -319,17 +330,18 @@ static config_var_t _option_vars[] = {
OBSOLETE("LogFile"),
V(LogTimeGranularity, MSEC_INTERVAL, "1 second"),
V(LongLivedPorts, CSV,
- "21,22,706,1863,5050,5190,5222,5223,6667,6697,8300"),
+ "21,22,706,1863,5050,5190,5222,5223,6523,6667,6697,8300"),
VAR("MapAddress", LINELIST, AddressMap, NULL),
V(MaxAdvertisedBandwidth, MEMUNIT, "1 GB"),
V(MaxCircuitDirtiness, INTERVAL, "10 minutes"),
+ V(MaxClientCircuitsPending, UINT, "32"),
V(MaxOnionsPending, UINT, "100"),
OBSOLETE("MonthlyAccountingStart"),
V(MyFamily, STRING, NULL),
V(NewCircuitPeriod, INTERVAL, "30 seconds"),
VAR("NamingAuthoritativeDirectory",BOOL, NamingAuthoritativeDir, "0"),
V(NATDListenAddress, LINELIST, NULL),
- V(NATDPort, PORT, "0"),
+ V(NATDPort, LINELIST, NULL),
V(Nickname, STRING, NULL),
V(WarnUnsafeSocks, BOOL, "1"),
OBSOLETE("NoPublish"),
@@ -344,6 +356,7 @@ static config_var_t _option_vars[] = {
V(PerConnBWRate, MEMUNIT, "0"),
V(PidFile, STRING, NULL),
V(TestingTorNetwork, BOOL, "0"),
+ V(OptimisticData, AUTOBOOL, "auto"),
V(PortForwarding, BOOL, "0"),
V(PortForwardingHelper, FILENAME, "tor-fw-helper"),
V(PreferTunneledDirConns, BOOL, "1"),
@@ -382,24 +395,26 @@ static config_var_t _option_vars[] = {
V(ShutdownWaitLength, INTERVAL, "30 seconds"),
V(SocksListenAddress, LINELIST, NULL),
V(SocksPolicy, LINELIST, NULL),
- V(SocksPort, PORT, "9050"),
+ V(SocksPort, LINELIST, NULL),
V(SocksTimeout, INTERVAL, "2 minutes"),
OBSOLETE("StatusFetchPeriod"),
V(StrictNodes, BOOL, "0"),
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"),
V(TransListenAddress, LINELIST, NULL),
- V(TransPort, PORT, "0"),
+ V(TransPort, LINELIST, NULL),
V(TunnelDirConns, BOOL, "1"),
V(UpdateBridgesFromAuthority, BOOL, "0"),
V(UseBridges, BOOL, "0"),
V(UseEntryGuards, BOOL, "1"),
- V(UseMicrodescriptors, AUTOBOOL, "0"),
+ 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"),
@@ -423,7 +438,8 @@ static config_var_t _option_vars[] = {
VAR("__HashedControlSessionPassword", LINELIST, HashedControlSessionPassword,
NULL),
VAR("__OwningControllerProcess",STRING,OwningControllerProcess, NULL),
- V(MinUptimeHidServDirectoryV2, INTERVAL, "24 hours"),
+ V(MinUptimeHidServDirectoryV2, INTERVAL, "25 hours"),
+ V(VoteOnHidServDirectoriesV2, BOOL, "1"),
V(_UsingTestNetworkDefaults, BOOL, "0"),
{ NULL, CONFIG_TYPE_OBSOLETE, 0, NULL }
@@ -431,7 +447,7 @@ static config_var_t _option_vars[] = {
/** Override default values with these if the user sets the TestingTorNetwork
* option. */
-static config_var_t testing_tor_network_defaults[] = {
+static const config_var_t testing_tor_network_defaults[] = {
V(ServerDNSAllowBrokenConfig, BOOL, "1"),
V(DirAllowPrivateAddresses, BOOL, "1"),
V(EnforceDistinctSubnets, BOOL, "0"),
@@ -478,6 +494,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, ""),
@@ -504,7 +523,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 }
};
@@ -555,39 +573,48 @@ static char *get_windows_conf_root(void);
#endif
static void config_line_append(config_line_t **lst,
const char *key, const char *val);
-static void option_clear(config_format_t *fmt, or_options_t *options,
- config_var_t *var);
-static void option_reset(config_format_t *fmt, or_options_t *options,
- config_var_t *var, int use_defaults);
-static void config_free(config_format_t *fmt, void *options);
+static void option_clear(const config_format_t *fmt, or_options_t *options,
+ const config_var_t *var);
+static void option_reset(const config_format_t *fmt, or_options_t *options,
+ const config_var_t *var, int use_defaults);
+static void config_free(const config_format_t *fmt, void *options);
static int config_lines_eq(config_line_t *a, config_line_t *b);
-static int option_is_same(config_format_t *fmt,
- or_options_t *o1, or_options_t *o2,
+static int option_is_same(const config_format_t *fmt,
+ const or_options_t *o1, const or_options_t *o2,
const char *name);
-static or_options_t *options_dup(config_format_t *fmt, or_options_t *old);
-static int options_validate(or_options_t *old_options, or_options_t *options,
+static or_options_t *options_dup(const config_format_t *fmt,
+ const or_options_t *old);
+static int options_validate(or_options_t *old_options,
+ or_options_t *options,
int from_setconf, char **msg);
-static int options_act_reversible(or_options_t *old_options, char **msg);
-static int options_act(or_options_t *old_options);
-static int options_transition_allowed(or_options_t *old, or_options_t *new,
+static int options_act_reversible(const or_options_t *old_options, char **msg);
+static int options_act(const or_options_t *old_options);
+static int options_transition_allowed(const or_options_t *old,
+ const or_options_t *new,
char **msg);
-static int options_transition_affects_workers(or_options_t *old_options,
- or_options_t *new_options);
-static int options_transition_affects_descriptor(or_options_t *old_options,
- or_options_t *new_options);
+static int options_transition_affects_workers(
+ const or_options_t *old_options, const or_options_t *new_options);
+static int options_transition_affects_descriptor(
+ const or_options_t *old_options, const or_options_t *new_options);
static int check_nickname_list(const char *lst, const char *name, char **msg);
-static void config_register_addressmaps(or_options_t *options);
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,
+ char **msg_out, int *n_ports_out);
static int validate_data_directory(or_options_t *options);
-static int write_configuration_file(const char *fname, or_options_t *options);
-static config_line_t *get_assigned_option(config_format_t *fmt,
- void *options, const char *key,
- int escape_val);
-static void config_init(config_format_t *fmt, void *options);
+static int write_configuration_file(const char *fname,
+ const or_options_t *options);
+static config_line_t *get_assigned_option(const config_format_t *fmt,
+ const void *options, const char *key,
+ int escape_val);
+static void config_init(const config_format_t *fmt, void *options);
static int or_state_validate(or_state_t *old_options, or_state_t *options,
int from_setconf, char **msg);
static int or_state_load(void);
@@ -626,7 +653,7 @@ static config_var_t state_extra_var = {
};
/** Configuration format for or_state_t. */
-static config_format_t state_format = {
+static const config_format_t state_format = {
sizeof(or_state_t),
OR_STATE_MAGIC,
STRUCT_OFFSET(or_state_t, _magic),
@@ -650,6 +677,8 @@ static or_state_t *global_state = NULL;
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;
/** Return the contents of our frontpage string, or NULL if not configured. */
const char *
@@ -701,7 +730,7 @@ static int tor_disable_debugger_attach(void) {
/** Allocate an empty configuration object of a given format type. */
static void *
-config_alloc(config_format_t *fmt)
+config_alloc(const config_format_t *fmt)
{
void *opts = tor_malloc_zero(fmt->size);
*(uint32_t*)STRUCT_VAR_P(opts, fmt->magic_offset) = fmt->magic;
@@ -711,12 +740,19 @@ config_alloc(config_format_t *fmt)
/** Return the currently configured options. */
or_options_t *
-get_options(void)
+get_options_mutable(void)
{
tor_assert(global_options);
return global_options;
}
+/** Returns the currently configured options */
+const or_options_t *
+get_options(void)
+{
+ return get_options_mutable();
+}
+
/** Change the current global options to contain <b>new_val</b> instead of
* their current value; take action based on the new value; free the old value
* as necessary. Returns 0 on success, -1 on failure.
@@ -724,6 +760,9 @@ get_options(void)
int
set_options(or_options_t *new_val, char **msg)
{
+ int i;
+ smartlist_t *elements;
+ config_line_t *line;
or_options_t *old_options = global_options;
global_options = new_val;
/* Note that we pass the *old* options below, for comparison. It
@@ -738,7 +777,34 @@ set_options(or_options_t *new_val, char **msg)
"Acting on config options left us in a broken state. Dying.");
exit(1);
}
-
+ /* Issues a CONF_CHANGED event to notify controller of the change. If Tor is
+ * just starting up then the old_options will be undefined. */
+ if (old_options) {
+ elements = smartlist_create();
+ for (i=0; options_format.vars[i].name; ++i) {
+ const config_var_t *var = &options_format.vars[i];
+ const char *var_name = var->name;
+ if (var->type == CONFIG_TYPE_LINELIST_S ||
+ var->type == CONFIG_TYPE_OBSOLETE) {
+ continue;
+ }
+ if (!option_is_same(&options_format, new_val, old_options, var_name)) {
+ line = get_assigned_option(&options_format, new_val, var_name, 1);
+
+ if (line) {
+ for (; line; line = line->next) {
+ smartlist_add(elements, line->key);
+ smartlist_add(elements, line->value);
+ }
+ } else {
+ smartlist_add(elements, (char*)options_format.vars[i].name);
+ smartlist_add(elements, NULL);
+ }
+ }
+ }
+ control_event_conf_changed(elements);
+ smartlist_free(elements);
+ }
config_free(&options_format, old_options);
return 0;
@@ -796,6 +862,13 @@ config_free_all(void)
config_free_lines(global_cmdline_options);
global_cmdline_options = NULL;
+ if (configured_client_ports) {
+ SMARTLIST_FOREACH(configured_client_ports,
+ port_cfg_t *, p, tor_free(p));
+ smartlist_free(configured_client_ports);
+ configured_client_ports = NULL;
+ }
+
tor_free(torrc_fname);
tor_free(_version);
tor_free(global_dirfrontpagecontents);
@@ -953,8 +1026,8 @@ validate_dir_authorities(or_options_t *options, or_options_t *old_options)
* as appropriate.
*/
static int
-consider_adding_dir_authorities(or_options_t *options,
- or_options_t *old_options)
+consider_adding_dir_authorities(const or_options_t *options,
+ const or_options_t *old_options)
{
config_line_t *cl;
int need_to_update =
@@ -1008,12 +1081,12 @@ consider_adding_dir_authorities(or_options_t *options,
* Return 0 if all goes well, return -1 if things went badly.
*/
static int
-options_act_reversible(or_options_t *old_options, char **msg)
+options_act_reversible(const or_options_t *old_options, char **msg)
{
smartlist_t *new_listeners = smartlist_create();
smartlist_t *replaced_listeners = smartlist_create();
static int libevent_initialized = 0;
- or_options_t *options = get_options();
+ or_options_t *options = get_options_mutable();
int running_tor = options->command == CMD_RUN_TOR;
int set_conn_limit = 0;
int r = -1;
@@ -1042,6 +1115,7 @@ options_act_reversible(or_options_t *old_options, char **msg)
#endif
if (running_tor) {
+ int n_client_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) {
@@ -1057,6 +1131,16 @@ options_act_reversible(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)) {
+ if (!*msg)
+ *msg = tor_strdup("Unexpected problem parsing client 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. */
if (!we_are_hibernating()) {
@@ -1097,7 +1181,8 @@ options_act_reversible(or_options_t *old_options, char **msg)
/* Ensure data directory is private; create if possible. */
if (check_private_dir(options->DataDirectory,
- running_tor ? CPD_CREATE : CPD_CHECK)<0) {
+ running_tor ? CPD_CREATE : CPD_CHECK,
+ options->User)<0) {
tor_asprintf(msg,
"Couldn't access/create private data directory \"%s\"",
options->DataDirectory);
@@ -1105,12 +1190,16 @@ options_act_reversible(or_options_t *old_options, char **msg)
/* No need to roll back, since you can't change the value. */
}
- if (directory_caches_v2_dir_info(options)) {
+ /* Write control ports to disk as appropriate */
+ control_ports_write_to_file();
+
+ if (directory_caches_v2_dir_info(options)) {
size_t len = strlen(options->DataDirectory)+32;
char *fn = tor_malloc(len);
tor_snprintf(fn, len, "%s"PATH_SEPARATOR"cached-status",
options->DataDirectory);
- if (check_private_dir(fn, running_tor ? CPD_CREATE : CPD_CHECK) < 0) {
+ if (check_private_dir(fn, running_tor ? CPD_CREATE : CPD_CHECK,
+ options->User) < 0) {
tor_asprintf(msg,
"Couldn't access/create private data directory \"%s\"", fn);
tor_free(fn);
@@ -1180,7 +1269,7 @@ options_act_reversible(or_options_t *old_options, char **msg)
/** If we need to have a GEOIP ip-to-country map to run with our configured
* options, return 1 and set *<b>reason_out</b> to a description of why. */
int
-options_need_geoip_info(or_options_t *options, const char **reason_out)
+options_need_geoip_info(const or_options_t *options, const char **reason_out)
{
int bridge_usage =
options->BridgeRelay && options->BridgeRecordUsageByCountry;
@@ -1205,7 +1294,7 @@ options_need_geoip_info(or_options_t *options, const char **reason_out)
/** Return the bandwidthrate that we are going to report to the authorities
* based on the config options. */
uint32_t
-get_effective_bwrate(or_options_t *options)
+get_effective_bwrate(const or_options_t *options)
{
uint64_t bw = options->BandwidthRate;
if (bw > options->MaxAdvertisedBandwidth)
@@ -1219,7 +1308,7 @@ get_effective_bwrate(or_options_t *options)
/** Return the bandwidthburst that we are going to report to the authorities
* based on the config options. */
uint32_t
-get_effective_bwburst(or_options_t *options)
+get_effective_bwburst(const or_options_t *options)
{
uint64_t bw = options->BandwidthBurst;
if (options->RelayBandwidthBurst > 0 && bw > options->RelayBandwidthBurst)
@@ -1238,12 +1327,14 @@ get_effective_bwburst(or_options_t *options)
* here yet. Some is still in do_hup() and other places.
*/
static int
-options_act(or_options_t *old_options)
+options_act(const or_options_t *old_options)
{
config_line_t *cl;
- or_options_t *options = get_options();
+ or_options_t *options = get_options_mutable();
int running_tor = options->command == CMD_RUN_TOR;
char *msg;
+ 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) {
@@ -1291,6 +1382,32 @@ options_act(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)
@@ -1302,6 +1419,17 @@ options_act(or_options_t *old_options)
finish_daemon(options->DataDirectory);
}
+ /* 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 ||
+ (options->V3AuthoritativeDir && (!old_options ||
+ !old_options->V3AuthoritativeDir))) {
+ if (init_keys() < 0) {
+ log_warn(LD_BUG,"Error initializing keys; exiting");
+ return -1;
+ }
+ }
+
/* Write our PID to the PID file. If we do not have write permissions we
* will log a warning */
if (options->PidFile)
@@ -1424,14 +1552,10 @@ options_act(or_options_t *old_options)
}
}
- if (options_transition_affects_workers(old_options, options)) {
+ if (transition_affects_workers) {
log_info(LD_GENERAL,
"Worker-related options changed. Rotating workers.");
- if (init_keys() < 0) {
- log_warn(LD_BUG,"Error initializing keys; exiting");
- return -1;
- }
if (server_mode(options) && !server_mode(old_options)) {
ip_address_changed(0);
if (can_complete_circuit || !any_predicted_circuits(time(NULL)))
@@ -1445,9 +1569,6 @@ options_act(or_options_t *old_options)
return -1;
}
- if (options->V3AuthoritativeDir && !old_options->V3AuthoritativeDir)
- init_keys();
-
if (options->PerConnBWRate != old_options->PerConnBWRate ||
options->PerConnBWBurst != old_options->PerConnBWBurst)
connection_or_update_token_buckets(get_connection_array(), options);
@@ -1476,9 +1597,19 @@ options_act(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);
@@ -1521,6 +1652,11 @@ options_act(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 "
@@ -1542,6 +1678,9 @@ options_act(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 &&
@@ -1599,7 +1738,7 @@ options_act(or_options_t *old_options)
* apply abbreviations that work for the config file and the command line.
* If <b>warn_obsolete</b> is set, warn about deprecated names. */
static const char *
-expand_abbrev(config_format_t *fmt, const char *option, int command_line,
+expand_abbrev(const config_format_t *fmt, const char *option, int command_line,
int warn_obsolete)
{
int i;
@@ -1759,12 +1898,9 @@ config_free_lines(config_line_t *front)
}
}
-/** If <b>key</b> is a configuration option, return the corresponding
- * config_var_t. Otherwise, if <b>key</b> is a non-standard abbreviation,
- * warn, and return the corresponding config_var_t. Otherwise return NULL.
- */
+/** As config_find_option, but return a non-const pointer. */
static config_var_t *
-config_find_option(config_format_t *fmt, const char *key)
+config_find_option_mutable(config_format_t *fmt, const char *key)
{
int i;
size_t keylen = strlen(key);
@@ -1789,9 +1925,20 @@ config_find_option(config_format_t *fmt, const char *key)
return NULL;
}
+/** If <b>key</b> is a configuration option, return the corresponding const
+ * config_var_t. Otherwise, if <b>key</b> is a non-standard abbreviation,
+ * warn, and return the corresponding const config_var_t. Otherwise return
+ * NULL.
+ */
+static const config_var_t *
+config_find_option(const config_format_t *fmt, const char *key)
+{
+ return config_find_option_mutable((config_format_t*)fmt, key);
+}
+
/** Return the number of option entries in <b>fmt</b>. */
static int
-config_count_options(config_format_t *fmt)
+config_count_options(const config_format_t *fmt)
{
int i;
for (i=0; fmt->vars[i].name; ++i)
@@ -1809,11 +1956,11 @@ config_count_options(config_format_t *fmt)
* Called from config_assign_line() and option_reset().
*/
static int
-config_assign_value(config_format_t *fmt, or_options_t *options,
+config_assign_value(const config_format_t *fmt, or_options_t *options,
config_line_t *c, char **msg)
{
int i, ok;
- config_var_t *var;
+ const config_var_t *var;
void *lvalue;
CHECK(fmt, options);
@@ -1975,11 +2122,11 @@ config_assign_value(config_format_t *fmt, or_options_t *options,
* Called from config_assign().
*/
static int
-config_assign_line(config_format_t *fmt, or_options_t *options,
+config_assign_line(const config_format_t *fmt, or_options_t *options,
config_line_t *c, int use_defaults,
int clear_first, bitarray_t *options_seen, char **msg)
{
- config_var_t *var;
+ const config_var_t *var;
CHECK(fmt, options);
@@ -2040,10 +2187,10 @@ config_assign_line(config_format_t *fmt, or_options_t *options,
/** Restore the option named <b>key</b> in options to its default value.
* Called from config_assign(). */
static void
-config_reset_line(config_format_t *fmt, or_options_t *options,
+config_reset_line(const config_format_t *fmt, or_options_t *options,
const char *key, int use_defaults)
{
- config_var_t *var;
+ const config_var_t *var;
CHECK(fmt, options);
@@ -2058,7 +2205,7 @@ config_reset_line(config_format_t *fmt, or_options_t *options,
int
option_is_recognized(const char *key)
{
- config_var_t *var = config_find_option(&options_format, key);
+ const config_var_t *var = config_find_option(&options_format, key);
return (var != NULL);
}
@@ -2067,14 +2214,14 @@ option_is_recognized(const char *key)
const char *
option_get_canonical_name(const char *key)
{
- config_var_t *var = config_find_option(&options_format, key);
+ const config_var_t *var = config_find_option(&options_format, key);
return var ? var->name : NULL;
}
/** Return a canonical list of the options assigned for key.
*/
config_line_t *
-option_get_assignment(or_options_t *options, const char *key)
+option_get_assignment(const or_options_t *options, const char *key)
{
return get_assigned_option(&options_format, options, key, 1);
}
@@ -2127,10 +2274,10 @@ config_lines_dup(const config_line_t *inp)
* value needs to be quoted before it's put in a config file, quote and
* escape that value. Return NULL if no such key exists. */
static config_line_t *
-get_assigned_option(config_format_t *fmt, void *options,
+get_assigned_option(const config_format_t *fmt, const void *options,
const char *key, int escape_val)
{
- config_var_t *var;
+ const config_var_t *var;
const void *value;
config_line_t *result;
tor_assert(options && key);
@@ -2174,6 +2321,7 @@ get_assigned_option(config_format_t *fmt, void *options,
escape_val = 0;
break;
}
+ /* fall through */
case CONFIG_TYPE_INTERVAL:
case CONFIG_TYPE_MSEC_INTERVAL:
case CONFIG_TYPE_UINT:
@@ -2311,7 +2459,7 @@ options_trial_assign() calls config_assign(1, 1)
returns.
*/
static int
-config_assign(config_format_t *fmt, void *options, config_line_t *list,
+config_assign(const config_format_t *fmt, void *options, config_line_t *list,
int use_defaults, int clear_first, char **msg)
{
config_line_t *p;
@@ -2373,7 +2521,7 @@ options_trial_assign(config_line_t *list, int use_defaults,
return r;
}
- if (options_validate(get_options(), trial_options, 1, msg) < 0) {
+ if (options_validate(get_options_mutable(), trial_options, 1, msg) < 0) {
config_free(&options_format, trial_options);
return SETOPT_ERR_PARSE; /*XXX make this a separate return value. */
}
@@ -2395,7 +2543,8 @@ options_trial_assign(config_line_t *list, int use_defaults,
/** Reset config option <b>var</b> to 0, 0.0, NULL, or the equivalent.
* Called from option_reset() and config_free(). */
static void
-option_clear(config_format_t *fmt, or_options_t *options, config_var_t *var)
+option_clear(const config_format_t *fmt, or_options_t *options,
+ const config_var_t *var)
{
void *lvalue = STRUCT_VAR_P(options, var->var_offset);
(void)fmt; /* unused */
@@ -2453,8 +2602,8 @@ option_clear(config_format_t *fmt, or_options_t *options, config_var_t *var)
* <b>use_defaults</b>, set it to its default value.
* Called by config_init() and option_reset_line() and option_assign_line(). */
static void
-option_reset(config_format_t *fmt, or_options_t *options,
- config_var_t *var, int use_defaults)
+option_reset(const config_format_t *fmt, or_options_t *options,
+ const config_var_t *var, int use_defaults)
{
config_line_t *c;
char *msg = NULL;
@@ -2494,7 +2643,7 @@ list_torrc_options(void)
int i;
smartlist_t *lines = smartlist_create();
for (i = 0; _option_vars[i].name; ++i) {
- config_var_t *var = &_option_vars[i];
+ const config_var_t *var = &_option_vars[i];
if (var->type == CONFIG_TYPE_OBSOLETE ||
var->type == CONFIG_TYPE_LINELIST_V)
continue;
@@ -2513,7 +2662,7 @@ static uint32_t last_resolved_addr = 0;
* public IP address.
*/
int
-resolve_my_address(int warn_severity, or_options_t *options,
+resolve_my_address(int warn_severity, const or_options_t *options,
uint32_t *addr_out, char **hostname_out)
{
struct in_addr in;
@@ -2689,7 +2838,7 @@ is_local_addr(const tor_addr_t *addr)
/** Release storage held by <b>options</b>. */
static void
-config_free(config_format_t *fmt, void *options)
+config_free(const config_format_t *fmt, void *options)
{
int i;
@@ -2728,8 +2877,9 @@ config_lines_eq(config_line_t *a, config_line_t *b)
* and <b>o2</b>. Must not be called for LINELIST_S or OBSOLETE options.
*/
static int
-option_is_same(config_format_t *fmt,
- or_options_t *o1, or_options_t *o2, const char *name)
+option_is_same(const config_format_t *fmt,
+ const or_options_t *o1, const or_options_t *o2,
+ const char *name)
{
config_line_t *c1, *c2;
int r = 1;
@@ -2746,7 +2896,7 @@ option_is_same(config_format_t *fmt,
/** Copy storage held by <b>old</b> into a new or_options_t and return it. */
static or_options_t *
-options_dup(config_format_t *fmt, or_options_t *old)
+options_dup(const config_format_t *fmt, const or_options_t *old)
{
or_options_t *newopts;
int i;
@@ -2810,7 +2960,7 @@ is_listening_on_low_port(int port_option,
return (port_option < 1024);
for (l = listen_options; l; l = l->next) {
- parse_addr_port(LOG_WARN, l->value, NULL, NULL, &p);
+ addr_port_lookup(LOG_WARN, l->value, NULL, NULL, &p);
if (p<1024) {
return 1;
}
@@ -2822,10 +2972,10 @@ is_listening_on_low_port(int port_option,
/** Set all vars in the configuration object <b>options</b> to their default
* values. */
static void
-config_init(config_format_t *fmt, void *options)
+config_init(const config_format_t *fmt, void *options)
{
int i;
- config_var_t *var;
+ const config_var_t *var;
CHECK(fmt, options);
for (i=0; fmt->vars[i].name; ++i) {
@@ -2841,7 +2991,7 @@ config_init(config_format_t *fmt, void *options)
* Else, if comment_defaults, write default values as comments.
*/
static char *
-config_dump(config_format_t *fmt, void *options, int minimal,
+config_dump(const config_format_t *fmt, const void *options, int minimal,
int comment_defaults)
{
smartlist_t *elements;
@@ -2909,7 +3059,7 @@ config_dump(config_format_t *fmt, void *options, int minimal,
* include options that are the same as Tor's defaults.
*/
char *
-options_dump(or_options_t *options, int minimal)
+options_dump(const or_options_t *options, int minimal)
{
return config_dump(&options_format, options, minimal, 0);
}
@@ -3036,6 +3186,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;
#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
@@ -3059,57 +3210,8 @@ options_validate(or_options_t *old_options, or_options_t *options,
if (options->DirPort == 0 && options->DirListenAddress != NULL)
REJECT("DirPort must be defined if DirListenAddress is defined.");
- if (options->DNSPort == 0 && options->DNSListenAddress != NULL)
- REJECT("DNSPort must be defined if DNSListenAddress is defined.");
-
- if (options->ControlPort == 0 && options->ControlListenAddress != NULL)
- REJECT("ControlPort must be defined if ControlListenAddress is defined.");
-
- if (options->TransPort == 0 && options->TransListenAddress != NULL)
- REJECT("TransPort must be defined if TransListenAddress is defined.");
-
- if (options->NATDPort == 0 && options->NATDListenAddress != NULL)
- REJECT("NATDPort must be defined if NATDListenAddress is defined.");
-
- /* Don't gripe about SocksPort 0 with SocksListenAddress set; a standard
- * configuration does this. */
-
- for (i = 0; i < 3; ++i) {
- int is_socks = i==0;
- int is_trans = i==1;
- config_line_t *line, *opt, *old;
- const char *tp;
- if (is_socks) {
- opt = options->SocksListenAddress;
- old = old_options ? old_options->SocksListenAddress : NULL;
- tp = "SOCKS proxy";
- } else if (is_trans) {
- opt = options->TransListenAddress;
- old = old_options ? old_options->TransListenAddress : NULL;
- tp = "transparent proxy";
- } else {
- opt = options->NATDListenAddress;
- old = old_options ? old_options->NATDListenAddress : NULL;
- tp = "natd proxy";
- }
-
- for (line = opt; line; line = line->next) {
- char *address = NULL;
- uint16_t port;
- uint32_t addr;
- if (parse_addr_port(LOG_WARN, line->value, &address, &addr, &port)<0)
- continue; /* We'll warn about this later. */
- if (!is_internal_IP(addr, 1) &&
- (!old_options || !config_lines_eq(old, opt))) {
- log_warn(LD_CONFIG,
- "You specified a public address '%s' for a %s. Other "
- "people on the Internet might find your computer and use it as "
- "an open %s. Please don't allow this unless you have "
- "a good reason.", address, tp, tp);
- }
- tor_free(address);
- }
- }
+ if (parse_client_ports(options, 1, msg, &n_client_ports) < 0)
+ return -1;
if (validate_data_directory(options)<0)
REJECT("Invalid DataDirectory");
@@ -3133,8 +3235,12 @@ options_validate(or_options_t *old_options, or_options_t *options,
"misconfigured or something else goes wrong.");
/* Special case on first boot if no Log options are given. */
- if (!options->Logs && !options->RunAsDaemon && !from_setconf)
- config_line_append(&options->Logs, "Log", "notice stdout");
+ if (!options->Logs && !options->RunAsDaemon && !from_setconf) {
+ if (quiet_level == 0)
+ config_line_append(&options->Logs, "Log", "notice stdout");
+ else if (quiet_level == 1)
+ config_line_append(&options->Logs, "Log", "warn stdout");
+ }
if (options_init_logs(options, 1)<0) /* Validate the log(s) */
REJECT("Failed to validate Log options. See logs for details.");
@@ -3151,9 +3257,7 @@ 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 (options->SocksPort == 0 && options->TransPort == 0 &&
- options->NATDPort == 0 && options->ORPort == 0 &&
- options->DNSPort == 0 && !options->RendConfigLines)
+ if (n_client_ports == 0 && options->ORPort == 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. "
@@ -3164,6 +3268,11 @@ options_validate(or_options_t *old_options, or_options_t *options,
REJECT("TransPort and TransListenAddress are disabled in this build.");
#endif
+ if (options->TokenBucketRefillInterval <= 0
+ || options->TokenBucketRefillInterval > 1000) {
+ REJECT("TokenBucketRefillInterval must be between 1 and 1000 inclusive.");
+ }
+
if (options->AccountingMax &&
(is_listening_on_low_port(options->ORPort, options->ORListenAddress) ||
is_listening_on_low_port(options->DirPort, options->DirListenAddress)))
@@ -3262,6 +3371,15 @@ options_validate(or_options_t *old_options, or_options_t *options,
return -1;
}
+ if (options->MaxClientCircuitsPending <= 0 ||
+ options->MaxClientCircuitsPending > MAX_MAX_CLIENT_CIRCUITS_PENDING) {
+ tor_asprintf(msg,
+ "MaxClientCircuitsPending must be between 1 and %d, but "
+ "was set to %d", MAX_MAX_CLIENT_CIRCUITS_PENDING,
+ options->MaxClientCircuitsPending);
+ return -1;
+ }
+
if (validate_ports_csv(options->FirewallPorts, "FirewallPorts", msg) < 0)
return -1;
@@ -3486,6 +3604,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;
@@ -3538,7 +3662,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 */
@@ -3552,7 +3676,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 */
@@ -3566,7 +3690,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.");
@@ -3576,7 +3700,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.");
@@ -3585,8 +3709,11 @@ options_validate(or_options_t *old_options, or_options_t *options,
}
}
- if (options->Socks4Proxy && options->Socks5Proxy)
- REJECT("You cannot specify both Socks4Proxy and SOCKS5Proxy");
+ /* Check if more than one proxy type has been enabled. */
+ if (!!options->Socks4Proxy + !!options->Socks5Proxy +
+ !!options->HTTPSProxy + !!options->ClientTransportPlugin > 1)
+ REJECT("You have configured more than one proxy type. "
+ "(Socks4Proxy|Socks5Proxy|HTTPSProxy|ClientTransportPlugin)");
if (options->Socks5ProxyUsername) {
size_t len;
@@ -3707,11 +3834,20 @@ options_validate(or_options_t *old_options, or_options_t *options,
REJECT("If you set UseBridges, you must specify at least one bridge.");
if (options->UseBridges && !options->TunnelDirConns)
REJECT("If you set UseBridges, you must set TunnelDirConns.");
- if (options->Bridges) {
- 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->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->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) {
@@ -3894,17 +4030,13 @@ options_validate(or_options_t *old_options, or_options_t *options,
static int
opt_streq(const char *s1, const char *s2)
{
- if (!s1 && !s2)
- return 1;
- else if (s1 && s2 && !strcmp(s1,s2))
- return 1;
- else
- return 0;
+ return 0 == strcmp_opt(s1, s2);
}
/** Check if any of the previous options have changed but aren't allowed to. */
static int
-options_transition_allowed(or_options_t *old, or_options_t *new_val,
+options_transition_allowed(const or_options_t *old,
+ const or_options_t *new_val,
char **msg)
{
if (!old)
@@ -3954,14 +4086,26 @@ options_transition_allowed(or_options_t *old, or_options_t *new_val,
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.");
+ return -1;
+ }
+
return 0;
}
/** Return 1 if any change from <b>old_options</b> to <b>new_options</b>
* will require us to rotate the CPU and DNS workers; else return 0. */
static int
-options_transition_affects_workers(or_options_t *old_options,
- or_options_t *new_options)
+options_transition_affects_workers(const or_options_t *old_options,
+ const or_options_t *new_options)
{
if (!opt_streq(old_options->DataDirectory, new_options->DataDirectory) ||
old_options->NumCPUs != new_options->NumCPUs ||
@@ -3984,8 +4128,8 @@ options_transition_affects_workers(or_options_t *old_options,
/** Return 1 if any change from <b>old_options</b> to <b>new_options</b>
* will require us to generate a new descriptor; else return 0. */
static int
-options_transition_affects_descriptor(or_options_t *old_options,
- or_options_t *new_options)
+options_transition_affects_descriptor(const or_options_t *old_options,
+ const or_options_t *new_options)
{
/* XXX We can be smarter here. If your DirPort isn't being
* published and you just turned it off, no need to republish. Etc. */
@@ -4006,7 +4150,8 @@ options_transition_affects_descriptor(or_options_t *old_options,
!opt_streq(old_options->ContactInfo, new_options->ContactInfo) ||
!opt_streq(old_options->MyFamily, new_options->MyFamily) ||
!opt_streq(old_options->AccountingStart, new_options->AccountingStart) ||
- old_options->AccountingMax != new_options->AccountingMax)
+ old_options->AccountingMax != new_options->AccountingMax ||
+ public_server_mode(old_options) != public_server_mode(new_options))
return 1;
return 0;
@@ -4351,9 +4496,9 @@ options_init_from_string(const char *cf,
/* Change defaults. */
int i;
for (i = 0; testing_tor_network_defaults[i].name; ++i) {
- config_var_t *new_var = &testing_tor_network_defaults[i];
+ const config_var_t *new_var = &testing_tor_network_defaults[i];
config_var_t *old_var =
- config_find_option(&options_format, new_var->name);
+ config_find_option_mutable(&options_format, new_var->name);
tor_assert(new_var);
tor_assert(old_var);
old_var->initvalue = new_var->initvalue;
@@ -4429,8 +4574,8 @@ get_torrc_fname(void)
/** Adjust the address map based on the MapAddress elements in the
* configuration <b>options</b>
*/
-static void
-config_register_addressmaps(or_options_t *options)
+void
+config_register_addressmaps(const or_options_t *options)
{
smartlist_t *elts;
config_line_t *opt;
@@ -4597,6 +4742,8 @@ parse_bridge_line(const char *line, int validate_only)
smartlist_t *items = NULL;
int r;
char *addrport=NULL, *fingerprint=NULL;
+ char *transport_name=NULL;
+ char *field1=NULL;
tor_addr_t addr;
uint16_t port = 0;
char digest[DIGEST_LEN];
@@ -4608,9 +4755,25 @@ parse_bridge_line(const char *line, int validate_only)
log_warn(LD_CONFIG, "Too few arguments to Bridge line.");
goto err;
}
- addrport = smartlist_get(items, 0);
+
+ /* field1 is either a transport name or addrport */
+ field1 = smartlist_get(items, 0);
smartlist_del_keeporder(items, 0);
- if (tor_addr_port_parse(addrport, &addr, &port)<0) {
+
+ if (!(strstr(field1, ".") || strstr(field1, ":"))) {
+ /* new-style bridge line */
+ transport_name = field1;
+ if (smartlist_len(items) < 1) {
+ log_warn(LD_CONFIG, "Too few items to Bridge line.");
+ goto err;
+ }
+ addrport = smartlist_get(items, 0);
+ smartlist_del_keeporder(items, 0);
+ } else {
+ addrport = field1;
+ }
+
+ if (tor_addr_port_lookup(addrport, &addr, &port)<0) {
log_warn(LD_CONFIG, "Error parsing Bridge address '%s'", addrport);
goto err;
}
@@ -4634,26 +4797,282 @@ parse_bridge_line(const char *line, int validate_only)
}
if (!validate_only) {
- log_debug(LD_DIR, "Bridge at %s:%d (%s)", fmt_addr(&addr),
- (int)port,
+ log_debug(LD_DIR, "Bridge at %s:%d (transport: %s) (%s)",
+ fmt_addr(&addr), (int)port,
+ transport_name ? transport_name : "no transport",
fingerprint ? fingerprint : "no key listed");
- bridge_add_from_config(&addr, port, fingerprint ? digest : NULL);
+ bridge_add_from_config(&addr, port,
+ fingerprint ? digest : NULL, transport_name);
}
r = 0;
goto done;
- err:
+ err:
r = -1;
- done:
+ done:
SMARTLIST_FOREACH(items, char*, s, tor_free(s));
smartlist_free(items);
tor_free(addrport);
+ 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:
+ * - 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 *field2=NULL;
+
+ const char *transports=NULL;
+ smartlist_t *transport_list=NULL;
+ char *addrport=NULL;
+ 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);
+
+ line_length = smartlist_len(items);
+ if (line_length < 3) {
+ log_warn(LD_CONFIG, "Too few arguments on ClientTransportPlugin line.");
+ goto err;
+ }
+
+ /* 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);
+
+ /* field2 is either a SOCKS version or "exec" */
+ field2 = smartlist_get(items, 1);
+
+ if (!strcmp(field2,"socks4")) {
+ socks_ver = PROXY_SOCKS4;
+ } else if (!strcmp(field2,"socks5")) {
+ socks_ver = PROXY_SOCKS5;
+ } else if (!strcmp(field2,"exec")) {
+ is_managed=1;
+ } else {
+ log_warn(LD_CONFIG, "Strange ClientTransportPlugin field '%s'.",
+ field2);
+ goto err;
+ }
+
+ if (is_managed) { /* managed */
+ if (!validate_only) { /* if we are not just validating, use the
+ rest of the line as the argv of the proxy
+ to be launched */
+ 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);
+
+ line_length = smartlist_len(items);
+ if (line_length < 3) {
+ log_warn(LD_CONFIG, "Too few arguments on ServerTransportPlugin line.");
+ goto err;
+ }
+
+ /* 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 (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;
+
+ 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;
+ 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 DirServer line from <b>line</b>. If
* <b>validate_only</b> is 0, and the line is well-formed, and it
* shares any bits with <b>required_type</b> or <b>required_type</b>
@@ -4734,7 +5153,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;
}
@@ -4789,6 +5208,374 @@ parse_dir_server_line(const char *line, dirinfo_type_t required_type,
return r;
}
+/** Free all storage held in <b>port</b> */
+static void
+port_cfg_free(port_cfg_t *port)
+{
+ tor_free(port);
+}
+
+/** Warn for every port in <b>ports</b> that is on a publicly routable
+ * address. */
+static void
+warn_nonlocal_client_ports(const smartlist_t *ports, const char *portname)
+{
+ SMARTLIST_FOREACH_BEGIN(ports, const port_cfg_t *, port) {
+ 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);
+}
+
+#define CL_PORT_NO_OPTIONS (1u<<0)
+#define CL_PORT_WARN_NONLOCAL (1u<<1)
+#define CL_PORT_ALLOW_EXTRA_LISTENADDR (1u<<2)
+
+/**
+ * Parse port configuration for a single client port type.
+ *
+ * Read entries of the "FooPort" type from the list <b>ports</b>, and
+ * entries of the "FooListenAddress" type from the list
+ * <b>listenaddrs</b>. Two syntaxes are supported: a legacy syntax
+ * where FooPort is at most a single entry containing a port number and
+ * where FooListenAddress has any number of address:port combinations;
+ * and a new syntax where there are no FooListenAddress entries and
+ * where FooPort can have any number of entries of the format
+ * "[Address:][Port] IsolationOptions".
+ *
+ * In log messages, describe the port type as <b>portname</b>.
+ *
+ * If no address is specified, default to <b>defaultaddr</b>. If no
+ * FooPort is given, default to defaultport (if 0, there is no default).
+ *
+ * If CL_PORT_NO_OPTIONS is set in <b>flags</b>, do not allow stream
+ * 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.
+ *
+ * Unless CL_PORT_ALLOW_EXTRA_LISTENADDR is set in <b>flags</b>, warn
+ * if FooListenAddress is set but FooPort is 0.
+ *
+ * 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,
+ const config_line_t *ports,
+ const config_line_t *listenaddrs,
+ const char *portname,
+ int listener_type,
+ const char *defaultaddr,
+ int defaultport,
+ unsigned flags)
+{
+ smartlist_t *elts;
+ int retval = -1;
+ const unsigned allow_client_options = !(flags & CL_PORT_NO_OPTIONS);
+ const unsigned warn_nonlocal = flags & CL_PORT_WARN_NONLOCAL;
+ const unsigned allow_spurious_listenaddr =
+ flags & CL_PORT_ALLOW_EXTRA_LISTENADDR;
+
+ /* FooListenAddress is deprecated; let's make it work like it used to work,
+ * though. */
+ if (listenaddrs) {
+ int mainport = defaultport;
+
+ 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;
+ }
+ }
+ }
+
+ 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_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;
+ smartlist_add(out, cfg);
+ }
+ }
+
+ if (warn_nonlocal && out)
+ warn_nonlocal_client_ports(out, portname);
+ return 0;
+ } /* end if (listenaddrs) */
+
+ /* No ListenAddress lines. If there's no FooPort, then maybe make a default
+ * one. */
+ if (! ports) {
+ if (defaultport && out) {
+ port_cfg_t *cfg = tor_malloc_zero(sizeof(port_cfg_t));
+ cfg->type = listener_type;
+ cfg->port = defaultport;
+ tor_addr_parse(&cfg->addr, defaultaddr);
+ cfg->session_group = SESSION_GROUP_UNSET;
+ cfg->isolation_flags = ISO_DEFAULT;
+ smartlist_add(out, cfg);
+ }
+ return 0;
+ }
+
+ /* At last we can actually parse the FooPort lines. The syntax is:
+ * [Addr:](Port|auto) [Options].*/
+ elts = smartlist_create();
+
+ for (; ports; ports = ports->next) {
+ tor_addr_t addr;
+ int port;
+ int sessiongroup = SESSION_GROUP_UNSET;
+ unsigned isolation = ISO_DEFAULT;
+
+ char *addrport;
+ uint16_t ptmp=0;
+ int ok;
+
+ smartlist_split_string(elts, ports->value, NULL,
+ SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0);
+ if (smartlist_len(elts) == 0) {
+ log_warn(LD_CONFIG, "Invalid %sPort line with no value", portname);
+ goto err;
+ }
+
+ if (!allow_client_options && smartlist_len(elts) > 1) {
+ log_warn(LD_CONFIG, "Too many options on %sPort line", portname);
+ goto err;
+ }
+
+ /* Now parse the addr/port value */
+ addrport = smartlist_get(elts, 0);
+ if (!strcmp(addrport, "auto")) {
+ port = CFG_AUTO_PORT;
+ 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_lookup(addrtmp, &addr, &ptmp)<0 || ptmp) {
+ log_warn(LD_CONFIG, "Invalid address '%s' for %sPort",
+ escaped(addrport), portname);
+ tor_free(addrtmp);
+ goto err;
+ }
+ } else {
+ /* Try parsing integer port before address, because, who knows?
+ "9050" might be a valid address. */
+ port = (int) tor_parse_long(addrport, 10, 0, 65535, &ok, NULL);
+ if (ok) {
+ 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;
+ }
+ port = ptmp;
+ } else {
+ log_warn(LD_CONFIG, "Couldn't parse address '%s' for %sPort",
+ escaped(addrport), portname);
+ goto err;
+ }
+ }
+
+ /* 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'",
+ 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));
+ cfg->type = listener_type;
+ cfg->port = port;
+ tor_addr_copy(&cfg->addr, &addr);
+ cfg->session_group = sessiongroup;
+ cfg->isolation_flags = isolation;
+ 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);
+
+ retval = 0;
+ err:
+ SMARTLIST_FOREACH(elts, char *, cp, tor_free(cp));
+ smartlist_free(elts);
+ return retval;
+}
+
+/** 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
+ * description of the problem and return -1.
+ *
+ * If <b>validate_only</b> is false, set configured_client_ports to the
+ * 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)
+{
+ smartlist_t *ports;
+ int retval = -1;
+
+ ports = smartlist_create();
+
+ *n_ports_out = 0;
+
+ if (parse_client_port_config(ports,
+ options->SocksPort, options->SocksListenAddress,
+ "Socks", CONN_TYPE_AP_LISTENER,
+ "127.0.0.1", 9050,
+ CL_PORT_WARN_NONLOCAL|CL_PORT_ALLOW_EXTRA_LISTENADDR) < 0) {
+ *msg = tor_strdup("Invalid SocksPort/SocksListenAddress configuration");
+ goto err;
+ }
+ if (parse_client_port_config(ports,
+ options->DNSPort, options->DNSListenAddress,
+ "DNS", CONN_TYPE_AP_DNS_LISTENER,
+ "127.0.0.1", 0,
+ CL_PORT_WARN_NONLOCAL) < 0) {
+ *msg = tor_strdup("Invalid DNSPort/DNSListenAddress configuration");
+ goto err;
+ }
+ if (parse_client_port_config(ports,
+ options->TransPort, options->TransListenAddress,
+ "Trans", CONN_TYPE_AP_TRANS_LISTENER,
+ "127.0.0.1", 0,
+ CL_PORT_WARN_NONLOCAL) < 0) {
+ *msg = tor_strdup("Invalid TransPort/TransListenAddress configuration");
+ goto err;
+ }
+ if (parse_client_port_config(ports,
+ options->NATDPort, options->NATDListenAddress,
+ "NATD", CONN_TYPE_AP_NATD_LISTENER,
+ "127.0.0.1", 0,
+ CL_PORT_WARN_NONLOCAL) < 0) {
+ *msg = tor_strdup("Invalid NatdPort/NatdListenAddress configuration");
+ goto err;
+ }
+
+ *n_ports_out = smartlist_len(ports);
+
+ if (!validate_only) {
+ if (configured_client_ports) {
+ SMARTLIST_FOREACH(configured_client_ports,
+ port_cfg_t *, p, port_cfg_free(p));
+ smartlist_free(configured_client_ports);
+ }
+ configured_client_ports = ports;
+ ports = NULL; /* prevent free below. */
+ }
+
+ retval = 0;
+ err:
+ if (ports) {
+ SMARTLIST_FOREACH(ports, port_cfg_t *, p, port_cfg_free(p));
+ smartlist_free(ports);
+ }
+ return retval;
+}
+
+/** Return a list of port_cfg_t for client ports parsed from the
+ * options. */
+const smartlist_t *
+get_configured_client_ports(void)
+{
+ if (!configured_client_ports)
+ configured_client_ports = smartlist_create();
+ return configured_client_ports;
+}
+
/** Adjust the value of options->DataDirectory, or fill it in if it's
* absent. Return 0 on success, -1 on failure. */
static int
@@ -4860,7 +5647,7 @@ validate_data_directory(or_options_t *options)
* doesn't begin with GENERATED_FILE_PREFIX, rename it. Otherwise
* replace it. Return 0 on success, -1 on failure. */
static int
-write_configuration_file(const char *fname, or_options_t *options)
+write_configuration_file(const char *fname, const or_options_t *options)
{
char *old_val=NULL, *new_val=NULL, *new_conf=NULL;
int rename_old = 0, r;
@@ -5157,6 +5944,7 @@ 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);
@@ -5197,7 +5985,7 @@ get_or_state(void)
* Note: Consider using the get_datadir_fname* macros in or.h.
*/
char *
-options_get_datadir_fname2_suffix(or_options_t *options,
+options_get_datadir_fname2_suffix(const or_options_t *options,
const char *sub1, const char *sub2,
const char *suffix)
{
@@ -5232,6 +6020,69 @@ options_get_datadir_fname2_suffix(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
@@ -5250,6 +6101,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;
}
@@ -5482,6 +6336,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
@@ -5514,7 +6512,7 @@ getinfo_helper_config(control_connection_t *conn,
smartlist_t *sl = smartlist_create();
int i;
for (i = 0; _option_vars[i].name; ++i) {
- config_var_t *var = &_option_vars[i];
+ const config_var_t *var = &_option_vars[i];
const char *type;
char *line;
switch (var->type) {
diff --git a/src/or/config.h b/src/or/config.h
index 49f7e25be..76f6841d7 100644
--- a/src/or/config.h
+++ b/src/or/config.h
@@ -13,7 +13,8 @@
#define _TOR_CONFIG_H
const char *get_dirportfrontpage(void);
-or_options_t *get_options(void);
+const or_options_t *get_options(void);
+or_options_t *get_options_mutable(void);
int set_options(or_options_t *new_val, char **msg);
void config_free_all(void);
const char *safe_str_client(const char *address);
@@ -26,21 +27,21 @@ int config_get_lines(const char *string, config_line_t **result);
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, or_options_t *options,
+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;
void options_init(or_options_t *options);
-char *options_dump(or_options_t *options, int minimal);
+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,
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(or_options_t *options,
+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);
-char *options_get_datadir_fname2_suffix(or_options_t *options,
+char *options_get_datadir_fname2_suffix(const or_options_t *options,
const char *sub1, const char *sub2,
const char *suffix);
#define get_datadir_fname2_suffix(sub1, sub2, suffix) \
@@ -63,19 +64,29 @@ or_state_t *get_or_state(void);
int did_last_state_file_write_fail(void);
int or_state_save(time_t now);
-int options_need_geoip_info(or_options_t *options, const char **reason_out);
+const smartlist_t *get_configured_client_ports(void);
+
+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);
const char *tor_get_digests(void);
-uint32_t get_effective_bwrate(or_options_t *options);
-uint32_t get_effective_bwburst(or_options_t *options);
+uint32_t get_effective_bwrate(const or_options_t *options);
+uint32_t get_effective_bwburst(const or_options_t *options);
#ifdef CONFIG_PRIVATE
/* Used only by config.c and test.c */
or_options_t *options_new(void);
#endif
+void config_register_addressmaps(const or_options_t *options);
+
#endif
diff --git a/src/or/connection.c b/src/or/connection.c
index 7faeeb079..a52bf4807 100644
--- a/src/or/connection.c
+++ b/src/or/connection.c
@@ -40,14 +40,19 @@
#include <event2/event.h>
#endif
+#ifdef HAVE_PWD_H
+#include <pwd.h>
+#endif
+
static connection_t *connection_create_listener(
const struct sockaddr *listensockaddr,
socklen_t listensocklen, int type,
- char* address);
+ const char *address,
+ const port_cfg_t *portcfg);
static void connection_init(time_t now, connection_t *conn, int type,
int socket_family);
static int connection_init_accepted_conn(connection_t *conn,
- uint8_t listener_type);
+ const listener_connection_t *listener);
static int connection_handle_listener_read(connection_t *conn, int new_type);
#ifndef USE_BUFFEREVENTS
static int connection_bucket_should_increase(int bucket,
@@ -60,12 +65,14 @@ static int connection_reached_eof(connection_t *conn);
static int connection_read_to_buf(connection_t *conn, ssize_t *max_to_read,
int *socket_error);
static int connection_process_inbuf(connection_t *conn, int package_partial);
-static void client_check_address_changed(int sock);
-static void set_constrained_socket_buffers(int sock, int size);
+static void client_check_address_changed(tor_socket_t sock);
+static void set_constrained_socket_buffers(tor_socket_t sock, int size);
static const char *connection_proxy_state_to_string(int state);
static int connection_read_https_proxy_response(connection_t *conn);
static void connection_send_socks5_connect(connection_t *conn);
+static const char *proxy_type_to_string(int proxy_type);
+static int get_proxy_type(void);
/** The last IPv4 address that our network interface seemed to have been
* binding to, in host order. We use this to detect when our IP changes. */
@@ -74,6 +81,15 @@ static uint32_t last_interface_ip = 0;
* Used to detect IP address changes. */
static smartlist_t *outgoing_addrs = NULL;
+#define CASE_ANY_LISTENER_TYPE \
+ case CONN_TYPE_OR_LISTENER: \
+ case CONN_TYPE_AP_LISTENER: \
+ case CONN_TYPE_DIR_LISTENER: \
+ case CONN_TYPE_CONTROL_LISTENER: \
+ case CONN_TYPE_AP_TRANS_LISTENER: \
+ case CONN_TYPE_AP_NATD_LISTENER: \
+ case CONN_TYPE_AP_DNS_LISTENER
+
/**************************************************************/
/**
@@ -114,13 +130,7 @@ conn_state_to_string(int type, int state)
{
static char buf[96];
switch (type) {
- case CONN_TYPE_OR_LISTENER:
- case CONN_TYPE_AP_LISTENER:
- case CONN_TYPE_AP_TRANS_LISTENER:
- case CONN_TYPE_AP_NATD_LISTENER:
- case CONN_TYPE_AP_DNS_LISTENER:
- case CONN_TYPE_DIR_LISTENER:
- case CONN_TYPE_CONTROL_LISTENER:
+ CASE_ANY_LISTENER_TYPE:
if (state == LISTENER_STATE_READY)
return "ready";
break;
@@ -130,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;
@@ -237,16 +250,26 @@ or_connection_new(int socket_family)
return or_conn;
}
+/** Allocate and return a new entry_connection_t, initialized as by
+ * connection_init(). */
+entry_connection_t *
+entry_connection_new(int type, int socket_family)
+{
+ entry_connection_t *entry_conn = tor_malloc_zero(sizeof(entry_connection_t));
+ tor_assert(type == CONN_TYPE_AP);
+ connection_init(time(NULL), ENTRY_TO_CONN(entry_conn), type, socket_family);
+ entry_conn->socks_request = socks_request_new();
+ return entry_conn;
+}
+
/** Allocate and return a new edge_connection_t, initialized as by
* connection_init(). */
edge_connection_t *
edge_connection_new(int type, int socket_family)
{
edge_connection_t *edge_conn = tor_malloc_zero(sizeof(edge_connection_t));
- tor_assert(type == CONN_TYPE_EXIT || type == CONN_TYPE_AP);
+ tor_assert(type == CONN_TYPE_EXIT);
connection_init(time(NULL), TO_CONN(edge_conn), type, socket_family);
- if (type == CONN_TYPE_AP)
- edge_conn->socks_request = tor_malloc_zero(sizeof(socks_request_t));
return edge_conn;
}
@@ -263,6 +286,17 @@ control_connection_new(int socket_family)
return control_conn;
}
+/** Allocate and return a new listener_connection_t, initialized as by
+ * connection_init(). */
+listener_connection_t *
+listener_connection_new(int type, int socket_family)
+{
+ listener_connection_t *listener_conn =
+ tor_malloc_zero(sizeof(listener_connection_t));
+ connection_init(time(NULL), TO_CONN(listener_conn), type, socket_family);
+ return listener_conn;
+}
+
/** Allocate, initialize, and return a new connection_t subtype of <b>type</b>
* to make or receive connections of address family <b>socket_family</b>. The
* type should be one of the CONN_TYPE_* constants. */
@@ -274,15 +308,20 @@ connection_new(int type, int socket_family)
return TO_CONN(or_connection_new(socket_family));
case CONN_TYPE_EXIT:
- case CONN_TYPE_AP:
return TO_CONN(edge_connection_new(type, socket_family));
+ case CONN_TYPE_AP:
+ return ENTRY_TO_CONN(entry_connection_new(type, socket_family));
+
case CONN_TYPE_DIR:
return TO_CONN(dir_connection_new(socket_family));
case CONN_TYPE_CONTROL:
return TO_CONN(control_connection_new(socket_family));
+ CASE_ANY_LISTENER_TYPE:
+ return TO_CONN(listener_connection_new(type, socket_family));
+
default: {
connection_t *conn = tor_malloc_zero(sizeof(connection_t));
connection_init(time(NULL), conn, type, socket_family);
@@ -314,15 +353,20 @@ connection_init(time_t now, connection_t *conn, int type, int socket_family)
conn->magic = OR_CONNECTION_MAGIC;
break;
case CONN_TYPE_EXIT:
- case CONN_TYPE_AP:
conn->magic = EDGE_CONNECTION_MAGIC;
break;
+ case CONN_TYPE_AP:
+ conn->magic = ENTRY_CONNECTION_MAGIC;
+ break;
case CONN_TYPE_DIR:
conn->magic = DIR_CONNECTION_MAGIC;
break;
case CONN_TYPE_CONTROL:
conn->magic = CONTROL_CONNECTION_MAGIC;
break;
+ CASE_ANY_LISTENER_TYPE:
+ conn->magic = LISTENER_CONNECTION_MAGIC;
+ break;
default:
conn->magic = BASE_CONNECTION_MAGIC;
break;
@@ -379,6 +423,10 @@ _connection_free(connection_t *conn)
memlen = sizeof(or_connection_t);
break;
case CONN_TYPE_AP:
+ tor_assert(conn->magic == ENTRY_CONNECTION_MAGIC);
+ mem = TO_ENTRY_CONN(conn);
+ memlen = sizeof(entry_connection_t);
+ break;
case CONN_TYPE_EXIT:
tor_assert(conn->magic == EDGE_CONNECTION_MAGIC);
mem = TO_EDGE_CONN(conn);
@@ -394,6 +442,11 @@ _connection_free(connection_t *conn)
mem = TO_CONTROL_CONN(conn);
memlen = sizeof(control_connection_t);
break;
+ CASE_ANY_LISTENER_TYPE:
+ tor_assert(conn->magic == LISTENER_CONNECTION_MAGIC);
+ mem = TO_LISTENER_CONN(conn);
+ memlen = sizeof(listener_connection_t);
+ break;
default:
tor_assert(conn->magic == BASE_CONNECTION_MAGIC);
mem = conn;
@@ -437,15 +490,21 @@ _connection_free(connection_t *conn)
smartlist_free(or_conn->active_circuit_pqueue);
tor_free(or_conn->nickname);
}
- if (CONN_IS_EDGE(conn)) {
- edge_connection_t *edge_conn = TO_EDGE_CONN(conn);
- tor_free(edge_conn->chosen_exit_name);
- if (edge_conn->socks_request) {
- memset(edge_conn->socks_request, 0xcc, sizeof(socks_request_t));
- tor_free(edge_conn->socks_request);
+ if (conn->type == CONN_TYPE_AP) {
+ entry_connection_t *entry_conn = TO_ENTRY_CONN(conn);
+ tor_free(entry_conn->chosen_exit_name);
+ tor_free(entry_conn->original_dest_address);
+ if (entry_conn->socks_request)
+ socks_request_free(entry_conn->socks_request);
+ if (entry_conn->pending_optimistic_data) {
+ generic_buffer_free(entry_conn->pending_optimistic_data);
}
-
- rend_data_free(edge_conn->rend_data);
+ if (entry_conn->sending_optimistic_data) {
+ generic_buffer_free(entry_conn->sending_optimistic_data);
+ }
+ }
+ if (CONN_IS_EDGE(conn)) {
+ rend_data_free(TO_EDGE_CONN(conn)->rend_data);
}
if (conn->type == CONN_TYPE_CONTROL) {
control_connection_t *control_conn = TO_CONTROL_CONN(conn);
@@ -478,8 +537,8 @@ _connection_free(connection_t *conn)
rend_data_free(dir_conn->rend_data);
}
- if (conn->s >= 0) {
- log_debug(LD_NET,"closing fd %d.",conn->s);
+ if (SOCKET_OK(conn->s)) {
+ log_debug(LD_NET,"closing fd %d.",(int)conn->s);
tor_close_socket(conn->s);
conn->s = -1;
}
@@ -492,6 +551,7 @@ _connection_free(connection_t *conn)
#ifdef USE_BUFFEREVENTS
if (conn->type == CONN_TYPE_OR && TO_OR_CONN(conn)->bucket_cfg) {
ev_token_bucket_cfg_free(TO_OR_CONN(conn)->bucket_cfg);
+ TO_OR_CONN(conn)->bucket_cfg = NULL;
}
#endif
@@ -529,39 +589,9 @@ connection_free(connection_t *conn)
_connection_free(conn);
}
-/** Call _connection_free() on every connection in our array, and release all
- * storage held by connection.c. This is used by cpuworkers and dnsworkers
- * when they fork, so they don't keep resources held open (especially
- * sockets).
- *
- * Don't do the checks in connection_free(), because they will
- * fail.
- */
-void
-connection_free_all(void)
-{
- smartlist_t *conns = get_connection_array();
-
- /* We don't want to log any messages to controllers. */
- SMARTLIST_FOREACH(conns, connection_t *, conn,
- if (conn->type == CONN_TYPE_CONTROL)
- TO_CONTROL_CONN(conn)->event_mask = 0);
-
- control_update_global_event_mask();
-
- /* Unlink everything from the identity map. */
- connection_or_clear_identity_map();
-
- SMARTLIST_FOREACH(conns, connection_t *, conn, _connection_free(conn));
-
- if (outgoing_addrs) {
- SMARTLIST_FOREACH(outgoing_addrs, void*, addr, tor_free(addr));
- smartlist_free(outgoing_addrs);
- outgoing_addrs = NULL;
- }
-}
-
-/** Do any cleanup needed:
+/**
+ * Called when we're about to finally unlink and free a connection:
+ * perform necessary accounting and cleanup
* - Directory conns that failed to fetch a rendezvous descriptor
* need to inform pending rendezvous streams.
* - OR conns need to call rep_hist_note_*() to record status.
@@ -574,114 +604,20 @@ connection_free_all(void)
void
connection_about_to_close_connection(connection_t *conn)
{
- circuit_t *circ;
- dir_connection_t *dir_conn;
- or_connection_t *or_conn;
- edge_connection_t *edge_conn;
- time_t now = time(NULL);
-
tor_assert(conn->marked_for_close);
- if (CONN_IS_EDGE(conn)) {
- edge_conn = TO_EDGE_CONN(conn);
- if (!edge_conn->edge_has_sent_end) {
- log_warn(LD_BUG, "(Harmless.) Edge connection (marked at %s:%d) "
- "hasn't sent end yet?",
- conn->marked_for_close_file, conn->marked_for_close);
- tor_fragile_assert();
- }
- }
-
switch (conn->type) {
case CONN_TYPE_DIR:
- dir_conn = TO_DIR_CONN(conn);
- if (conn->state < DIR_CONN_STATE_CLIENT_FINISHED) {
- /* It's a directory connection and connecting or fetching
- * failed: forget about this router, and maybe try again. */
- connection_dir_request_failed(dir_conn);
- }
- /* If we were trying to fetch a v2 rend desc and did not succeed,
- * retry as needed. (If a fetch is successful, the connection state
- * is changed to DIR_PURPOSE_HAS_FETCHED_RENDDESC to mark that
- * refetching is unnecessary.) */
- if (conn->purpose == DIR_PURPOSE_FETCH_RENDDESC_V2 &&
- dir_conn->rend_data &&
- strlen(dir_conn->rend_data->onion_address) ==
- REND_SERVICE_ID_LEN_BASE32)
- rend_client_refetch_v2_renddesc(dir_conn->rend_data);
+ connection_dir_about_to_close(TO_DIR_CONN(conn));
break;
case CONN_TYPE_OR:
- or_conn = TO_OR_CONN(conn);
- /* Remember why we're closing this connection. */
- if (conn->state != OR_CONN_STATE_OPEN) {
- /* Inform any pending (not attached) circs that they should
- * give up. */
- circuit_n_conn_done(TO_OR_CONN(conn), 0);
- /* now mark things down as needed */
- if (connection_or_nonopen_was_started_here(or_conn)) {
- or_options_t *options = get_options();
- rep_hist_note_connect_failed(or_conn->identity_digest, now);
- entry_guard_register_connect_status(or_conn->identity_digest,0,
- !options->HTTPSProxy, now);
- if (conn->state >= OR_CONN_STATE_TLS_HANDSHAKING) {
- int reason = tls_error_to_orconn_end_reason(or_conn->tls_error);
- control_event_or_conn_status(or_conn, OR_CONN_EVENT_FAILED,
- reason);
- if (!authdir_mode_tests_reachability(options))
- control_event_bootstrap_problem(
- orconn_end_reason_to_control_string(reason), reason);
- }
- }
- } else if (conn->hold_open_until_flushed) {
- /* We only set hold_open_until_flushed when we're intentionally
- * closing a connection. */
- rep_hist_note_disconnect(or_conn->identity_digest, now);
- control_event_or_conn_status(or_conn, OR_CONN_EVENT_CLOSED,
- tls_error_to_orconn_end_reason(or_conn->tls_error));
- } else if (!tor_digest_is_zero(or_conn->identity_digest)) {
- rep_hist_note_connection_died(or_conn->identity_digest, now);
- control_event_or_conn_status(or_conn, OR_CONN_EVENT_CLOSED,
- tls_error_to_orconn_end_reason(or_conn->tls_error));
- }
- /* Now close all the attached circuits on it. */
- circuit_unlink_all_from_or_conn(TO_OR_CONN(conn),
- END_CIRC_REASON_OR_CONN_CLOSED);
+ connection_or_about_to_close(TO_OR_CONN(conn));
break;
case CONN_TYPE_AP:
- edge_conn = TO_EDGE_CONN(conn);
- if (edge_conn->socks_request->has_finished == 0) {
- /* since conn gets removed right after this function finishes,
- * there's no point trying to send back a reply at this point. */
- log_warn(LD_BUG,"Closing stream (marked at %s:%d) without sending"
- " back a socks reply.",
- conn->marked_for_close_file, conn->marked_for_close);
- }
- if (!edge_conn->end_reason) {
- log_warn(LD_BUG,"Closing stream (marked at %s:%d) without having"
- " set end_reason.",
- conn->marked_for_close_file, conn->marked_for_close);
- }
- if (edge_conn->dns_server_request) {
- log_warn(LD_BUG,"Closing stream (marked at %s:%d) without having"
- " replied to DNS request.",
- conn->marked_for_close_file, conn->marked_for_close);
- dnsserv_reject_request(edge_conn);
- }
- control_event_stream_bandwidth(edge_conn);
- control_event_stream_status(edge_conn, STREAM_EVENT_CLOSED,
- edge_conn->end_reason);
- circ = circuit_get_by_edge_conn(edge_conn);
- if (circ)
- circuit_detach_stream(circ, edge_conn);
+ connection_ap_about_to_close(TO_ENTRY_CONN(conn));
break;
case CONN_TYPE_EXIT:
- edge_conn = TO_EDGE_CONN(conn);
- circ = circuit_get_by_edge_conn(edge_conn);
- if (circ)
- circuit_detach_stream(circ, edge_conn);
- if (conn->state == EXIT_CONN_STATE_RESOLVING) {
- connection_dns_remove(edge_conn);
- }
+ connection_exit_about_to_close(TO_EDGE_CONN(conn));
break;
}
}
@@ -706,14 +642,14 @@ connection_close_immediate(connection_t *conn)
}
if (conn->outbuf_flushlen) {
log_info(LD_NET,"fd %d, type %s, state %s, %d bytes on outbuf.",
- conn->s, conn_type_to_string(conn->type),
+ (int)conn->s, conn_type_to_string(conn->type),
conn_state_to_string(conn->type, conn->state),
(int)conn->outbuf_flushlen);
}
connection_unregister_events(conn);
- if (conn->s >= 0)
+ if (SOCKET_OK(conn->s))
tor_close_socket(conn->s);
conn->s = -1;
if (conn->linked)
@@ -782,7 +718,7 @@ connection_expire_held_open(void)
log_fn(severity, LD_NET,
"Giving up on marked_for_close conn that's been flushing "
"for 15s (fd %d, type %s, state %s).",
- conn->s, conn_type_to_string(conn->type),
+ (int)conn->s, conn_type_to_string(conn->type),
conn_state_to_string(conn->type, conn->state));
conn->hold_open_until_flushed = 0;
}
@@ -790,48 +726,6 @@ connection_expire_held_open(void)
});
}
-/** Create an AF_INET listenaddr struct.
- * <b>listenaddress</b> provides the host and optionally the port information
- * for the new structure. If no port is provided in <b>listenaddress</b> then
- * <b>listenport</b> is used.
- *
- * If not NULL <b>readable_address</b> will contain a copy of the host part of
- * <b>listenaddress</b>.
- *
- * The listenaddr struct has to be freed by the caller.
- */
-static struct sockaddr_in *
-create_inet_sockaddr(const char *listenaddress, int listenport,
- char **readable_address, socklen_t *socklen_out) {
- struct sockaddr_in *listenaddr = NULL;
- uint32_t addr;
- uint16_t usePort = 0;
-
- if (parse_addr_port(LOG_WARN,
- listenaddress, readable_address, &addr, &usePort)<0) {
- log_warn(LD_CONFIG,
- "Error parsing/resolving ListenAddress %s", listenaddress);
- goto err;
- }
- if (usePort==0) {
- if (listenport != CFG_AUTO_PORT)
- usePort = listenport;
- }
-
- listenaddr = tor_malloc_zero(sizeof(struct sockaddr_in));
- listenaddr->sin_addr.s_addr = htonl(addr);
- listenaddr->sin_family = AF_INET;
- listenaddr->sin_port = htons((uint16_t) usePort);
-
- *socklen_out = sizeof(struct sockaddr_in);
-
- return listenaddr;
-
- err:
- tor_free(listenaddr);
- return NULL;
-}
-
#ifdef HAVE_SYS_UN_H
/** Create an AF_UNIX listenaddr struct.
* <b>listenaddress</b> provides the path to the Unix socket.
@@ -854,7 +748,13 @@ create_unix_sockaddr(const char *listenaddress, char **readable_address,
sockaddr = tor_malloc_zero(sizeof(struct sockaddr_un));
sockaddr->sun_family = AF_UNIX;
- strncpy(sockaddr->sun_path, listenaddress, sizeof(sockaddr->sun_path));
+ if (strlcpy(sockaddr->sun_path, listenaddress, sizeof(sockaddr->sun_path))
+ >= sizeof(sockaddr->sun_path)) {
+ log_warn(LD_CONFIG, "Unix socket path '%s' is too long to fit.",
+ escaped(listenaddress));
+ tor_free(sockaddr);
+ return NULL;
+ }
if (readable_address)
*readable_address = tor_strdup(listenaddress);
@@ -899,7 +799,7 @@ warn_too_many_conns(void)
/** Check whether we should be willing to open an AF_UNIX socket in
* <b>path</b>. Return 0 if we should go ahead and -1 if we shouldn't. */
static int
-check_location_for_unix_socket(or_options_t *options, const char *path)
+check_location_for_unix_socket(const or_options_t *options, const char *path)
{
int r = -1;
char *p = tor_strdup(path);
@@ -910,7 +810,7 @@ check_location_for_unix_socket(or_options_t *options, const char *path)
if (options->ControlSocketsGroupWritable)
flags |= CPD_GROUP_OK;
- if (check_private_dir(p, flags) < 0) {
+ if (check_private_dir(p, flags, options->User) < 0) {
char *escpath, *escdir;
escpath = esc_for_log(path);
escdir = esc_for_log(p);
@@ -935,7 +835,7 @@ check_location_for_unix_socket(or_options_t *options, const char *path)
/** Tell the TCP stack that it shouldn't wait for a long time after
* <b>sock</b> has closed before reusing its port. */
static void
-make_socket_reuseable(int sock)
+make_socket_reuseable(tor_socket_t sock)
{
#ifdef MS_WINDOWS
(void) sock;
@@ -960,12 +860,20 @@ make_socket_reuseable(int sock)
static connection_t *
connection_create_listener(const struct sockaddr *listensockaddr,
socklen_t socklen,
- int type, char* address)
+ int type, const char *address,
+ const port_cfg_t *port_cfg)
{
+ listener_connection_t *lis_conn;
connection_t *conn;
- int s; /* the socket we're going to make */
+ tor_socket_t s; /* the socket we're going to make */
+ or_options_t const *options = get_options();
+#if defined(HAVE_PWD_H) && defined(HAVE_SYS_UN_H)
+ struct passwd *pw = NULL;
+#endif
uint16_t usePort = 0, gotPort = 0;
int start_reading = 0;
+ static int global_next_session_group = SESSION_GROUP_FIRST_AUTO;
+ tor_addr_t addr;
if (get_n_open_sockets() >= get_options()->_ConnLimit-1) {
warn_too_many_conns();
@@ -973,7 +881,6 @@ connection_create_listener(const struct sockaddr *listensockaddr,
}
if (listensockaddr->sa_family == AF_INET) {
- tor_addr_t addr;
int is_tcp = (type != CONN_TYPE_AP_DNS_LISTENER);
if (is_tcp)
start_reading = 1;
@@ -986,8 +893,9 @@ connection_create_listener(const struct sockaddr *listensockaddr,
s = tor_open_socket(PF_INET,
is_tcp ? SOCK_STREAM : SOCK_DGRAM,
is_tcp ? IPPROTO_TCP: IPPROTO_UDP);
- if (s < 0) {
- log_warn(LD_NET,"Socket creation failed.");
+ if (!SOCKET_OK(s)) {
+ log_warn(LD_NET,"Socket creation failed: %s",
+ tor_socket_strerror(tor_socket_errno(-1)));
goto err;
}
@@ -1035,12 +943,14 @@ connection_create_listener(const struct sockaddr *listensockaddr,
* and listeners at the same time */
tor_assert(type == CONN_TYPE_CONTROL_LISTENER);
- if (check_location_for_unix_socket(get_options(), address) < 0)
+ if (check_location_for_unix_socket(options, address) < 0)
goto err;
log_notice(LD_NET, "Opening %s on %s",
conn_type_to_string(type), address);
+ tor_addr_make_unspec(&addr);
+
if (unlink(address) < 0 && errno != ENOENT) {
log_warn(LD_NET, "Could not unlink %s: %s", address,
strerror(errno));
@@ -1057,7 +967,20 @@ connection_create_listener(const struct sockaddr *listensockaddr,
tor_socket_strerror(tor_socket_errno(s)));
goto err;
}
- if (get_options()->ControlSocketsGroupWritable) {
+#ifdef HAVE_PWD_H
+ if (options->User) {
+ pw = getpwnam(options->User);
+ if (pw == NULL) {
+ log_warn(LD_NET,"Unable to chown() %s socket: user %s not found.",
+ address, options->User);
+ } else if (chown(address, pw->pw_uid, pw->pw_gid) < 0) {
+ log_warn(LD_NET,"Unable to chown() %s socket: %s.",
+ address, strerror(errno));
+ goto err;
+ }
+ }
+#endif
+ if (options->ControlSocketsGroupWritable) {
/* We need to use chmod; fchmod doesn't work on sockets on all
* platforms. */
if (chmod(address, 0660) < 0) {
@@ -1073,6 +996,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.",
@@ -1082,11 +1007,23 @@ connection_create_listener(const struct sockaddr *listensockaddr,
set_socket_nonblocking(s);
- conn = connection_new(type, listensockaddr->sa_family);
+ lis_conn = listener_connection_new(type, listensockaddr->sa_family);
+ conn = TO_CONN(lis_conn);
conn->socket_family = listensockaddr->sa_family;
conn->s = s;
conn->address = tor_strdup(address);
conn->port = gotPort;
+ tor_addr_copy(&conn->addr, &addr);
+
+ if (port_cfg->isolation_flags) {
+ lis_conn->isolation_flags = port_cfg->isolation_flags;
+ if (port_cfg->session_group >= 0) {
+ lis_conn->session_group = port_cfg->session_group;
+ } else {
+ /* XXXX023 This can wrap after ~INT_MAX ports are opened. */
+ lis_conn->session_group = global_next_session_group--;
+ }
+ }
if (connection_add(conn) < 0) { /* no space, forget it */
log_warn(LD_NET,"connection_add for listener failed. Giving up.");
@@ -1098,9 +1035,6 @@ connection_create_listener(const struct sockaddr *listensockaddr,
"%s listening on port %u.",
conn_type_to_string(type), gotPort);
- if (type == CONN_TYPE_CONTROL_LISTENER)
- control_ports_write_to_file();
-
conn->state = LISTENER_STATE_READY;
if (start_reading) {
connection_start_reading(conn);
@@ -1179,20 +1113,20 @@ check_sockaddr_family_match(sa_family_t got, connection_t *listener)
static int
connection_handle_listener_read(connection_t *conn, int new_type)
{
- int news; /* the new socket */
+ tor_socket_t news; /* the new socket */
connection_t *newconn;
/* information about the remote peer when connecting to other routers */
char addrbuf[256];
struct sockaddr *remote = (struct sockaddr*)addrbuf;
/* length of the remote address. Must be whatever accept() needs. */
socklen_t remotelen = (socklen_t)sizeof(addrbuf);
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
tor_assert((size_t)remotelen >= sizeof(struct sockaddr_in));
memset(addrbuf, 0, sizeof(addrbuf));
news = tor_accept_socket(conn->s,remote,&remotelen);
- if (news < 0) { /* accept() error */
+ if (!SOCKET_OK(news)) { /* accept() error */
int e = tor_socket_errno(conn->s);
if (ERRNO_IS_ACCEPT_EAGAIN(e)) {
return 0; /* he hung up before we could accept(). that's fine. */
@@ -1208,7 +1142,7 @@ connection_handle_listener_read(connection_t *conn, int new_type)
}
log_debug(LD_NET,
"Connection accepted on socket %d (child of fd %d).",
- news,conn->s);
+ (int)news,(int)conn->s);
make_socket_reuseable(news);
set_socket_nonblocking(news);
@@ -1300,7 +1234,7 @@ connection_handle_listener_read(connection_t *conn, int new_type)
return 0; /* no need to tear down the parent */
}
- if (connection_init_accepted_conn(newconn, conn->type) < 0) {
+ if (connection_init_accepted_conn(newconn, TO_LISTENER_CONN(conn)) < 0) {
if (! newconn->marked_for_close)
connection_mark_for_close(newconn);
return 0;
@@ -1314,7 +1248,8 @@ connection_handle_listener_read(connection_t *conn, int new_type)
* and place it in circuit_wait.
*/
static int
-connection_init_accepted_conn(connection_t *conn, uint8_t listener_type)
+connection_init_accepted_conn(connection_t *conn,
+ const listener_connection_t *listener)
{
connection_start_reading(conn);
@@ -1323,16 +1258,20 @@ connection_init_accepted_conn(connection_t *conn, uint8_t listener_type)
control_event_or_conn_status(TO_OR_CONN(conn), OR_CONN_EVENT_NEW, 0);
return connection_tls_start_handshake(TO_OR_CONN(conn), 1);
case CONN_TYPE_AP:
- switch (listener_type) {
+ TO_ENTRY_CONN(conn)->isolation_flags = listener->isolation_flags;
+ TO_ENTRY_CONN(conn)->session_group = listener->session_group;
+ TO_ENTRY_CONN(conn)->nym_epoch = get_signewnym_epoch();
+ TO_ENTRY_CONN(conn)->socks_request->listener_type = listener->_base.type;
+ switch (TO_CONN(listener)->type) {
case CONN_TYPE_AP_LISTENER:
conn->state = AP_CONN_STATE_SOCKS_WAIT;
break;
case CONN_TYPE_AP_TRANS_LISTENER:
- TO_EDGE_CONN(conn)->is_transparent_ap = 1;
+ TO_ENTRY_CONN(conn)->is_transparent_ap = 1;
conn->state = AP_CONN_STATE_CIRCUIT_WAIT;
- return connection_ap_process_transparent(TO_EDGE_CONN(conn));
+ return connection_ap_process_transparent(TO_ENTRY_CONN(conn));
case CONN_TYPE_AP_NATD_LISTENER:
- TO_EDGE_CONN(conn)->is_transparent_ap = 1;
+ TO_ENTRY_CONN(conn)->is_transparent_ap = 1;
conn->state = AP_CONN_STATE_NATD_WAIT;
break;
}
@@ -1361,11 +1300,12 @@ int
connection_connect(connection_t *conn, const char *address,
const tor_addr_t *addr, uint16_t port, int *socket_error)
{
- int s, inprogress = 0;
+ tor_socket_t s;
+ int inprogress = 0;
char addrbuf[256];
struct sockaddr *dest_addr;
int dest_addr_len;
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
int protocol_family;
if (get_n_open_sockets() >= get_options()->_ConnLimit-1) {
@@ -1460,6 +1400,7 @@ connection_proxy_state_to_string(int state)
static const char *unknown = "???";
static const char *states[] = {
"PROXY_NONE",
+ "PROXY_INFANT",
"PROXY_HTTPS_WANT_CONNECT_OK",
"PROXY_SOCKS4_WANT_CONNECT_OK",
"PROXY_SOCKS5_WANT_AUTH_METHOD_NONE",
@@ -1488,7 +1429,7 @@ connection_proxy_state_to_string(int state)
int
connection_proxy_connect(connection_t *conn, int type)
{
- or_options_t *options;
+ const or_options_t *options;
tor_assert(conn);
@@ -1822,6 +1763,113 @@ connection_read_proxy_handshake(connection_t *conn)
return ret;
}
+/** Given a list of listener connections in <b>old_conns</b>, and list of
+ * port_cfg_t entries in <b>ports</b>, open a new listener for every port in
+ * <b>ports</b> that does not already have a listener in <b>old_conns</b>.
+ *
+ * Remove from <b>old_conns</b> every connection that has a corresponding
+ * entry in <b>ports</b>. Add to <b>new_conns</b> new every connection we
+ * launch.
+ *
+ * Return 0 on success, -1 on failure.
+ **/
+static int
+retry_listener_ports(smartlist_t *old_conns,
+ const smartlist_t *ports,
+ smartlist_t *new_conns)
+{
+ smartlist_t *launch = smartlist_create();
+ int r = 0;
+
+ smartlist_add_all(launch, ports);
+
+ /* Iterate through old_conns, comparing it to launch: remove from both lists
+ * each pair of elements that corresponds to the same port. */
+ SMARTLIST_FOREACH_BEGIN(old_conns, connection_t *, conn) {
+ const port_cfg_t *found_port = NULL;
+
+ /* Okay, so this is a listener. Is it configured? */
+ SMARTLIST_FOREACH_BEGIN(launch, const port_cfg_t *, wanted) {
+ if (conn->type != wanted->type)
+ continue;
+ if ((conn->socket_family != AF_UNIX && wanted->is_unix_addr) ||
+ (conn->socket_family == AF_UNIX && ! wanted->is_unix_addr))
+ continue;
+
+ if (wanted->is_unix_addr) {
+ if (conn->socket_family == AF_UNIX &&
+ !strcmp(wanted->unix_addr, conn->address)) {
+ found_port = wanted;
+ break;
+ }
+ } else {
+ int port_matches;
+ if (wanted->port == CFG_AUTO_PORT) {
+ port_matches = 1;
+ } else {
+ port_matches = (wanted->port == conn->port);
+ }
+ if (port_matches && tor_addr_eq(&wanted->addr, &conn->addr)) {
+ found_port = wanted;
+ break;
+ }
+ }
+ } SMARTLIST_FOREACH_END(wanted);
+
+ if (found_port) {
+ /* This listener is already running; we don't need to launch it. */
+ //log_debug(LD_NET, "Already have %s on %s:%d",
+ // conn_type_to_string(found_port->type), conn->address, conn->port);
+ smartlist_remove(launch, found_port);
+ /* And we can remove the connection from old_conns too. */
+ SMARTLIST_DEL_CURRENT(old_conns, conn);
+ }
+ } SMARTLIST_FOREACH_END(conn);
+
+ /* Now open all the listeners that are configured but not opened. */
+ SMARTLIST_FOREACH_BEGIN(launch, const port_cfg_t *, port) {
+ struct sockaddr *listensockaddr;
+ socklen_t listensocklen = 0;
+ char *address=NULL;
+ connection_t *conn;
+ int real_port = port->port == CFG_AUTO_PORT ? 0 : port->port;
+ tor_assert(real_port <= UINT16_MAX);
+
+ if (port->is_unix_addr) {
+ listensockaddr = (struct sockaddr *)
+ create_unix_sockaddr(port->unix_addr,
+ &address, &listensocklen);
+ } else {
+ listensockaddr = tor_malloc(sizeof(struct sockaddr_storage));
+ listensocklen = tor_addr_to_sockaddr(&port->addr,
+ real_port,
+ listensockaddr,
+ sizeof(struct sockaddr_storage));
+ address = tor_dup_addr(&port->addr);
+ }
+
+ if (listensockaddr) {
+ conn = connection_create_listener(listensockaddr, listensocklen,
+ port->type, address, port);
+ tor_free(listensockaddr);
+ tor_free(address);
+ } else {
+ conn = NULL;
+ }
+
+ if (!conn) {
+ r = -1;
+ } else {
+ if (new_conns)
+ smartlist_add(new_conns, conn);
+ }
+ } SMARTLIST_FOREACH_END(port);
+
+ smartlist_free(launch);
+
+ 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
@@ -1829,168 +1877,73 @@ connection_read_proxy_handshake(connection_t *conn)
* connection binding to each one. Otherwise, create a single
* connection binding to the address <b>default_addr</b>.)
*
- * Only launch the listeners of this type that are not already open, and
- * only close listeners that are no longer wanted. Existing listeners
- * that are still configured are not touched.
- *
- * If <b>disable_all_conns</b> is set, then never open new conns, and
- * close the existing ones.
+ * 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.
*
- * Add all old conns that should be closed to <b>replaced_conns</b>.
- * Add all new connections to <b>new_conns</b>.
+ * All new connections we launch are added to <b>new_conns</b>.
*/
static int
-retry_listeners(int type, config_line_t *cfg,
+retry_listeners(smartlist_t *old_conns,
+ int type, const config_line_t *cfg,
int port_option, const char *default_addr,
- smartlist_t *replaced_conns,
smartlist_t *new_conns,
- int disable_all_conns,
- int socket_family)
+ int is_sockaddr_un)
{
- smartlist_t *launch = smartlist_create(), *conns;
- int free_launch_elts = 1;
- int r;
- config_line_t *c;
- connection_t *conn;
- config_line_t *line;
-
- tor_assert(socket_family == AF_INET || socket_family == AF_UNIX);
+ smartlist_t *ports = smartlist_create();
+ tor_addr_t dflt_addr;
+ int retval = 0;
- if (cfg && port_option) {
- for (c = cfg; c; c = c->next) {
- smartlist_add(launch, c);
- }
- free_launch_elts = 0;
- } else if (port_option) {
- line = tor_malloc_zero(sizeof(config_line_t));
- line->key = tor_strdup("");
- line->value = tor_strdup(default_addr);
- smartlist_add(launch, line);
+ if (default_addr) {
+ tor_addr_parse(&dflt_addr, default_addr);
+ } else {
+ tor_addr_make_unspec(&dflt_addr);
}
- /*
- SMARTLIST_FOREACH(launch, config_line_t *, l,
- log_fn(LOG_NOTICE, "#%s#%s", l->key, l->value));
- */
-
- conns = get_connection_array();
- SMARTLIST_FOREACH(conns, connection_t *, conn,
- {
- if (conn->type != type ||
- conn->socket_family != socket_family ||
- conn->marked_for_close)
- continue;
- /* Okay, so this is a listener. Is it configured? */
- line = NULL;
- SMARTLIST_FOREACH(launch, config_line_t *, wanted,
- {
- char *address=NULL;
- uint16_t port;
- switch (socket_family) {
- case AF_INET:
- if (!parse_addr_port(LOG_WARN,
- wanted->value, &address, NULL, &port)) {
- int addr_matches = !strcasecmp(address, conn->address);
- int port_matches;
- tor_free(address);
- if (port) {
- /* The Listener line has a port */
- port_matches = (port == conn->port);
- } else if (port_option == CFG_AUTO_PORT) {
- /* The Listener line has no port, and the Port line is "auto".
- * "auto" matches anything; transitions from any port to
- * "auto" succeed. */
- port_matches = 1;
- } else {
- /* The Listener line has no port, and the Port line is "auto".
- * "auto" matches anything; transitions from any port to
- * "auto" succeed. */
- port_matches = (port_option == conn->port);
- }
- if (port_matches && addr_matches) {
- line = wanted;
- break;
- }
- }
- break;
- case AF_UNIX:
- if (!strcasecmp(wanted->value, conn->address)) {
- line = wanted;
- break;
- }
- break;
- default:
- tor_assert(0);
- }
- });
- if (!line || disable_all_conns) {
- /* This one isn't configured. Close it. */
- log_notice(LD_NET, "Closing no-longer-configured %s on %s:%d",
- conn_type_to_string(type), conn->address, conn->port);
- if (replaced_conns) {
- smartlist_add(replaced_conns, conn);
- } else {
- connection_close_immediate(conn);
- connection_mark_for_close(conn);
- }
+ 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 {
- /* It's configured; we don't need to launch it. */
-// log_debug(LD_NET, "Already have %s on %s:%d",
-// conn_type_to_string(type), conn->address, conn->port);
- smartlist_remove(launch, line);
- if (free_launch_elts)
- config_free_lines(line);
- }
- });
-
- /* Now open all the listeners that are configured but not opened. */
- r = 0;
- if (!disable_all_conns) {
- SMARTLIST_FOREACH_BEGIN(launch, config_line_t *, cfg_line) {
- char *address = NULL;
- struct sockaddr *listensockaddr;
- socklen_t listensocklen = 0;
-
- switch (socket_family) {
- case AF_INET:
- listensockaddr = (struct sockaddr *)
- create_inet_sockaddr(cfg_line->value,
- port_option,
- &address, &listensocklen);
- break;
- case AF_UNIX:
- listensockaddr = (struct sockaddr *)
- create_unix_sockaddr(cfg_line->value,
- &address, &listensocklen);
- break;
- default:
- tor_assert(0);
- }
-
- if (listensockaddr) {
- conn = connection_create_listener(listensockaddr, listensocklen,
- type, address);
- tor_free(listensockaddr);
- tor_free(address);
- } else
- conn = NULL;
-
- if (!conn) {
- r = -1;
+ 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 (new_conns)
- smartlist_add(new_conns, conn);
+ if (tor_addr_port_lookup(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);
}
- } SMARTLIST_FOREACH_END(cfg_line);
+ port->type = type;
+ port->port = portval ? portval : port_option;
+ smartlist_add(ports, port);
+ }
+ }
}
- if (free_launch_elts) {
- SMARTLIST_FOREACH(launch, config_line_t *, cfg_line,
- config_free_lines(cfg_line));
- }
- smartlist_free(launch);
+ if (retval == -1)
+ goto cleanup;
- return r;
+ 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
@@ -2004,61 +1957,84 @@ int
retry_all_listeners(smartlist_t *replaced_conns,
smartlist_t *new_conns)
{
- or_options_t *options = get_options();
+ smartlist_t *listeners = smartlist_create();
+ const or_options_t *options = get_options();
+ int retval = 0;
+ const uint16_t old_or_port = router_get_advertised_or_port(options);
+ const uint16_t old_dir_port = router_get_advertised_dir_port(options, 0);
+
+ SMARTLIST_FOREACH_BEGIN(get_connection_array(), connection_t *, conn) {
+ if (connection_is_listener(conn) && !conn->marked_for_close)
+ smartlist_add(listeners, conn);
+ } SMARTLIST_FOREACH_END(conn);
- if (retry_listeners(CONN_TYPE_OR_LISTENER, options->ORListenAddress,
- options->ORPort, "0.0.0.0",
- replaced_conns, new_conns, options->ClientOnly,
- AF_INET)<0)
- return -1;
- if (retry_listeners(CONN_TYPE_DIR_LISTENER, options->DirListenAddress,
- options->DirPort, "0.0.0.0",
- replaced_conns, new_conns, options->ClientOnly,
- AF_INET)<0)
- return -1;
- if (retry_listeners(CONN_TYPE_AP_LISTENER, options->SocksListenAddress,
- options->SocksPort, "127.0.0.1",
- replaced_conns, new_conns, 0,
- AF_INET)<0)
- return -1;
- if (retry_listeners(CONN_TYPE_AP_TRANS_LISTENER, options->TransListenAddress,
- options->TransPort, "127.0.0.1",
- replaced_conns, new_conns, 0,
- AF_INET)<0)
- return -1;
- if (retry_listeners(CONN_TYPE_AP_NATD_LISTENER, options->NATDListenAddress,
- options->NATDPort, "127.0.0.1",
- replaced_conns, new_conns, 0,
- AF_INET)<0)
- return -1;
- if (retry_listeners(CONN_TYPE_AP_DNS_LISTENER, options->DNSListenAddress,
- options->DNSPort, "127.0.0.1",
- replaced_conns, new_conns, 0,
- AF_INET)<0)
- return -1;
- if (retry_listeners(CONN_TYPE_CONTROL_LISTENER,
+ 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(),
+ new_conns) < 0)
+ retval = -1;
+ if (retry_listeners(listeners,
+ CONN_TYPE_CONTROL_LISTENER,
options->ControlListenAddress,
options->ControlPort, "127.0.0.1",
- replaced_conns, new_conns, 0,
- AF_INET)<0)
- return -1;
- if (retry_listeners(CONN_TYPE_CONTROL_LISTENER,
+ new_conns, 0) < 0)
+ retval = -1;
+ if (retry_listeners(listeners,
+ CONN_TYPE_CONTROL_LISTENER,
options->ControlSocket,
options->ControlSocket ? 1 : 0, NULL,
- replaced_conns, new_conns, 0,
- AF_UNIX)<0)
- return -1;
+ new_conns, 1) < 0)
+ retval = -1;
+
+ /* Any members that were still in 'listeners' don't correspond to
+ * any configured port. Kill 'em. */
+ SMARTLIST_FOREACH_BEGIN(listeners, connection_t *, conn) {
+ log_notice(LD_NET, "Closing no-longer-configured %s on %s:%d",
+ conn_type_to_string(conn->type), conn->address, conn->port);
+ if (replaced_conns) {
+ smartlist_add(replaced_conns, conn);
+ } else {
+ connection_close_immediate(conn);
+ connection_mark_for_close(conn);
+ }
+ } SMARTLIST_FOREACH_END(conn);
- return 0;
+ smartlist_free(listeners);
+
+ 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
+ * descriptor we had (if any) should be regenerated. (We won't
+ * automatically notice this because of changes in the option,
+ * since the value could be "auto".) */
+ mark_my_descriptor_dirty("Chosen Or/DirPort changed");
+ }
+
+ 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. */
+/** 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)
{
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
if (conn->linked)
return 0; /* Internal connection */
else if (! options->CountPrivateBandwidth &&
@@ -2256,7 +2232,7 @@ global_write_bucket_low(connection_t *conn, size_t attempt, int priority)
if (priority == 1) { /* old-style v1 query */
/* Could we handle *two* of these requests within the next two seconds? */
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
int64_t can_write = (int64_t)smaller_bucket
+ 2*(options->RelayBandwidthRate ? options->RelayBandwidthRate :
options->BandwidthRate);
@@ -2268,24 +2244,11 @@ global_write_bucket_low(connection_t *conn, size_t attempt, int priority)
return 0;
}
-#ifndef USE_BUFFEREVENTS
-/** We just read <b>num_read</b> and wrote <b>num_written</b> bytes
- * onto <b>conn</b>. Decrement buckets appropriately. */
+/** DOCDOC */
static void
-connection_buckets_decrement(connection_t *conn, time_t now,
- size_t num_read, size_t num_written)
+record_num_bytes_transferred_impl(connection_t *conn,
+ time_t now, size_t num_read, size_t num_written)
{
- if (num_written >= INT_MAX || num_read >= INT_MAX) {
- log_err(LD_BUG, "Value out of range. num_read=%lu, num_written=%lu, "
- "connection type=%s, state=%s",
- (unsigned long)num_read, (unsigned long)num_written,
- conn_type_to_string(conn->type),
- conn_state_to_string(conn->type, conn->state));
- if (num_written >= INT_MAX) num_written = 1;
- if (num_read >= INT_MAX) num_read = 1;
- tor_fragile_assert();
- }
-
/* Count bytes of answering direct and tunneled directory requests */
if (conn->type == CONN_TYPE_DIR && conn->purpose == DIR_PURPOSE_SERVER) {
if (num_read > 0)
@@ -2309,6 +2272,52 @@ connection_buckets_decrement(connection_t *conn, time_t now,
}
if (conn->type == CONN_TYPE_EXIT)
rep_hist_note_exit_bytes(conn->port, num_written, num_read);
+}
+
+#ifdef USE_BUFFEREVENTS
+/** DOCDOC */
+static void
+record_num_bytes_transferred(connection_t *conn,
+ time_t now, size_t num_read, size_t num_written)
+{
+ /* XXX023 check if this is necessary */
+ if (num_written >= INT_MAX || num_read >= INT_MAX) {
+ log_err(LD_BUG, "Value out of range. num_read=%lu, num_written=%lu, "
+ "connection type=%s, state=%s",
+ (unsigned long)num_read, (unsigned long)num_written,
+ conn_type_to_string(conn->type),
+ conn_state_to_string(conn->type, conn->state));
+ if (num_written >= INT_MAX) num_written = 1;
+ if (num_read >= INT_MAX) num_read = 1;
+ tor_fragile_assert();
+ }
+
+ record_num_bytes_transferred_impl(conn,now,num_read,num_written);
+}
+#endif
+
+#ifndef USE_BUFFEREVENTS
+/** We just read <b>num_read</b> and wrote <b>num_written</b> bytes
+ * onto <b>conn</b>. Decrement buckets appropriately. */
+static void
+connection_buckets_decrement(connection_t *conn, time_t now,
+ size_t num_read, size_t num_written)
+{
+ if (num_written >= INT_MAX || num_read >= INT_MAX) {
+ log_err(LD_BUG, "Value out of range. num_read=%lu, num_written=%lu, "
+ "connection type=%s, state=%s",
+ (unsigned long)num_read, (unsigned long)num_written,
+ conn_type_to_string(conn->type),
+ conn_state_to_string(conn->type, conn->state));
+ if (num_written >= INT_MAX) num_written = 1;
+ if (num_read >= INT_MAX) num_read = 1;
+ tor_fragile_assert();
+ }
+
+ record_num_bytes_transferred_impl(conn, now, num_read, num_written);
+
+ if (!connection_is_rate_limited(conn))
+ return; /* local IPs are free */
if (connection_counts_as_relayed_traffic(conn, now)) {
global_relayed_read_bucket -= (int)num_read;
@@ -2374,7 +2383,7 @@ connection_consider_empty_write_buckets(connection_t *conn)
void
connection_bucket_init(void)
{
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
/* start it at max traffic */
global_read_bucket = (int)options->BandwidthBurst;
global_write_bucket = (int)options->BandwidthBurst;
@@ -2387,22 +2396,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 +2425,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)
{
- or_options_t *options = get_options();
+ 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 +2472,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");
}
}
@@ -2482,7 +2499,7 @@ connection_bucket_refill(int seconds_elapsed, time_t now)
TO_OR_CONN(conn)->read_bucket > 0)) {
/* and either a non-cell conn or a cell conn with non-empty bucket */
LOG_FN_CONN(conn, (LOG_DEBUG,LD_NET,
- "waking up conn (fd %d) for read", conn->s));
+ "waking up conn (fd %d) for read", (int)conn->s));
conn->read_blocked_on_bw = 0;
connection_start_reading(conn);
}
@@ -2495,7 +2512,7 @@ connection_bucket_refill(int seconds_elapsed, time_t now)
conn->state != OR_CONN_STATE_OPEN ||
TO_OR_CONN(conn)->write_bucket > 0)) {
LOG_FN_CONN(conn, (LOG_DEBUG,LD_NET,
- "waking up conn (fd %d) for write", conn->s));
+ "waking up conn (fd %d) for write", (int)conn->s));
conn->write_blocked_on_bw = 0;
connection_start_writing(conn);
}
@@ -2518,7 +2535,6 @@ connection_bucket_should_increase(int bucket, or_connection_t *conn)
return 1;
}
#else
-
static void
connection_buckets_decrement(connection_t *conn, time_t now,
size_t num_read, size_t num_written)
@@ -2529,6 +2545,7 @@ connection_buckets_decrement(connection_t *conn, time_t now,
(void) num_written;
/* Libevent does this for us. */
}
+
void
connection_bucket_refill(int seconds_elapsed, time_t now)
{
@@ -2539,7 +2556,7 @@ connection_bucket_refill(int seconds_elapsed, time_t now)
void
connection_bucket_init(void)
{
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
const struct timeval *tick = tor_libevent_get_one_tick_timeout();
struct ev_token_bucket_cfg *bucket_cfg;
@@ -2552,7 +2569,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);
@@ -2584,7 +2604,7 @@ connection_enable_rate_limiting(connection_t *conn)
if (conn->bufev) {
if (!global_rate_limit)
connection_bucket_init();
- bufferevent_add_to_rate_limit_group(conn->bufev, global_rate_limit);
+ tor_add_bufferevent_to_rate_limit_group(conn->bufev, global_rate_limit);
}
}
@@ -2657,8 +2677,10 @@ connection_handle_read_impl(connection_t *conn)
if (CONN_IS_EDGE(conn)) {
edge_connection_t *edge_conn = TO_EDGE_CONN(conn);
connection_edge_end_errno(edge_conn);
- if (edge_conn->socks_request) /* broken, don't send a socks reply back */
- edge_conn->socks_request->has_finished = 1;
+ if (conn->type == CONN_TYPE_AP && TO_ENTRY_CONN(conn)->socks_request) {
+ /* broken, don't send a socks reply back */
+ TO_ENTRY_CONN(conn)->socks_request->has_finished = 1;
+ }
}
connection_close_immediate(conn); /* Don't flush; connection is dead. */
connection_mark_for_close(conn);
@@ -2769,7 +2791,7 @@ connection_read_to_buf(connection_t *conn, ssize_t *max_to_read,
log_debug(LD_NET,
"%d: starting, inbuf_datalen %ld (%d pending in tls object)."
" at_most %ld.",
- conn->s,(long)buf_datalen(conn->inbuf),
+ (int)conn->s,(long)buf_datalen(conn->inbuf),
tor_tls_get_pending_bytes(or_conn->tls), (long)at_most);
initial_size = buf_datalen(conn->inbuf);
@@ -2901,7 +2923,7 @@ evbuffer_inbuf_callback(struct evbuffer *buf,
if (info->n_added) {
time_t now = approx_time();
conn->timestamp_lastread = now;
- connection_buckets_decrement(conn, now, info->n_added, 0);
+ record_num_bytes_transferred(conn, now, info->n_added, 0);
connection_consider_empty_read_buckets(conn);
if (conn->type == CONN_TYPE_AP) {
edge_connection_t *edge_conn = TO_EDGE_CONN(conn);
@@ -2922,7 +2944,7 @@ evbuffer_outbuf_callback(struct evbuffer *buf,
if (info->n_deleted) {
time_t now = approx_time();
conn->timestamp_lastwritten = now;
- connection_buckets_decrement(conn, now, 0, info->n_deleted);
+ record_num_bytes_transferred(conn, now, 0, info->n_deleted);
connection_consider_empty_write_buckets(conn);
if (conn->type == CONN_TYPE_AP) {
edge_connection_t *edge_conn = TO_EDGE_CONN(conn);
@@ -2938,9 +2960,11 @@ connection_handle_read_cb(struct bufferevent *bufev, void *arg)
{
connection_t *conn = arg;
(void) bufev;
- if (!conn->marked_for_close)
+ if (!conn->marked_for_close) {
if (connection_process_inbuf(conn, 1)<0) /* XXXX Always 1? */
- connection_mark_for_close(conn);
+ if (!conn->marked_for_close)
+ connection_mark_for_close(conn);
+ }
}
/** Callback: invoked whenever a bufferevent has written data. */
@@ -2950,7 +2974,8 @@ connection_handle_write_cb(struct bufferevent *bufev, void *arg)
connection_t *conn = arg;
struct evbuffer *output;
if (connection_flushed_some(conn)<0) {
- connection_mark_for_close(conn);
+ if (!conn->marked_for_close)
+ connection_mark_for_close(conn);
return;
}
@@ -2997,8 +3022,10 @@ connection_handle_event_cb(struct bufferevent *bufev, short event, void *arg)
edge_connection_t *edge_conn = TO_EDGE_CONN(conn);
if (!edge_conn->edge_has_sent_end)
connection_edge_end_errno(edge_conn);
- if (edge_conn->socks_request) /* broken, don't send a socks reply back */
- edge_conn->socks_request->has_finished = 1;
+ if (conn->type == CONN_TYPE_AP && TO_ENTRY_CONN(conn)->socks_request) {
+ /* broken, don't send a socks reply back */
+ TO_ENTRY_CONN(conn)->socks_request->has_finished = 1;
+ }
}
connection_close_immediate(conn); /* Connection is dead. */
if (!conn->marked_for_close)
@@ -3019,6 +3046,11 @@ connection_configure_bufferevent_callbacks(connection_t *conn)
connection_handle_write_cb,
connection_handle_event_cb,
conn);
+ /* Set a fairly high write low-watermark so that we get the write callback
+ called whenever data is written to bring us under 128K. Leave the
+ high-watermark at 0.
+ */
+ bufferevent_setwatermark(bufev, EV_WRITE, 128*1024, 0);
input = bufferevent_get_input(bufev);
output = bufferevent_get_output(bufev);
@@ -3101,15 +3133,15 @@ connection_outbuf_too_full(connection_t *conn)
return (conn->outbuf_flushlen > 10*CELL_PAYLOAD_SIZE);
}
-/** Try to flush more bytes onto conn-\>s.
+/** Try to flush more bytes onto <b>conn</b>-\>s.
*
* This function gets called either from conn_write() in main.c
* when poll() has declared that conn wants to write, or below
* from connection_write_to_buf() when an entire TLS record is ready.
*
- * Update conn-\>timestamp_lastwritten to now, and call flush_buf
+ * Update <b>conn</b>-\>timestamp_lastwritten to now, and call flush_buf
* or flush_buf_tls appropriately. If it succeeds and there are no more
- * more bytes on conn->outbuf, then call connection_finished_flushing
+ * more bytes on <b>conn</b>-\>outbuf, then call connection_finished_flushing
* on it too.
*
* If <b>force</b>, then write as many bytes as possible, ignoring bandwidth
@@ -3131,7 +3163,7 @@ connection_handle_write_impl(connection_t *conn, int force)
tor_assert(!connection_is_listener(conn));
- if (conn->marked_for_close || conn->s < 0)
+ if (conn->marked_for_close || !SOCKET_OK(conn->s))
return 0; /* do nothing */
if (conn->in_flushed_some) {
@@ -3301,6 +3333,25 @@ connection_handle_write(connection_t *conn, int force)
return res;
}
+/**
+ * Try to flush data that's waiting for a write on <b>conn</b>. Return
+ * -1 on failure, 0 on success.
+ *
+ * Don't use this function for regular writing; the buffers/bufferevents
+ * system should be good enough at scheduling writes there. Instead, this
+ * function is for cases when we're about to exit or something and we want
+ * to report it right away.
+ */
+int
+connection_flush(connection_t *conn)
+{
+ IF_HAS_BUFFEREVENT(conn, {
+ int r = bufferevent_flush(conn->bufev, EV_WRITE, BEV_FLUSH);
+ return (r < 0) ? -1 : 0;
+ });
+ return connection_handle_write(conn, 1);
+}
+
/** OpenSSL TLS record size is 16383; this is close. The goal here is to
* push data out as soon as we know there's enough for a TLS record, so
* during periods of high load we won't read entire megabytes from
@@ -3365,12 +3416,13 @@ _connection_write_to_buf_impl(const char *string, size_t len,
/* if it failed, it means we have our package/delivery windows set
wrong compared to our max outbuf size. close the whole circuit. */
log_warn(LD_NET,
- "write_to_buf failed. Closing circuit (fd %d).", conn->s);
+ "write_to_buf failed. Closing circuit (fd %d).", (int)conn->s);
circuit_mark_for_close(circuit_get_by_edge_conn(TO_EDGE_CONN(conn)),
END_CIRC_REASON_INTERNAL);
} else {
log_warn(LD_NET,
- "write_to_buf failed. Closing connection (fd %d).", conn->s);
+ "write_to_buf failed. Closing connection (fd %d).",
+ (int)conn->s);
connection_mark_for_close(conn);
}
return;
@@ -3416,7 +3468,7 @@ _connection_write_to_buf_impl(const char *string, size_t len,
/* this connection is broken. remove it. */
log_warn(LD_BUG, "unhandled error on write for "
"conn (type %d, fd %d); removing",
- conn->type, conn->s);
+ conn->type, (int)conn->s);
tor_fragile_assert();
/* do a close-immediate here, so we don't try to flush */
connection_close_immediate(conn);
@@ -3508,8 +3560,7 @@ connection_get_by_type_state_rendquery(int type, int state,
type == CONN_TYPE_AP || type == CONN_TYPE_EXIT);
tor_assert(rendquery);
- SMARTLIST_FOREACH(conns, connection_t *, conn,
- {
+ SMARTLIST_FOREACH_BEGIN(conns, connection_t *, conn) {
if (conn->type == type &&
!conn->marked_for_close &&
(!state || state == conn->state)) {
@@ -3524,7 +3575,7 @@ connection_get_by_type_state_rendquery(int type, int state,
TO_EDGE_CONN(conn)->rend_data->onion_address))
return conn;
}
- });
+ } SMARTLIST_FOREACH_END(conn);
return NULL;
}
@@ -3665,7 +3716,7 @@ alloc_http_authenticator(const char *authenticator)
* call init_keys().
*/
static void
-client_check_address_changed(int sock)
+client_check_address_changed(tor_socket_t sock)
{
uint32_t iface_ip, ip_out; /* host order */
struct sockaddr_in out_addr;
@@ -3721,7 +3772,7 @@ client_check_address_changed(int sock)
* to the desired size to stay below system TCP buffer limits.
*/
static void
-set_constrained_socket_buffers(int sock, int size)
+set_constrained_socket_buffers(tor_socket_t sock, int size)
{
void *sz = (void*)&size;
socklen_t sz_sz = (socklen_t) sizeof(size);
@@ -3947,6 +3998,8 @@ assert_connection_ok(connection_t *conn, time_t now)
tor_assert(conn->magic == OR_CONNECTION_MAGIC);
break;
case CONN_TYPE_AP:
+ tor_assert(conn->magic == ENTRY_CONNECTION_MAGIC);
+ break;
case CONN_TYPE_EXIT:
tor_assert(conn->magic == EDGE_CONNECTION_MAGIC);
break;
@@ -3956,6 +4009,9 @@ assert_connection_ok(connection_t *conn, time_t now)
case CONN_TYPE_CONTROL:
tor_assert(conn->magic == CONTROL_CONNECTION_MAGIC);
break;
+ CASE_ANY_LISTENER_TYPE:
+ tor_assert(conn->magic == LISTENER_CONNECTION_MAGIC);
+ break;
default:
tor_assert(conn->magic == BASE_CONNECTION_MAGIC);
break;
@@ -3966,7 +4022,7 @@ assert_connection_ok(connection_t *conn, time_t now)
tor_assert(conn->linked);
}
if (conn->linked)
- tor_assert(conn->s < 0);
+ tor_assert(!SOCKET_OK(conn->s));
if (conn->outbuf_flushlen > 0) {
/* With optimistic data, we may have queued data in
@@ -4010,21 +4066,18 @@ assert_connection_ok(connection_t *conn, time_t now)
}
if (CONN_IS_EDGE(conn)) {
- edge_connection_t *edge_conn = TO_EDGE_CONN(conn);
- if (edge_conn->chosen_exit_optional || edge_conn->chosen_exit_retries) {
- tor_assert(conn->type == CONN_TYPE_AP);
- tor_assert(edge_conn->chosen_exit_name);
- }
-
/* XXX unchecked: package window, deliver window. */
if (conn->type == CONN_TYPE_AP) {
+ entry_connection_t *entry_conn = TO_ENTRY_CONN(conn);
+ if (entry_conn->chosen_exit_optional || entry_conn->chosen_exit_retries)
+ tor_assert(entry_conn->chosen_exit_name);
- tor_assert(edge_conn->socks_request);
+ tor_assert(entry_conn->socks_request);
if (conn->state == AP_CONN_STATE_OPEN) {
- tor_assert(edge_conn->socks_request->has_finished);
+ tor_assert(entry_conn->socks_request->has_finished);
if (!conn->marked_for_close) {
- tor_assert(edge_conn->cpath_layer);
- assert_cpath_layer_ok(edge_conn->cpath_layer);
+ tor_assert(ENTRY_TO_EDGE_CONN(entry_conn)->cpath_layer);
+ assert_cpath_layer_ok(ENTRY_TO_EDGE_CONN(entry_conn)->cpath_layer);
}
}
}
@@ -4040,13 +4093,7 @@ assert_connection_ok(connection_t *conn, time_t now)
switch (conn->type)
{
- case CONN_TYPE_OR_LISTENER:
- case CONN_TYPE_AP_LISTENER:
- case CONN_TYPE_AP_TRANS_LISTENER:
- case CONN_TYPE_AP_NATD_LISTENER:
- case CONN_TYPE_DIR_LISTENER:
- case CONN_TYPE_CONTROL_LISTENER:
- case CONN_TYPE_AP_DNS_LISTENER:
+ CASE_ANY_LISTENER_TYPE:
tor_assert(conn->state == LISTENER_STATE_READY);
break;
case CONN_TYPE_OR:
@@ -4063,7 +4110,7 @@ assert_connection_ok(connection_t *conn, time_t now)
case CONN_TYPE_AP:
tor_assert(conn->state >= _AP_CONN_STATE_MIN);
tor_assert(conn->state <= _AP_CONN_STATE_MAX);
- tor_assert(TO_EDGE_CONN(conn)->socks_request);
+ tor_assert(TO_ENTRY_CONN(conn)->socks_request);
break;
case CONN_TYPE_DIR:
tor_assert(conn->state >= _DIR_CONN_STATE_MIN);
@@ -4084,3 +4131,141 @@ assert_connection_ok(connection_t *conn, time_t now)
}
}
+/** Fills <b>addr</b> and <b>port</b> with the details of the global
+ * proxy server we are using.
+ * <b>conn</b> contains the connection we are using the proxy for.
+ *
+ * Return 0 on success, -1 on failure.
+ */
+int
+get_proxy_addrport(tor_addr_t *addr, uint16_t *port, int *proxy_type,
+ const connection_t *conn)
+{
+ const or_options_t *options = get_options();
+
+ if (options->HTTPSProxy) {
+ tor_addr_copy(addr, &options->HTTPSProxyAddr);
+ *port = options->HTTPSProxyPort;
+ *proxy_type = PROXY_CONNECT;
+ return 0;
+ } else if (options->Socks4Proxy) {
+ tor_addr_copy(addr, &options->Socks4ProxyAddr);
+ *port = options->Socks4ProxyPort;
+ *proxy_type = PROXY_SOCKS4;
+ return 0;
+ } else if (options->Socks5Proxy) {
+ tor_addr_copy(addr, &options->Socks5ProxyAddr);
+ *port = options->Socks5ProxyPort;
+ *proxy_type = PROXY_SOCKS5;
+ return 0;
+ } else if (options->ClientTransportPlugin ||
+ options->Bridges) {
+ const transport_t *transport = NULL;
+ int r;
+ r = find_transport_by_bridge_addrport(&conn->addr, conn->port, &transport);
+ if (r<0)
+ return -1;
+ if (transport) { /* transport found */
+ tor_addr_copy(addr, &transport->addr);
+ *port = transport->port;
+ *proxy_type = transport->socks_version;
+ return 0;
+ }
+ }
+
+ *proxy_type = PROXY_NONE;
+ return 0;
+}
+
+/** Returns the global proxy type used by tor. */
+static int
+get_proxy_type(void)
+{
+ const or_options_t *options = get_options();
+
+ if (options->HTTPSProxy)
+ return PROXY_CONNECT;
+ else if (options->Socks4Proxy)
+ return PROXY_SOCKS4;
+ else if (options->Socks5Proxy)
+ return PROXY_SOCKS5;
+ else if (options->ClientTransportPlugin)
+ return PROXY_PLUGGABLE;
+ else
+ return PROXY_NONE;
+}
+
+/** Log a failed connection to a proxy server.
+ * <b>conn</b> is the connection we use the proxy server for. */
+void
+log_failed_proxy_connection(connection_t *conn)
+{
+ tor_addr_t proxy_addr;
+ uint16_t proxy_port;
+ int proxy_type;
+
+ if (get_proxy_addrport(&proxy_addr, &proxy_port, &proxy_type, conn) != 0)
+ return; /* if we have no proxy set up, leave this function. */
+
+ log_warn(LD_NET,
+ "The connection to the %s proxy server at %s:%u just failed. "
+ "Make sure that the proxy server is up and running.",
+ proxy_type_to_string(get_proxy_type()), fmt_addr(&proxy_addr),
+ proxy_port);
+}
+
+/** Return string representation of <b>proxy_type</b>. */
+static const char *
+proxy_type_to_string(int proxy_type)
+{
+ switch (proxy_type) {
+ case PROXY_CONNECT: return "HTTP";
+ case PROXY_SOCKS4: return "SOCKS4";
+ case PROXY_SOCKS5: return "SOCKS5";
+ case PROXY_PLUGGABLE: return "pluggable transports SOCKS";
+ case PROXY_NONE: return "NULL";
+ default: tor_assert(0);
+ }
+ return NULL; /*Unreached*/
+}
+
+/** Call _connection_free() on every connection in our array, and release all
+ * storage held by connection.c. This is used by cpuworkers and dnsworkers
+ * when they fork, so they don't keep resources held open (especially
+ * sockets).
+ *
+ * Don't do the checks in connection_free(), because they will
+ * fail.
+ */
+void
+connection_free_all(void)
+{
+ smartlist_t *conns = get_connection_array();
+
+ /* We don't want to log any messages to controllers. */
+ SMARTLIST_FOREACH(conns, connection_t *, conn,
+ if (conn->type == CONN_TYPE_CONTROL)
+ TO_CONTROL_CONN(conn)->event_mask = 0);
+
+ control_update_global_event_mask();
+
+ /* Unlink everything from the identity map. */
+ connection_or_clear_identity_map();
+
+ /* Clear out our list of broken connections */
+ clear_broken_connection_map(0);
+
+ SMARTLIST_FOREACH(conns, connection_t *, conn, _connection_free(conn));
+
+ if (outgoing_addrs) {
+ SMARTLIST_FOREACH(outgoing_addrs, void*, addr, tor_free(addr));
+ smartlist_free(outgoing_addrs);
+ outgoing_addrs = NULL;
+ }
+
+#ifdef USE_BUFFEREVENTS
+ if (global_rate_limit)
+ bufferevent_rate_limit_group_free(global_rate_limit);
+#endif
+}
+
diff --git a/src/or/connection.h b/src/or/connection.h
index 94ae64591..9f1148972 100644
--- a/src/or/connection.h
+++ b/src/or/connection.h
@@ -21,7 +21,9 @@ const char *conn_state_to_string(int type, int state);
dir_connection_t *dir_connection_new(int socket_family);
or_connection_t *or_connection_new(int socket_family);
edge_connection_t *edge_connection_new(int type, int socket_family);
+entry_connection_t *entry_connection_new(int type, int socket_family);
control_connection_t *control_connection_new(int socket_family);
+listener_connection_t *listener_connection_new(int type, int socket_family);
connection_t *connection_new(int type, int socket_family);
void connection_link_connections(connection_t *conn_a, connection_t *conn_b);
@@ -57,6 +59,9 @@ int connection_connect(connection_t *conn, const char *address,
int connection_proxy_connect(connection_t *conn, int type);
int connection_read_proxy_handshake(connection_t *conn);
+void log_failed_proxy_connection(connection_t *conn);
+int get_proxy_addrport(tor_addr_t *addr, uint16_t *port, int *proxy_type,
+ const connection_t *conn);
int retry_all_listeners(smartlist_t *replaced_conns,
smartlist_t *new_conns);
@@ -79,6 +84,8 @@ int connection_fetch_from_buf_http(connection_t *conn,
int connection_wants_to_flush(connection_t *conn);
int connection_outbuf_too_full(connection_t *conn);
int connection_handle_write(connection_t *conn, int force);
+int connection_flush(connection_t *conn);
+
void _connection_write_to_buf_impl(const char *string, size_t len,
connection_t *conn, int zlib);
static void connection_write_to_buf(const char *string, size_t len,
diff --git a/src/or/connection_edge.c b/src/or/connection_edge.c
index ec3b41744..efaad79b6 100644
--- a/src/or/connection_edge.c
+++ b/src/or/connection_edge.c
@@ -51,27 +51,43 @@
#define SOCKS4_GRANTED 90
#define SOCKS4_REJECT 91
-static int connection_ap_handshake_process_socks(edge_connection_t *conn);
-static int connection_ap_process_natd(edge_connection_t *conn);
+static int connection_ap_handshake_process_socks(entry_connection_t *conn);
+static int connection_ap_process_natd(entry_connection_t *conn);
static int connection_exit_connect_dir(edge_connection_t *exitconn);
static int address_is_in_virtual_range(const char *addr);
-static int consider_plaintext_ports(edge_connection_t *conn, uint16_t port);
+static int consider_plaintext_ports(entry_connection_t *conn, uint16_t port);
static void clear_trackexithost_mappings(const char *exitname);
+static int connection_ap_supports_optimistic_data(const entry_connection_t *);
/** An AP stream has failed/finished. If it hasn't already sent back
* a socks reply, send one now (based on endreason). Also set
* has_sent_end to 1, and mark the conn.
*/
void
-_connection_mark_unattached_ap(edge_connection_t *conn, int endreason,
+_connection_mark_unattached_ap(entry_connection_t *conn, int endreason,
int line, const char *file)
{
- tor_assert(conn->_base.type == CONN_TYPE_AP);
- conn->edge_has_sent_end = 1; /* no circ yet */
-
- if (conn->_base.marked_for_close) {
+ 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(TO_CONN(conn), line, file);
+ _connection_mark_for_close(base_conn, line, file);
return;
}
@@ -91,9 +107,9 @@ _connection_mark_unattached_ap(edge_connection_t *conn, int endreason,
conn->socks_request->has_finished = 1;
}
- _connection_mark_and_flush(TO_CONN(conn), line, file);
+ _connection_mark_and_flush(base_conn, line, file);
- conn->end_reason = endreason;
+ ENTRY_TO_EDGE_CONN(conn)->end_reason = endreason;
}
/** There was an EOF. Send an end and mark the connection for close.
@@ -111,8 +127,11 @@ connection_edge_reached_eof(edge_connection_t *conn)
/* only mark it if not already marked. it's possible to
* get the 'end' right around when the client hangs up on us. */
connection_edge_end(conn, END_STREAM_REASON_DONE);
- if (conn->socks_request) /* eof, so don't send a socks reply back */
- conn->socks_request->has_finished = 1;
+ if (conn->_base.type == CONN_TYPE_AP) {
+ /* eof, so don't send a socks reply back */
+ if (EDGE_TO_ENTRY_CONN(conn)->socks_request)
+ EDGE_TO_ENTRY_CONN(conn)->socks_request->has_finished = 1;
+ }
connection_mark_for_close(TO_CONN(conn));
}
return 0;
@@ -135,13 +154,13 @@ connection_edge_process_inbuf(edge_connection_t *conn, int package_partial)
switch (conn->_base.state) {
case AP_CONN_STATE_SOCKS_WAIT:
- if (connection_ap_handshake_process_socks(conn) < 0) {
+ if (connection_ap_handshake_process_socks(EDGE_TO_ENTRY_CONN(conn)) <0) {
/* already marked */
return -1;
}
return 0;
case AP_CONN_STATE_NATD_WAIT:
- if (connection_ap_process_natd(conn) < 0) {
+ if (connection_ap_process_natd(EDGE_TO_ENTRY_CONN(conn)) < 0) {
/* already marked */
return -1;
}
@@ -154,10 +173,26 @@ connection_edge_process_inbuf(edge_connection_t *conn, int package_partial)
return -1;
}
return 0;
+ case AP_CONN_STATE_CONNECT_WAIT:
+ if (connection_ap_supports_optimistic_data(EDGE_TO_ENTRY_CONN(conn))) {
+ log_info(LD_EDGE,
+ "data from edge while in '%s' state. Sending it anyway. "
+ "package_partial=%d, buflen=%ld",
+ conn_state_to_string(conn->_base.type, conn->_base.state),
+ package_partial,
+ (long)connection_get_inbuf_len(TO_CONN(conn)));
+ if (connection_edge_package_raw_inbuf(conn, package_partial, NULL)<0) {
+ /* (We already sent an end cell if possible) */
+ connection_mark_for_close(TO_CONN(conn));
+ return -1;
+ }
+ return 0;
+ }
+ /* Fall through if the connection is on a circuit without optimistic
+ * data support. */
case EXIT_CONN_STATE_CONNECTING:
case AP_CONN_STATE_RENDDESC_WAIT:
case AP_CONN_STATE_CIRCUIT_WAIT:
- case AP_CONN_STATE_CONNECT_WAIT:
case AP_CONN_STATE_RESOLVE_WAIT:
case AP_CONN_STATE_CONTROLLER_WAIT:
log_info(LD_EDGE,
@@ -182,9 +217,10 @@ connection_edge_destroy(circid_t circ_id, edge_connection_t *conn)
log_info(LD_EDGE,
"CircID %d: At an edge. Marking connection for close.", circ_id);
if (conn->_base.type == CONN_TYPE_AP) {
- connection_mark_unattached_ap(conn, END_STREAM_REASON_DESTROY);
+ entry_connection_t *entry_conn = EDGE_TO_ENTRY_CONN(conn);
+ connection_mark_unattached_ap(entry_conn, END_STREAM_REASON_DESTROY);
control_event_stream_bandwidth(conn);
- control_event_stream_status(conn, STREAM_EVENT_CLOSED,
+ control_event_stream_status(entry_conn, STREAM_EVENT_CLOSED,
END_STREAM_REASON_DESTROY);
conn->end_reason |= END_STREAM_REASON_FLAG_ALREADY_SENT_CLOSED;
} else {
@@ -408,13 +444,79 @@ connection_edge_finished_connecting(edge_connection_t *edge_conn)
return connection_edge_process_inbuf(edge_conn, 1);
}
+/** Common code to connection_(ap|exit)_about_to_close. */
+static void
+connection_edge_about_to_close(edge_connection_t *edge_conn)
+{
+ if (!edge_conn->edge_has_sent_end) {
+ connection_t *conn = TO_CONN(edge_conn);
+ log_warn(LD_BUG, "(Harmless.) Edge connection (marked at %s:%d) "
+ "hasn't sent end yet?",
+ conn->marked_for_close_file, conn->marked_for_close);
+ tor_fragile_assert();
+ }
+}
+
+/* Called when we're about to finally unlink and free an AP (client)
+ * connection: perform necessary accounting and cleanup */
+void
+connection_ap_about_to_close(entry_connection_t *entry_conn)
+{
+ circuit_t *circ;
+ edge_connection_t *edge_conn = ENTRY_TO_EDGE_CONN(entry_conn);
+ connection_t *conn = ENTRY_TO_CONN(entry_conn);
+
+ if (entry_conn->socks_request->has_finished == 0) {
+ /* since conn gets removed right after this function finishes,
+ * there's no point trying to send back a reply at this point. */
+ log_warn(LD_BUG,"Closing stream (marked at %s:%d) without sending"
+ " back a socks reply.",
+ conn->marked_for_close_file, conn->marked_for_close);
+ }
+ if (!edge_conn->end_reason) {
+ log_warn(LD_BUG,"Closing stream (marked at %s:%d) without having"
+ " set end_reason.",
+ conn->marked_for_close_file, conn->marked_for_close);
+ }
+ if (entry_conn->dns_server_request) {
+ log_warn(LD_BUG,"Closing stream (marked at %s:%d) without having"
+ " replied to DNS request.",
+ conn->marked_for_close_file, conn->marked_for_close);
+ dnsserv_reject_request(entry_conn);
+ }
+ control_event_stream_bandwidth(edge_conn);
+ control_event_stream_status(entry_conn, STREAM_EVENT_CLOSED,
+ edge_conn->end_reason);
+ circ = circuit_get_by_edge_conn(edge_conn);
+ if (circ)
+ circuit_detach_stream(circ, edge_conn);
+}
+
+/* Called when we're about to finally unlink and free an exit
+ * connection: perform necessary accounting and cleanup */
+void
+connection_exit_about_to_close(edge_connection_t *edge_conn)
+{
+ circuit_t *circ;
+ connection_t *conn = TO_CONN(edge_conn);
+
+ connection_edge_about_to_close(edge_conn);
+
+ circ = circuit_get_by_edge_conn(edge_conn);
+ if (circ)
+ circuit_detach_stream(circ, edge_conn);
+ if (conn->state == EXIT_CONN_STATE_RESOLVING) {
+ connection_dns_remove(edge_conn);
+ }
+}
+
/** Define a schedule for how long to wait between retrying
* application connections. Rather than waiting a fixed amount of
* time between each retry, we wait 10 seconds each for the first
* two tries, and 15 seconds for each retry after
* that. Hopefully this will improve the expected user experience. */
static int
-compute_retry_timeout(edge_connection_t *conn)
+compute_retry_timeout(entry_connection_t *conn)
{
int timeout = get_options()->CircuitStreamTimeout;
if (timeout) /* if our config options override the default, use them */
@@ -437,41 +539,43 @@ void
connection_ap_expire_beginning(void)
{
edge_connection_t *conn;
+ entry_connection_t *entry_conn;
circuit_t *circ;
time_t now = time(NULL);
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
int severity;
int cutoff;
int seconds_idle, seconds_since_born;
smartlist_t *conns = get_connection_array();
- SMARTLIST_FOREACH_BEGIN(conns, connection_t *, c) {
- if (c->type != CONN_TYPE_AP || c->marked_for_close)
+ SMARTLIST_FOREACH_BEGIN(conns, connection_t *, base_conn) {
+ if (base_conn->type != CONN_TYPE_AP || base_conn->marked_for_close)
continue;
- conn = TO_EDGE_CONN(c);
+ entry_conn = TO_ENTRY_CONN(base_conn);
+ conn = ENTRY_TO_EDGE_CONN(entry_conn);
/* if it's an internal linked connection, don't yell its status. */
- severity = (tor_addr_is_null(&conn->_base.addr) && !conn->_base.port)
+ severity = (tor_addr_is_null(&base_conn->addr) && !base_conn->port)
? LOG_INFO : LOG_NOTICE;
- seconds_idle = (int)( now - conn->_base.timestamp_lastread );
- seconds_since_born = (int)( now - conn->_base.timestamp_created );
+ seconds_idle = (int)( now - base_conn->timestamp_lastread );
+ seconds_since_born = (int)( now - base_conn->timestamp_created );
- if (conn->_base.state == AP_CONN_STATE_OPEN)
+ if (base_conn->state == AP_CONN_STATE_OPEN)
continue;
/* We already consider SocksTimeout in
* connection_ap_handshake_attach_circuit(), but we need to consider
* it here too because controllers that put streams in controller_wait
* state never ask Tor to attach the circuit. */
- if (AP_CONN_STATE_IS_UNATTACHED(conn->_base.state)) {
+ if (AP_CONN_STATE_IS_UNATTACHED(base_conn->state)) {
if (seconds_since_born >= options->SocksTimeout) {
log_fn(severity, LD_APP,
"Tried for %d seconds to get a connection to %s:%d. "
"Giving up. (%s)",
seconds_since_born,
- safe_str_client(conn->socks_request->address),
- conn->socks_request->port,
- conn_state_to_string(CONN_TYPE_AP, conn->_base.state));
- connection_mark_unattached_ap(conn, END_STREAM_REASON_TIMEOUT);
+ safe_str_client(entry_conn->socks_request->address),
+ entry_conn->socks_request->port,
+ conn_state_to_string(CONN_TYPE_AP, base_conn->state));
+ connection_mark_unattached_ap(entry_conn, END_STREAM_REASON_TIMEOUT);
}
continue;
}
@@ -479,14 +583,14 @@ connection_ap_expire_beginning(void)
/* We're in state connect_wait or resolve_wait now -- waiting for a
* reply to our relay cell. See if we want to retry/give up. */
- cutoff = compute_retry_timeout(conn);
+ cutoff = compute_retry_timeout(entry_conn);
if (seconds_idle < cutoff)
continue;
circ = circuit_get_by_edge_conn(conn);
if (!circ) { /* it's vanished? */
log_info(LD_APP,"Conn is waiting (address %s), but lost its circ.",
- safe_str_client(conn->socks_request->address));
- connection_mark_unattached_ap(conn, END_STREAM_REASON_TIMEOUT);
+ safe_str_client(entry_conn->socks_request->address));
+ connection_mark_unattached_ap(entry_conn, END_STREAM_REASON_TIMEOUT);
continue;
}
if (circ->purpose == CIRCUIT_PURPOSE_C_REND_JOINED) {
@@ -495,20 +599,21 @@ connection_ap_expire_beginning(void)
"Rend stream is %d seconds late. Giving up on address"
" '%s.onion'.",
seconds_idle,
- safe_str_client(conn->socks_request->address));
+ safe_str_client(entry_conn->socks_request->address));
connection_edge_end(conn, END_STREAM_REASON_TIMEOUT);
- connection_mark_unattached_ap(conn, END_STREAM_REASON_TIMEOUT);
+ connection_mark_unattached_ap(entry_conn, END_STREAM_REASON_TIMEOUT);
}
continue;
}
tor_assert(circ->purpose == CIRCUIT_PURPOSE_C_GENERAL);
log_fn(cutoff < 15 ? LOG_INFO : severity, LD_APP,
- "We tried for %d seconds to connect to '%s' using exit '%s'."
+ "We tried for %d seconds to connect to '%s' using exit %s."
" Retrying on a new circuit.",
seconds_idle,
- safe_str_client(conn->socks_request->address),
+ safe_str_client(entry_conn->socks_request->address),
conn->cpath_layer ?
- conn->cpath_layer->extend_info->nickname : "*unnamed*");
+ extend_info_describe(conn->cpath_layer->extend_info):
+ "*unnamed*");
/* send an end down the circuit */
connection_edge_end(conn, END_STREAM_REASON_TIMEOUT);
/* un-mark it as ending, since we're going to reuse it */
@@ -522,15 +627,16 @@ connection_ap_expire_beginning(void)
circ->timestamp_dirty -= options->MaxCircuitDirtiness;
/* give our stream another 'cutoff' seconds to try */
conn->_base.timestamp_lastread += cutoff;
- if (conn->num_socks_retries < 250) /* avoid overflow */
- conn->num_socks_retries++;
+ if (entry_conn->num_socks_retries < 250) /* avoid overflow */
+ entry_conn->num_socks_retries++;
/* move it back into 'pending' state, and try to attach. */
- if (connection_ap_detach_retriable(conn, TO_ORIGIN_CIRCUIT(circ),
+ if (connection_ap_detach_retriable(entry_conn, TO_ORIGIN_CIRCUIT(circ),
END_STREAM_REASON_TIMEOUT)<0) {
- if (!conn->_base.marked_for_close)
- connection_mark_unattached_ap(conn, END_STREAM_REASON_CANT_ATTACH);
+ if (!base_conn->marked_for_close)
+ connection_mark_unattached_ap(entry_conn,
+ END_STREAM_REASON_CANT_ATTACH);
}
- } SMARTLIST_FOREACH_END(conn);
+ } SMARTLIST_FOREACH_END(base_conn);
}
/** Tell any AP streams that are waiting for a new circuit to try again,
@@ -539,7 +645,7 @@ connection_ap_expire_beginning(void)
void
connection_ap_attach_pending(void)
{
- edge_connection_t *edge_conn;
+ entry_connection_t *entry_conn;
smartlist_t *conns = get_connection_array();
SMARTLIST_FOREACH(conns, connection_t *, conn,
{
@@ -547,10 +653,10 @@ connection_ap_attach_pending(void)
conn->type != CONN_TYPE_AP ||
conn->state != AP_CONN_STATE_CIRCUIT_WAIT)
continue;
- edge_conn = TO_EDGE_CONN(conn);
- if (connection_ap_handshake_attach_circuit(edge_conn) < 0) {
- if (!edge_conn->_base.marked_for_close)
- connection_mark_unattached_ap(edge_conn,
+ entry_conn = TO_ENTRY_CONN(conn);
+ if (connection_ap_handshake_attach_circuit(entry_conn) < 0) {
+ if (!conn->marked_for_close)
+ connection_mark_unattached_ap(entry_conn,
END_STREAM_REASON_CANT_ATTACH);
}
});
@@ -565,7 +671,7 @@ void
connection_ap_fail_onehop(const char *failed_digest,
cpath_build_state_t *build_state)
{
- edge_connection_t *edge_conn;
+ entry_connection_t *entry_conn;
char digest[DIGEST_LEN];
smartlist_t *conns = get_connection_array();
SMARTLIST_FOREACH_BEGIN(conns, connection_t *, conn) {
@@ -573,27 +679,27 @@ connection_ap_fail_onehop(const char *failed_digest,
conn->type != CONN_TYPE_AP ||
conn->state != AP_CONN_STATE_CIRCUIT_WAIT)
continue;
- edge_conn = TO_EDGE_CONN(conn);
- if (!edge_conn->want_onehop)
+ entry_conn = TO_ENTRY_CONN(conn);
+ if (!entry_conn->want_onehop)
continue;
- if (hexdigest_to_digest(edge_conn->chosen_exit_name, digest) < 0 ||
+ if (hexdigest_to_digest(entry_conn->chosen_exit_name, digest) < 0 ||
tor_memneq(digest, failed_digest, DIGEST_LEN))
continue;
if (tor_digest_is_zero(digest)) {
/* we don't know the digest; have to compare addr:port */
tor_addr_t addr;
if (!build_state || !build_state->chosen_exit ||
- !edge_conn->socks_request || !edge_conn->socks_request->address)
+ !entry_conn->socks_request || !entry_conn->socks_request->address)
continue;
- if (tor_addr_from_str(&addr, edge_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 != edge_conn->socks_request->port)
+ build_state->chosen_exit->port != entry_conn->socks_request->port)
continue;
}
log_info(LD_APP, "Closing one-hop stream to '%s/%s' because the OR conn "
- "just failed.", edge_conn->chosen_exit_name,
- edge_conn->socks_request->address);
- connection_mark_unattached_ap(edge_conn, END_STREAM_REASON_TIMEOUT);
+ "just failed.", entry_conn->chosen_exit_name,
+ entry_conn->socks_request->address);
+ connection_mark_unattached_ap(entry_conn, END_STREAM_REASON_TIMEOUT);
} SMARTLIST_FOREACH_END(conn);
}
@@ -604,7 +710,7 @@ connection_ap_fail_onehop(const char *failed_digest,
void
circuit_discard_optional_exit_enclaves(extend_info_t *info)
{
- edge_connection_t *edge_conn;
+ entry_connection_t *entry_conn;
const node_t *r1, *r2;
smartlist_t *conns = get_connection_array();
@@ -613,32 +719,32 @@ circuit_discard_optional_exit_enclaves(extend_info_t *info)
conn->type != CONN_TYPE_AP ||
conn->state != AP_CONN_STATE_CIRCUIT_WAIT)
continue;
- edge_conn = TO_EDGE_CONN(conn);
- if (!edge_conn->chosen_exit_optional &&
- !edge_conn->chosen_exit_retries)
+ entry_conn = TO_ENTRY_CONN(conn);
+ if (!entry_conn->chosen_exit_optional &&
+ !entry_conn->chosen_exit_retries)
continue;
- r1 = node_get_by_nickname(edge_conn->chosen_exit_name, 0);
+ r1 = node_get_by_nickname(entry_conn->chosen_exit_name, 0);
r2 = node_get_by_id(info->identity_digest);
if (!r1 || !r2 || r1 != r2)
continue;
- tor_assert(edge_conn->socks_request);
- if (edge_conn->chosen_exit_optional) {
+ tor_assert(entry_conn->socks_request);
+ if (entry_conn->chosen_exit_optional) {
log_info(LD_APP, "Giving up on enclave exit '%s' for destination %s.",
- safe_str_client(edge_conn->chosen_exit_name),
- escaped_safe_str_client(edge_conn->socks_request->address));
- edge_conn->chosen_exit_optional = 0;
- tor_free(edge_conn->chosen_exit_name); /* clears it */
+ safe_str_client(entry_conn->chosen_exit_name),
+ escaped_safe_str_client(entry_conn->socks_request->address));
+ entry_conn->chosen_exit_optional = 0;
+ tor_free(entry_conn->chosen_exit_name); /* clears it */
/* if this port is dangerous, warn or reject it now that we don't
* think it'll be using an enclave. */
- consider_plaintext_ports(edge_conn, edge_conn->socks_request->port);
+ consider_plaintext_ports(entry_conn, entry_conn->socks_request->port);
}
- if (edge_conn->chosen_exit_retries) {
- if (--edge_conn->chosen_exit_retries == 0) { /* give up! */
- clear_trackexithost_mappings(edge_conn->chosen_exit_name);
- tor_free(edge_conn->chosen_exit_name); /* clears it */
+ if (entry_conn->chosen_exit_retries) {
+ if (--entry_conn->chosen_exit_retries == 0) { /* give up! */
+ clear_trackexithost_mappings(entry_conn->chosen_exit_name);
+ tor_free(entry_conn->chosen_exit_name); /* clears it */
/* if this port is dangerous, warn or reject it now that we don't
* think it'll be using an enclave. */
- consider_plaintext_ports(edge_conn, edge_conn->socks_request->port);
+ consider_plaintext_ports(entry_conn, entry_conn->socks_request->port);
}
}
} SMARTLIST_FOREACH_END(conn);
@@ -652,20 +758,27 @@ circuit_discard_optional_exit_enclaves(extend_info_t *info)
* Returns -1 on err, 1 on success, 0 on not-yet-sure.
*/
int
-connection_ap_detach_retriable(edge_connection_t *conn, origin_circuit_t *circ,
+connection_ap_detach_retriable(entry_connection_t *conn,
+ origin_circuit_t *circ,
int reason)
{
control_event_stream_status(conn, STREAM_EVENT_FAILED_RETRIABLE, reason);
- conn->_base.timestamp_lastread = time(NULL);
+ ENTRY_TO_CONN(conn)->timestamp_lastread = time(NULL);
+
+ if (conn->pending_optimistic_data) {
+ generic_buffer_set_to_copy(&conn->sending_optimistic_data,
+ conn->pending_optimistic_data);
+ }
+
if (!get_options()->LeaveStreamsUnattached || conn->use_begindir) {
/* If we're attaching streams ourself, or if this connection is
* a tunneled directory connection, then just attach it. */
- conn->_base.state = AP_CONN_STATE_CIRCUIT_WAIT;
- circuit_detach_stream(TO_CIRCUIT(circ),conn);
+ ENTRY_TO_CONN(conn)->state = AP_CONN_STATE_CIRCUIT_WAIT;
+ circuit_detach_stream(TO_CIRCUIT(circ),ENTRY_TO_EDGE_CONN(conn));
return connection_ap_handshake_attach_circuit(conn);
} else {
- conn->_base.state = AP_CONN_STATE_CONTROLLER_WAIT;
- circuit_detach_stream(TO_CIRCUIT(circ),conn);
+ ENTRY_TO_CONN(conn)->state = AP_CONN_STATE_CONTROLLER_WAIT;
+ circuit_detach_stream(TO_CIRCUIT(circ),ENTRY_TO_EDGE_CONN(conn));
return 0;
}
}
@@ -813,7 +926,7 @@ clear_trackexithost_mappings(const char *exitname)
* host is unknown or no longer allowed, or for which the source address
* is no longer in trackexithosts. */
void
-addressmap_clear_excluded_trackexithosts(or_options_t *options)
+addressmap_clear_excluded_trackexithosts(const or_options_t *options)
{
const routerset_t *allow_nodes = options->ExitNodes;
const routerset_t *exclude_nodes = options->_ExcludeExitNodesUnion;
@@ -831,7 +944,10 @@ addressmap_clear_excluded_trackexithosts(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) {
@@ -842,12 +958,10 @@ addressmap_clear_excluded_trackexithosts(or_options_t *options)
if (len < 6)
continue; /* malformed. */
dot = target + len - 6; /* dot now points to just before .exit */
- dot = strrchr(dot, '.'); /* dot now points to the . before .exit or NULL */
- if (!dot) {
- nodename = tor_strndup(target, len-5);
- } else {
- nodename = tor_strndup(dot+1, strlen(dot+1)-5);
- }
+ while (dot > target && *dot != '.')
+ dot--;
+ if (*dot == '.') dot++;
+ nodename = tor_strndup(dot, len-5-(dot-target));;
node = node_get_by_nickname(nodename, 0);
tor_free(nodename);
if (!node ||
@@ -866,7 +980,7 @@ addressmap_clear_excluded_trackexithosts(or_options_t *options)
* no longer allowed by AutomapHostsOnResolve, or for which the
* target address is no longer in the virtual network. */
void
-addressmap_clear_invalid_automaps(or_options_t *options)
+addressmap_clear_invalid_automaps(const or_options_t *options)
{
int clear_all = !options->AutomapHostsOnResolve;
const smartlist_t *suffixes = options->AutomapHostsSuffixes;
@@ -1518,9 +1632,9 @@ addressmap_get_mappings(smartlist_t *sl, time_t min_expires,
/** Check if <b>conn</b> is using a dangerous port. Then warn and/or
* reject depending on our config options. */
static int
-consider_plaintext_ports(edge_connection_t *conn, uint16_t port)
+consider_plaintext_ports(entry_connection_t *conn, uint16_t port)
{
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
int reject = smartlist_string_num_isin(options->RejectPlaintextPorts, port);
if (smartlist_string_num_isin(options->WarnPlaintextPorts, port)) {
@@ -1553,14 +1667,14 @@ consider_plaintext_ports(edge_connection_t *conn, uint16_t port)
* documentation for arguments and return value.
*/
int
-connection_ap_rewrite_and_attach_if_allowed(edge_connection_t *conn,
+connection_ap_rewrite_and_attach_if_allowed(entry_connection_t *conn,
origin_circuit_t *circ,
crypt_path_t *cpath)
{
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
if (options->LeaveStreamsUnattached) {
- conn->_base.state = AP_CONN_STATE_CONTROLLER_WAIT;
+ ENTRY_TO_CONN(conn)->state = AP_CONN_STATE_CONTROLLER_WAIT;
return 0;
}
return connection_ap_handshake_rewrite_and_attach(conn, circ, cpath);
@@ -1582,13 +1696,13 @@ connection_ap_rewrite_and_attach_if_allowed(edge_connection_t *conn,
* <b>cpath</b> is NULL.
*/
int
-connection_ap_handshake_rewrite_and_attach(edge_connection_t *conn,
+connection_ap_handshake_rewrite_and_attach(entry_connection_t *conn,
origin_circuit_t *circ,
crypt_path_t *cpath)
{
socks_request_t *socks = conn->socks_request;
hostname_type_t addresstype;
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
struct in_addr addr_tmp;
/* We set this to true if this is an address we should automatically
* remap to a local address in VirtualAddrNetwork */
@@ -1599,6 +1713,7 @@ connection_ap_handshake_rewrite_and_attach(edge_connection_t *conn,
address, and we remap it to one because of an entry in the addressmap. */
int remapped_to_exit = 0;
time_t now = time(NULL);
+ connection_t *base_conn = ENTRY_TO_CONN(conn);
tor_strlower(socks->address); /* normalize it */
strlcpy(orig_address, socks->address, sizeof(orig_address));
@@ -1606,6 +1721,9 @@ connection_ap_handshake_rewrite_and_attach(edge_connection_t *conn,
safe_str_client(socks->address),
socks->port);
+ if (! conn->original_dest_address)
+ conn->original_dest_address = tor_strdup(conn->socks_request->address);
+
if (socks->command == SOCKS_COMMAND_RESOLVE &&
!tor_inet_aton(socks->address, &addr_tmp) &&
options->AutomapHostsOnResolve && options->AutomapHostsSuffixes) {
@@ -1651,7 +1769,7 @@ connection_ap_handshake_rewrite_and_attach(edge_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,
@@ -1803,7 +1921,7 @@ connection_ap_handshake_rewrite_and_attach(edge_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
@@ -1830,7 +1948,7 @@ connection_ap_handshake_rewrite_and_attach(edge_connection_t *conn,
if (r) {
log_info(LD_APP,
"Redirecting address %s to exit at enclave router %s",
- safe_str_client(socks->address), node_get_nickname(r));
+ safe_str_client(socks->address), node_describe(r));
/* use the hex digest, not nickname, in case there are two
routers with this nickname */
conn->chosen_exit_name =
@@ -1854,12 +1972,12 @@ connection_ap_handshake_rewrite_and_attach(edge_connection_t *conn,
} else {
tor_fragile_assert();
}
- conn->_base.state = AP_CONN_STATE_CIRCUIT_WAIT;
+ base_conn->state = AP_CONN_STATE_CIRCUIT_WAIT;
if ((circ && connection_ap_handshake_attach_chosen_circuit(
conn, circ, cpath) < 0) ||
(!circ &&
connection_ap_handshake_attach_circuit(conn) < 0)) {
- if (!conn->_base.marked_for_close)
+ if (!base_conn->marked_for_close)
connection_mark_unattached_ap(conn, END_STREAM_REASON_CANT_ATTACH);
return -1;
}
@@ -1869,6 +1987,7 @@ connection_ap_handshake_rewrite_and_attach(edge_connection_t *conn,
rend_cache_entry_t *entry;
int r;
rend_service_authorization_t *client_auth;
+ rend_data_t *rend_data;
tor_assert(!automap);
if (SOCKS_COMMAND_IS_RESOLVE(socks->command)) {
/* if it's a resolve request, fail it right now, rather than
@@ -1890,16 +2009,17 @@ connection_ap_handshake_rewrite_and_attach(edge_connection_t *conn,
return -1;
}
- conn->rend_data = tor_malloc_zero(sizeof(rend_data_t));
- strlcpy(conn->rend_data->onion_address, socks->address,
- sizeof(conn->rend_data->onion_address));
+ ENTRY_TO_EDGE_CONN(conn)->rend_data = rend_data =
+ tor_malloc_zero(sizeof(rend_data_t));
+ strlcpy(rend_data->onion_address, socks->address,
+ sizeof(rend_data->onion_address));
log_info(LD_REND,"Got a hidden service request for ID '%s'",
- safe_str_client(conn->rend_data->onion_address));
+ safe_str_client(rend_data->onion_address));
/* see if we already have it cached */
- r = rend_cache_lookup_entry(conn->rend_data->onion_address, -1, &entry);
+ r = rend_cache_lookup_entry(rend_data->onion_address, -1, &entry);
if (r<0) {
log_warn(LD_BUG,"Invalid service name '%s'",
- safe_str_client(conn->rend_data->onion_address));
+ safe_str_client(rend_data->onion_address));
connection_mark_unattached_ap(conn, END_STREAM_REASON_TORPROTOCOL);
return -1;
}
@@ -1910,24 +2030,24 @@ connection_ap_handshake_rewrite_and_attach(edge_connection_t *conn,
/* Look up if we have client authorization for it. */
client_auth = rend_client_lookup_service_authorization(
- conn->rend_data->onion_address);
+ rend_data->onion_address);
if (client_auth) {
log_info(LD_REND, "Using previously configured client authorization "
"for hidden service request.");
- memcpy(conn->rend_data->descriptor_cookie,
+ memcpy(rend_data->descriptor_cookie,
client_auth->descriptor_cookie, REND_DESC_COOKIE_LEN);
- conn->rend_data->auth_type = client_auth->auth_type;
+ rend_data->auth_type = client_auth->auth_type;
}
if (r==0) {
- conn->_base.state = AP_CONN_STATE_RENDDESC_WAIT;
+ base_conn->state = AP_CONN_STATE_RENDDESC_WAIT;
log_info(LD_REND, "Unknown descriptor %s. Fetching.",
- safe_str_client(conn->rend_data->onion_address));
- rend_client_refetch_v2_renddesc(conn->rend_data);
+ safe_str_client(rend_data->onion_address));
+ rend_client_refetch_v2_renddesc(rend_data);
} else { /* r > 0 */
- conn->_base.state = AP_CONN_STATE_CIRCUIT_WAIT;
+ base_conn->state = AP_CONN_STATE_CIRCUIT_WAIT;
log_info(LD_REND, "Descriptor is here. Great.");
if (connection_ap_handshake_attach_circuit(conn) < 0) {
- if (!conn->_base.marked_for_close)
+ if (!base_conn->marked_for_close)
connection_mark_unattached_ap(conn, END_STREAM_REASON_CANT_ATTACH);
return -1;
}
@@ -1973,7 +2093,7 @@ get_pf_socket(void)
* else return 0.
*/
static int
-connection_ap_get_original_destination(edge_connection_t *conn,
+connection_ap_get_original_destination(entry_connection_t *conn,
socks_request_t *req)
{
#ifdef TRANS_NETFILTER
@@ -1982,9 +2102,9 @@ connection_ap_get_original_destination(edge_connection_t *conn,
socklen_t orig_dst_len = sizeof(orig_dst);
tor_addr_t addr;
- if (getsockopt(conn->_base.s, SOL_IP, SO_ORIGINAL_DST,
+ if (getsockopt(ENTRY_TO_CONN(conn)->s, SOL_IP, SO_ORIGINAL_DST,
(struct sockaddr*)&orig_dst, &orig_dst_len) < 0) {
- int e = tor_socket_errno(conn->_base.s);
+ int e = tor_socket_errno(ENTRY_TO_CONN(conn)->s);
log_warn(LD_NET, "getsockopt() failed: %s", tor_socket_strerror(e));
return -1;
}
@@ -2001,9 +2121,9 @@ connection_ap_get_original_destination(edge_connection_t *conn,
tor_addr_t addr;
int pf = -1;
- if (getsockname(conn->_base.s, (struct sockaddr*)&proxy_addr,
+ if (getsockname(ENTRY_TO_CONN(conn)->s, (struct sockaddr*)&proxy_addr,
&proxy_addr_len) < 0) {
- int e = tor_socket_errno(conn->_base.s);
+ int e = tor_socket_errno(ENTRY_TO_CONN(conn)->s);
log_warn(LD_NET, "getsockname() to determine transocks destination "
"failed: %s", tor_socket_strerror(e));
return -1;
@@ -2015,16 +2135,16 @@ connection_ap_get_original_destination(edge_connection_t *conn,
if (proxy_sa->sa_family == AF_INET) {
struct sockaddr_in *sin = (struct sockaddr_in *)proxy_sa;
pnl.af = AF_INET;
- pnl.saddr.v4.s_addr = tor_addr_to_ipv4n(&conn->_base.addr);
- pnl.sport = htons(conn->_base.port);
+ pnl.saddr.v4.s_addr = tor_addr_to_ipv4n(&ENTRY_TO_CONN(conn)->addr);
+ pnl.sport = htons(ENTRY_TO_CONN(conn)->port);
pnl.daddr.v4.s_addr = sin->sin_addr.s_addr;
pnl.dport = sin->sin_port;
} else if (proxy_sa->sa_family == AF_INET6) {
struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)proxy_sa;
pnl.af = AF_INET6;
- memcpy(&pnl.saddr.v6, tor_addr_to_in6(&conn->_base.addr),
+ memcpy(&pnl.saddr.v6, tor_addr_to_in6(&ENTRY_TO_CONN(conn)->addr),
sizeof(struct in6_addr));
- pnl.sport = htons(conn->_base.port);
+ pnl.sport = htons(ENTRY_TO_CONN(conn)->port);
memcpy(&pnl.daddr.v6, &sin6->sin6_addr, sizeof(struct in6_addr));
pnl.dport = sin6->sin6_port;
} else {
@@ -2075,44 +2195,43 @@ connection_ap_get_original_destination(edge_connection_t *conn,
* else return 0.
*/
static int
-connection_ap_handshake_process_socks(edge_connection_t *conn)
+connection_ap_handshake_process_socks(entry_connection_t *conn)
{
socks_request_t *socks;
int sockshere;
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
+ int had_reply = 0;
+ connection_t *base_conn = ENTRY_TO_CONN(conn);
tor_assert(conn);
- tor_assert(conn->_base.type == CONN_TYPE_AP);
- tor_assert(conn->_base.state == AP_CONN_STATE_SOCKS_WAIT);
+ tor_assert(base_conn->type == CONN_TYPE_AP);
+ tor_assert(base_conn->state == AP_CONN_STATE_SOCKS_WAIT);
tor_assert(conn->socks_request);
socks = conn->socks_request;
log_debug(LD_APP,"entered.");
- IF_HAS_BUFFEREVENT(TO_CONN(conn), {
- struct evbuffer *input = bufferevent_get_input(conn->_base.bufev);
+ IF_HAS_BUFFEREVENT(base_conn, {
+ struct evbuffer *input = bufferevent_get_input(base_conn->bufev);
sockshere = fetch_from_evbuffer_socks(input, socks,
options->TestSocks, options->SafeSocks);
}) ELSE_IF_NO_BUFFEREVENT {
- sockshere = fetch_from_buf_socks(conn->_base.inbuf, socks,
+ sockshere = fetch_from_buf_socks(base_conn->inbuf, socks,
options->TestSocks, options->SafeSocks);
};
+
+ if (socks->replylen) {
+ had_reply = 1;
+ connection_write_to_buf((const char*)socks->reply, socks->replylen,
+ base_conn);
+ socks->replylen = 0;
+ }
+
if (sockshere == 0) {
- if (socks->replylen) {
- connection_write_to_buf(socks->reply, socks->replylen, TO_CONN(conn));
- /* zero it out so we can do another round of negotiation */
- socks->replylen = 0;
- } else {
- log_debug(LD_APP,"socks handshake not all here yet.");
- }
+ log_debug(LD_APP,"socks handshake not all here yet.");
return 0;
} else if (sockshere == -1) {
- if (socks->replylen) { /* we should send reply back */
- log_debug(LD_APP,"reply is already set for us. Using it.");
- connection_ap_handshake_socks_reply(conn, socks->reply, socks->replylen,
- END_STREAM_REASON_SOCKSPROTOCOL);
-
- } else {
+ if (!had_reply) {
log_warn(LD_APP,"Fetching socks handshake failed. Closing.");
connection_ap_handshake_socks_reply(conn, NULL, 0,
END_STREAM_REASON_SOCKSPROTOCOL);
@@ -2139,12 +2258,11 @@ connection_ap_handshake_process_socks(edge_connection_t *conn)
* for close), else return 0.
*/
int
-connection_ap_process_transparent(edge_connection_t *conn)
+connection_ap_process_transparent(entry_connection_t *conn)
{
socks_request_t *socks;
tor_assert(conn);
- tor_assert(conn->_base.type == CONN_TYPE_AP);
tor_assert(conn->socks_request);
socks = conn->socks_request;
@@ -2180,7 +2298,7 @@ connection_ap_process_transparent(edge_connection_t *conn)
* for close), else return 0.
*/
static int
-connection_ap_process_natd(edge_connection_t *conn)
+connection_ap_process_natd(entry_connection_t *conn)
{
char tmp_buf[36], *tbuf, *daddr;
size_t tlen = 30;
@@ -2188,8 +2306,7 @@ connection_ap_process_natd(edge_connection_t *conn)
socks_request_t *socks;
tor_assert(conn);
- tor_assert(conn->_base.type == CONN_TYPE_AP);
- tor_assert(conn->_base.state == AP_CONN_STATE_NATD_WAIT);
+ tor_assert(ENTRY_TO_CONN(conn)->state == AP_CONN_STATE_NATD_WAIT);
tor_assert(conn->socks_request);
socks = conn->socks_request;
@@ -2197,7 +2314,7 @@ connection_ap_process_natd(edge_connection_t *conn)
/* look for LF-terminated "[DEST ip_addr port]"
* where ip_addr is a dotted-quad and port is in string form */
- err = connection_fetch_from_buf_line(TO_CONN(conn), tmp_buf, &tlen);
+ err = connection_fetch_from_buf_line(ENTRY_TO_CONN(conn), tmp_buf, &tlen);
if (err == 0)
return 0;
if (err < 0) {
@@ -2241,7 +2358,7 @@ connection_ap_process_natd(edge_connection_t *conn)
control_event_stream_status(conn, STREAM_EVENT_NEW, 0);
- conn->_base.state = AP_CONN_STATE_CIRCUIT_WAIT;
+ ENTRY_TO_CONN(conn)->state = AP_CONN_STATE_CIRCUIT_WAIT;
return connection_ap_rewrite_and_attach_if_allowed(conn, NULL, NULL);
}
@@ -2271,28 +2388,46 @@ get_unique_stream_id_by_circ(origin_circuit_t *circ)
return test_stream_id;
}
+/** Return true iff <b>conn</b> is linked to a circuit and configured to use
+ * an exit that supports optimistic data. */
+static int
+connection_ap_supports_optimistic_data(const entry_connection_t *conn)
+{
+ const edge_connection_t *edge_conn = ENTRY_TO_EDGE_CONN(conn);
+ /* We can only send optimistic data if we're connected to an open
+ general circuit. */
+ if (edge_conn->on_circuit == NULL ||
+ edge_conn->on_circuit->state != CIRCUIT_STATE_OPEN ||
+ edge_conn->on_circuit->purpose != CIRCUIT_PURPOSE_C_GENERAL)
+ return 0;
+
+ return conn->may_use_optimistic_data;
+}
+
/** Write a relay begin cell, using destaddr and destport from ap_conn's
* socks_request field, and send it down circ.
*
* If ap_conn is broken, mark it for close and return -1. Else return 0.
*/
int
-connection_ap_handshake_send_begin(edge_connection_t *ap_conn)
+connection_ap_handshake_send_begin(entry_connection_t *ap_conn)
{
char payload[CELL_PAYLOAD_SIZE];
int payload_len;
int begin_type;
origin_circuit_t *circ;
- tor_assert(ap_conn->on_circuit);
- circ = TO_ORIGIN_CIRCUIT(ap_conn->on_circuit);
+ edge_connection_t *edge_conn = ENTRY_TO_EDGE_CONN(ap_conn);
+ connection_t *base_conn = TO_CONN(edge_conn);
+ tor_assert(edge_conn->on_circuit);
+ circ = TO_ORIGIN_CIRCUIT(edge_conn->on_circuit);
- tor_assert(ap_conn->_base.type == CONN_TYPE_AP);
- tor_assert(ap_conn->_base.state == AP_CONN_STATE_CIRCUIT_WAIT);
+ tor_assert(base_conn->type == CONN_TYPE_AP);
+ tor_assert(base_conn->state == AP_CONN_STATE_CIRCUIT_WAIT);
tor_assert(ap_conn->socks_request);
tor_assert(SOCKS_COMMAND_IS_CONNECT(ap_conn->socks_request->command));
- ap_conn->stream_id = get_unique_stream_id_by_circ(circ);
- if (ap_conn->stream_id==0) {
+ edge_conn->stream_id = get_unique_stream_id_by_circ(circ);
+ if (edge_conn->stream_id==0) {
/* XXXX023 Instead of closing this stream, we should make it get
* retried on another circuit. */
connection_mark_unattached_ap(ap_conn, END_STREAM_REASON_INTERNAL);
@@ -2313,7 +2448,7 @@ connection_ap_handshake_send_begin(edge_connection_t *ap_conn)
log_info(LD_APP,
"Sending relay cell %d to begin stream %d.",
(int)ap_conn->use_begindir,
- ap_conn->stream_id);
+ edge_conn->stream_id);
begin_type = ap_conn->use_begindir ?
RELAY_COMMAND_BEGIN_DIR : RELAY_COMMAND_BEGIN;
@@ -2321,17 +2456,31 @@ connection_ap_handshake_send_begin(edge_connection_t *ap_conn)
tor_assert(circ->build_state->onehop_tunnel == 0);
}
- if (connection_edge_send_command(ap_conn, begin_type,
+ if (connection_edge_send_command(edge_conn, begin_type,
begin_type == RELAY_COMMAND_BEGIN ? payload : NULL,
begin_type == RELAY_COMMAND_BEGIN ? payload_len : 0) < 0)
return -1; /* circuit is closed, don't continue */
- ap_conn->package_window = STREAMWINDOW_START;
- ap_conn->deliver_window = STREAMWINDOW_START;
- ap_conn->_base.state = AP_CONN_STATE_CONNECT_WAIT;
+ edge_conn->package_window = STREAMWINDOW_START;
+ edge_conn->deliver_window = STREAMWINDOW_START;
+ base_conn->state = AP_CONN_STATE_CONNECT_WAIT;
log_info(LD_APP,"Address/port sent, ap socket %d, n_circ_id %d",
- ap_conn->_base.s, circ->_base.n_circ_id);
+ base_conn->s, circ->_base.n_circ_id);
control_event_stream_status(ap_conn, STREAM_EVENT_SENT_CONNECT, 0);
+
+ /* If there's queued-up data, send it now */
+ if ((connection_get_inbuf_len(base_conn) ||
+ ap_conn->sending_optimistic_data) &&
+ connection_ap_supports_optimistic_data(ap_conn)) {
+ log_info(LD_APP, "Sending up to %ld + %ld bytes of queued-up data",
+ (long)connection_get_inbuf_len(base_conn),
+ ap_conn->sending_optimistic_data ?
+ (long)generic_buffer_len(ap_conn->sending_optimistic_data) : 0);
+ if (connection_edge_package_raw_inbuf(edge_conn, 1, NULL) < 0) {
+ connection_mark_for_close(base_conn);
+ }
+ }
+
return 0;
}
@@ -2341,25 +2490,27 @@ connection_ap_handshake_send_begin(edge_connection_t *ap_conn)
* If ap_conn is broken, mark it for close and return -1. Else return 0.
*/
int
-connection_ap_handshake_send_resolve(edge_connection_t *ap_conn)
+connection_ap_handshake_send_resolve(entry_connection_t *ap_conn)
{
int payload_len, command;
const char *string_addr;
char inaddr_buf[REVERSE_LOOKUP_NAME_BUF_LEN];
origin_circuit_t *circ;
- tor_assert(ap_conn->on_circuit);
- circ = TO_ORIGIN_CIRCUIT(ap_conn->on_circuit);
+ edge_connection_t *edge_conn = ENTRY_TO_EDGE_CONN(ap_conn);
+ connection_t *base_conn = TO_CONN(edge_conn);
+ tor_assert(edge_conn->on_circuit);
+ circ = TO_ORIGIN_CIRCUIT(edge_conn->on_circuit);
- tor_assert(ap_conn->_base.type == CONN_TYPE_AP);
- tor_assert(ap_conn->_base.state == AP_CONN_STATE_CIRCUIT_WAIT);
+ tor_assert(base_conn->type == CONN_TYPE_AP);
+ tor_assert(base_conn->state == AP_CONN_STATE_CIRCUIT_WAIT);
tor_assert(ap_conn->socks_request);
tor_assert(circ->_base.purpose == CIRCUIT_PURPOSE_C_GENERAL);
command = ap_conn->socks_request->command;
tor_assert(SOCKS_COMMAND_IS_RESOLVE(command));
- ap_conn->stream_id = get_unique_stream_id_by_circ(circ);
- if (ap_conn->stream_id==0) {
+ edge_conn->stream_id = get_unique_stream_id_by_circ(circ);
+ if (edge_conn->stream_id==0) {
/* XXXX023 Instead of closing this stream, we should make it get
* retried on another circuit. */
connection_mark_unattached_ap(ap_conn, END_STREAM_REASON_INTERNAL);
@@ -2382,7 +2533,7 @@ connection_ap_handshake_send_resolve(edge_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));
@@ -2390,7 +2541,7 @@ connection_ap_handshake_send_resolve(edge_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));
@@ -2404,18 +2555,18 @@ connection_ap_handshake_send_resolve(edge_connection_t *ap_conn)
}
log_debug(LD_APP,
- "Sending relay cell to begin stream %d.", ap_conn->stream_id);
+ "Sending relay cell to begin stream %d.", edge_conn->stream_id);
- if (connection_edge_send_command(ap_conn,
+ if (connection_edge_send_command(edge_conn,
RELAY_COMMAND_RESOLVE,
string_addr, payload_len) < 0)
return -1; /* circuit is closed, don't continue */
- tor_free(ap_conn->_base.address); /* Maybe already set by dnsserv. */
- ap_conn->_base.address = tor_strdup("(Tor_internal)");
- ap_conn->_base.state = AP_CONN_STATE_RESOLVE_WAIT;
+ tor_free(base_conn->address); /* Maybe already set by dnsserv. */
+ base_conn->address = tor_strdup("(Tor_internal)");
+ base_conn->state = AP_CONN_STATE_RESOLVE_WAIT;
log_info(LD_APP,"Address sent for resolve, ap socket %d, n_circ_id %d",
- ap_conn->_base.s, circ->_base.n_circ_id);
+ base_conn->s, circ->_base.n_circ_id);
control_event_stream_status(ap_conn, STREAM_EVENT_NEW, 0);
control_event_stream_status(ap_conn, STREAM_EVENT_SENT_RESOLVE, 0);
return 0;
@@ -2428,19 +2579,23 @@ connection_ap_handshake_send_resolve(edge_connection_t *ap_conn)
* Return the other end of the linked connection pair, or -1 if error.
* DOCDOC partner.
*/
-edge_connection_t *
+entry_connection_t *
connection_ap_make_link(connection_t *partner,
char *address, uint16_t port,
- const char *digest, int use_begindir, int want_onehop)
+ const char *digest,
+ int session_group, int isolation_flags,
+ int use_begindir, int want_onehop)
{
- edge_connection_t *conn;
+ entry_connection_t *conn;
+ connection_t *base_conn;
log_info(LD_APP,"Making internal %s tunnel to %s:%d ...",
want_onehop ? "direct" : "anonymized",
safe_str_client(address), port);
- conn = edge_connection_new(CONN_TYPE_AP, AF_INET);
- conn->_base.linked = 1; /* so that we can add it safely below. */
+ conn = entry_connection_new(CONN_TYPE_AP, AF_INET);
+ base_conn = ENTRY_TO_CONN(conn);
+ base_conn->linked = 1; /* so that we can add it safely below. */
/* populate conn->socks_request */
@@ -2461,24 +2616,30 @@ connection_ap_make_link(connection_t *partner,
digest, DIGEST_LEN);
}
- conn->_base.address = tor_strdup("(Tor_internal)");
- tor_addr_make_unspec(&conn->_base.addr);
- conn->_base.port = 0;
+ /* Populate isolation fields. */
+ conn->socks_request->listener_type = CONN_TYPE_DIR_LISTENER;
+ conn->original_dest_address = tor_strdup(address);
+ conn->session_group = session_group;
+ conn->isolation_flags = isolation_flags;
+
+ base_conn->address = tor_strdup("(Tor_internal)");
+ tor_addr_make_unspec(&base_conn->addr);
+ base_conn->port = 0;
- connection_link_connections(partner, TO_CONN(conn));
+ connection_link_connections(partner, base_conn);
- if (connection_add(TO_CONN(conn)) < 0) { /* no space, forget it */
- connection_free(TO_CONN(conn));
+ if (connection_add(base_conn) < 0) { /* no space, forget it */
+ connection_free(base_conn);
return NULL;
}
- conn->_base.state = AP_CONN_STATE_CIRCUIT_WAIT;
+ base_conn->state = AP_CONN_STATE_CIRCUIT_WAIT;
control_event_stream_status(conn, STREAM_EVENT_NEW, 0);
/* attaching to a dirty circuit is fine */
if (connection_ap_handshake_attach_circuit(conn) < 0) {
- if (!conn->_base.marked_for_close)
+ if (!base_conn->marked_for_close)
connection_mark_unattached_ap(conn, END_STREAM_REASON_CANT_ATTACH);
return NULL;
}
@@ -2491,7 +2652,7 @@ connection_ap_make_link(connection_t *partner,
* or resolve error. Takes the same arguments as does
* connection_ap_handshake_socks_resolved(). */
static void
-tell_controller_about_resolved_result(edge_connection_t *conn,
+tell_controller_about_resolved_result(entry_connection_t *conn,
int answer_type,
size_t answer_len,
const char *answer,
@@ -2530,7 +2691,7 @@ tell_controller_about_resolved_result(edge_connection_t *conn,
/* XXXX023 the use of the ttl and expires fields is nutty. Let's make this
* interface and those that use it less ugly. */
void
-connection_ap_handshake_socks_resolved(edge_connection_t *conn,
+connection_ap_handshake_socks_resolved(entry_connection_t *conn,
int answer_type,
size_t answer_len,
const uint8_t *answer,
@@ -2555,7 +2716,7 @@ connection_ap_handshake_socks_resolved(edge_connection_t *conn,
}
}
- if (conn->is_dns_request) {
+ if (ENTRY_TO_EDGE_CONN(conn)->is_dns_request) {
if (conn->dns_server_request) {
/* We had a request on our DNS port: answer it. */
dnsserv_resolved(conn, answer_type, answer_len, (char*)answer, ttl);
@@ -2620,7 +2781,8 @@ connection_ap_handshake_socks_resolved(edge_connection_t *conn,
}
connection_ap_handshake_socks_reply(conn, buf, replylen,
(answer_type == RESOLVED_TYPE_IPV4 ||
- answer_type == RESOLVED_TYPE_IPV6) ?
+ answer_type == RESOLVED_TYPE_IPV6 ||
+ answer_type == RESOLVED_TYPE_HOSTNAME) ?
0 : END_STREAM_REASON_RESOLVEFAILED);
}
@@ -2634,7 +2796,7 @@ connection_ap_handshake_socks_resolved(edge_connection_t *conn,
* be 0 or REASON_DONE. Send endreason to the controller, if appropriate.
*/
void
-connection_ap_handshake_socks_reply(edge_connection_t *conn, char *reply,
+connection_ap_handshake_socks_reply(entry_connection_t *conn, char *reply,
size_t replylen, int endreason)
{
char buf[256];
@@ -2653,7 +2815,7 @@ connection_ap_handshake_socks_reply(edge_connection_t *conn, char *reply,
return;
}
if (replylen) { /* we already have a reply in mind */
- connection_write_to_buf(reply, replylen, TO_CONN(conn));
+ connection_write_to_buf(reply, replylen, ENTRY_TO_CONN(conn));
conn->socks_request->has_finished = 1;
return;
}
@@ -2661,7 +2823,7 @@ connection_ap_handshake_socks_reply(edge_connection_t *conn, char *reply,
memset(buf,0,SOCKS4_NETWORK_LEN);
buf[1] = (status==SOCKS5_SUCCEEDED ? SOCKS4_GRANTED : SOCKS4_REJECT);
/* leave version, destport, destip zero */
- connection_write_to_buf(buf, SOCKS4_NETWORK_LEN, TO_CONN(conn));
+ connection_write_to_buf(buf, SOCKS4_NETWORK_LEN, ENTRY_TO_CONN(conn));
} else if (conn->socks_request->socks_version == 5) {
buf[0] = 5; /* version 5 */
buf[1] = (char)status;
@@ -2669,7 +2831,7 @@ connection_ap_handshake_socks_reply(edge_connection_t *conn, char *reply,
buf[3] = 1; /* ipv4 addr */
memset(buf+4,0,6); /* Set external addr/port to 0.
The spec doesn't seem to say what to do here. -RD */
- connection_write_to_buf(buf,10,TO_CONN(conn));
+ connection_write_to_buf(buf,10,ENTRY_TO_CONN(conn));
}
/* If socks_version isn't 4 or 5, don't send anything.
* This can happen in the case of AP bridges. */
@@ -2703,7 +2865,7 @@ connection_exit_begin_conn(cell_t *cell, circuit_t *circ)
char *address=NULL;
uint16_t port;
or_circuit_t *or_circ = NULL;
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
assert_circuit_ok(circ);
if (!CIRCUIT_IS_ORIGIN(circ))
@@ -2735,9 +2897,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,
@@ -3102,12 +3264,11 @@ connection_edge_is_rendezvous_stream(edge_connection_t *conn)
* resolved.)
*/
int
-connection_ap_can_use_exit(edge_connection_t *conn, const node_t *exit)
+connection_ap_can_use_exit(const entry_connection_t *conn, const node_t *exit)
{
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
tor_assert(conn);
- tor_assert(conn->_base.type == CONN_TYPE_AP);
tor_assert(conn->socks_request);
tor_assert(exit);
@@ -3129,11 +3290,13 @@ connection_ap_can_use_exit(edge_connection_t *conn, const node_t *exit)
if (conn->socks_request->command == SOCKS_COMMAND_CONNECT &&
!conn->use_begindir) {
struct in_addr in;
- uint32_t addr = 0;
+ tor_addr_t addr, *addrp = NULL;
addr_policy_result_t r;
- if (tor_inet_aton(conn->socks_request->address, &in))
- addr = ntohl(in.s_addr);
- r = compare_addr_to_node_policy(addr, conn->socks_request->port, exit);
+ if (tor_inet_aton(conn->socks_request->address, &in)) {
+ tor_addr_from_in(&addr, &in);
+ addrp = &addr;
+ }
+ r = compare_tor_addr_to_node_policy(addrp, conn->socks_request->port,exit);
if (r == ADDR_POLICY_REJECTED)
return 0; /* We know the address, and the exit policy rejects it. */
if (r == ADDR_POLICY_PROBABLY_REJECTED && !conn->chosen_exit_name)
@@ -3145,8 +3308,7 @@ connection_ap_can_use_exit(edge_connection_t *conn, const node_t *exit)
if (!conn->chosen_exit_name && node_exit_policy_rejects_all(exit))
return 0;
}
- if (options->_ExcludeExitNodesUnion &&
- routerset_contains_node(options->_ExcludeExitNodesUnion, exit)) {
+ if (routerset_contains_node(options->_ExcludeExitNodesUnion, exit)) {
/* Not a suitable exit. Refuse it. */
return 0;
}
@@ -3201,3 +3363,205 @@ parse_extended_hostname(char *address, int allowdotexit)
return BAD_HOSTNAME;
}
+/** Return true iff the (possibly NULL) <b>alen</b>-byte chunk of memory at
+ * <b>a</b> is equal to the (possibly NULL) <b>blen</b>-byte chunk of memory
+ * at <b>b</b>. */
+static int
+memeq_opt(const char *a, size_t alen, const char *b, size_t blen)
+{
+ if (a == NULL) {
+ return (b == NULL);
+ } else if (b == NULL) {
+ return 0;
+ } else if (alen != blen) {
+ return 0;
+ } else {
+ return tor_memeq(a, b, alen);
+ }
+}
+
+/**
+ * Return true iff none of the isolation flags and fields in <b>conn</b>
+ * should prevent it from being attached to <b>circ</b>.
+ */
+int
+connection_edge_compatible_with_circuit(const entry_connection_t *conn,
+ const origin_circuit_t *circ)
+{
+ const uint8_t iso = conn->isolation_flags;
+ const socks_request_t *sr = conn->socks_request;
+
+ /* If circ has never been used for an isolated connection, we can
+ * totally use it for this one. */
+ if (!circ->isolation_values_set)
+ return 1;
+
+ /* If circ has been used for connections having more than one value
+ * for some field f, it will have the corresponding bit set in
+ * isolation_flags_mixed. If isolation_flags_mixed has any bits
+ * in common with iso, then conn must be isolated from at least
+ * one stream that has been attached to circ. */
+ if ((iso & circ->isolation_flags_mixed) != 0) {
+ /* For at least one field where conn is isolated, the circuit
+ * already has mixed streams. */
+ return 0;
+ }
+
+ if (! conn->original_dest_address) {
+ log_warn(LD_BUG, "Reached connection_edge_compatible_with_circuit without "
+ "having set conn->original_dest_address");
+ ((entry_connection_t*)conn)->original_dest_address =
+ tor_strdup(conn->socks_request->address);
+ }
+
+ if ((iso & ISO_STREAM) &&
+ (circ->associated_isolated_stream_global_id !=
+ ENTRY_TO_CONN(conn)->global_identifier))
+ return 0;
+
+ if ((iso & ISO_DESTPORT) && conn->socks_request->port != circ->dest_port)
+ return 0;
+ if ((iso & ISO_DESTADDR) &&
+ strcasecmp(conn->original_dest_address, circ->dest_address))
+ return 0;
+ if ((iso & ISO_SOCKSAUTH) &&
+ (! memeq_opt(sr->username, sr->usernamelen,
+ circ->socks_username, circ->socks_username_len) ||
+ ! memeq_opt(sr->password, sr->passwordlen,
+ circ->socks_password, circ->socks_password_len)))
+ return 0;
+ if ((iso & ISO_CLIENTPROTO) &&
+ (conn->socks_request->listener_type != circ->client_proto_type ||
+ conn->socks_request->socks_version != circ->client_proto_socksver))
+ return 0;
+ if ((iso & ISO_CLIENTADDR) &&
+ !tor_addr_eq(&ENTRY_TO_CONN(conn)->addr, &circ->client_addr))
+ return 0;
+ if ((iso & ISO_SESSIONGRP) && conn->session_group != circ->session_group)
+ return 0;
+ if ((iso & ISO_NYM_EPOCH) && conn->nym_epoch != circ->nym_epoch)
+ return 0;
+
+ return 1;
+}
+
+/**
+ * If <b>dry_run</b> is false, update <b>circ</b>'s isolation flags and fields
+ * to reflect having had <b>conn</b> attached to it, and return 0. Otherwise,
+ * if <b>dry_run</b> is true, then make no changes to <b>circ</b>, and return
+ * a bitfield of isolation flags that we would have to set in
+ * isolation_flags_mixed to add <b>conn</b> to <b>circ</b>, or -1 if
+ * <b>circ</b> has had no streams attached to it.
+ */
+int
+connection_edge_update_circuit_isolation(const entry_connection_t *conn,
+ origin_circuit_t *circ,
+ int dry_run)
+{
+ const socks_request_t *sr = conn->socks_request;
+ if (! conn->original_dest_address) {
+ log_warn(LD_BUG, "Reached connection_update_circuit_isolation without "
+ "having set conn->original_dest_address");
+ ((entry_connection_t*)conn)->original_dest_address =
+ tor_strdup(conn->socks_request->address);
+ }
+
+ if (!circ->isolation_values_set) {
+ if (dry_run)
+ return -1;
+ circ->associated_isolated_stream_global_id =
+ ENTRY_TO_CONN(conn)->global_identifier;
+ circ->dest_port = conn->socks_request->port;
+ circ->dest_address = tor_strdup(conn->original_dest_address);
+ circ->client_proto_type = conn->socks_request->listener_type;
+ circ->client_proto_socksver = conn->socks_request->socks_version;
+ tor_addr_copy(&circ->client_addr, &ENTRY_TO_CONN(conn)->addr);
+ circ->session_group = conn->session_group;
+ circ->nym_epoch = conn->nym_epoch;
+ circ->socks_username = sr->username ?
+ tor_memdup(sr->username, sr->usernamelen) : NULL;
+ circ->socks_password = sr->password ?
+ tor_memdup(sr->password, sr->passwordlen) : NULL;
+ circ->socks_username_len = sr->usernamelen;
+ circ->socks_password_len = sr->passwordlen;
+
+ circ->isolation_values_set = 1;
+ return 0;
+ } else {
+ uint8_t mixed = 0;
+ if (conn->socks_request->port != circ->dest_port)
+ mixed |= ISO_DESTPORT;
+ if (strcasecmp(conn->original_dest_address, circ->dest_address))
+ mixed |= ISO_DESTADDR;
+ if (!memeq_opt(sr->username, sr->usernamelen,
+ circ->socks_username, circ->socks_username_len) ||
+ !memeq_opt(sr->password, sr->passwordlen,
+ circ->socks_password, circ->socks_password_len))
+ mixed |= ISO_SOCKSAUTH;
+ if ((conn->socks_request->listener_type != circ->client_proto_type ||
+ conn->socks_request->socks_version != circ->client_proto_socksver))
+ mixed |= ISO_CLIENTPROTO;
+ if (!tor_addr_eq(&ENTRY_TO_CONN(conn)->addr, &circ->client_addr))
+ mixed |= ISO_CLIENTADDR;
+ if (conn->session_group != circ->session_group)
+ mixed |= ISO_SESSIONGRP;
+ if (conn->nym_epoch != circ->nym_epoch)
+ mixed |= ISO_NYM_EPOCH;
+
+ if (dry_run)
+ return mixed;
+
+ if ((mixed & conn->isolation_flags) != 0) {
+ log_warn(LD_BUG, "Updating a circuit with seemingly incompatible "
+ "isolation flags.");
+ }
+ circ->isolation_flags_mixed |= mixed;
+ return 0;
+ }
+}
+
+/**
+ * Clear the isolation settings on <b>circ</b>.
+ *
+ * This only works on an open circuit that has never had a stream attached to
+ * it, and whose isolation settings are hypothetical. (We set hypothetical
+ * isolation settings on circuits as we're launching them, so that we
+ * know whether they can handle more streams or whether we need to launch
+ * even more circuits. Once the circuit is open, if it turns out that
+ * we no longer have any streams to attach to it, we clear the isolation flags
+ * and data so that other streams can have a chance.)
+ */
+void
+circuit_clear_isolation(origin_circuit_t *circ)
+{
+ if (circ->isolation_any_streams_attached) {
+ log_warn(LD_BUG, "Tried to clear the isolation status of a dirty circuit");
+ return;
+ }
+ if (TO_CIRCUIT(circ)->state != CIRCUIT_STATE_OPEN) {
+ log_warn(LD_BUG, "Tried to clear the isolation status of a non-open "
+ "circuit");
+ return;
+ }
+
+ circ->isolation_values_set = 0;
+ circ->isolation_flags_mixed = 0;
+ circ->associated_isolated_stream_global_id = 0;
+ circ->client_proto_type = 0;
+ circ->client_proto_socksver = 0;
+ circ->dest_port = 0;
+ tor_addr_make_unspec(&circ->client_addr);
+ tor_free(circ->dest_address);
+ circ->session_group = -1;
+ circ->nym_epoch = 0;
+ if (circ->socks_username) {
+ memset(circ->socks_username, 0x11, circ->socks_username_len);
+ tor_free(circ->socks_username);
+ }
+ if (circ->socks_password) {
+ memset(circ->socks_password, 0x05, circ->socks_password_len);
+ tor_free(circ->socks_password);
+ }
+ circ->socks_username_len = circ->socks_password_len = 0;
+}
+
diff --git a/src/or/connection_edge.h b/src/or/connection_edge.h
index 11b25f0c8..830667e60 100644
--- a/src/or/connection_edge.h
+++ b/src/or/connection_edge.h
@@ -15,7 +15,7 @@
#define connection_mark_unattached_ap(conn, endreason) \
_connection_mark_unattached_ap((conn), (endreason), __LINE__, _SHORT_FILE_)
-void _connection_mark_unattached_ap(edge_connection_t *conn, int endreason,
+void _connection_mark_unattached_ap(entry_connection_t *conn, int endreason,
int line, const char *file);
int connection_edge_reached_eof(edge_connection_t *conn);
int connection_edge_process_inbuf(edge_connection_t *conn,
@@ -27,17 +27,22 @@ int connection_edge_flushed_some(edge_connection_t *conn);
int connection_edge_finished_flushing(edge_connection_t *conn);
int connection_edge_finished_connecting(edge_connection_t *conn);
-int connection_ap_handshake_send_begin(edge_connection_t *ap_conn);
-int connection_ap_handshake_send_resolve(edge_connection_t *ap_conn);
+void connection_ap_about_to_close(entry_connection_t *edge_conn);
+void connection_exit_about_to_close(edge_connection_t *edge_conn);
-edge_connection_t *connection_ap_make_link(connection_t *partner,
+int connection_ap_handshake_send_begin(entry_connection_t *ap_conn);
+int connection_ap_handshake_send_resolve(entry_connection_t *ap_conn);
+
+entry_connection_t *connection_ap_make_link(connection_t *partner,
char *address, uint16_t port,
const char *digest,
+ int session_group,
+ int isolation_flags,
int use_begindir, int want_onehop);
-void connection_ap_handshake_socks_reply(edge_connection_t *conn, char *reply,
+void connection_ap_handshake_socks_reply(entry_connection_t *conn, char *reply,
size_t replylen,
int endreason);
-void connection_ap_handshake_socks_resolved(edge_connection_t *conn,
+void connection_ap_handshake_socks_resolved(entry_connection_t *conn,
int answer_type,
size_t answer_len,
const uint8_t *answer,
@@ -48,23 +53,23 @@ int connection_exit_begin_conn(cell_t *cell, circuit_t *circ);
int connection_exit_begin_resolve(cell_t *cell, or_circuit_t *circ);
void connection_exit_connect(edge_connection_t *conn);
int connection_edge_is_rendezvous_stream(edge_connection_t *conn);
-int connection_ap_can_use_exit(edge_connection_t *conn,
+int connection_ap_can_use_exit(const entry_connection_t *conn,
const node_t *exit);
void connection_ap_expire_beginning(void);
void connection_ap_attach_pending(void);
void connection_ap_fail_onehop(const char *failed_digest,
cpath_build_state_t *build_state);
void circuit_discard_optional_exit_enclaves(extend_info_t *info);
-int connection_ap_detach_retriable(edge_connection_t *conn,
+int connection_ap_detach_retriable(entry_connection_t *conn,
origin_circuit_t *circ,
int reason);
-int connection_ap_process_transparent(edge_connection_t *conn);
+int connection_ap_process_transparent(entry_connection_t *conn);
int address_is_invalid_destination(const char *address, int client);
void addressmap_init(void);
-void addressmap_clear_excluded_trackexithosts(or_options_t *options);
-void addressmap_clear_invalid_automaps(or_options_t *options);
+void addressmap_clear_excluded_trackexithosts(const or_options_t *options);
+void addressmap_clear_invalid_automaps(const or_options_t *options);
void addressmap_clean(time_t now);
void addressmap_clear_configured(void);
void addressmap_clear_transient(void);
@@ -83,10 +88,10 @@ void client_dns_set_addressmap(const char *address, uint32_t val,
const char *addressmap_register_virtual_address(int type, char *new_address);
void addressmap_get_mappings(smartlist_t *sl, time_t min_expires,
time_t max_expires, int want_expiry);
-int connection_ap_rewrite_and_attach_if_allowed(edge_connection_t *conn,
+int connection_ap_rewrite_and_attach_if_allowed(entry_connection_t *conn,
origin_circuit_t *circ,
crypt_path_t *cpath);
-int connection_ap_handshake_rewrite_and_attach(edge_connection_t *conn,
+int connection_ap_handshake_rewrite_and_attach(entry_connection_t *conn,
origin_circuit_t *circ,
crypt_path_t *cpath);
@@ -100,5 +105,12 @@ hostname_type_t parse_extended_hostname(char *address, int allowdotexit);
int get_pf_socket(void);
#endif
+int connection_edge_compatible_with_circuit(const entry_connection_t *conn,
+ const origin_circuit_t *circ);
+int connection_edge_update_circuit_isolation(const entry_connection_t *conn,
+ origin_circuit_t *circ,
+ int dry_run);
+void circuit_clear_isolation(origin_circuit_t *circ);
+
#endif
diff --git a/src/or/connection_or.c b/src/or/connection_or.c
index 73aad7e48..cce99e4d6 100644
--- a/src/or/connection_or.c
+++ b/src/or/connection_or.c
@@ -13,6 +13,7 @@
#include "or.h"
#include "buffers.h"
#include "circuitbuild.h"
+#include "circuitlist.h"
#include "command.h"
#include "config.h"
#include "connection.h"
@@ -34,10 +35,8 @@
#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);
@@ -149,6 +148,142 @@ connection_or_set_identity_digest(or_connection_t *conn, const char *digest)
#endif
}
+/**************************************************************/
+
+/** Map from a string describing what a non-open OR connection was doing when
+ * failed, to an intptr_t describing the count of connections that failed that
+ * way. Note that the count is stored _as_ the pointer.
+ */
+static strmap_t *broken_connection_counts;
+
+/** If true, do not record information in <b>broken_connection_counts</b>. */
+static int disable_broken_connection_counts = 0;
+
+/** Record that an OR connection failed in <b>state</b>. */
+static void
+note_broken_connection(const char *state)
+{
+ void *ptr;
+ intptr_t val;
+ if (disable_broken_connection_counts)
+ return;
+
+ if (!broken_connection_counts)
+ broken_connection_counts = strmap_new();
+
+ ptr = strmap_get(broken_connection_counts, state);
+ val = (intptr_t)ptr;
+ val++;
+ ptr = (void*)val;
+ strmap_set(broken_connection_counts, state, ptr);
+}
+
+/** Forget all recorded states for failed connections. If
+ * <b>stop_recording</b> is true, don't record any more. */
+void
+clear_broken_connection_map(int stop_recording)
+{
+ if (broken_connection_counts)
+ strmap_free(broken_connection_counts, NULL);
+ broken_connection_counts = NULL;
+ if (stop_recording)
+ disable_broken_connection_counts = 1;
+}
+
+/** Write a detailed description the state of <b>orconn</b> into the
+ * <b>buflen</b>-byte buffer at <b>buf</b>. This description includes not
+ * only the OR-conn level state but also the TLS state. It's useful for
+ * diagnosing broken handshakes. */
+static void
+connection_or_get_state_description(or_connection_t *orconn,
+ char *buf, size_t buflen)
+{
+ connection_t *conn = TO_CONN(orconn);
+ const char *conn_state;
+ char tls_state[256];
+
+ tor_assert(conn->type == CONN_TYPE_OR);
+
+ conn_state = conn_state_to_string(conn->type, conn->state);
+ tor_tls_get_state_description(orconn->tls, tls_state, sizeof(tls_state));
+
+ tor_snprintf(buf, buflen, "%s with SSL state %s", conn_state, tls_state);
+}
+
+/** Record the current state of <b>orconn</b> as the state of a broken
+ * connection. */
+static void
+connection_or_note_state_when_broken(or_connection_t *orconn)
+{
+ char buf[256];
+ if (disable_broken_connection_counts)
+ return;
+ connection_or_get_state_description(orconn, buf, sizeof(buf));
+ log_info(LD_HANDSHAKE,"Connection died in state '%s'", buf);
+ note_broken_connection(buf);
+}
+
+/** Helper type used to sort connection states and find the most frequent. */
+typedef struct broken_state_count_t {
+ intptr_t count;
+ const char *state;
+} broken_state_count_t;
+
+/** Helper function used to sort broken_state_count_t by frequency. */
+static int
+broken_state_count_compare(const void **a_ptr, const void **b_ptr)
+{
+ const broken_state_count_t *a = *a_ptr, *b = *b_ptr;
+ if (b->count < a->count)
+ return -1;
+ else if (b->count == a->count)
+ return 0;
+ else
+ return 1;
+}
+
+/** Upper limit on the number of different states to report for connection
+ * failure. */
+#define MAX_REASONS_TO_REPORT 10
+
+/** Report a list of the top states for failed OR connections at log level
+ * <b>severity</b>, in log domain <b>domain</b>. */
+void
+connection_or_report_broken_states(int severity, int domain)
+{
+ int total = 0;
+ smartlist_t *items;
+
+ if (!broken_connection_counts || disable_broken_connection_counts)
+ return;
+
+ items = smartlist_create();
+ STRMAP_FOREACH(broken_connection_counts, state, void *, countptr) {
+ broken_state_count_t *c = tor_malloc(sizeof(broken_state_count_t));
+ c->count = (intptr_t)countptr;
+ total += (int)c->count;
+ c->state = state;
+ smartlist_add(items, c);
+ } STRMAP_FOREACH_END;
+
+ smartlist_sort(items, broken_state_count_compare);
+
+ log(severity, domain, "%d connections have failed%s", total,
+ smartlist_len(items) > MAX_REASONS_TO_REPORT ? ". Top reasons:" : ":");
+
+ SMARTLIST_FOREACH_BEGIN(items, const broken_state_count_t *, c) {
+ if (c_sl_idx > MAX_REASONS_TO_REPORT)
+ break;
+ log(severity, domain,
+ " %d connections died in state %s", (int)c->count, c->state);
+ } SMARTLIST_FOREACH_END(c);
+
+ SMARTLIST_FOREACH(items, broken_state_count_t *, c, tor_free(c));
+ smartlist_free(items);
+}
+
+/**************************************************************/
+
/** Pack the cell_t host-order structure <b>src</b> into network-order
* in the buffer <b>dest</b>. See tor-spec.txt for details about the
* wire format.
@@ -241,8 +376,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)
@@ -250,7 +385,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 */
@@ -302,7 +438,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);
@@ -317,7 +454,7 @@ connection_or_finished_flushing(or_connection_t *conn)
int
connection_or_finished_connecting(or_connection_t *or_conn)
{
- int proxy_type;
+ const int proxy_type = or_conn->proxy_type;
connection_t *conn;
tor_assert(or_conn);
conn = TO_CONN(or_conn);
@@ -327,15 +464,6 @@ connection_or_finished_connecting(or_connection_t *or_conn)
conn->address,conn->port);
control_event_bootstrap(BOOTSTRAP_STATUS_HANDSHAKE, 0);
- proxy_type = PROXY_NONE;
-
- if (get_options()->HTTPSProxy)
- proxy_type = PROXY_CONNECT;
- else if (get_options()->Socks4Proxy)
- proxy_type = PROXY_SOCKS4;
- else if (get_options()->Socks5Proxy)
- proxy_type = PROXY_SOCKS5;
-
if (proxy_type != PROXY_NONE) {
/* start proxy handshake */
if (connection_proxy_connect(conn, proxy_type) < 0) {
@@ -356,6 +484,51 @@ connection_or_finished_connecting(or_connection_t *or_conn)
return 0;
}
+/* Called when we're about to finally unlink and free an OR connection:
+ * perform necessary accounting and cleanup */
+void
+connection_or_about_to_close(or_connection_t *or_conn)
+{
+ time_t now = time(NULL);
+ connection_t *conn = TO_CONN(or_conn);
+
+ /* Remember why we're closing this connection. */
+ if (conn->state != OR_CONN_STATE_OPEN) {
+ /* Inform any pending (not attached) circs that they should
+ * give up. */
+ circuit_n_conn_done(TO_OR_CONN(conn), 0);
+ /* now mark things down as needed */
+ if (connection_or_nonopen_was_started_here(or_conn)) {
+ const or_options_t *options = get_options();
+ connection_or_note_state_when_broken(or_conn);
+ rep_hist_note_connect_failed(or_conn->identity_digest, now);
+ entry_guard_register_connect_status(or_conn->identity_digest,0,
+ !options->HTTPSProxy, now);
+ if (conn->state >= OR_CONN_STATE_TLS_HANDSHAKING) {
+ int reason = tls_error_to_orconn_end_reason(or_conn->tls_error);
+ control_event_or_conn_status(or_conn, OR_CONN_EVENT_FAILED,
+ reason);
+ if (!authdir_mode_tests_reachability(options))
+ control_event_bootstrap_problem(
+ orconn_end_reason_to_control_string(reason), reason);
+ }
+ }
+ } else if (conn->hold_open_until_flushed) {
+ /* We only set hold_open_until_flushed when we're intentionally
+ * closing a connection. */
+ rep_hist_note_disconnect(or_conn->identity_digest, now);
+ control_event_or_conn_status(or_conn, OR_CONN_EVENT_CLOSED,
+ tls_error_to_orconn_end_reason(or_conn->tls_error));
+ } else if (!tor_digest_is_zero(or_conn->identity_digest)) {
+ rep_hist_note_connection_died(or_conn->identity_digest, now);
+ control_event_or_conn_status(or_conn, OR_CONN_EVENT_CLOSED,
+ tls_error_to_orconn_end_reason(or_conn->tls_error));
+ }
+ /* Now close all the attached circuits on it. */
+ circuit_unlink_all_from_or_conn(TO_OR_CONN(conn),
+ END_CIRC_REASON_OR_CONN_CLOSED);
+}
+
/** Return 1 if identity digest <b>id_digest</b> is known to be a
* currently or recently running relay. Otherwise return 0. */
int
@@ -380,7 +553,7 @@ connection_or_digest_is_known_relay(const char *id_digest)
*/
static void
connection_or_update_token_buckets_helper(or_connection_t *conn, int reset,
- or_options_t *options)
+ const or_options_t *options)
{
int rate, burst; /* per-connection rate limiting params */
if (connection_or_digest_is_known_relay(conn->identity_digest)) {
@@ -407,12 +580,17 @@ 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;
if (conn->_base.bufev)
- bufferevent_set_rate_limit(conn->_base.bufev, cfg);
+ tor_set_bufferevent_rate_limit(conn->_base.bufev, cfg);
if (old_cfg)
ev_token_bucket_cfg_free(old_cfg);
conn->bucket_cfg = cfg;
@@ -436,7 +614,8 @@ connection_or_update_token_buckets_helper(or_connection_t *conn, int reset,
* Go through all the OR connections and update their token buckets to make
* sure they don't exceed their maximum values. */
void
-connection_or_update_token_buckets(smartlist_t *conns, or_options_t *options)
+connection_or_update_token_buckets(smartlist_t *conns,
+ const or_options_t *options)
{
SMARTLIST_FOREACH(conns, connection_t *, conn,
{
@@ -448,7 +627,7 @@ connection_or_update_token_buckets(smartlist_t *conns, or_options_t *options)
/** 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
+void
connection_or_init_conn_from_address(or_connection_t *conn,
const tor_addr_t *addr, uint16_t port,
const char *id_digest,
@@ -588,6 +767,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
@@ -827,11 +1011,15 @@ connection_or_connect(const tor_addr_t *_addr, uint16_t port,
const char *id_digest)
{
or_connection_t *conn;
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
int socket_error = 0;
- int using_proxy = 0;
tor_addr_t addr;
+ int r;
+ tor_addr_t proxy_addr;
+ uint16_t proxy_port;
+ int proxy_type;
+
tor_assert(_addr);
tor_assert(id_digest);
tor_addr_copy(&addr, _addr);
@@ -848,19 +1036,22 @@ connection_or_connect(const tor_addr_t *_addr, uint16_t port,
conn->_base.state = OR_CONN_STATE_CONNECTING;
control_event_or_conn_status(conn, OR_CONN_EVENT_LAUNCHED, 0);
- /* use a proxy server if available */
- if (options->HTTPSProxy) {
- using_proxy = 1;
- tor_addr_copy(&addr, &options->HTTPSProxyAddr);
- port = options->HTTPSProxyPort;
- } else if (options->Socks4Proxy) {
- using_proxy = 1;
- tor_addr_copy(&addr, &options->Socks4ProxyAddr);
- port = options->Socks4ProxyPort;
- } else if (options->Socks5Proxy) {
- using_proxy = 1;
- tor_addr_copy(&addr, &options->Socks5ProxyAddr);
- port = options->Socks5ProxyPort;
+ 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) {
+ conn->proxy_type = proxy_type;
+ if (proxy_type != PROXY_NONE) {
+ tor_addr_copy(&addr, &proxy_addr);
+ port = proxy_port;
+ conn->_base.proxy_state = PROXY_INFANT;
+ }
+ } else {
+ log_warn(LD_GENERAL, "Tried to connect through proxy, but proxy address "
+ "could not be found.");
+ connection_free(TO_CONN(conn));
+ return NULL;
}
switch (connection_connect(TO_CONN(conn), conn->_base.address,
@@ -868,7 +1059,7 @@ connection_or_connect(const tor_addr_t *_addr, uint16_t port,
case -1:
/* If the connection failed immediately, and we're using
* a proxy, our proxy is down. Don't blame the Tor server. */
- if (!using_proxy)
+ if (conn->_base.proxy_state == PROXY_INFANT)
entry_guard_register_connect_status(conn->identity_digest,
0, 1, time(NULL));
connection_or_connect_failed(conn,
@@ -923,7 +1114,7 @@ connection_tls_start_handshake(or_connection_t *conn, int receiving)
}
conn->_base.bufev = b;
if (conn->bucket_cfg)
- bufferevent_set_rate_limit(conn->_base.bufev, conn->bucket_cfg);
+ tor_set_bufferevent_rate_limit(conn->_base.bufev, conn->bucket_cfg);
connection_enable_rate_limiting(TO_CONN(conn));
connection_configure_bufferevent_callbacks(TO_CONN(conn));
@@ -996,13 +1187,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_notice(LD_OR,"Done. state was TLS_HANDSHAKING.");
- 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 or VERSIONS cell");
tor_tls_set_renegotiate_callback(conn->tls,
connection_or_tls_renegotiated_cb,
conn);
@@ -1047,17 +1247,24 @@ 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,
@@ -1069,7 +1276,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);
@@ -1113,6 +1320,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.
*
@@ -1144,16 +1374,13 @@ connection_or_check_valid_tls_handshake(or_connection_t *conn,
char *digest_rcvd_out)
{
crypto_pk_env_t *identity_rcvd=NULL;
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
int severity = server_mode(options) ? LOG_PROTOCOL_WARN : LOG_WARN;
const char *safe_address =
started_here ? conn->_base.address :
safe_str_client(conn->_base.address);
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);
@@ -1188,21 +1415,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] = '$';
@@ -1214,43 +1466,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.
*
@@ -1260,6 +1508,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)
@@ -1289,25 +1539,48 @@ connection_tls_finish_handshake(or_connection_t *conn)
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;
}
@@ -1317,10 +1590,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.
*/
@@ -1388,6 +1740,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();
}
@@ -1407,6 +1762,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();
}
@@ -1491,7 +1848,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) );
@@ -1510,20 +1867,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);
@@ -1543,6 +1913,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;
@@ -1551,13 +1923,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. */
@@ -1569,8 +1948,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 70ef96a33..62a15b1cf 100644
--- a/src/or/connection_or.h
+++ b/src/or/connection_or.h
@@ -14,6 +14,7 @@
void connection_or_remove_from_identity_map(or_connection_t *conn);
void connection_or_clear_identity_map(void);
+void clear_broken_connection_map(int disable);
or_connection_t *connection_or_get_for_extend(const char *digest,
const tor_addr_t *target_addr,
const char **msg_out,
@@ -25,19 +26,40 @@ int connection_or_process_inbuf(or_connection_t *conn);
int connection_or_flushed_some(or_connection_t *conn);
int connection_or_finished_flushing(or_connection_t *conn);
int connection_or_finished_connecting(or_connection_t *conn);
+void connection_or_about_to_close(or_connection_t *conn);
int connection_or_digest_is_known_relay(const char *id_digest);
void connection_or_update_token_buckets(smartlist_t *conns,
- or_options_t *options);
+ const or_options_t *options);
void connection_or_connect_failed(or_connection_t *conn,
int reason, const char *msg);
or_connection_t *connection_or_connect(const tor_addr_t *addr, uint16_t port,
const char *id_digest);
+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);
@@ -45,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 98560733d..109eb8857 100644
--- a/src/or/control.c
+++ b/src/or/control.c
@@ -18,6 +18,7 @@
#include "config.h"
#include "connection.h"
#include "connection_edge.h"
+#include "connection_or.h"
#include "control.h"
#include "directory.h"
#include "dirserv.h"
@@ -73,7 +74,8 @@
#define EVENT_NEWCONSENSUS 0x0016
#define EVENT_BUILDTIMEOUT_SET 0x0017
#define EVENT_SIGNAL 0x0018
-#define _EVENT_MAX 0x0018
+#define EVENT_CONF_CHANGED 0x0019
+#define _EVENT_MAX 0x0019
/* If _EVENT_MAX ever hits 0x0020, we need to make the mask wider. */
/** Bitfield: The bit 1&lt;&lt;e is set if <b>any</b> open control
@@ -105,7 +107,7 @@ static int disable_log_messages = 0;
static int authentication_cookie_is_set = 0;
/** If authentication_cookie_is_set, a secret cookie that we've stored to disk
* and which we're using to authenticate controllers. (If the controller can
- * read it off disk, it has permission to connect. */
+ * read it off disk, it has permission to connect.) */
static char authentication_cookie[AUTHENTICATION_COOKIE_LEN];
/** A sufficiently large size to record the last bootstrap phase string. */
@@ -175,7 +177,7 @@ static int handle_control_resolve(control_connection_t *conn, uint32_t len,
static int handle_control_usefeature(control_connection_t *conn,
uint32_t len,
const char *body);
-static int write_stream_target_to_buf(edge_connection_t *conn, char *buf,
+static int write_stream_target_to_buf(entry_connection_t *conn, char *buf,
size_t len);
static void orconn_target_get_name(char *buf, size_t len,
or_connection_t *conn);
@@ -488,33 +490,26 @@ decode_escaped_string(const char *start, size_t in_len_max,
}
/** Acts like sprintf, but writes its formatted string to the end of
- * <b>conn</b>-\>outbuf. The message may be truncated if it is too long,
- * but it will always end with a CRLF sequence.
- *
- * Currently the length of the message is limited to 1024 (including the
- * ending CR LF NUL ("\\r\\n\\0"). */
+ * <b>conn</b>-\>outbuf. */
static void
connection_printf_to_buf(control_connection_t *conn, const char *format, ...)
{
-#define CONNECTION_PRINTF_TO_BUF_BUFFERSIZE 1024
va_list ap;
- char buf[CONNECTION_PRINTF_TO_BUF_BUFFERSIZE];
- int r;
- size_t len;
+ char *buf = NULL;
+ int len;
+
va_start(ap,format);
- r = tor_vsnprintf(buf, sizeof(buf), format, ap);
+ len = tor_vasprintf(&buf, format, ap);
va_end(ap);
- if (r<0) {
- log_warn(LD_BUG, "Unable to format string for controller.");
- return;
- }
- len = strlen(buf);
- if (fast_memcmp("\r\n\0", buf+len-2, 3)) {
- buf[CONNECTION_PRINTF_TO_BUF_BUFFERSIZE-1] = '\0';
- buf[CONNECTION_PRINTF_TO_BUF_BUFFERSIZE-2] = '\n';
- buf[CONNECTION_PRINTF_TO_BUF_BUFFERSIZE-3] = '\r';
+
+ if (len < 0) {
+ log_err(LD_BUG, "Unable to format string for controller.");
+ tor_assert(0);
}
- connection_write_to_buf(buf, len, TO_CONN(conn));
+
+ connection_write_to_buf(buf, (size_t)len, TO_CONN(conn));
+
+ tor_free(buf);
}
/** Write all of the open control ports to ControlPortWriteToFile */
@@ -523,7 +518,7 @@ control_ports_write_to_file(void)
{
smartlist_t *lines;
char *joined = NULL;
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
if (!options->ControlPortWriteToFile)
return;
@@ -607,52 +602,37 @@ send_control_event_string(uint16_t event, event_format_t which,
else if (event == EVENT_STATUS_SERVER)
is_err = !strcmpstart(msg, "STATUS_SERVER ERR ");
if (is_err)
- connection_handle_write(TO_CONN(control_conn), 1);
+ connection_flush(TO_CONN(control_conn));
}
}
} SMARTLIST_FOREACH_END(conn);
}
-/** Helper for send_control1_event and send_control1_event_extended:
+/** Helper for send_control_event and control_event_status:
* Send an event to all v1 controllers that are listening for code
* <b>event</b>. The event's body is created by the printf-style format in
- * <b>format</b>, and other arguments as provided.
- *
- * Currently the length of the message is limited to 1024 (including the
- * ending \\r\\n\\0). */
+ * <b>format</b>, and other arguments as provided. */
static void
send_control_event_impl(uint16_t event, event_format_t which,
const char *format, va_list ap)
{
- /* This is just a little longer than the longest allowed log message */
-#define SEND_CONTROL1_EVENT_BUFFERSIZE 10064
- int r;
- char buf[SEND_CONTROL1_EVENT_BUFFERSIZE];
- size_t len;
+ char *buf = NULL;
+ int len;
- r = tor_vsnprintf(buf, sizeof(buf), format, ap);
- if (r<0) {
+ len = tor_vasprintf(&buf, format, ap);
+ if (len < 0) {
log_warn(LD_BUG, "Unable to format event for controller.");
return;
}
- len = strlen(buf);
- if (fast_memcmp("\r\n\0", buf+len-2, 3)) {
- /* if it is not properly terminated, do it now */
- buf[SEND_CONTROL1_EVENT_BUFFERSIZE-1] = '\0';
- buf[SEND_CONTROL1_EVENT_BUFFERSIZE-2] = '\n';
- buf[SEND_CONTROL1_EVENT_BUFFERSIZE-3] = '\r';
- }
-
send_control_event_string(event, which|ALL_FORMATS, buf);
+
+ tor_free(buf);
}
/** Send an event to all v1 controllers that are listening for code
* <b>event</b>. The event's body is created by the printf-style format in
- * <b>format</b>, and other arguments as provided.
- *
- * Currently the length of the message is limited to 1024 (including the
- * ending \\n\\r\\0. */
+ * <b>format</b>, and other arguments as provided. */
static void
send_control_event(uint16_t event, event_format_t which,
const char *format, ...)
@@ -676,7 +656,7 @@ get_circ(const char *id)
}
/** Given a text stream <b>id</b>, return the corresponding AP connection. */
-static edge_connection_t *
+static entry_connection_t *
get_stream(const char *id)
{
uint64_t n_id;
@@ -688,7 +668,7 @@ get_stream(const char *id)
conn = connection_get_by_global_id(n_id);
if (!conn || conn->type != CONN_TYPE_AP || conn->marked_for_close)
return NULL;
- return TO_EDGE_CONN(conn);
+ return TO_ENTRY_CONN(conn);
}
/** Helper for setconf and resetconf. Acts like setconf, except
@@ -827,7 +807,7 @@ handle_control_getconf(control_connection_t *conn, uint32_t body_len,
smartlist_t *unrecognized = smartlist_create();
char *msg = NULL;
size_t msg_len;
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
int i, len;
(void) body_len; /* body is NUL-terminated; so we can ignore len. */
@@ -939,13 +919,45 @@ handle_control_loadconf(control_connection_t *conn, uint32_t len,
return 0;
}
+struct control_event_t {
+ uint16_t event_code;
+ const char *event_name;
+};
+static const struct control_event_t control_event_table[] = {
+ { EVENT_CIRCUIT_STATUS, "CIRC" },
+ { EVENT_STREAM_STATUS, "STREAM" },
+ { EVENT_OR_CONN_STATUS, "ORCONN" },
+ { EVENT_BANDWIDTH_USED, "BW" },
+ { EVENT_DEBUG_MSG, "DEBUG" },
+ { EVENT_INFO_MSG, "INFO" },
+ { EVENT_NOTICE_MSG, "NOTICE" },
+ { EVENT_WARN_MSG, "WARN" },
+ { EVENT_ERR_MSG, "ERR" },
+ { EVENT_NEW_DESC, "NEWDESC" },
+ { EVENT_ADDRMAP, "ADDRMAP" },
+ { EVENT_AUTHDIR_NEWDESCS, "AUTHDIR_NEWDESCS" },
+ { EVENT_DESCCHANGED, "DESCCHANGED" },
+ { EVENT_NS, "NS" },
+ { EVENT_STATUS_GENERAL, "STATUS_GENERAL" },
+ { EVENT_STATUS_CLIENT, "STATUS_CLIENT" },
+ { EVENT_STATUS_SERVER, "STATUS_SERVER" },
+ { EVENT_GUARD, "GUARD" },
+ { EVENT_STREAM_BANDWIDTH_USED, "STREAM_BW" },
+ { EVENT_CLIENTS_SEEN, "CLIENTS_SEEN" },
+ { EVENT_NEWCONSENSUS, "NEWCONSENSUS" },
+ { EVENT_BUILDTIMEOUT_SET, "BUILDTIMEOUT_SET" },
+ { EVENT_SIGNAL, "SIGNAL" },
+ { EVENT_CONF_CHANGED, "CONF_CHANGED"},
+ { 0, NULL },
+};
+
/** Called when we get a SETEVENTS message: update conn->event_mask,
* and reply with DONE or ERROR. */
static int
handle_control_setevents(control_connection_t *conn, uint32_t len,
const char *body)
{
- uint16_t event_code;
+ int event_code = -1;
uint32_t event_mask = 0;
smartlist_t *events = smartlist_create();
@@ -957,58 +969,22 @@ handle_control_setevents(control_connection_t *conn, uint32_t len,
{
if (!strcasecmp(ev, "EXTENDED")) {
continue;
- } else if (!strcasecmp(ev, "CIRC"))
- event_code = EVENT_CIRCUIT_STATUS;
- else if (!strcasecmp(ev, "STREAM"))
- event_code = EVENT_STREAM_STATUS;
- else if (!strcasecmp(ev, "ORCONN"))
- event_code = EVENT_OR_CONN_STATUS;
- else if (!strcasecmp(ev, "BW"))
- event_code = EVENT_BANDWIDTH_USED;
- else if (!strcasecmp(ev, "DEBUG"))
- event_code = EVENT_DEBUG_MSG;
- else if (!strcasecmp(ev, "INFO"))
- event_code = EVENT_INFO_MSG;
- else if (!strcasecmp(ev, "NOTICE"))
- event_code = EVENT_NOTICE_MSG;
- else if (!strcasecmp(ev, "WARN"))
- event_code = EVENT_WARN_MSG;
- else if (!strcasecmp(ev, "ERR"))
- event_code = EVENT_ERR_MSG;
- else if (!strcasecmp(ev, "NEWDESC"))
- event_code = EVENT_NEW_DESC;
- else if (!strcasecmp(ev, "ADDRMAP"))
- event_code = EVENT_ADDRMAP;
- else if (!strcasecmp(ev, "AUTHDIR_NEWDESCS"))
- event_code = EVENT_AUTHDIR_NEWDESCS;
- else if (!strcasecmp(ev, "DESCCHANGED"))
- event_code = EVENT_DESCCHANGED;
- else if (!strcasecmp(ev, "NS"))
- event_code = EVENT_NS;
- else if (!strcasecmp(ev, "STATUS_GENERAL"))
- event_code = EVENT_STATUS_GENERAL;
- else if (!strcasecmp(ev, "STATUS_CLIENT"))
- event_code = EVENT_STATUS_CLIENT;
- else if (!strcasecmp(ev, "STATUS_SERVER"))
- event_code = EVENT_STATUS_SERVER;
- else if (!strcasecmp(ev, "GUARD"))
- event_code = EVENT_GUARD;
- else if (!strcasecmp(ev, "STREAM_BW"))
- event_code = EVENT_STREAM_BANDWIDTH_USED;
- else if (!strcasecmp(ev, "CLIENTS_SEEN"))
- event_code = EVENT_CLIENTS_SEEN;
- else if (!strcasecmp(ev, "NEWCONSENSUS"))
- event_code = EVENT_NEWCONSENSUS;
- else if (!strcasecmp(ev, "BUILDTIMEOUT_SET"))
- event_code = EVENT_BUILDTIMEOUT_SET;
- else if (!strcasecmp(ev, "SIGNAL"))
- event_code = EVENT_SIGNAL;
- else {
- connection_printf_to_buf(conn, "552 Unrecognized event \"%s\"\r\n",
- ev);
- SMARTLIST_FOREACH(events, char *, e, tor_free(e));
- smartlist_free(events);
- return 0;
+ } else {
+ int i;
+ for (i = 0; control_event_table[i].event_name != NULL; ++i) {
+ if (!strcasecmp(ev, control_event_table[i].event_name)) {
+ event_code = control_event_table[i].event_code;
+ break;
+ }
+ }
+
+ if (event_code == -1) {
+ connection_printf_to_buf(conn, "552 Unrecognized event \"%s\"\r\n",
+ ev);
+ SMARTLIST_FOREACH(events, char *, e, tor_free(e));
+ smartlist_free(events);
+ return 0;
+ }
}
event_mask |= (1 << event_code);
}
@@ -1070,7 +1046,7 @@ handle_control_authenticate(control_connection_t *conn, uint32_t len,
const char *body)
{
int used_quoted_string = 0;
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
const char *errstr = NULL;
char *password;
size_t password_len;
@@ -1079,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;
@@ -1096,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 "
@@ -1279,7 +1255,7 @@ handle_control_signal(control_connection_t *conn, uint32_t len,
send_control_done(conn);
/* Flush the "done" first if the signal might make us shut down. */
if (sig == SIGTERM || sig == SIGINT)
- connection_handle_write(TO_CONN(conn), 1);
+ connection_flush(TO_CONN(conn));
process_signal(sig);
@@ -1408,10 +1384,16 @@ getinfo_helper_misc(control_connection_t *conn, const char *question,
} else if (!strcmp(question, "info/names")) {
*answer = list_getinfo_options();
} else if (!strcmp(question, "events/names")) {
- *answer = tor_strdup("CIRC STREAM ORCONN BW DEBUG INFO NOTICE WARN ERR "
- "NEWDESC ADDRMAP AUTHDIR_NEWDESCS DESCCHANGED "
- "NS STATUS_GENERAL STATUS_CLIENT STATUS_SERVER "
- "GUARD STREAM_BW CLIENTS_SEEN NEWCONSENSUS");
+ int i;
+ smartlist_t *event_names = smartlist_create();
+
+ for (i = 0; control_event_table[i].event_name != NULL; ++i) {
+ smartlist_add(event_names, (char *)control_event_table[i].event_name);
+ }
+
+ *answer = smartlist_join_strings(event_names, " ", 0, NULL);
+
+ smartlist_free(event_names);
} else if (!strcmp(question, "features/names")) {
*answer = tor_strdup("VERBOSE_NAMES EXTENDED_EVENTS");
} else if (!strcmp(question, "address")) {
@@ -1479,14 +1461,14 @@ getinfo_helper_misc(control_connection_t *conn, const char *question,
} else if (!strcmp(question, "dir-usage")) {
*answer = directory_dump_request_log();
} else if (!strcmp(question, "fingerprint")) {
- const routerinfo_t *me = router_get_my_routerinfo();
- if (!me) {
- *errmsg = "No routerdesc known; am I really a server?";
+ crypto_pk_env_t *server_key;
+ if (!server_mode(get_options())) {
+ *errmsg = "Not running in server mode";
return -1;
}
+ server_key = get_server_identity_key();
*answer = tor_malloc(HEX_DIGEST_LEN+1);
- base16_encode(*answer, HEX_DIGEST_LEN+1, me->cache_info.identity_digest,
- DIGEST_LEN);
+ crypto_pk_get_fingerprint(server_key, *answer, 0);
}
return 0;
}
@@ -1577,7 +1559,7 @@ getinfo_helper_listeners(control_connection_t *control_conn,
struct sockaddr_storage ss;
socklen_t ss_len = sizeof(ss);
- if (conn->type != type || conn->marked_for_close || conn->s < 0)
+ if (conn->type != type || conn->marked_for_close || !SOCKET_OK(conn->s))
continue;
if (getsockname(conn->s, (struct sockaddr *)&ss, &ss_len) < 0) {
@@ -1615,6 +1597,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);
@@ -1658,6 +1642,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/"));
@@ -1820,7 +1823,7 @@ getinfo_helper_events(control_connection_t *control_conn,
char buf[256];
SMARTLIST_FOREACH_BEGIN(conns, connection_t *, base_conn) {
const char *state;
- edge_connection_t *conn;
+ entry_connection_t *conn;
char *s;
size_t slen;
circuit_t *circ;
@@ -1830,8 +1833,8 @@ getinfo_helper_events(control_connection_t *control_conn,
base_conn->state == AP_CONN_STATE_SOCKS_WAIT ||
base_conn->state == AP_CONN_STATE_NATD_WAIT)
continue;
- conn = TO_EDGE_CONN(base_conn);
- switch (conn->_base.state)
+ conn = TO_ENTRY_CONN(base_conn);
+ switch (base_conn->state)
{
case AP_CONN_STATE_CONTROLLER_WAIT:
case AP_CONN_STATE_CIRCUIT_WAIT:
@@ -1850,17 +1853,17 @@ getinfo_helper_events(control_connection_t *control_conn,
state = "SUCCEEDED"; break;
default:
log_warn(LD_BUG, "Asked for stream in unknown state %d",
- conn->_base.state);
+ base_conn->state);
continue;
}
- circ = circuit_get_by_edge_conn(conn);
+ circ = circuit_get_by_edge_conn(ENTRY_TO_EDGE_CONN(conn));
if (circ && CIRCUIT_IS_ORIGIN(circ))
origin_circ = TO_ORIGIN_CIRCUIT(circ);
write_stream_target_to_buf(conn, buf, sizeof(buf));
slen = strlen(buf)+strlen(state)+32;
s = tor_malloc(slen+1);
tor_snprintf(s, slen, "%lu %s %lu %s",
- (unsigned long) conn->_base.global_identifier,state,
+ (unsigned long) base_conn->global_identifier,state,
origin_circ?
(unsigned long)origin_circ->global_identifier : 0ul,
buf);
@@ -2052,6 +2055,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,
@@ -2480,7 +2485,7 @@ static int
handle_control_attachstream(control_connection_t *conn, uint32_t len,
const char *body)
{
- edge_connection_t *ap_conn = NULL;
+ entry_connection_t *ap_conn = NULL;
origin_circuit_t *circ = NULL;
int zero_circ;
smartlist_t *args;
@@ -2516,9 +2521,9 @@ handle_control_attachstream(control_connection_t *conn, uint32_t len,
if (!ap_conn || (!zero_circ && !circ) || !hop_line_ok)
return 0;
- if (ap_conn->_base.state != AP_CONN_STATE_CONTROLLER_WAIT &&
- ap_conn->_base.state != AP_CONN_STATE_CONNECT_WAIT &&
- ap_conn->_base.state != AP_CONN_STATE_RESOLVE_WAIT) {
+ if (ENTRY_TO_CONN(ap_conn)->state != AP_CONN_STATE_CONTROLLER_WAIT &&
+ ENTRY_TO_CONN(ap_conn)->state != AP_CONN_STATE_CONNECT_WAIT &&
+ ENTRY_TO_CONN(ap_conn)->state != AP_CONN_STATE_RESOLVE_WAIT) {
connection_write_str_to_buf(
"555 Connection is not managed by controller.\r\n",
conn);
@@ -2526,15 +2531,16 @@ handle_control_attachstream(control_connection_t *conn, uint32_t len,
}
/* Do we need to detach it first? */
- if (ap_conn->_base.state != AP_CONN_STATE_CONTROLLER_WAIT) {
- circuit_t *tmpcirc = circuit_get_by_edge_conn(ap_conn);
- connection_edge_end(ap_conn, END_STREAM_REASON_TIMEOUT);
+ if (ENTRY_TO_CONN(ap_conn)->state != AP_CONN_STATE_CONTROLLER_WAIT) {
+ edge_connection_t *edge_conn = ENTRY_TO_EDGE_CONN(ap_conn);
+ circuit_t *tmpcirc = circuit_get_by_edge_conn(edge_conn);
+ connection_edge_end(edge_conn, END_STREAM_REASON_TIMEOUT);
/* Un-mark it as ending, since we're going to reuse it. */
- ap_conn->edge_has_sent_end = 0;
- ap_conn->end_reason = 0;
+ edge_conn->edge_has_sent_end = 0;
+ edge_conn->end_reason = 0;
if (tmpcirc)
- circuit_detach_stream(tmpcirc,ap_conn);
- ap_conn->_base.state = AP_CONN_STATE_CONTROLLER_WAIT;
+ circuit_detach_stream(tmpcirc, edge_conn);
+ TO_CONN(edge_conn)->state = AP_CONN_STATE_CONTROLLER_WAIT;
}
if (circ && (circ->_base.state != CIRCUIT_STATE_OPEN)) {
@@ -2656,7 +2662,7 @@ static int
handle_control_redirectstream(control_connection_t *conn, uint32_t len,
const char *body)
{
- edge_connection_t *ap_conn = NULL;
+ entry_connection_t *ap_conn = NULL;
char *new_addr = NULL;
uint16_t new_port = 0;
smartlist_t *args;
@@ -2704,7 +2710,7 @@ static int
handle_control_closestream(control_connection_t *conn, uint32_t len,
const char *body)
{
- edge_connection_t *ap_conn=NULL;
+ entry_connection_t *ap_conn=NULL;
uint8_t reason=0;
smartlist_t *args;
int ok;
@@ -2849,7 +2855,7 @@ handle_control_protocolinfo(control_connection_t *conn, uint32_t len,
connection_mark_for_close(TO_CONN(conn));
goto done;
} else {
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
int cookies = options->CookieAuthentication;
char *cfile = get_cookie_file();
char *esc_cfile = esc_for_log(cfile);
@@ -3112,7 +3118,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;
}
@@ -3228,7 +3234,6 @@ control_event_circuit_status(origin_circuit_t *circ, circuit_status_event_t tp,
{
const char *status;
char extended_buf[96];
- int providing_reason=0;
if (!EVENT_IS_INTERESTING(EVENT_CIRCUIT_STATUS))
return 0;
tor_assert(circ);
@@ -3252,7 +3257,6 @@ control_event_circuit_status(origin_circuit_t *circ, circuit_status_event_t tp,
const char *reason_str = circuit_end_reason_to_control_string(reason_code);
char *reason = NULL;
size_t n=strlen(extended_buf);
- providing_reason=1;
if (!reason_str) {
reason = tor_malloc(16);
tor_snprintf(reason, 16, "UNKNOWN_%d", reason_code);
@@ -3286,7 +3290,7 @@ control_event_circuit_status(origin_circuit_t *circ, circuit_status_event_t tp,
* <b>conn</b>, and write it to <b>buf</b>. Return 0 on success, -1 on
* failure. */
static int
-write_stream_target_to_buf(edge_connection_t *conn, char *buf, size_t len)
+write_stream_target_to_buf(entry_connection_t *conn, char *buf, size_t len)
{
char buf2[256];
if (conn->chosen_exit_name)
@@ -3297,8 +3301,8 @@ write_stream_target_to_buf(edge_connection_t *conn, char *buf, size_t len)
if (tor_snprintf(buf, len, "%s%s%s:%d",
conn->socks_request->address,
conn->chosen_exit_name ? buf2 : "",
- !conn->chosen_exit_name &&
- connection_edge_is_rendezvous_stream(conn) ? ".onion" : "",
+ !conn->chosen_exit_name && connection_edge_is_rendezvous_stream(
+ ENTRY_TO_EDGE_CONN(conn)) ? ".onion" : "",
conn->socks_request->port)<0)
return -1;
return 0;
@@ -3307,7 +3311,7 @@ write_stream_target_to_buf(edge_connection_t *conn, char *buf, size_t len)
/** Something has happened to the stream associated with AP connection
* <b>conn</b>: tell any interested control connections. */
int
-control_event_stream_status(edge_connection_t *conn, stream_status_event_t tp,
+control_event_stream_status(entry_connection_t *conn, stream_status_event_t tp,
int reason_code)
{
char reason_buf[64];
@@ -3379,7 +3383,7 @@ control_event_stream_status(edge_connection_t *conn, stream_status_event_t tp,
if (tp == STREAM_EVENT_NEW) {
tor_snprintf(addrport_buf,sizeof(addrport_buf), " SOURCE_ADDR=%s:%d",
- TO_CONN(conn)->address, TO_CONN(conn)->port );
+ ENTRY_TO_CONN(conn)->address, ENTRY_TO_CONN(conn)->port);
} else {
addrport_buf[0] = '\0';
}
@@ -3387,12 +3391,12 @@ control_event_stream_status(edge_connection_t *conn, stream_status_event_t tp,
if (tp == STREAM_EVENT_NEW_RESOLVE) {
purpose = " PURPOSE=DNS_REQUEST";
} else if (tp == STREAM_EVENT_NEW) {
- if (conn->is_dns_request ||
+ if (ENTRY_TO_EDGE_CONN(conn)->is_dns_request ||
(conn->socks_request &&
SOCKS_COMMAND_IS_RESOLVE(conn->socks_request->command)))
purpose = " PURPOSE=DNS_REQUEST";
else if (conn->use_begindir) {
- connection_t *linked = TO_CONN(conn)->linked_conn;
+ connection_t *linked = ENTRY_TO_CONN(conn)->linked_conn;
int linked_dir_purpose = -1;
if (linked && linked->type == CONN_TYPE_DIR)
linked_dir_purpose = linked->purpose;
@@ -3404,12 +3408,13 @@ control_event_stream_status(edge_connection_t *conn, stream_status_event_t tp,
purpose = " PURPOSE=USER";
}
- circ = circuit_get_by_edge_conn(conn);
+ circ = circuit_get_by_edge_conn(ENTRY_TO_EDGE_CONN(conn));
if (circ && CIRCUIT_IS_ORIGIN(circ))
origin_circ = TO_ORIGIN_CIRCUIT(circ);
send_control_event(EVENT_STREAM_STATUS, ALL_FORMATS,
"650 STREAM "U64_FORMAT" %s %lu %s%s%s%s\r\n",
- U64_PRINTF_ARG(conn->_base.global_identifier), status,
+ U64_PRINTF_ARG(ENTRY_TO_CONN(conn)->global_identifier),
+ status,
origin_circ?
(unsigned long)origin_circ->global_identifier : 0ul,
buf, reason_buf, addrport_buf, purpose);
@@ -3589,7 +3594,7 @@ control_event_logmsg(int severity, uint32_t domain, const char *msg)
severity <= LOG_NOTICE) {
char *esc = esc_for_log(msg);
++disable_log_messages;
- control_event_general_status(severity, "BUG REASON=\"%s\"", esc);
+ control_event_general_status(severity, "BUG REASON=%s", esc);
--disable_log_messages;
tor_free(esc);
}
@@ -3821,8 +3826,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,
@@ -4018,12 +4023,45 @@ control_event_guard(const char *nickname, const char *digest,
return 0;
}
+/** Called when a configuration option changes. This is generally triggered
+ * by SETCONF requests and RELOAD/SIGHUP signals. The <b>elements</b> is
+ * a smartlist_t containing (key, value, ...) pairs in sequence.
+ * <b>value</b> can be NULL. */
+int
+control_event_conf_changed(smartlist_t *elements)
+{
+ int i;
+ char *result;
+ smartlist_t *lines;
+ if (!EVENT_IS_INTERESTING(EVENT_CONF_CHANGED) ||
+ smartlist_len(elements) == 0) {
+ return 0;
+ }
+ lines = smartlist_create();
+ for (i = 0; i < smartlist_len(elements); i += 2) {
+ char *k = smartlist_get(elements, i);
+ char *v = smartlist_get(elements, i+1);
+ if (v == NULL) {
+ smartlist_asprintf_add(lines, "650-%s", k);
+ } else {
+ smartlist_asprintf_add(lines, "650-%s=%s", k, v);
+ }
+ }
+ result = smartlist_join_strings(lines, "\r\n", 0, NULL);
+ send_control_event(EVENT_CONF_CHANGED, 0,
+ "650-CONF_CHANGED\r\n%s\r\n650 OK\r\n", result);
+ tor_free(result);
+ SMARTLIST_FOREACH(lines, char *, cp, tor_free(cp));
+ smartlist_free(lines);
+ return 0;
+}
+
/** Helper: Return a newly allocated string containing a path to the
* file where we store our authentication cookie. */
static char *
get_cookie_file(void)
{
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
if (options->CookieAuthFile && strlen(options->CookieAuthFile)) {
return tor_strdup(options->CookieAuthFile);
} else {
@@ -4291,6 +4329,7 @@ control_event_bootstrap_problem(const char *warn, int reason)
const char *tag, *summary;
char buf[BOOTSTRAP_MSG_LEN];
const char *recommendation = "ignore";
+ int severity;
/* bootstrap_percent must not be in "undefined" state here. */
tor_assert(status >= 0);
@@ -4315,12 +4354,17 @@ control_event_bootstrap_problem(const char *warn, int reason)
status--; /* find a recognized status string based on current progress */
status = bootstrap_percent; /* set status back to the actual number */
- log_fn(!strcmp(recommendation, "warn") ? LOG_WARN : LOG_INFO,
+ severity = !strcmp(recommendation, "warn") ? LOG_WARN : LOG_INFO;
+
+ log_fn(severity,
LD_CONTROL, "Problem bootstrapping. Stuck at %d%%: %s. (%s; %s; "
"count %d; recommendation %s)",
status, summary, warn,
orconn_end_reason_to_control_string(reason),
bootstrap_problems, recommendation);
+
+ connection_or_report_broken_states(severity, LD_HANDSHAKE);
+
tor_snprintf(buf, sizeof(buf),
"BOOTSTRAP PROGRESS=%d TAG=%s SUMMARY=\"%s\" WARNING=\"%s\" REASON=%s "
"COUNT=%d RECOMMENDATION=%s",
diff --git a/src/or/control.h b/src/or/control.h
index 147a5af0b..0d9acd26e 100644
--- a/src/or/control.h
+++ b/src/or/control.h
@@ -37,7 +37,7 @@ int control_event_is_interesting(int event);
int control_event_circuit_status(origin_circuit_t *circ,
circuit_status_event_t e, int reason);
-int control_event_stream_status(edge_connection_t *conn,
+int control_event_stream_status(entry_connection_t *conn,
stream_status_event_t e,
int reason);
int control_event_or_conn_status(or_connection_t *conn,
@@ -66,6 +66,7 @@ int control_event_server_status(int severity, const char *format, ...)
CHECK_PRINTF(2,3);
int control_event_guard(const char *nickname, const char *digest,
const char *status);
+int control_event_conf_changed(smartlist_t *elements);
int control_event_buildtimeout_set(const circuit_build_times_t *cbt,
buildtimeout_set_event_t type);
int control_event_signal(uintptr_t signal);
diff --git a/src/or/cpuworker.c b/src/or/cpuworker.c
index 5597cad2a..914003790 100644
--- a/src/or/cpuworker.c
+++ b/src/or/cpuworker.c
@@ -225,8 +225,8 @@ cpuworker_main(void *data)
{
char question[ONIONSKIN_CHALLENGE_LEN];
uint8_t question_type;
- int *fdarray = data;
- int fd;
+ tor_socket_t *fdarray = data;
+ tor_socket_t fd;
/* variables for onion processing */
char keys[CPATH_KEY_MATERIAL_LEN];
@@ -316,12 +316,12 @@ cpuworker_main(void *data)
static int
spawn_cpuworker(void)
{
- int *fdarray;
- int fd;
+ tor_socket_t *fdarray;
+ tor_socket_t fd;
connection_t *conn;
int err;
- fdarray = tor_malloc(sizeof(int)*2);
+ fdarray = tor_malloc(sizeof(tor_socket_t)*2);
if ((err = tor_socketpair(AF_UNIX, SOCK_STREAM, 0, fdarray)) < 0) {
log_warn(LD_NET, "Couldn't construct socketpair for cpuworker: %s",
tor_socket_strerror(-err));
@@ -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 9983a97a7..776b7a25f 100644
--- a/src/or/directory.c
+++ b/src/or/directory.c
@@ -252,7 +252,7 @@ int
directories_have_accepted_server_descriptor(void)
{
smartlist_t *servers = router_get_trusted_dir_servers();
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
SMARTLIST_FOREACH(servers, trusted_dir_server_t *, d, {
if ((d->type & options->_PublishServerDescriptor) &&
d->has_accepted_serverdesc) {
@@ -285,7 +285,7 @@ directory_post_to_dirservers(uint8_t dir_purpose, uint8_t router_purpose,
const char *payload,
size_t payload_len, size_t extrainfo_len)
{
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
int post_via_tor;
smartlist_t *dirservers = router_get_trusted_dir_servers();
int found = 0;
@@ -306,7 +306,7 @@ directory_post_to_dirservers(uint8_t dir_purpose, uint8_t router_purpose,
if (exclude_self && router_digest_is_me(ds->digest))
continue;
- if (options->ExcludeNodes && options->StrictNodes &&
+ if (options->StrictNodes &&
routerset_contains_routerstatus(options->ExcludeNodes, rs, -1)) {
log_warn(LD_DIR, "Wanted to contact authority '%s' for %s, but "
"it's in our ExcludedNodes list and StrictNodes is set. "
@@ -352,7 +352,7 @@ directory_get_from_dirserver(uint8_t dir_purpose, uint8_t router_purpose,
const char *resource, int pds_flags)
{
const routerstatus_t *rs = NULL;
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
int prefer_authority = directory_fetches_from_authorities(options);
int get_via_tor = purpose_needs_anonymity(dir_purpose, router_purpose);
dirinfo_type_t type;
@@ -379,11 +379,13 @@ directory_get_from_dirserver(uint8_t dir_purpose, uint8_t router_purpose,
break;
case DIR_PURPOSE_FETCH_STATUS_VOTE:
case DIR_PURPOSE_FETCH_DETACHED_SIGNATURES:
+ case DIR_PURPOSE_FETCH_CERTIFICATE:
type = V3_DIRINFO;
break;
case DIR_PURPOSE_FETCH_CONSENSUS:
- case DIR_PURPOSE_FETCH_CERTIFICATE:
type = V3_DIRINFO;
+ if (resource && !strcmp(resource,"microdesc"))
+ type |= MICRODESC_DIRINFO;
break;
case DIR_PURPOSE_FETCH_MICRODESC:
type = MICRODESC_DIRINFO;
@@ -548,7 +550,7 @@ directory_initiate_command_routerstatus_rend(const routerstatus_t *status,
time_t if_modified_since,
const rend_data_t *rend_query)
{
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
const node_t *node;
char address_buf[INET_NTOA_BUF_LEN+1];
struct in_addr in;
@@ -558,7 +560,8 @@ directory_initiate_command_routerstatus_rend(const routerstatus_t *status,
if (!node && anonymized_connection) {
log_info(LD_DIR, "Not sending anonymized request to directory '%s'; we "
- "don't have its router descriptor.", status->nickname);
+ "don't have its router descriptor.",
+ routerstatus_describe(status));
return;
} else if (node) {
node_get_address_string(node, address_buf, sizeof(address_buf));
@@ -572,10 +575,10 @@ directory_initiate_command_routerstatus_rend(const routerstatus_t *status,
if (options->ExcludeNodes && options->StrictNodes &&
routerset_contains_routerstatus(options->ExcludeNodes, status, -1)) {
- log_warn(LD_DIR, "Wanted to contact directory mirror '%s' for %s, but "
+ log_warn(LD_DIR, "Wanted to contact directory mirror %s for %s, but "
"it's in our ExcludedNodes list and StrictNodes is set. "
"Skipping. This choice might make your Tor not work.",
- status->nickname,
+ routerstatus_describe(status),
dir_conn_purpose_to_string(dir_purpose));
return;
}
@@ -644,7 +647,7 @@ directory_conn_is_self_reachability_test(dir_connection_t *conn)
* server due to a network error: Mark the router as down and try again if
* possible.
*/
-void
+static void
connection_dir_request_failed(dir_connection_t *conn)
{
if (directory_conn_is_self_reachability_test(conn)) {
@@ -816,7 +819,7 @@ connection_dir_download_cert_failed(dir_connection_t *conn, int status)
* 3) Else yes.
*/
static int
-directory_command_should_use_begindir(or_options_t *options,
+directory_command_should_use_begindir(const or_options_t *options,
const tor_addr_t *addr,
int or_port, uint8_t router_purpose,
int anonymized_connection)
@@ -825,8 +828,7 @@ directory_command_should_use_begindir(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)
@@ -857,6 +859,20 @@ directory_initiate_command(const char *address, const tor_addr_t *_addr,
if_modified_since, NULL);
}
+/** Return non-zero iff a directory connection with purpose
+ * <b>dir_purpose</b> reveals sensitive information about a Tor
+ * instance's client activities. (Such connections must be performed
+ * through normal three-hop Tor circuits.) */
+static int
+is_sensitive_dir_purpose(uint8_t dir_purpose)
+{
+ return ((dir_purpose == DIR_PURPOSE_FETCH_RENDDESC) ||
+ (dir_purpose == DIR_PURPOSE_HAS_FETCHED_RENDDESC) ||
+ (dir_purpose == DIR_PURPOSE_UPLOAD_RENDDESC) ||
+ (dir_purpose == DIR_PURPOSE_UPLOAD_RENDDESC_V2) ||
+ (dir_purpose == DIR_PURPOSE_FETCH_RENDDESC_V2));
+}
+
/** Same as directory_initiate_command(), but accepts rendezvous data to
* fetch a hidden service descriptor. */
static void
@@ -872,7 +888,7 @@ directory_initiate_command_rend(const char *address, const tor_addr_t *_addr,
const rend_data_t *rend_query)
{
dir_connection_t *conn;
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
int socket_error = 0;
int use_begindir = supports_begindir &&
directory_command_should_use_begindir(options, _addr,
@@ -891,6 +907,9 @@ directory_initiate_command_rend(const char *address, const tor_addr_t *_addr,
log_debug(LD_DIR, "Initiating %s", dir_conn_purpose_to_string(dir_purpose));
+ tor_assert(!(is_sensitive_dir_purpose(dir_purpose) &&
+ !anonymized_connection));
+
/* ensure that we don't make direct connections when a SOCKS server is
* configured. */
if (!anonymized_connection && !use_begindir && !options->HTTPProxy &&
@@ -952,7 +971,11 @@ directory_initiate_command_rend(const char *address, const tor_addr_t *_addr,
error indicates broken link in windowsland. */
}
} else { /* we want to connect via a tor connection */
- edge_connection_t *linked_conn;
+ entry_connection_t *linked_conn;
+ /* Anonymized tunneled connections can never share a circuit.
+ * One-hop directory connections can share circuits with each other
+ * but nothing else. */
+ int iso_flags = anonymized_connection ? ISO_STREAM : ISO_SESSIONGRP;
/* If it's an anonymized connection, remember the fact that we
* wanted it for later: maybe we'll want it again soon. */
@@ -968,7 +991,9 @@ directory_initiate_command_rend(const char *address, const tor_addr_t *_addr,
linked_conn =
connection_ap_make_link(TO_CONN(conn),
conn->_base.address, conn->_base.port,
- digest, use_begindir, conn->dirconn_direct);
+ digest,
+ SESSION_GROUP_DIRCONN, iso_flags,
+ use_begindir, conn->dirconn_direct);
if (!linked_conn) {
log_warn(LD_NET,"Making tunnel to dirserver failed.");
connection_mark_for_close(TO_CONN(conn));
@@ -988,10 +1013,11 @@ directory_initiate_command_rend(const char *address, const tor_addr_t *_addr,
if_modified_since);
connection_watch_events(TO_CONN(conn), READ_EVENT|WRITE_EVENT);
- IF_HAS_BUFFEREVENT(TO_CONN(linked_conn), {
- connection_watch_events(TO_CONN(linked_conn), READ_EVENT|WRITE_EVENT);
+ IF_HAS_BUFFEREVENT(ENTRY_TO_CONN(linked_conn), {
+ connection_watch_events(ENTRY_TO_CONN(linked_conn),
+ READ_EVENT|WRITE_EVENT);
}) ELSE_IF_NO_BUFFEREVENT
- connection_start_reading(TO_CONN(linked_conn));
+ connection_start_reading(ENTRY_TO_CONN(linked_conn));
}
}
@@ -1090,11 +1116,11 @@ directory_send_command(dir_connection_t *conn,
time_t if_modified_since)
{
char proxystring[256];
- char proxyauthstring[256];
char hoststring[128];
- char imsstring[RFC1123_TIME_LEN+32];
+ smartlist_t *headers = smartlist_create();
char *url;
char request[8192];
+ char *header;
const char *httpcommand = NULL;
size_t len;
@@ -1114,12 +1140,11 @@ directory_send_command(dir_connection_t *conn,
}
/* Format if-modified-since */
- if (!if_modified_since) {
- imsstring[0] = '\0';
- } else {
+ if (if_modified_since) {
char b[RFC1123_TIME_LEN+1];
format_rfc1123_time(b, if_modified_since);
- tor_snprintf(imsstring, sizeof(imsstring), "\r\nIf-Modified-Since: %s", b);
+ tor_asprintf(&header, "If-Modified-Since: %s\r\n", b);
+ smartlist_add(headers, header);
}
/* come up with some proxy lines, if we're using one. */
@@ -1134,16 +1159,14 @@ directory_send_command(dir_connection_t *conn,
log_warn(LD_BUG, "Encoding http authenticator failed");
}
if (base64_authenticator) {
- tor_snprintf(proxyauthstring, sizeof(proxyauthstring),
- "\r\nProxy-Authorization: Basic %s",
+ tor_asprintf(&header,
+ "Proxy-Authorization: Basic %s\r\n",
base64_authenticator);
tor_free(base64_authenticator);
- } else {
- proxyauthstring[0] = 0;
+ smartlist_add(headers, header);
}
} else {
proxystring[0] = 0;
- proxyauthstring[0] = 0;
}
switch (purpose) {
@@ -1204,12 +1227,18 @@ directory_send_command(dir_connection_t *conn,
httpcommand = "GET";
tor_asprintf(&url, "/tor/micro/%s", resource);
break;
- case DIR_PURPOSE_UPLOAD_DIR:
+ case DIR_PURPOSE_UPLOAD_DIR: {
+ const char *why = router_get_descriptor_gen_reason();
tor_assert(!resource);
tor_assert(payload);
httpcommand = "POST";
url = tor_strdup("/tor/");
+ if (why) {
+ tor_asprintf(&header, "X-Desc-Gen-Reason: %s\r\n", why);
+ smartlist_add(headers, header);
+ }
break;
+ }
case DIR_PURPOSE_UPLOAD_VOTE:
tor_assert(!resource);
tor_assert(payload);
@@ -1260,26 +1289,26 @@ directory_send_command(dir_connection_t *conn,
connection_write_to_buf(url, strlen(url), TO_CONN(conn));
tor_free(url);
- if (!strcmp(httpcommand, "GET") && !payload) {
- tor_snprintf(request, sizeof(request),
- " HTTP/1.0\r\nHost: %s%s%s\r\n\r\n",
- hoststring,
- imsstring,
- proxyauthstring);
- } else {
- tor_snprintf(request, sizeof(request),
- " HTTP/1.0\r\nContent-Length: %lu\r\nHost: %s%s%s\r\n\r\n",
- payload ? (unsigned long)payload_len : 0,
- hoststring,
- imsstring,
- proxyauthstring);
+ if (!strcmp(httpcommand, "POST") || payload) {
+ tor_asprintf(&header, "Content-Length: %lu\r\n",
+ payload ? (unsigned long)payload_len : 0);
+ smartlist_add(headers, header);
}
+
+ header = smartlist_join_strings(headers, "", 0, NULL);
+ tor_snprintf(request, sizeof(request), " HTTP/1.0\r\nHost: %s\r\n%s\r\n",
+ hoststring, header);
+ tor_free(header);
+
connection_write_to_buf(request, strlen(request), TO_CONN(conn));
if (payload) {
/* then send the payload afterwards too */
connection_write_to_buf(payload, payload_len, TO_CONN(conn));
}
+
+ SMARTLIST_FOREACH(headers, char *, h, tor_free(h));
+ smartlist_free(headers);
}
/** Parse an HTTP request string <b>headers</b> of the form
@@ -2005,7 +2034,6 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
router_get_trusteddirserver_by_digest(conn->identity_digest);
char *rejected_hdr = http_get_header(headers,
"X-Descriptor-Not-New: ");
- int rejected = 0;
if (rejected_hdr) {
if (!strcmp(rejected_hdr, "Yes")) {
log_info(LD_GENERAL,
@@ -2018,7 +2046,6 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
* last descriptor, not on the published time of the last
* descriptor. If those are different, that's a bad thing to
* do. -NM */
- rejected = 1;
}
tor_free(rejected_hdr);
}
@@ -2285,6 +2312,28 @@ connection_dir_process_inbuf(dir_connection_t *conn)
return 0;
}
+/** Called when we're about to finally unlink and free a directory connection:
+ * perform necessary accounting and cleanup */
+void
+connection_dir_about_to_close(dir_connection_t *dir_conn)
+{
+ connection_t *conn = TO_CONN(dir_conn);
+
+ if (conn->state < DIR_CONN_STATE_CLIENT_FINISHED) {
+ /* It's a directory connection and connecting or fetching
+ * failed: forget about this router, and maybe try again. */
+ connection_dir_request_failed(dir_conn);
+ }
+ /* If we were trying to fetch a v2 rend desc and did not succeed,
+ * retry as needed. (If a fetch is successful, the connection state
+ * is changed to DIR_PURPOSE_HAS_FETCHED_RENDDESC to mark that
+ * refetching is unnecessary.) */
+ if (conn->purpose == DIR_PURPOSE_FETCH_RENDDESC_V2 &&
+ dir_conn->rend_data &&
+ strlen(dir_conn->rend_data->onion_address) == REND_SERVICE_ID_LEN_BASE32)
+ rend_client_refetch_v2_renddesc(dir_conn->rend_data);
+}
+
/** Create an http response for the client <b>conn</b> out of
* <b>status</b> and <b>reason_phrase</b>. Write it to <b>conn</b>.
*/
@@ -2576,18 +2625,18 @@ client_likes_consensus(networkstatus_t *v, const char *want_url)
* Always return 0. */
static int
directory_handle_command_get(dir_connection_t *conn, const char *headers,
- const char *body, size_t body_len)
+ const char *req_body, size_t req_body_len)
{
size_t dlen;
char *url, *url_mem, *header;
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
time_t if_modified_since = 0;
int compressed;
size_t url_len;
/* We ignore the body of a GET request. */
- (void)body;
- (void)body_len;
+ (void)req_body;
+ (void)req_body_len;
log_debug(LD_DIRSERV,"Received GET command.");
@@ -3296,7 +3345,7 @@ directory_handle_command_post(dir_connection_t *conn, const char *headers,
const char *body, size_t body_len)
{
char *url = NULL;
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
log_debug(LD_DIRSERV,"Received POST command.");
@@ -3499,8 +3548,21 @@ connection_dir_finished_flushing(dir_connection_t *conn)
conn->_base.state = DIR_CONN_STATE_CLIENT_READING;
return 0;
case DIR_CONN_STATE_SERVER_WRITING:
- log_debug(LD_DIRSERV,"Finished writing server response. Closing.");
- connection_mark_for_close(TO_CONN(conn));
+ if (conn->dir_spool_src != DIR_SPOOL_NONE) {
+#ifdef USE_BUFFEREVENTS
+ /* This can happen with paired bufferevents, since a paired connection
+ * can flush immediately when you write to it, making the subsequent
+ * check in connection_handle_write_cb() decide that the connection
+ * is flushed. */
+ log_debug(LD_DIRSERV, "Emptied a dirserv buffer, but still spooling.");
+#else
+ log_warn(LD_BUG, "Emptied a dirserv buffer, but it's still spooling!");
+ connection_mark_for_close(TO_CONN(conn));
+#endif
+ } else {
+ log_debug(LD_DIRSERV, "Finished writing server response. Closing.");
+ connection_mark_for_close(TO_CONN(conn));
+ }
return 0;
default:
log_warn(LD_BUG,"called in unexpected state %d.",
diff --git a/src/or/directory.h b/src/or/directory.h
index caff938e5..8c63bb5df 100644
--- a/src/or/directory.h
+++ b/src/or/directory.h
@@ -48,7 +48,7 @@ int connection_dir_reached_eof(dir_connection_t *conn);
int connection_dir_process_inbuf(dir_connection_t *conn);
int connection_dir_finished_flushing(dir_connection_t *conn);
int connection_dir_finished_connecting(dir_connection_t *conn);
-void connection_dir_request_failed(dir_connection_t *conn);
+void connection_dir_about_to_close(dir_connection_t *dir_conn);
void directory_initiate_command(const char *address, const tor_addr_t *addr,
uint16_t or_port, uint16_t dir_port,
int supports_conditional_consensus,
diff --git a/src/or/dirserv.c b/src/or/dirserv.c
index aa2e74b0b..be62459b1 100644
--- a/src/or/dirserv.c
+++ b/src/or/dirserv.c
@@ -212,7 +212,7 @@ dirserv_load_fingerprint_file(void)
authdir_config_t *fingerprint_list_new;
int result;
config_line_t *front=NULL, *list;
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
fname = get_datadir_fname("approved-routers");
log_info(LD_GENERAL,
@@ -518,14 +518,15 @@ dirserv_router_has_valid_address(routerinfo_t *ri)
if (get_options()->DirAllowPrivateAddresses)
return 0; /* whatever it is, we're fine with it */
if (!tor_inet_aton(ri->address, &iaddr)) {
- log_info(LD_DIRSERV,"Router '%s' published non-IP address '%s'. Refusing.",
- ri->nickname, ri->address);
+ log_info(LD_DIRSERV,"Router %s published non-IP address '%s'. Refusing.",
+ router_describe(ri),
+ ri->address);
return -1;
}
if (is_internal_IP(ntohl(iaddr.s_addr), 0)) {
log_info(LD_DIRSERV,
- "Router '%s' published internal IP address '%s'. Refusing.",
- ri->nickname, ri->address);
+ "Router %s published internal IP address '%s'. Refusing.",
+ router_describe(ri), ri->address);
return -1; /* it's a private IP, we should reject it */
}
return 0;
@@ -554,10 +555,11 @@ authdir_wants_to_reject_router(routerinfo_t *ri, const char **msg,
/* Is there too much clock skew? */
now = time(NULL);
if (ri->cache_info.published_on > now+ROUTER_ALLOW_SKEW) {
- log_fn(severity, LD_DIRSERV, "Publication time for nickname '%s' is too "
+ log_fn(severity, LD_DIRSERV, "Publication time for %s is too "
"far (%d minutes) in the future; possible clock skew. Not adding "
"(%s)",
- ri->nickname, (int)((ri->cache_info.published_on-now)/60),
+ router_describe(ri),
+ (int)((ri->cache_info.published_on-now)/60),
esc_router_info(ri));
*msg = "Rejected: Your clock is set too far in the future, or your "
"timezone is not correct.";
@@ -565,9 +567,10 @@ authdir_wants_to_reject_router(routerinfo_t *ri, const char **msg,
}
if (ri->cache_info.published_on < now-ROUTER_MAX_AGE_TO_PUBLISH) {
log_fn(severity, LD_DIRSERV,
- "Publication time for router with nickname '%s' is too far "
+ "Publication time for %s is too far "
"(%d minutes) in the past. Not adding (%s)",
- ri->nickname, (int)((now-ri->cache_info.published_on)/60),
+ router_describe(ri),
+ (int)((now-ri->cache_info.published_on)/60),
esc_router_info(ri));
*msg = "Rejected: Server is expired, or your clock is too far in the past,"
" or your timezone is not correct.";
@@ -575,9 +578,10 @@ authdir_wants_to_reject_router(routerinfo_t *ri, const char **msg,
}
if (dirserv_router_has_valid_address(ri) < 0) {
log_fn(severity, LD_DIRSERV,
- "Router with nickname '%s' has invalid address '%s'. "
+ "Router %s has invalid address '%s'. "
"Not adding (%s).",
- ri->nickname, ri->address,
+ router_describe(ri),
+ ri->address,
esc_router_info(ri));
*msg = "Rejected: Address is not an IP, or IP is a private address.";
return -1;
@@ -729,9 +733,9 @@ dirserv_add_descriptor(routerinfo_t *ri, const char **msg, const char *source)
&& router_differences_are_cosmetic(ri_old, ri)
&& !router_is_me(ri)) {
log_info(LD_DIRSERV,
- "Not replacing descriptor from '%s' (source: %s); "
+ "Not replacing descriptor from %s (source: %s); "
"differences are cosmetic.",
- ri->nickname, source);
+ router_describe(ri), source);
*msg = "Not replacing router descriptor; no information has changed since "
"the last one with this identity.";
control_event_or_authdir_new_descriptor("DROPPED",
@@ -831,13 +835,15 @@ directory_remove_invalid(void)
SMARTLIST_FOREACH_BEGIN(nodes, node_t *, node) {
const char *msg;
routerinfo_t *ent = node->ri;
+ char description[NODE_DESC_BUF_LEN];
uint32_t r;
if (!ent)
continue;
r = dirserv_router_get_status(ent, &msg);
+ router_get_description(description, ent);
if (r & FP_REJECT) {
- log_info(LD_DIRSERV, "Router '%s' is now rejected: %s",
- ent->nickname, msg?msg:"");
+ log_info(LD_DIRSERV, "Router %s is now rejected: %s",
+ description, msg?msg:"");
routerlist_remove(rl, ent, 0, time(NULL));
changed = 1;
continue;
@@ -845,33 +851,33 @@ directory_remove_invalid(void)
#if 0
if (bool_neq((r & FP_NAMED), ent->auth_says_is_named)) {
log_info(LD_DIRSERV,
- "Router '%s' is now %snamed.", ent->nickname,
+ "Router %s is now %snamed.", description,
(r&FP_NAMED)?"":"un");
ent->is_named = (r&FP_NAMED)?1:0;
changed = 1;
}
if (bool_neq((r & FP_UNNAMED), ent->auth_says_is_unnamed)) {
log_info(LD_DIRSERV,
- "Router '%s' is now %snamed. (FP_UNNAMED)", ent->nickname,
+ "Router '%s' is now %snamed. (FP_UNNAMED)", description,
(r&FP_NAMED)?"":"un");
ent->is_named = (r&FP_NUNAMED)?0:1;
changed = 1;
}
#endif
if (bool_neq((r & FP_INVALID), !node->is_valid)) {
- log_info(LD_DIRSERV, "Router '%s' is now %svalid.", ent->nickname,
+ log_info(LD_DIRSERV, "Router '%s' is now %svalid.", description,
(r&FP_INVALID) ? "in" : "");
node->is_valid = (r&FP_INVALID)?0:1;
changed = 1;
}
if (bool_neq((r & FP_BADDIR), node->is_bad_directory)) {
- log_info(LD_DIRSERV, "Router '%s' is now a %s directory", ent->nickname,
+ log_info(LD_DIRSERV, "Router '%s' is now a %s directory", description,
(r & FP_BADDIR) ? "bad" : "good");
node->is_bad_directory = (r&FP_BADDIR) ? 1: 0;
changed = 1;
}
if (bool_neq((r & FP_BADEXIT), node->is_bad_exit)) {
- log_info(LD_DIRSERV, "Router '%s' is now a %s exit", ent->nickname,
+ log_info(LD_DIRSERV, "Router '%s' is now a %s exit", description,
(r & FP_BADEXIT) ? "bad" : "good");
node->is_bad_exit = (r&FP_BADEXIT) ? 1: 0;
changed = 1;
@@ -1026,7 +1032,7 @@ list_server_status_v1(smartlist_t *routers, char **router_status_out,
smartlist_t *rs_entries;
time_t now = time(NULL);
time_t cutoff = now - ROUTER_MAX_AGE_TO_PUBLISH;
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
/* We include v2 dir auths here too, because they need to answer
* controllers. Eventually we'll deprecate this whole function;
* see also networkstatus_getinfo_by_purpose(). */
@@ -1193,7 +1199,7 @@ dirserv_dump_directory_to_string(char **dir_out,
/** Return 1 if we fetch our directory material directly from the
* authorities, rather than from a mirror. */
int
-directory_fetches_from_authorities(or_options_t *options)
+directory_fetches_from_authorities(const or_options_t *options)
{
const routerinfo_t *me;
uint32_t addr;
@@ -1220,7 +1226,7 @@ directory_fetches_from_authorities(or_options_t *options)
* on the "mirror" schedule rather than the "client" schedule.
*/
int
-directory_fetches_dir_info_early(or_options_t *options)
+directory_fetches_dir_info_early(const or_options_t *options)
{
return directory_fetches_from_authorities(options);
}
@@ -1232,7 +1238,7 @@ directory_fetches_dir_info_early(or_options_t *options)
* client as a directory guard.
*/
int
-directory_fetches_dir_info_later(or_options_t *options)
+directory_fetches_dir_info_later(const or_options_t *options)
{
return options->UseBridges != 0;
}
@@ -1240,7 +1246,7 @@ directory_fetches_dir_info_later(or_options_t *options)
/** Return 1 if we want to cache v2 dir info (each status file).
*/
int
-directory_caches_v2_dir_info(or_options_t *options)
+directory_caches_v2_dir_info(const or_options_t *options)
{
return options->DirPort != 0;
}
@@ -1249,7 +1255,7 @@ directory_caches_v2_dir_info(or_options_t *options)
* and we're willing to serve them to others. Else return 0.
*/
int
-directory_caches_dir_info(or_options_t *options)
+directory_caches_dir_info(const or_options_t *options)
{
if (options->BridgeRelay || options->DirPort)
return 1;
@@ -1265,7 +1271,7 @@ directory_caches_dir_info(or_options_t *options)
* requests via the "begin_dir" interface, which doesn't require
* having any separate port open. */
int
-directory_permits_begindir_requests(or_options_t *options)
+directory_permits_begindir_requests(const or_options_t *options)
{
return options->BridgeRelay != 0 || options->DirPort != 0;
}
@@ -1274,7 +1280,7 @@ directory_permits_begindir_requests(or_options_t *options)
* requests via the controller interface, which doesn't require
* having any separate port open. */
int
-directory_permits_controller_requests(or_options_t *options)
+directory_permits_controller_requests(const or_options_t *options)
{
return options->DirPort != 0;
}
@@ -1284,7 +1290,8 @@ directory_permits_controller_requests(or_options_t *options)
* lately.
*/
int
-directory_too_idle_to_fetch_descriptors(or_options_t *options, time_t now)
+directory_too_idle_to_fetch_descriptors(const or_options_t *options,
+ time_t now)
{
return !directory_caches_dir_info(options) &&
!options->FetchUselessDescriptors &&
@@ -1554,7 +1561,7 @@ dirserv_pick_cached_dir_obj(cached_dir_t *cache_src,
const char *name,
dirinfo_type_t auth_type)
{
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
int authority = (auth_type == V1_DIRINFO && authdir_mode_v1(options)) ||
(auth_type == V2_DIRINFO && authdir_mode_v2(options));
@@ -1713,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.
@@ -1863,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;
@@ -1935,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. */
@@ -2245,7 +2250,7 @@ _compare_routerinfo_by_ip_and_bw(const void **a, const void **b)
static digestmap_t *
get_possible_sybil_list(const smartlist_t *routers)
{
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
digestmap_t *omit_as_sybil;
smartlist_t *routers_by_ip = smartlist_create();
uint32_t last_addr;
@@ -2281,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>.
@@ -2294,10 +2368,13 @@ set_routerstatus_from_routerinfo(routerstatus_t *rs,
routerinfo_t *ri,
time_t now,
int naming, int listbadexits,
- int listbaddirs)
+ 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 =
@@ -2323,20 +2400,25 @@ 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;
}
+
rs->is_bad_directory = listbaddirs && node->is_bad_directory;
rs->is_bad_exit = listbadexits && node->is_bad_exit;
node->is_hs_dir = dirserv_thinks_router_is_hs_dir(ri, node, now);
- rs->is_hs_dir = node->is_hs_dir;
+ rs->is_hs_dir = vote_on_hsdirs && node->is_hs_dir;
rs->is_v2_dir = ri->dir_port != 0;
if (!strcasecmp(ri->nickname, UNNAMED_ROUTER_NICKNAME))
@@ -2433,7 +2515,7 @@ measured_bw_line_parse(measured_bw_line_t *out, const char *orig_line)
tor_free(line);
return -1;
}
- strncpy(out->node_hex, cp, sizeof(out->node_hex));
+ strlcpy(out->node_hex, cp, sizeof(out->node_hex));
got_node_id=1;
}
} while ((cp = tor_strtok_r(NULL, " \t", &strtok_state)));
@@ -2545,7 +2627,7 @@ networkstatus_t *
dirserv_generate_networkstatus_vote_obj(crypto_pk_env_t *private_key,
authority_cert_t *cert)
{
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
networkstatus_t *v3_out = NULL;
uint32_t addr;
char *hostname = NULL, *client_versions = NULL, *server_versions = NULL;
@@ -2556,6 +2638,7 @@ dirserv_generate_networkstatus_vote_obj(crypto_pk_env_t *private_key,
int naming = options->NamingAuthoritativeDir;
int listbadexits = options->AuthDirListBadExits;
int listbaddirs = options->AuthDirListBadDirs;
+ int vote_on_hsdirs = options->VoteOnHidServDirectoriesV2;
routerlist_t *rl = router_get_routerlist();
time_t now = time(NULL);
time_t cutoff = now - ROUTER_MAX_AGE_TO_PUBLISH;
@@ -2622,7 +2705,8 @@ dirserv_generate_networkstatus_vote_obj(crypto_pk_env_t *private_key,
vrs = tor_malloc_zero(sizeof(vote_routerstatus_t));
rs = &vrs->status;
set_routerstatus_from_routerinfo(rs, node, ri, now,
- naming, listbadexits, listbaddirs);
+ naming, listbadexits, listbaddirs,
+ vote_on_hsdirs);
if (digestmap_get(omit_as_sybil, ri->cache_info.identity_digest))
clear_status_flags_on_sybil(rs);
@@ -2699,7 +2783,7 @@ dirserv_generate_networkstatus_vote_obj(crypto_pk_env_t *private_key,
v3_out->server_versions = server_versions;
v3_out->known_flags = smartlist_create();
smartlist_split_string(v3_out->known_flags,
- "Authority Exit Fast Guard HSDir Stable V2Dir Valid",
+ "Authority Exit Fast Guard Stable V2Dir Valid",
0, SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0);
if (vote_on_reachability)
smartlist_add(v3_out->known_flags, tor_strdup("Running"));
@@ -2711,6 +2795,8 @@ dirserv_generate_networkstatus_vote_obj(crypto_pk_env_t *private_key,
smartlist_add(v3_out->known_flags, tor_strdup("Named"));
smartlist_add(v3_out->known_flags, tor_strdup("Unnamed"));
}
+ if (vote_on_hsdirs)
+ smartlist_add(v3_out->known_flags, tor_strdup("HSDir"));
smartlist_sort_strings(v3_out->known_flags);
if (options->ConsensusParams) {
@@ -2726,7 +2812,7 @@ dirserv_generate_networkstatus_vote_obj(crypto_pk_env_t *private_key,
voter->sigs = smartlist_create();
voter->address = hostname;
voter->addr = addr;
- voter->dir_port = router_get_advertised_dir_port(options);
+ voter->dir_port = router_get_advertised_dir_port(options, 0);
voter->or_port = router_get_advertised_or_port(options);
voter->contact = tor_strdup(contact);
if (options->V3AuthUseLegacyKey) {
@@ -2760,7 +2846,7 @@ generate_v2_networkstatus_opinion(void)
char *status = NULL, *client_versions = NULL, *server_versions = NULL,
*identity_pkey = NULL, *hostname = NULL;
char *outp, *endp;
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
char fingerprint[FINGERPRINT_LEN+1];
char published[ISO_TIME_LEN+1];
char digest[DIGEST_LEN];
@@ -2773,6 +2859,7 @@ generate_v2_networkstatus_opinion(void)
int versioning = options->VersioningAuthoritativeDir;
int listbaddirs = options->AuthDirListBadDirs;
int listbadexits = options->AuthDirListBadExits;
+ int vote_on_hsdirs = options->VoteOnHidServDirectoriesV2;
const char *contact;
char *version_lines = NULL;
smartlist_t *routers = NULL;
@@ -2801,7 +2888,7 @@ generate_v2_networkstatus_opinion(void)
goto done;
}
- contact = get_options()->ContactInfo;
+ contact = options->ContactInfo;
if (!contact)
contact = "(none)";
@@ -2830,7 +2917,7 @@ generate_v2_networkstatus_opinion(void)
"%s" /* client version line, server version line. */
"dir-signing-key\n%s",
hostname, fmt_addr32(addr),
- (int)router_get_advertised_dir_port(options),
+ (int)router_get_advertised_dir_port(options, 0),
fingerprint,
contact,
published,
@@ -2867,7 +2954,8 @@ generate_v2_networkstatus_opinion(void)
continue;
}
set_routerstatus_from_routerinfo(&rs, node, ri, now,
- naming, listbadexits, listbaddirs);
+ naming, listbadexits, listbaddirs,
+ vote_on_hsdirs);
if (digestmap_get(omit_as_sybil, ri->cache_info.identity_digest))
clear_status_flags_on_sybil(&rs);
@@ -2883,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;
}
@@ -3191,8 +3279,9 @@ dirserv_orconn_tls_done(const char *address,
if (!bridge_auth || ri->purpose == ROUTER_PURPOSE_BRIDGE) {
tor_addr_t addr, *addrp=NULL;
log_info(LD_DIRSERV, "Found router %s to be reachable at %s:%d. Yay.",
- ri->nickname, address, ri->or_port );
- if (tor_addr_from_str(&addr, ri->address) != -1)
+ router_describe(ri),
+ address, ri->or_port);
+ if (tor_addr_parse(&addr, ri->address) != -1)
addrp = &addr;
else
log_warn(LD_BUG, "Couldn't parse IP address \"%s\"", ri->address);
@@ -3467,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;
@@ -3497,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/dirserv.h b/src/or/dirserv.h
index 8bd6d18f9..d3fd90ceb 100644
--- a/src/or/dirserv.h
+++ b/src/or/dirserv.h
@@ -71,15 +71,16 @@ int list_server_status_v1(smartlist_t *routers, char **router_status_out,
int dirserv_dump_directory_to_string(char **dir_out,
crypto_pk_env_t *private_key);
-int directory_fetches_from_authorities(or_options_t *options);
-int directory_fetches_dir_info_early(or_options_t *options);
-int directory_fetches_dir_info_later(or_options_t *options);
-int directory_caches_v2_dir_info(or_options_t *options);
+int directory_fetches_from_authorities(const or_options_t *options);
+int directory_fetches_dir_info_early(const or_options_t *options);
+int directory_fetches_dir_info_later(const or_options_t *options);
+int directory_caches_v2_dir_info(const or_options_t *options);
#define directory_caches_v1_dir_info(o) directory_caches_v2_dir_info(o)
-int directory_caches_dir_info(or_options_t *options);
-int directory_permits_begindir_requests(or_options_t *options);
-int directory_permits_controller_requests(or_options_t *options);
-int directory_too_idle_to_fetch_descriptors(or_options_t *options, time_t now);
+int directory_caches_dir_info(const or_options_t *options);
+int directory_permits_begindir_requests(const or_options_t *options);
+int directory_permits_controller_requests(const or_options_t *options);
+int directory_too_idle_to_fetch_descriptors(const or_options_t *options,
+ time_t now);
void directory_set_dirty(void);
cached_dir_t *dirserv_get_directory(void);
diff --git a/src/or/dirvote.c b/src/or/dirvote.c
index 15174c1dc..bf34c62af 100644
--- a/src/or/dirvote.c
+++ b/src/or/dirvote.c
@@ -1585,7 +1585,7 @@ networkstatus_compute_consensus(smartlist_t *votes,
* is the same flag as votes[j]->known_flags[b]. */
int *named_flag; /* Index of the flag "Named" for votes[j] */
int *unnamed_flag; /* Index of the flag "Unnamed" for votes[j] */
- int chosen_named_idx, chosen_unnamed_idx;
+ int chosen_named_idx;
strmap_t *name_to_id_map = strmap_new();
char conflict[DIGEST_LEN];
@@ -1603,7 +1603,6 @@ networkstatus_compute_consensus(smartlist_t *votes,
for (i = 0; i < smartlist_len(votes); ++i)
unnamed_flag[i] = named_flag[i] = -1;
chosen_named_idx = smartlist_string_pos(flags, "Named");
- chosen_unnamed_idx = smartlist_string_pos(flags, "Unnamed");
/* Build the flag index. */
SMARTLIST_FOREACH(votes, networkstatus_t *, v,
@@ -2505,7 +2504,7 @@ authority_cert_dup(authority_cert_t *cert)
void
dirvote_get_preferred_voting_intervals(vote_timing_t *timing_out)
{
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
tor_assert(timing_out);
@@ -2579,7 +2578,7 @@ static struct {
/** Set voting_schedule to hold the timing for the next vote we should be
* doing. */
void
-dirvote_recalculate_timing(or_options_t *options, time_t now)
+dirvote_recalculate_timing(const or_options_t *options, time_t now)
{
int interval, vote_delay, dist_delay;
time_t start;
@@ -2630,7 +2629,7 @@ dirvote_recalculate_timing(or_options_t *options, time_t now)
/** Entry point: Take whatever voting actions are pending as of <b>now</b>. */
void
-dirvote_act(or_options_t *options, time_t now)
+dirvote_act(const or_options_t *options, time_t now)
{
if (!authdir_mode_v3(options))
return;
diff --git a/src/or/dirvote.h b/src/or/dirvote.h
index 97bed5ee6..d19635173 100644
--- a/src/or/dirvote.h
+++ b/src/or/dirvote.h
@@ -41,8 +41,8 @@ authority_cert_t *authority_cert_dup(authority_cert_t *cert);
/* vote scheduling */
void dirvote_get_preferred_voting_intervals(vote_timing_t *timing_out);
time_t dirvote_get_start_of_next_interval(time_t now, int interval);
-void dirvote_recalculate_timing(or_options_t *options, time_t now);
-void dirvote_act(or_options_t *options, time_t now);
+void dirvote_recalculate_timing(const or_options_t *options, time_t now);
+void dirvote_act(const or_options_t *options, time_t now);
/* invoked on timers and by outside triggers. */
struct pending_vote_t * dirvote_add_vote(const char *vote_body,
@@ -63,7 +63,7 @@ void set_routerstatus_from_routerinfo(routerstatus_t *rs,
node_t *node,
routerinfo_t *ri, time_t now,
int naming, int listbadexits,
- int listbaddirs);
+ int listbaddirs, int vote_on_hsdirs);
void router_clear_status_flags(routerinfo_t *ri);
networkstatus_t *
dirserv_generate_networkstatus_vote_obj(crypto_pk_env_t *private_key,
diff --git a/src/or/dns.c b/src/or/dns.c
index a7fad3d69..8ed953690 100644
--- a/src/or/dns.c
+++ b/src/or/dns.c
@@ -276,7 +276,7 @@ dns_init(void)
int
dns_reset(void)
{
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
if (! server_mode(options)) {
if (!the_evdns_base) {
@@ -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;
@@ -1026,7 +1026,7 @@ add_answer_to_cache(const char *address, uint8_t is_reverse, uint32_t addr,
static INLINE int
is_test_address(const char *address)
{
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
return options->ServerDNSTestAddresses &&
smartlist_string_isin_case(options->ServerDNSTestAddresses, address);
}
@@ -1177,7 +1177,7 @@ evdns_err_is_transient(int err)
static int
configure_nameservers(int force)
{
- or_options_t *options;
+ const or_options_t *options;
const char *conf_fname;
struct stat st;
int r;
@@ -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 {
@@ -1404,7 +1404,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);
@@ -1595,7 +1595,7 @@ launch_wildcard_check(int min_len, int max_len, const char *suffix)
static void
launch_test_addresses(int fd, short event, void *args)
{
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
struct evdns_request *req;
(void)fd;
(void)event;
diff --git a/src/or/dnsserv.c b/src/or/dnsserv.c
index 243b730cb..7f519398f 100644
--- a/src/or/dnsserv.c
+++ b/src/or/dnsserv.c
@@ -29,8 +29,10 @@
* DNSPort. We need to eventually answer the request <b>req</b>.
*/
static void
-evdns_server_callback(struct evdns_server_request *req, void *_data)
+evdns_server_callback(struct evdns_server_request *req, void *data_)
{
+ const listener_connection_t *listener = data_;
+ entry_connection_t *entry_conn;
edge_connection_t *conn;
int i = 0;
struct evdns_server_question *q = NULL;
@@ -43,7 +45,7 @@ evdns_server_callback(struct evdns_server_request *req, void *_data)
char *q_name;
tor_assert(req);
- tor_assert(_data == NULL);
+
log_info(LD_APP, "Got a new DNS request!");
req->flags |= 0x80; /* set RA */
@@ -95,8 +97,8 @@ evdns_server_callback(struct evdns_server_request *req, void *_data)
}
if (!q) {
log_info(LD_APP, "None of the questions we got were ones we're willing "
- "to support. Sending NODATA.");
- evdns_server_request_respond(req, DNS_ERR_NONE);
+ "to support. Sending NOTIMPL.");
+ evdns_server_request_respond(req, DNS_ERR_NOTIMPL);
return;
}
if (q->type != EVDNS_TYPE_A) {
@@ -114,8 +116,9 @@ evdns_server_callback(struct evdns_server_request *req, void *_data)
}
/* Make a new dummy AP connection, and attach the request to it. */
- conn = edge_connection_new(CONN_TYPE_AP, AF_INET);
- conn->_base.state = AP_CONN_STATE_RESOLVE_WAIT;
+ entry_conn = entry_connection_new(CONN_TYPE_AP, AF_INET);
+ conn = ENTRY_TO_EDGE_CONN(entry_conn);
+ TO_CONN(conn)->state = AP_CONN_STATE_RESOLVE_WAIT;
conn->is_dns_request = 1;
tor_addr_copy(&TO_CONN(conn)->addr, &tor_addr);
@@ -123,23 +126,27 @@ evdns_server_callback(struct evdns_server_request *req, void *_data)
TO_CONN(conn)->address = tor_dup_addr(&tor_addr);
if (q->type == EVDNS_TYPE_A)
- conn->socks_request->command = SOCKS_COMMAND_RESOLVE;
+ entry_conn->socks_request->command = SOCKS_COMMAND_RESOLVE;
else
- conn->socks_request->command = SOCKS_COMMAND_RESOLVE_PTR;
+ entry_conn->socks_request->command = SOCKS_COMMAND_RESOLVE_PTR;
- strlcpy(conn->socks_request->address, q->name,
- sizeof(conn->socks_request->address));
+ strlcpy(entry_conn->socks_request->address, q->name,
+ sizeof(entry_conn->socks_request->address));
- conn->dns_server_request = req;
+ entry_conn->socks_request->listener_type = listener->_base.type;
+ entry_conn->dns_server_request = req;
+ entry_conn->isolation_flags = listener->isolation_flags;
+ entry_conn->session_group = listener->session_group;
+ entry_conn->nym_epoch = get_signewnym_epoch();
- if (connection_add(TO_CONN(conn)) < 0) {
+ if (connection_add(ENTRY_TO_CONN(entry_conn)) < 0) {
log_warn(LD_APP, "Couldn't register dummy connection for DNS request");
evdns_server_request_respond(req, DNS_ERR_SERVERFAILED);
- connection_free(TO_CONN(conn));
+ connection_free(ENTRY_TO_CONN(entry_conn));
return;
}
- control_event_stream_status(conn, STREAM_EVENT_NEW, 0);
+ control_event_stream_status(entry_conn, STREAM_EVENT_NEW, 0);
/* Now, unless a controller asked us to leave streams unattached,
* throw the connection over to get rewritten (which will
@@ -148,7 +155,7 @@ evdns_server_callback(struct evdns_server_request *req, void *_data)
log_info(LD_APP, "Passing request for %s to rewrite_and_attach.",
escaped_safe_str_client(q->name));
q_name = tor_strdup(q->name); /* q could be freed in rewrite_and_attach */
- connection_ap_rewrite_and_attach_if_allowed(conn, NULL, NULL);
+ connection_ap_rewrite_and_attach_if_allowed(entry_conn, NULL, NULL);
/* Now, the connection is marked if it was bad. */
log_info(LD_APP, "Passed request for %s to rewrite_and_attach_if_allowed.",
@@ -164,22 +171,30 @@ evdns_server_callback(struct evdns_server_request *req, void *_data)
int
dnsserv_launch_request(const char *name, int reverse)
{
+ entry_connection_t *entry_conn;
edge_connection_t *conn;
char *q_name;
/* Make a new dummy AP connection, and attach the request to it. */
- conn = edge_connection_new(CONN_TYPE_AP, AF_INET);
+ entry_conn = entry_connection_new(CONN_TYPE_AP, AF_INET);
+ conn = ENTRY_TO_EDGE_CONN(entry_conn);
conn->_base.state = AP_CONN_STATE_RESOLVE_WAIT;
if (reverse)
- conn->socks_request->command = SOCKS_COMMAND_RESOLVE_PTR;
+ entry_conn->socks_request->command = SOCKS_COMMAND_RESOLVE_PTR;
else
- conn->socks_request->command = SOCKS_COMMAND_RESOLVE;
+ entry_conn->socks_request->command = SOCKS_COMMAND_RESOLVE;
conn->is_dns_request = 1;
- strlcpy(conn->socks_request->address, name,
- sizeof(conn->socks_request->address));
+ strlcpy(entry_conn->socks_request->address, name,
+ sizeof(entry_conn->socks_request->address));
+
+ entry_conn->socks_request->listener_type = CONN_TYPE_CONTROL_LISTENER;
+ entry_conn->original_dest_address = tor_strdup(name);
+ entry_conn->session_group = SESSION_GROUP_CONTROL_RESOLVE;
+ entry_conn->nym_epoch = get_signewnym_epoch();
+ entry_conn->isolation_flags = ISO_DEFAULT;
if (connection_add(TO_CONN(conn))<0) {
log_warn(LD_APP, "Couldn't register dummy connection for RESOLVE request");
@@ -194,7 +209,7 @@ dnsserv_launch_request(const char *name, int reverse)
log_info(LD_APP, "Passing request for %s to rewrite_and_attach.",
escaped_safe_str_client(name));
q_name = tor_strdup(name); /* q could be freed in rewrite_and_attach */
- connection_ap_rewrite_and_attach_if_allowed(conn, NULL, NULL);
+ connection_ap_rewrite_and_attach_if_allowed(entry_conn, NULL, NULL);
/* Now, the connection is marked if it was bad. */
log_info(LD_APP, "Passed request for %s to rewrite_and_attach_if_allowed.",
@@ -206,7 +221,7 @@ dnsserv_launch_request(const char *name, int reverse)
/** If there is a pending request on <b>conn</b> that's waiting for an answer,
* send back an error and free the request. */
void
-dnsserv_reject_request(edge_connection_t *conn)
+dnsserv_reject_request(entry_connection_t *conn)
{
if (conn->dns_server_request) {
evdns_server_request_respond(conn->dns_server_request,
@@ -252,7 +267,7 @@ evdns_get_orig_address(const struct evdns_server_request *req,
* <b>answer_len</b>, in <b>answer</b>, with TTL <b>ttl</b>. Doesn't do
* any caching; that's handled elsewhere. */
void
-dnsserv_resolved(edge_connection_t *conn,
+dnsserv_resolved(entry_connection_t *conn,
int answer_type,
size_t answer_len,
const char *answer,
@@ -305,12 +320,15 @@ dnsserv_resolved(edge_connection_t *conn,
void
dnsserv_configure_listener(connection_t *conn)
{
+ listener_connection_t *listener_conn;
tor_assert(conn);
- tor_assert(conn->s >= 0);
+ tor_assert(SOCKET_OK(conn->s));
tor_assert(conn->type == CONN_TYPE_AP_DNS_LISTENER);
- conn->dns_server_port =
- tor_evdns_add_server_port(conn->s, 0, evdns_server_callback, NULL);
+ listener_conn = TO_LISTENER_CONN(conn);
+ listener_conn->dns_server_port =
+ tor_evdns_add_server_port(conn->s, 0, evdns_server_callback,
+ listener_conn);
}
/** Free the evdns server port for <b>conn</b>, which must be an
@@ -318,12 +336,15 @@ dnsserv_configure_listener(connection_t *conn)
void
dnsserv_close_listener(connection_t *conn)
{
+ listener_connection_t *listener_conn;
tor_assert(conn);
tor_assert(conn->type == CONN_TYPE_AP_DNS_LISTENER);
- if (conn->dns_server_port) {
- evdns_close_server_port(conn->dns_server_port);
- conn->dns_server_port = NULL;
+ listener_conn = TO_LISTENER_CONN(conn);
+
+ if (listener_conn->dns_server_port) {
+ evdns_close_server_port(listener_conn->dns_server_port);
+ listener_conn->dns_server_port = NULL;
}
}
diff --git a/src/or/dnsserv.h b/src/or/dnsserv.h
index fcca86888..73ec36564 100644
--- a/src/or/dnsserv.h
+++ b/src/or/dnsserv.h
@@ -14,12 +14,12 @@
void dnsserv_configure_listener(connection_t *conn);
void dnsserv_close_listener(connection_t *conn);
-void dnsserv_resolved(edge_connection_t *conn,
+void dnsserv_resolved(entry_connection_t *conn,
int answer_type,
size_t answer_len,
const char *answer,
int ttl);
-void dnsserv_reject_request(edge_connection_t *conn);
+void dnsserv_reject_request(entry_connection_t *conn);
int dnsserv_launch_request(const char *name, int is_reverse);
#endif
diff --git a/src/or/eventdns.c b/src/or/eventdns.c
index fb05e48d3..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
@@ -1028,6 +1033,9 @@ request_parse(u8 *packet, ssize_t length, struct evdns_server_port *port, struct
GET16(answers);
GET16(authority);
GET16(additional);
+ (void)additional;
+ (void)authority;
+ (void)answers;
if (flags & 0x8000) return -1; /* Must not be an answer. */
flags &= 0x0110; /* Only RD and CD get preserved. */
@@ -1560,7 +1568,7 @@ evdns_request_data_build(const char *const name, const size_t name_len,
/* exported function */
struct evdns_server_port *
-evdns_add_server_port(int socket, int is_tcp, evdns_request_callback_fn_type cb, void *user_data)
+evdns_add_server_port(tor_socket_t socket, int is_tcp, evdns_request_callback_fn_type cb, void *user_data)
{
struct evdns_server_port *port;
if (!(port = mm_malloc(sizeof(struct evdns_server_port))))
@@ -1828,8 +1836,8 @@ evdns_server_request_respond(struct evdns_server_request *_req, int err)
r = sendto(port->socket, req->response, req->response_len, 0,
(struct sockaddr*) &req->addr, req->addrlen);
if (r<0) {
- int err = last_error(port->socket);
- if (! error_is_eagain(err))
+ int error = last_error(port->socket);
+ if (! error_is_eagain(error))
return -1;
if (port->pending_replies) {
@@ -2288,7 +2296,7 @@ _evdns_nameserver_add_impl(const struct sockaddr *address,
evtimer_set(&ns->timeout_event, nameserver_prod_callback, ns);
- ns->socket = tor_open_socket(PF_INET, SOCK_DGRAM, 0);
+ ns->socket = tor_open_socket(address->sa_family, SOCK_DGRAM, 0);
if (ns->socket < 0) { err = 1; goto out1; }
#ifdef WIN32
{
diff --git a/src/or/eventdns.h b/src/or/eventdns.h
index 2fe4ac937..3ff8bba4b 100644
--- a/src/or/eventdns.h
+++ b/src/or/eventdns.h
@@ -319,7 +319,7 @@ typedef void (*evdns_request_callback_fn_type)(struct evdns_server_request *, vo
#define EVDNS_CLASS_INET 1
-struct evdns_server_port *evdns_add_server_port(int socket, int is_tcp, evdns_request_callback_fn_type callback, void *user_data);
+struct evdns_server_port *evdns_add_server_port(tor_socket_t socket, int is_tcp, evdns_request_callback_fn_type callback, void *user_data);
void evdns_close_server_port(struct evdns_server_port *port);
int evdns_server_request_add_reply(struct evdns_server_request *req, int section, const char *name, int type, int class, int ttl, int datalen, int is_name, const char *data);
diff --git a/src/or/geoip.c b/src/or/geoip.c
index 71ed3bedf..73194ae9c 100644
--- a/src/or/geoip.c
+++ b/src/or/geoip.c
@@ -116,10 +116,10 @@ geoip_parse_entry(const char *line)
++line;
if (*line == '#')
return 0;
- if (sscanf(line,"%u,%u,%2s", &low, &high, b) == 3) {
+ if (tor_sscanf(line,"%u,%u,%2s", &low, &high, b) == 3) {
geoip_add_entry(low, high, b);
return 0;
- } else if (sscanf(line,"\"%u\",\"%u\",\"%2s\",", &low, &high, b) == 3) {
+ } else if (tor_sscanf(line,"\"%u\",\"%u\",\"%2s\",", &low, &high, b) == 3) {
geoip_add_entry(low, high, b);
return 0;
} else {
@@ -162,7 +162,7 @@ _geoip_compare_key_to_entry(const void *_key, const void **_member)
/** Return 1 if we should collect geoip stats on bridge users, and
* include them in our extrainfo descriptor. Else return 0. */
int
-should_record_bridge_info(or_options_t *options)
+should_record_bridge_info(const or_options_t *options)
{
return options->BridgeRelay && options->BridgeRecordUsageByCountry;
}
@@ -199,7 +199,7 @@ init_geoip_countries(void)
* with '#' (comments).
*/
int
-geoip_load_file(const char *filename, or_options_t *options)
+geoip_load_file(const char *filename, const or_options_t *options)
{
FILE *f;
const char *msg = "";
@@ -424,7 +424,7 @@ void
geoip_note_client_seen(geoip_client_action_t action,
uint32_t addr, time_t now)
{
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
clientmap_entry_t lookup, *ent;
if (action == GEOIP_CLIENT_CONNECT) {
/* Only remember statistics as entry guard or as bridge. */
@@ -930,10 +930,9 @@ geoip_dirreq_stats_init(time_t now)
start_of_dirreq_stats_interval = now;
}
-/** Stop collecting directory request stats in a way that we can re-start
- * doing so in geoip_dirreq_stats_init(). */
+/** Reset counters for dirreq stats. */
void
-geoip_dirreq_stats_term(void)
+geoip_reset_dirreq_stats(time_t now)
{
SMARTLIST_FOREACH(geoip_countries, geoip_country_t *, c, {
c->n_v2_ns_requests = c->n_v3_ns_requests = 0;
@@ -965,59 +964,44 @@ geoip_dirreq_stats_term(void)
tor_free(this);
}
}
- start_of_dirreq_stats_interval = 0;
+ start_of_dirreq_stats_interval = now;
}
-/** Write dirreq statistics to $DATADIR/stats/dirreq-stats and return when
- * we would next want to write. */
-time_t
-geoip_dirreq_stats_write(time_t now)
+/** Stop collecting directory request stats in a way that we can re-start
+ * doing so in geoip_dirreq_stats_init(). */
+void
+geoip_dirreq_stats_term(void)
{
- char *statsdir = NULL, *filename = NULL;
- char *data_v2 = NULL, *data_v3 = NULL;
- char written[ISO_TIME_LEN+1];
- open_file_t *open_file = NULL;
+ geoip_reset_dirreq_stats(0);
+}
+
+/** Return a newly allocated string containing the dirreq statistics
+ * 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)
+{
+ char t[ISO_TIME_LEN+1];
double v2_share = 0.0, v3_share = 0.0;
- FILE *out;
int i;
+ char *v3_ips_string, *v2_ips_string, *v3_reqs_string, *v2_reqs_string,
+ *v2_share_string = NULL, *v3_share_string = NULL,
+ *v3_direct_dl_string, *v2_direct_dl_string,
+ *v3_tunneled_dl_string, *v2_tunneled_dl_string;
+ char *result;
if (!start_of_dirreq_stats_interval)
- return 0; /* Not initialized. */
- if (start_of_dirreq_stats_interval + WRITE_STATS_INTERVAL > now)
- goto done; /* Not ready to write. */
+ return NULL; /* Not initialized. */
- /* Discard all items in the client history that are too old. */
- geoip_remove_old_clients(start_of_dirreq_stats_interval);
+ tor_assert(now >= start_of_dirreq_stats_interval);
- statsdir = get_datadir_fname("stats");
- if (check_private_dir(statsdir, CPD_CREATE) < 0)
- goto done;
- filename = get_datadir_fname2("stats", "dirreq-stats");
- data_v2 = geoip_get_client_history(GEOIP_CLIENT_NETWORKSTATUS_V2);
- data_v3 = geoip_get_client_history(GEOIP_CLIENT_NETWORKSTATUS);
- format_iso_time(written, now);
- out = start_writing_to_stdio_file(filename, OPEN_FLAGS_APPEND,
- 0600, &open_file);
- if (!out)
- goto done;
- if (fprintf(out, "dirreq-stats-end %s (%d s)\ndirreq-v3-ips %s\n"
- "dirreq-v2-ips %s\n", written,
- (unsigned) (now - start_of_dirreq_stats_interval),
- data_v3 ? data_v3 : "", data_v2 ? data_v2 : "") < 0)
- goto done;
- tor_free(data_v2);
- tor_free(data_v3);
+ format_iso_time(t, now);
+ v2_ips_string = geoip_get_client_history(GEOIP_CLIENT_NETWORKSTATUS_V2);
+ v3_ips_string = geoip_get_client_history(GEOIP_CLIENT_NETWORKSTATUS);
+ v2_reqs_string = geoip_get_request_history(
+ GEOIP_CLIENT_NETWORKSTATUS_V2);
+ v3_reqs_string = geoip_get_request_history(GEOIP_CLIENT_NETWORKSTATUS);
- data_v2 = geoip_get_request_history(GEOIP_CLIENT_NETWORKSTATUS_V2);
- data_v3 = geoip_get_request_history(GEOIP_CLIENT_NETWORKSTATUS);
- if (fprintf(out, "dirreq-v3-reqs %s\ndirreq-v2-reqs %s\n",
- data_v3 ? data_v3 : "", data_v2 ? data_v2 : "") < 0)
- goto done;
- tor_free(data_v2);
- tor_free(data_v3);
- SMARTLIST_FOREACH(geoip_countries, geoip_country_t *, c, {
- c->n_v2_ns_requests = c->n_v3_ns_requests = 0;
- });
#define RESPONSE_GRANULARITY 8
for (i = 0; i < GEOIP_NS_RESPONSE_NUM; i++) {
ns_v2_responses[i] = round_uint32_to_next_multiple_of(
@@ -1026,61 +1010,117 @@ geoip_dirreq_stats_write(time_t now)
ns_v3_responses[i], RESPONSE_GRANULARITY);
}
#undef RESPONSE_GRANULARITY
- if (fprintf(out, "dirreq-v3-resp ok=%u,not-enough-sigs=%u,unavailable=%u,"
- "not-found=%u,not-modified=%u,busy=%u\n",
- ns_v3_responses[GEOIP_SUCCESS],
- ns_v3_responses[GEOIP_REJECT_NOT_ENOUGH_SIGS],
- ns_v3_responses[GEOIP_REJECT_UNAVAILABLE],
- ns_v3_responses[GEOIP_REJECT_NOT_FOUND],
- ns_v3_responses[GEOIP_REJECT_NOT_MODIFIED],
- ns_v3_responses[GEOIP_REJECT_BUSY]) < 0)
- goto done;
- if (fprintf(out, "dirreq-v2-resp ok=%u,unavailable=%u,"
- "not-found=%u,not-modified=%u,busy=%u\n",
- ns_v2_responses[GEOIP_SUCCESS],
- ns_v2_responses[GEOIP_REJECT_UNAVAILABLE],
- ns_v2_responses[GEOIP_REJECT_NOT_FOUND],
- ns_v2_responses[GEOIP_REJECT_NOT_MODIFIED],
- ns_v2_responses[GEOIP_REJECT_BUSY]) < 0)
- goto done;
- memset(ns_v2_responses, 0, sizeof(ns_v2_responses));
- memset(ns_v3_responses, 0, sizeof(ns_v3_responses));
+
if (!geoip_get_mean_shares(now, &v2_share, &v3_share)) {
- if (fprintf(out, "dirreq-v2-share %0.2lf%%\n", v2_share*100) < 0)
- goto done;
- if (fprintf(out, "dirreq-v3-share %0.2lf%%\n", v3_share*100) < 0)
- goto done;
+ tor_asprintf(&v2_share_string, "dirreq-v2-share %0.2lf%%\n",
+ v2_share*100);
+ tor_asprintf(&v3_share_string, "dirreq-v3-share %0.2lf%%\n",
+ v3_share*100);
}
- data_v2 = geoip_get_dirreq_history(GEOIP_CLIENT_NETWORKSTATUS_V2,
- DIRREQ_DIRECT);
- data_v3 = geoip_get_dirreq_history(GEOIP_CLIENT_NETWORKSTATUS,
- DIRREQ_DIRECT);
- if (fprintf(out, "dirreq-v3-direct-dl %s\ndirreq-v2-direct-dl %s\n",
- data_v3 ? data_v3 : "", data_v2 ? data_v2 : "") < 0)
- goto done;
- tor_free(data_v2);
- tor_free(data_v3);
- data_v2 = geoip_get_dirreq_history(GEOIP_CLIENT_NETWORKSTATUS_V2,
- DIRREQ_TUNNELED);
- data_v3 = geoip_get_dirreq_history(GEOIP_CLIENT_NETWORKSTATUS,
- DIRREQ_TUNNELED);
- if (fprintf(out, "dirreq-v3-tunneled-dl %s\ndirreq-v2-tunneled-dl %s\n",
- data_v3 ? data_v3 : "", data_v2 ? data_v2 : "") < 0)
- goto done;
+ v2_direct_dl_string = geoip_get_dirreq_history(
+ GEOIP_CLIENT_NETWORKSTATUS_V2, DIRREQ_DIRECT);
+ v3_direct_dl_string = geoip_get_dirreq_history(
+ GEOIP_CLIENT_NETWORKSTATUS, DIRREQ_DIRECT);
+
+ v2_tunneled_dl_string = geoip_get_dirreq_history(
+ GEOIP_CLIENT_NETWORKSTATUS_V2, DIRREQ_TUNNELED);
+ v3_tunneled_dl_string = geoip_get_dirreq_history(
+ GEOIP_CLIENT_NETWORKSTATUS, DIRREQ_TUNNELED);
+
+ /* Put everything together into a single string. */
+ tor_asprintf(&result, "dirreq-stats-end %s (%d s)\n"
+ "dirreq-v3-ips %s\n"
+ "dirreq-v2-ips %s\n"
+ "dirreq-v3-reqs %s\n"
+ "dirreq-v2-reqs %s\n"
+ "dirreq-v3-resp ok=%u,not-enough-sigs=%u,unavailable=%u,"
+ "not-found=%u,not-modified=%u,busy=%u\n"
+ "dirreq-v2-resp ok=%u,unavailable=%u,"
+ "not-found=%u,not-modified=%u,busy=%u\n"
+ "%s"
+ "%s"
+ "dirreq-v3-direct-dl %s\n"
+ "dirreq-v2-direct-dl %s\n"
+ "dirreq-v3-tunneled-dl %s\n"
+ "dirreq-v2-tunneled-dl %s\n",
+ t,
+ (unsigned) (now - start_of_dirreq_stats_interval),
+ v3_ips_string ? v3_ips_string : "",
+ v2_ips_string ? v2_ips_string : "",
+ v3_reqs_string ? v3_reqs_string : "",
+ v2_reqs_string ? v2_reqs_string : "",
+ ns_v3_responses[GEOIP_SUCCESS],
+ ns_v3_responses[GEOIP_REJECT_NOT_ENOUGH_SIGS],
+ ns_v3_responses[GEOIP_REJECT_UNAVAILABLE],
+ ns_v3_responses[GEOIP_REJECT_NOT_FOUND],
+ ns_v3_responses[GEOIP_REJECT_NOT_MODIFIED],
+ ns_v3_responses[GEOIP_REJECT_BUSY],
+ ns_v2_responses[GEOIP_SUCCESS],
+ ns_v2_responses[GEOIP_REJECT_UNAVAILABLE],
+ ns_v2_responses[GEOIP_REJECT_NOT_FOUND],
+ ns_v2_responses[GEOIP_REJECT_NOT_MODIFIED],
+ ns_v2_responses[GEOIP_REJECT_BUSY],
+ v2_share_string ? v2_share_string : "",
+ v3_share_string ? v3_share_string : "",
+ v3_direct_dl_string ? v3_direct_dl_string : "",
+ v2_direct_dl_string ? v2_direct_dl_string : "",
+ v3_tunneled_dl_string ? v3_tunneled_dl_string : "",
+ v2_tunneled_dl_string ? v2_tunneled_dl_string : "");
+
+ /* Free partial strings. */
+ tor_free(v3_ips_string);
+ tor_free(v2_ips_string);
+ tor_free(v3_reqs_string);
+ tor_free(v2_reqs_string);
+ tor_free(v2_share_string);
+ tor_free(v3_share_string);
+ tor_free(v3_direct_dl_string);
+ tor_free(v2_direct_dl_string);
+ tor_free(v3_tunneled_dl_string);
+ tor_free(v2_tunneled_dl_string);
- finish_writing_to_file(open_file);
- open_file = NULL;
+ return result;
+}
- start_of_dirreq_stats_interval = now;
+/** If 24 hours have passed since the beginning of the current dirreq
+ * stats period, write dirreq stats to $DATADIR/stats/dirreq-stats
+ * (possibly overwriting an existing file) and reset counters. Return
+ * when we would next want to write dirreq stats or 0 if we never want to
+ * write. */
+time_t
+geoip_dirreq_stats_write(time_t now)
+{
+ char *statsdir = NULL, *filename = NULL, *str = NULL;
+
+ if (!start_of_dirreq_stats_interval)
+ return 0; /* Not initialized. */
+ if (start_of_dirreq_stats_interval + WRITE_STATS_INTERVAL > now)
+ goto done; /* Not ready to write. */
+
+ /* Discard all items in the client history that are too old. */
+ geoip_remove_old_clients(start_of_dirreq_stats_interval);
+
+ /* Generate history string .*/
+ str = geoip_format_dirreq_stats(now);
+
+ /* Write dirreq-stats string to disk. */
+ statsdir = get_datadir_fname("stats");
+ if (check_private_dir(statsdir, CPD_CREATE, get_options()->User) < 0) {
+ log_warn(LD_HIST, "Unable to create stats/ directory!");
+ goto done;
+ }
+ filename = get_datadir_fname2("stats", "dirreq-stats");
+ if (write_str_to_file(filename, str, 0) < 0)
+ log_warn(LD_HIST, "Unable to write dirreq statistics to disk!");
+
+ /* Reset measurement interval start. */
+ geoip_reset_dirreq_stats(now);
done:
- if (open_file)
- abort_writing_to_file(open_file);
- tor_free(filename);
tor_free(statsdir);
- tor_free(data_v2);
- tor_free(data_v3);
+ tor_free(filename);
+ tor_free(str);
return start_of_dirreq_stats_interval + WRITE_STATS_INTERVAL;
}
@@ -1160,8 +1200,8 @@ static char *bridge_stats_extrainfo = NULL;
/** Return a newly allocated string holding our bridge usage stats by country
* in a format suitable for inclusion in an extrainfo document. Return NULL on
* failure. */
-static char *
-format_bridge_stats_extrainfo(time_t now)
+char *
+geoip_format_bridge_stats(time_t now)
{
char *out = NULL, *data = NULL;
long duration = now - start_of_bridge_stats_interval;
@@ -1169,6 +1209,8 @@ format_bridge_stats_extrainfo(time_t now)
if (duration < 0)
return NULL;
+ if (!start_of_bridge_stats_interval)
+ return NULL; /* Not initialized. */
format_iso_time(written, now);
data = geoip_get_client_history(GEOIP_CLIENT_CONNECT);
@@ -1218,7 +1260,7 @@ geoip_bridge_stats_write(time_t now)
geoip_remove_old_clients(start_of_bridge_stats_interval);
/* Generate formatted string */
- val = format_bridge_stats_extrainfo(now);
+ val = geoip_format_bridge_stats(now);
if (val == NULL)
goto done;
@@ -1229,7 +1271,7 @@ geoip_bridge_stats_write(time_t now)
/* Write it to disk. */
statsdir = get_datadir_fname("stats");
- if (check_private_dir(statsdir, CPD_CREATE) < 0)
+ if (check_private_dir(statsdir, CPD_CREATE, get_options()->User) < 0)
goto done;
filename = get_datadir_fname2("stats", "bridge-stats");
@@ -1295,25 +1337,54 @@ geoip_entry_stats_init(time_t now)
start_of_entry_stats_interval = now;
}
+/** Reset counters for entry stats. */
+void
+geoip_reset_entry_stats(time_t now)
+{
+ client_history_clear();
+ start_of_entry_stats_interval = now;
+}
+
/** Stop collecting entry stats in a way that we can re-start doing so in
* geoip_entry_stats_init(). */
void
geoip_entry_stats_term(void)
{
- client_history_clear();
- start_of_entry_stats_interval = 0;
+ geoip_reset_entry_stats(0);
+}
+
+/** Return a newly allocated string containing the entry statistics
+ * 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)
+{
+ char t[ISO_TIME_LEN+1];
+ char *data = NULL;
+ char *result;
+
+ 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",
+ t, (unsigned) (now - start_of_entry_stats_interval),
+ data ? data : "");
+ tor_free(data);
+ return result;
}
-/** Write entry statistics to $DATADIR/stats/entry-stats and return time
- * when we would next want to write. */
+/** If 24 hours have passed since the beginning of the current entry stats
+ * period, write entry stats to $DATADIR/stats/entry-stats (possibly
+ * overwriting an existing file) and reset counters. Return when we would
+ * next want to write entry stats or 0 if we never want to write. */
time_t
geoip_entry_stats_write(time_t now)
{
- char *statsdir = NULL, *filename = NULL;
- char *data = NULL;
- char written[ISO_TIME_LEN+1];
- open_file_t *open_file = NULL;
- FILE *out;
+ char *statsdir = NULL, *filename = NULL, *str = NULL;
if (!start_of_entry_stats_interval)
return 0; /* Not initialized. */
@@ -1323,31 +1394,26 @@ geoip_entry_stats_write(time_t now)
/* Discard all items in the client history that are too old. */
geoip_remove_old_clients(start_of_entry_stats_interval);
+ /* Generate history string .*/
+ str = geoip_format_entry_stats(now);
+
+ /* Write entry-stats string to disk. */
statsdir = get_datadir_fname("stats");
- if (check_private_dir(statsdir, CPD_CREATE) < 0)
+ if (check_private_dir(statsdir, CPD_CREATE, get_options()->User) < 0) {
+ log_warn(LD_HIST, "Unable to create stats/ directory!");
goto done;
+ }
filename = get_datadir_fname2("stats", "entry-stats");
- data = geoip_get_client_history(GEOIP_CLIENT_CONNECT);
- format_iso_time(written, now);
- out = start_writing_to_stdio_file(filename, OPEN_FLAGS_APPEND,
- 0600, &open_file);
- if (!out)
- goto done;
- if (fprintf(out, "entry-stats-end %s (%u s)\nentry-ips %s\n",
- written, (unsigned) (now - start_of_entry_stats_interval),
- data ? data : "") < 0)
- goto done;
+ if (write_str_to_file(filename, str, 0) < 0)
+ log_warn(LD_HIST, "Unable to write entry statistics to disk!");
- start_of_entry_stats_interval = now;
+ /* Reset measurement interval start. */
+ geoip_reset_entry_stats(now);
- finish_writing_to_file(open_file);
- open_file = NULL;
done:
- if (open_file)
- abort_writing_to_file(open_file);
- tor_free(filename);
tor_free(statsdir);
- tor_free(data);
+ tor_free(filename);
+ tor_free(str);
return start_of_entry_stats_interval + WRITE_STATS_INTERVAL;
}
diff --git a/src/or/geoip.h b/src/or/geoip.h
index 02228eab3..ce3841967 100644
--- a/src/or/geoip.h
+++ b/src/or/geoip.h
@@ -15,8 +15,8 @@
#ifdef GEOIP_PRIVATE
int geoip_parse_entry(const char *line);
#endif
-int should_record_bridge_info(or_options_t *options);
-int geoip_load_file(const char *filename, or_options_t *options);
+int should_record_bridge_info(const or_options_t *options);
+int geoip_load_file(const char *filename, const or_options_t *options);
int geoip_get_country_by_ip(uint32_t ipaddr);
int geoip_get_n_countries(void);
const char *geoip_get_country_name(country_t num);
@@ -43,12 +43,17 @@ void geoip_change_dirreq_state(uint64_t dirreq_id, dirreq_type_t type,
dirreq_state_t new_state);
void geoip_dirreq_stats_init(time_t now);
+void geoip_reset_dirreq_stats(time_t now);
+char *geoip_format_dirreq_stats(time_t now);
time_t geoip_dirreq_stats_write(time_t now);
void geoip_dirreq_stats_term(void);
void geoip_entry_stats_init(time_t now);
time_t geoip_entry_stats_write(time_t now);
void geoip_entry_stats_term(void);
+void geoip_reset_entry_stats(time_t now);
+char *geoip_format_entry_stats(time_t now);
void geoip_bridge_stats_init(time_t now);
+char *geoip_format_bridge_stats(time_t now);
time_t geoip_bridge_stats_write(time_t now);
void geoip_bridge_stats_term(void);
const char *geoip_get_bridge_stats_extrainfo(time_t);
diff --git a/src/or/hibernate.c b/src/or/hibernate.c
index aebce4cc8..6fd2b4f19 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;
@@ -134,7 +120,7 @@ static void accounting_set_wakeup_time(void);
* options->AccountingStart. Return 0 on success, -1 on failure. If
* <b>validate_only</b> is true, do not change the current settings. */
int
-accounting_parse_options(or_options_t *options, int validate_only)
+accounting_parse_options(const or_options_t *options, int validate_only)
{
time_unit_t unit;
int ok, idx;
@@ -249,7 +235,7 @@ accounting_parse_options(or_options_t *options, int validate_only)
* hibernate, return 1, else return 0.
*/
int
-accounting_is_enabled(or_options_t *options)
+accounting_is_enabled(const or_options_t *options)
{
if (options->AccountingMax)
return 1;
@@ -411,7 +397,7 @@ static void
update_expected_bandwidth(void)
{
uint64_t expected;
- or_options_t *options= get_options();
+ const or_options_t *options= get_options();
uint64_t max_configured = (options->RelayBandwidthRate > 0 ?
options->RelayBandwidthRate :
options->BandwidthRate) * 60;
@@ -750,7 +736,7 @@ static void
hibernate_begin(hibernate_state_t new_state, time_t now)
{
connection_t *conn;
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
if (new_state == HIBERNATE_STATE_EXITING &&
hibernate_state != HIBERNATE_STATE_LIVE) {
@@ -804,10 +790,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 */
@@ -856,7 +844,7 @@ hibernate_go_dormant(time_t now)
connection_edge_end(TO_EDGE_CONN(conn), END_STREAM_REASON_HIBERNATING);
log_info(LD_NET,"Closing conn type %d", conn->type);
if (conn->type == CONN_TYPE_AP) /* send socks failure if needed */
- connection_mark_unattached_ap(TO_EDGE_CONN(conn),
+ connection_mark_unattached_ap(TO_ENTRY_CONN(conn),
END_STREAM_REASON_HIBERNATING);
else
connection_mark_for_close(conn);
@@ -939,11 +927,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 +940,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 +1008,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 2aea0fab0..78e7bb75e 100644
--- a/src/or/hibernate.h
+++ b/src/or/hibernate.h
@@ -12,8 +12,8 @@
#ifndef _TOR_HIBERNATE_H
#define _TOR_HIBERNATE_H
-int accounting_parse_options(or_options_t *options, int validate_only);
-int accounting_is_enabled(or_options_t *options);
+int accounting_parse_options(const or_options_t *options, int validate_only);
+int accounting_is_enabled(const or_options_t *options);
void configure_accounting(time_t now);
void accounting_run_housekeeping(time_t now);
void accounting_add_bytes(size_t n_read, size_t n_written, int seconds);
@@ -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 93fe2fd6c..10b80a4dd 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"
@@ -68,8 +69,8 @@ void evdns_shutdown(int);
static void dumpmemusage(int severity);
static void dumpstats(int severity); /* log stats */
-static void conn_read_callback(int fd, short event, void *_conn);
-static void conn_write_callback(int fd, short event, void *_conn);
+static void conn_read_callback(evutil_socket_t fd, short event, void *_conn);
+static void conn_write_callback(evutil_socket_t fd, short event, void *_conn);
static void second_elapsed_callback(periodic_timer_t *timer, void *args);
static int conn_close_if_marked(int i);
static void connection_start_reading_from_linked_conn(connection_t *conn);
@@ -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? */
@@ -114,6 +115,8 @@ static time_t time_to_check_for_correct_dns = 0;
static time_t time_of_last_signewnym = 0;
/** Is there a signewnym request we're currently waiting to handle? */
static int signewnym_is_pending = 0;
+/** How many times have we called newnym? */
+static unsigned newnym_epoch = 0;
/** Smartlist of all open connections. */
static smartlist_t *connection_array = NULL;
@@ -152,6 +155,12 @@ int can_complete_circuit=0;
* they are obsolete? */
#define TLS_HANDSHAKE_TIMEOUT (60)
+/** Decides our behavior when no logs are configured/before any
+ * logs have been configured. For 0, we log notice to stdout as normal.
+ * For 1, we log warnings only. For 2, we log nothing.
+ */
+int quiet_level = 0;
+
/********* END VARIABLES ************/
/****************************************************************************
@@ -187,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.
@@ -195,7 +224,7 @@ int
connection_add_impl(connection_t *conn, int is_connecting)
{
tor_assert(conn);
- tor_assert(conn->s >= 0 ||
+ tor_assert(SOCKET_OK(conn->s) ||
conn->linked ||
(conn->type == CONN_TYPE_AP &&
TO_EDGE_CONN(conn)->is_dns_request));
@@ -206,7 +235,15 @@ connection_add_impl(connection_t *conn, int is_connecting)
#ifdef USE_BUFFEREVENTS
if (connection_type_uses_bufferevent(conn)) {
- if (conn->s >= 0 && !conn->linked) {
+ 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,
@@ -225,7 +262,7 @@ connection_add_impl(connection_t *conn, int is_connecting)
connection_configure_bufferevent_callbacks(conn);
} else if (conn->linked && conn->linked_conn &&
connection_type_uses_bufferevent(conn->linked_conn)) {
- tor_assert(conn->s < 0);
+ tor_assert(!(SOCKET_OK(conn->s)));
if (!conn->bufev) {
struct bufferevent *pair[2] = { NULL, NULL };
if (bufferevent_pair_new(tor_libevent_get_base(),
@@ -255,7 +292,7 @@ connection_add_impl(connection_t *conn, int is_connecting)
(void) is_connecting;
#endif
- if (!HAS_BUFFEREVENT(conn) && (conn->s >= 0 || conn->linked)) {
+ if (!HAS_BUFFEREVENT(conn) && (SOCKET_OK(conn->s) || conn->linked)) {
conn->read_event = tor_event_new(tor_libevent_get_base(),
conn->s, EV_READ|EV_PERSIST, conn_read_callback, conn);
conn->write_event = tor_event_new(tor_libevent_get_base(),
@@ -264,7 +301,7 @@ connection_add_impl(connection_t *conn, int is_connecting)
}
log_debug(LD_NET,"new conn type %s, socket %d, address %s, n_conns %d.",
- conn_type_to_string(conn->type), conn->s, conn->address,
+ conn_type_to_string(conn->type), (int)conn->s, conn->address,
smartlist_len(connection_array));
return 0;
@@ -276,12 +313,12 @@ connection_unregister_events(connection_t *conn)
{
if (conn->read_event) {
if (event_del(conn->read_event))
- log_warn(LD_BUG, "Error removing read event for %d", conn->s);
+ log_warn(LD_BUG, "Error removing read event for %d", (int)conn->s);
tor_free(conn->read_event);
}
if (conn->write_event) {
if (event_del(conn->write_event))
- log_warn(LD_BUG, "Error removing write event for %d", conn->s);
+ log_warn(LD_BUG, "Error removing write event for %d", (int)conn->s);
tor_free(conn->write_event);
}
#ifdef USE_BUFFEREVENTS
@@ -290,7 +327,7 @@ connection_unregister_events(connection_t *conn)
conn->bufev = NULL;
}
#endif
- if (conn->dns_server_port) {
+ if (conn->type == CONN_TYPE_AP_DNS_LISTENER) {
dnsserv_close_listener(conn);
}
}
@@ -308,7 +345,7 @@ connection_remove(connection_t *conn)
tor_assert(conn);
log_debug(LD_NET,"removing socket %d (type %s), n_conns now %d",
- conn->s, conn_type_to_string(conn->type),
+ (int)conn->s, conn_type_to_string(conn->type),
smartlist_len(connection_array));
tor_assert(conn->conn_array_index >= 0);
@@ -473,7 +510,7 @@ connection_stop_reading(connection_t *conn)
if (event_del(conn->read_event))
log_warn(LD_NET, "Error from libevent setting read event state for %d "
"to unwatched: %s",
- conn->s,
+ (int)conn->s,
tor_socket_strerror(tor_socket_errno(conn->s)));
}
}
@@ -499,7 +536,7 @@ connection_start_reading(connection_t *conn)
if (event_add(conn->read_event, NULL))
log_warn(LD_NET, "Error from libevent setting read event state for %d "
"to watched: %s",
- conn->s,
+ (int)conn->s,
tor_socket_strerror(tor_socket_errno(conn->s)));
}
}
@@ -539,7 +576,7 @@ connection_stop_writing(connection_t *conn)
if (event_del(conn->write_event))
log_warn(LD_NET, "Error from libevent setting write event state for %d "
"to unwatched: %s",
- conn->s,
+ (int)conn->s,
tor_socket_strerror(tor_socket_errno(conn->s)));
}
}
@@ -566,7 +603,7 @@ connection_start_writing(connection_t *conn)
if (event_add(conn->write_event, NULL))
log_warn(LD_NET, "Error from libevent setting write event state for %d "
"to watched: %s",
- conn->s,
+ (int)conn->s,
tor_socket_strerror(tor_socket_errno(conn->s)));
}
}
@@ -652,13 +689,13 @@ close_closeable_connections(void)
/** Libevent callback: this gets invoked when (connection_t*)<b>conn</b> has
* some data to read. */
static void
-conn_read_callback(int fd, short event, void *_conn)
+conn_read_callback(evutil_socket_t fd, short event, void *_conn)
{
connection_t *conn = _conn;
(void)fd;
(void)event;
- log_debug(LD_NET,"socket %d wants to read.",conn->s);
+ log_debug(LD_NET,"socket %d wants to read.",(int)conn->s);
/* assert_connection_ok(conn, time(NULL)); */
@@ -667,7 +704,7 @@ conn_read_callback(int fd, short event, void *_conn)
#ifndef MS_WINDOWS
log_warn(LD_BUG,"Unhandled error on read for %s connection "
"(fd %d); removing",
- conn_type_to_string(conn->type), conn->s);
+ conn_type_to_string(conn->type), (int)conn->s);
tor_fragile_assert();
#endif
if (CONN_IS_EDGE(conn))
@@ -684,13 +721,14 @@ conn_read_callback(int fd, short event, void *_conn)
/** Libevent callback: this gets invoked when (connection_t*)<b>conn</b> has
* some data to write. */
static void
-conn_write_callback(int fd, short events, void *_conn)
+conn_write_callback(evutil_socket_t fd, short events, void *_conn)
{
connection_t *conn = _conn;
(void)fd;
(void)events;
- LOG_FN_CONN(conn, (LOG_DEBUG, LD_NET, "socket %d wants to write.",conn->s));
+ LOG_FN_CONN(conn, (LOG_DEBUG, LD_NET, "socket %d wants to write.",
+ (int)conn->s));
/* assert_connection_ok(conn, time(NULL)); */
@@ -699,7 +737,7 @@ conn_write_callback(int fd, short events, void *_conn)
/* this connection is broken. remove it. */
log_fn(LOG_WARN,LD_BUG,
"unhandled error on write for %s connection (fd %d); removing",
- conn_type_to_string(conn->type), conn->s);
+ conn_type_to_string(conn->type), (int)conn->s);
tor_fragile_assert();
if (CONN_IS_EDGE(conn)) {
/* otherwise we cry wolf about duplicate close */
@@ -756,8 +794,16 @@ conn_close_if_marked(int i)
#endif
log_debug(LD_NET,"Cleaning up connection (fd %d).",conn->s);
+
+ /* If the connection we are about to close was trying to connect to
+ a proxy server and failed, the client won't be able to use that
+ proxy. We should warn the user about this. */
+ if (conn->proxy_state == PROXY_INFANT)
+ log_failed_proxy_connection(conn);
+
IF_HAS_BUFFEREVENT(conn, goto unlink);
- if ((conn->s >= 0 || conn->linked_conn) && connection_wants_to_flush(conn)) {
+ if ((SOCKET_OK(conn->s) || conn->linked_conn) &&
+ connection_wants_to_flush(conn)) {
/* s == -1 means it's an incomplete edge connection, or that the socket
* has already been closed as unflushable. */
ssize_t sz = connection_bucket_write_limit(conn, now);
@@ -766,7 +812,7 @@ conn_close_if_marked(int i)
"Conn (addr %s, fd %d, type %s, state %d) marked, but wants "
"to flush %d bytes. (Marked at %s:%d)",
escaped_safe_str_client(conn->address),
- conn->s, conn_type_to_string(conn->type), conn->state,
+ (int)conn->s, conn_type_to_string(conn->type), conn->state,
(int)conn->outbuf_flushlen,
conn->marked_for_close_file, conn->marked_for_close);
if (conn->linked_conn) {
@@ -797,7 +843,7 @@ conn_close_if_marked(int i)
if (retval > 0) {
LOG_FN_CONN(conn, (LOG_INFO,LD_NET,
"Holding conn (fd %d) open for more flushing.",
- conn->s));
+ (int)conn->s));
conn->timestamp_lastwritten = now; /* reset so we can flush more */
}
return 0;
@@ -819,7 +865,7 @@ conn_close_if_marked(int i)
"(fd %d, type %s, state %d, marked at %s:%d).",
(int)connection_get_outbuf_len(conn),
escaped_safe_str_client(conn->address),
- conn->s, conn_type_to_string(conn->type), conn->state,
+ (int)conn->s, conn_type_to_string(conn->type), conn->state,
conn->marked_for_close_file,
conn->marked_for_close);
}
@@ -848,13 +894,13 @@ directory_all_unreachable(time_t now)
while ((conn = connection_get_by_type_state(CONN_TYPE_AP,
AP_CONN_STATE_CIRCUIT_WAIT))) {
- edge_connection_t *edge_conn = TO_EDGE_CONN(conn);
+ entry_connection_t *entry_conn = TO_ENTRY_CONN(conn);
log_notice(LD_NET,
"Is your network connection down? "
"Failing connection to '%s:%d'.",
- safe_str_client(edge_conn->socks_request->address),
- edge_conn->socks_request->port);
- connection_mark_unattached_ap(edge_conn,
+ safe_str_client(entry_conn->socks_request->address),
+ entry_conn->socks_request->port);
+ connection_mark_unattached_ap(entry_conn,
END_STREAM_REASON_NET_UNREACHABLE);
}
control_event_general_status(LOG_ERR, "DIR_ALL_UNREACHABLE");
@@ -865,7 +911,7 @@ directory_all_unreachable(time_t now)
void
directory_info_has_arrived(time_t now, int from_cache)
{
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
if (!router_have_minimum_dir_info()) {
int quiet = directory_too_idle_to_fetch_descriptors(options, now);
@@ -910,7 +956,7 @@ run_connection_housekeeping(int i, time_t now)
{
cell_t cell;
connection_t *conn = smartlist_get(connection_array, i);
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
or_connection_t *or_conn;
int past_keepalive =
now >= conn->timestamp_lastwritten + options->KeepalivePeriod;
@@ -932,7 +978,7 @@ run_connection_housekeeping(int i, time_t now)
(!DIR_CONN_IS_SERVER(conn) &&
conn->timestamp_lastread + DIR_CONN_MAX_STALL < now))) {
log_info(LD_DIR,"Expiring wedged directory conn (fd %d, purpose %d)",
- conn->s, conn->purpose);
+ (int)conn->s, conn->purpose);
/* This check is temporary; it's to let us know whether we should consider
* parsing partial serverdesc responses. */
if (conn->purpose == DIR_PURPOSE_FETCH_SERVERDESC &&
@@ -964,7 +1010,7 @@ run_connection_housekeeping(int i, time_t now)
* mark it now. */
log_info(LD_OR,
"Expiring non-used OR connection to fd %d (%s:%d) [Too old].",
- conn->s, conn->address, conn->port);
+ (int)conn->s, conn->address, conn->port);
if (conn->state == OR_CONN_STATE_CONNECTING)
connection_or_connect_failed(TO_OR_CONN(conn),
END_OR_CONN_REASON_TIMEOUT,
@@ -974,7 +1020,7 @@ run_connection_housekeeping(int i, time_t now)
if (past_keepalive) {
/* We never managed to actually get this connection open and happy. */
log_info(LD_OR,"Expiring non-open OR connection to fd %d (%s:%d).",
- conn->s,conn->address, conn->port);
+ (int)conn->s,conn->address, conn->port);
connection_mark_for_close(conn);
}
} else if (we_are_hibernating() && !or_conn->n_circuits &&
@@ -982,13 +1028,13 @@ run_connection_housekeeping(int i, time_t now)
/* We're hibernating, there's no circuits, and nothing to flush.*/
log_info(LD_OR,"Expiring non-used OR connection to fd %d (%s:%d) "
"[Hibernating or exiting].",
- conn->s,conn->address, conn->port);
+ (int)conn->s,conn->address, conn->port);
connection_mark_and_flush(conn);
} else if (!or_conn->n_circuits &&
now >= or_conn->timestamp_last_added_nonpadding +
IDLE_OR_CONN_TIMEOUT) {
log_info(LD_OR,"Expiring non-used OR connection to fd %d (%s:%d) "
- "[idle %d].", conn->s,conn->address, conn->port,
+ "[idle %d].", (int)conn->s,conn->address, conn->port,
(int)(now - or_conn->timestamp_last_added_nonpadding));
connection_mark_for_close(conn);
} else if (
@@ -997,7 +1043,7 @@ run_connection_housekeeping(int i, time_t now)
log_fn(LOG_PROTOCOL_WARN,LD_PROTOCOL,
"Expiring stuck OR connection to fd %d (%s:%d). (%d bytes to "
"flush; %d seconds since last write)",
- conn->s, conn->address, conn->port,
+ (int)conn->s, conn->address, conn->port,
(int)connection_get_outbuf_len(conn),
(int)(now-conn->timestamp_lastwritten));
connection_mark_for_close(conn);
@@ -1016,7 +1062,7 @@ run_connection_housekeeping(int i, time_t now)
static void
signewnym_impl(time_t now)
{
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
if (!proxy_mode(options)) {
log_info(LD_CONTROL, "Ignoring SIGNAL NEWNYM because client functionality "
"is disabled.");
@@ -1025,10 +1071,20 @@ signewnym_impl(time_t now)
circuit_expire_all_dirty_circs();
addressmap_clear_transient();
- rend_cache_purge();
- rend_client_cancel_descriptor_fetches();
+ rend_client_purge_state();
time_of_last_signewnym = now;
signewnym_is_pending = 0;
+
+ ++newnym_epoch;
+
+ control_event_signal(SIGNEWNYM);
+}
+
+/** Return the number of times that signewnym has been called. */
+unsigned
+get_signewnym_epoch(void)
+{
+ return newnym_epoch;
}
/** Perform regular maintenance tasks. This function gets run once per
@@ -1059,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;
- or_options_t *options = get_options();
+ 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;
@@ -1125,15 +1183,16 @@ 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) {
+ MAX_SSL_KEY_LIFETIME_ADVERTISED) < 0) {
log_warn(LD_BUG, "Error reinitializing TLS context");
/* XXX is it a bug here, that we just keep going? -RD */
}
@@ -1237,6 +1296,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;
}
@@ -1299,11 +1363,7 @@ run_scheduled_events(time_t now)
time_to_check_ipaddress = now + CHECK_IPADDRESS_INTERVAL;
check_descriptor_ipaddress_changed(now);
}
-/** If our router descriptor ever goes this long without being regenerated
- * because something changed, we force an immediate regenerate-and-upload. */
-#define FORCE_REGENERATE_DESCRIPTOR_INTERVAL (18*60*60)
- mark_my_descriptor_dirty_if_older_than(
- now - FORCE_REGENERATE_DESCRIPTOR_INTERVAL);
+ mark_my_descriptor_dirty_if_too_old(now);
consider_publishable_server(0);
/* also, check religiously for reachability, if it's within the first
* 20 minutes of our uptime. */
@@ -1352,7 +1412,10 @@ run_scheduled_events(time_t now)
* it's not comfortable with the number of available circuits.
*/
/* XXXX022 If our circuit build timeout is much lower than a second, maybe
- we should do this more often? */
+ * we should do this more often? -NM
+ * It can't be lower than 1.5 seconds currently; see
+ * circuit_build_times_min_timeout(). -RD
+ */
circuit_expire_building();
/** 3b. Also look at pending streams and prune the ones that 'began'
@@ -1426,7 +1489,7 @@ 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 (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 {
@@ -1436,7 +1499,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);
@@ -1444,6 +1507,7 @@ run_scheduled_events(time_t now)
time_to_write_bridge_status_file = now+BRIDGE_STATUSFILE_INTERVAL;
}
+ /** 11. check the port forwarding app */
if (time_to_check_port_forwarding < now &&
options->PortForwarding &&
is_server) {
@@ -1455,7 +1519,19 @@ run_scheduled_events(time_t now)
time_to_check_port_forwarding = now+PORT_FORWARDING_CHECK_INTERVAL;
}
- /** 11. write the heartbeat message */
+ /** 11b. check pending unconfigured managed proxies */
+ if (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);
@@ -1480,10 +1556,7 @@ 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
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
(void)timer;
(void)arg;
@@ -1496,30 +1569,28 @@ 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() &&
seconds_elapsed > 0 &&
@@ -1567,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
@@ -1595,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) {
@@ -1626,7 +1749,7 @@ dns_servers_relaunch_checks(void)
static int
do_hup(void)
{
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
#ifdef USE_DMALLOC
dmalloc_log_stats();
@@ -1764,6 +1887,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;
@@ -1883,7 +2022,6 @@ process_signal(uintptr_t sig)
(int)(MAX_SIGNEWNYM_RATE+time_of_last_signewnym-now));
} else {
signewnym_impl(now);
- control_event_signal(sig);
}
break;
}
@@ -1936,7 +2074,7 @@ dumpstats(int severity)
int i = conn_sl_idx;
log(severity, LD_GENERAL,
"Conn %d (socket %d) type %d (%s), state %d (%s), created %d secs ago",
- i, conn->s, conn->type, conn_type_to_string(conn->type),
+ i, (int)conn->s, conn->type, conn_type_to_string(conn->type),
conn->state, conn_state_to_string(conn->type, conn->state),
(int)(now - conn->timestamp_created));
if (!connection_is_listener(conn)) {
@@ -2125,10 +2263,26 @@ tor_init(int argc, char *argv[])
default:
add_temp_log(LOG_NOTICE);
}
+ quiet_level = quiet;
- log(LOG_NOTICE, LD_GENERAL, "Tor v%s. This is experimental software. "
- "Do not rely on it for strong anonymity. (Running on %s)",get_version(),
- get_uname());
+ {
+ const char *version = get_version();
+ log_notice(LD_GENERAL, "Tor v%s%s running on %s.", version,
+#ifdef USE_BUFFEREVENTS
+ " (with bufferevents)",
+#else
+ "",
+#endif
+ 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.");
@@ -2168,7 +2322,7 @@ static tor_lockfile_t *lockfile = NULL;
* return -1 if we can't get the lockfile. Return 0 on success.
*/
int
-try_locking(or_options_t *options, int err_if_locked)
+try_locking(const or_options_t *options, int err_if_locked)
{
if (lockfile)
return 0;
@@ -2247,6 +2401,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();
@@ -2282,7 +2437,7 @@ tor_free_all(int postfork)
void
tor_cleanup(void)
{
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
if (options->command == CMD_RUN_TOR) {
time_t now = time(NULL);
/* Remove our pid file. We don't care if there was an error when we
diff --git a/src/or/main.h b/src/or/main.h
index db97cf1c4..c8903642d 100644
--- a/src/or/main.h
+++ b/src/or/main.h
@@ -52,11 +52,12 @@ void ip_address_changed(int at_interface);
void dns_servers_relaunch_checks(void);
long get_uptime(void);
+unsigned get_signewnym_epoch(void);
void handle_signals(int is_parent);
void process_signal(uintptr_t sig);
-int try_locking(or_options_t *options, int err_if_locked);
+int try_locking(const or_options_t *options, int err_if_locked);
int have_lockfile(void);
void release_lockfile(void);
diff --git a/src/or/microdesc.c b/src/or/microdesc.c
index 7ebb1e14f..92f5c0358 100644
--- a/src/or/microdesc.c
+++ b/src/or/microdesc.c
@@ -238,6 +238,7 @@ microdescs_add_list_to_cache(microdesc_cache_t *cache,
md->no_save = no_save;
HT_INSERT(microdesc_map, &cache->map, md);
+ md->held_in_map = 1;
smartlist_add(added, md);
++cache->n_seen;
cache->total_len_seen += md->bodylen;
@@ -266,6 +267,7 @@ microdesc_cache_clear(microdesc_cache_t *cache)
for (entry = HT_START(microdesc_map, &cache->map); entry; entry = next) {
microdesc_t *md = *entry;
next = HT_NEXT_RMV(microdesc_map, &cache->map, entry);
+ md->held_in_map = 0;
microdesc_free(md);
}
HT_CLEAR(microdesc_map, &cache->map);
@@ -354,6 +356,7 @@ microdesc_cache_clean(microdesc_cache_t *cache, time_t cutoff, int force)
++dropped;
victim = *mdp;
mdp = HT_NEXT_RMV(microdesc_map, &cache->map, mdp);
+ victim->held_in_map = 0;
bytes_dropped += victim->bodylen;
microdesc_free(victim);
} else {
@@ -496,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
@@ -503,7 +528,43 @@ microdesc_free(microdesc_t *md)
{
if (!md)
return;
- /* Must be removed from hash table! */
+
+ /* Make sure that the microdesc was really removed from the appropriate data
+ structures. */
+ if (md->held_in_map) {
+ microdesc_cache_t *cache = get_microdesc_cache();
+ microdesc_t *md2 = HT_FIND(microdesc_map, &cache->map, md);
+ if (md2 == md) {
+ log_warn(LD_BUG, "microdesc_free() called, but md was still in "
+ "microdesc_map");
+ HT_REMOVE(microdesc_map, &cache->map, md);
+ } else {
+ log_warn(LD_BUG, "microdesc_free() called with held_in_map set, but "
+ "microdesc was not in the map.");
+ }
+ tor_fragile_assert();
+ }
+ if (md->held_by_nodes) {
+ int found=0;
+ const smartlist_t *nodes = nodelist_get_list();
+ SMARTLIST_FOREACH(nodes, node_t *, node, {
+ if (node->md == md) {
+ ++found;
+ node->md = NULL;
+ }
+ });
+ if (found) {
+ log_warn(LD_BUG, "microdesc_free() called, but md was still referenced "
+ "%d node(s); held_by_nodes == %u", found, md->held_by_nodes);
+ } else {
+ log_warn(LD_BUG, "microdesc_free() called with held_by_nodes set to %u, "
+ "but md was not referenced by any nodes", md->held_by_nodes);
+ }
+ tor_fragile_assert();
+ }
+ //tor_assert(md->held_in_map == 0);
+ //tor_assert(md->held_by_nodes == 0);
+
if (md->onion_pkey)
crypto_free_pk_env(md->onion_pkey);
if (md->body && md->saved_location != SAVED_IN_CACHE)
@@ -595,7 +656,7 @@ microdesc_list_missing_digest256(networkstatus_t *ns, microdesc_cache_t *cache,
void
update_microdesc_downloads(time_t now)
{
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
networkstatus_t *consensus;
smartlist_t *missing;
digestmap_t *pending;
@@ -654,38 +715,37 @@ update_microdescs_from_networkstatus(time_t now)
/** Return true iff we should prefer to use microdescriptors rather than
* routerdescs for building circuits. */
int
-we_use_microdescriptors_for_circuits(or_options_t *options)
+we_use_microdescriptors_for_circuits(const or_options_t *options)
{
int ret = options->UseMicrodescriptors;
if (ret == -1) {
/* UseMicrodescriptors is "auto"; we need to decide: */
-#if 0
- /* So we decide that we'll use microdescriptors iff we are not a server */
- ret = ! server_mode(options);
-#else
- /* We don't use microdescs for now: not enough caches are running
- * 0.2.3.1-alpha */
- ret = 0;
-#endif
+ /* So we decide that we'll use microdescriptors iff we are not a server,
+ * and we're not autofetching everything. */
+ ret = !server_mode(options) && !options->FetchUselessDescriptors;
}
return ret;
}
/** Return true iff we should try to download microdescriptors at all. */
int
-we_fetch_microdescriptors(or_options_t *options)
+we_fetch_microdescriptors(const or_options_t *options)
{
if (directory_caches_dir_info(options))
return 1;
+ if (options->FetchUselessDescriptors)
+ return 1;
return we_use_microdescriptors_for_circuits(options);
}
/** Return true iff we should try to download router descriptors at all. */
int
-we_fetch_router_descriptors(or_options_t *options)
+we_fetch_router_descriptors(const or_options_t *options)
{
if (directory_caches_dir_info(options))
return 1;
+ if (options->FetchUselessDescriptors)
+ return 1;
return ! we_use_microdescriptors_for_circuits(options);
}
diff --git a/src/or/microdesc.h b/src/or/microdesc.h
index 94b1ff6f8..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,
@@ -44,9 +46,9 @@ void update_microdesc_downloads(time_t now);
void update_microdescs_from_networkstatus(time_t now);
int usable_consensus_flavor(void);
-int we_fetch_microdescriptors(or_options_t *options);
-int we_fetch_router_descriptors(or_options_t *options);
-int we_use_microdescriptors_for_circuits(or_options_t *options);
+int we_fetch_microdescriptors(const or_options_t *options);
+int we_fetch_router_descriptors(const or_options_t *options);
+int we_use_microdescriptors_for_circuits(const or_options_t *options);
#endif
diff --git a/src/or/networkstatus.c b/src/or/networkstatus.c
index 837c8c2bf..7cd9d02c3 100644
--- a/src/or/networkstatus.c
+++ b/src/or/networkstatus.c
@@ -213,7 +213,7 @@ router_reload_consensus_networkstatus(void)
char *filename;
char *s;
struct stat st;
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
const unsigned int flags = NSSET_FROM_CACHE | NSSET_DONT_DOWNLOAD_CERTS;
int flav;
@@ -1175,7 +1175,7 @@ update_v2_networkstatus_cache_downloads(time_t now)
/** DOCDOC */
static int
-we_want_to_fetch_flavor(or_options_t *options, int flavor)
+we_want_to_fetch_flavor(const or_options_t *options, int flavor)
{
if (flavor < 0 || flavor > N_CONSENSUS_FLAVORS) {
/* This flavor is crazy; we don't want it */
@@ -1187,6 +1187,10 @@ we_want_to_fetch_flavor(or_options_t *options, int flavor)
* it ourselves. */
return 1;
}
+ if (options->FetchUselessDescriptors) {
+ /* In order to get all descriptors, we need to fetch all consensuses. */
+ return 1;
+ }
/* Otherwise, we want the flavor only if we want to use it to build
* circuits. */
return flavor == usable_consensus_flavor();
@@ -1204,7 +1208,7 @@ static void
update_consensus_networkstatus_downloads(time_t now)
{
int i;
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
if (!networkstatus_get_live_consensus(now))
time_to_download_next_consensus = now; /* No live consensus? Get one now!*/
@@ -1274,7 +1278,7 @@ networkstatus_consensus_download_failed(int status_code, const char *flavname)
void
update_consensus_networkstatus_fetch_time(time_t now)
{
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
networkstatus_t *c = networkstatus_get_live_consensus(now);
if (c) {
long dl_interval;
@@ -1348,7 +1352,7 @@ update_consensus_networkstatus_fetch_time(time_t now)
* fetches yet (e.g. we demand bridges and none are yet known).
* Else return 0. */
int
-should_delay_dir_fetches(or_options_t *options)
+should_delay_dir_fetches(const or_options_t *options)
{
if (options->UseBridges && !any_bridge_descriptors_known()) {
log_info(LD_DIR, "delaying dir fetches (no running bridges known)");
@@ -1362,7 +1366,7 @@ should_delay_dir_fetches(or_options_t *options)
void
update_networkstatus_downloads(time_t now)
{
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
if (should_delay_dir_fetches(options))
return;
if (authdir_mode_any_main(options) || options->FetchV2Networkstatus)
@@ -1585,7 +1589,7 @@ networkstatus_set_current_consensus(const char *consensus,
networkstatus_t *c=NULL;
int r, result = -1;
time_t now = time(NULL);
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
char *unverified_fname = NULL, *consensus_fname = NULL;
int flav = networkstatus_parse_flavor_name(flavor);
const unsigned from_cache = flags & NSSET_FROM_CACHE;
@@ -1814,7 +1818,7 @@ networkstatus_set_current_consensus(const char *consensus,
* valid-after time, declare that our clock is skewed. */
#define EARLY_CONSENSUS_NOTICE_SKEW 60
- if (now < current_consensus->valid_after - EARLY_CONSENSUS_NOTICE_SKEW) {
+ if (now < c->valid_after - EARLY_CONSENSUS_NOTICE_SKEW) {
char tbuf[ISO_TIME_LEN+1];
char dbuf[64];
long delta = now - c->valid_after;
@@ -1991,7 +1995,7 @@ routers_update_status_from_consensus_networkstatus(smartlist_t *routers,
int reset_failures)
{
trusted_dir_server_t *ds;
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
int authdir = authdir_mode_v2(options) || authdir_mode_v3(options);
networkstatus_t *ns = current_consensus;
if (!ns || !smartlist_len(ns->routerstatus_list))
@@ -2006,13 +2010,6 @@ routers_update_status_from_consensus_networkstatus(smartlist_t *routers,
tor_memcmp(rs->identity_digest,
router->cache_info.identity_digest, DIGEST_LEN),
{
-#if 0
- /* We have no routerstatus for this router. Clear flags and skip it. */
- if (!authdir) {
- if (router->purpose == ROUTER_PURPOSE_GENERAL)
- router_clear_status_flags(router);
- }
-#endif
}) {
/* We have a routerstatus for this router. */
const char *digest = router->cache_info.identity_digest;
@@ -2136,7 +2133,7 @@ networkstatus_getinfo_by_purpose(const char *purpose_string, time_t now)
if (bridge_auth && ri->purpose == ROUTER_PURPOSE_BRIDGE)
dirserv_set_router_is_running(ri, now);
/* then generate and write out status lines for each of them */
- set_routerstatus_from_routerinfo(&rs, node, ri, now, 0, 0, 0);
+ set_routerstatus_from_routerinfo(&rs, node, ri, now, 0, 0, 0, 0);
smartlist_add(statuses, networkstatus_getinfo_helper_single(&rs));
});
@@ -2151,7 +2148,7 @@ void
networkstatus_dump_bridge_status_to_file(time_t now)
{
char *status = networkstatus_getinfo_by_purpose("bridge", now);
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
size_t len = strlen(options->DataDirectory) + 32;
char *fname = tor_malloc(len);
tor_snprintf(fname, len, "%s"PATH_SEPARATOR"networkstatus-bridges",
@@ -2205,7 +2202,7 @@ get_net_param_from_list(smartlist_t *net_params, const char *param_name,
* <b>min_val</b> and at most <b>max_val</b> and raise/cap the parsed value
* if necessary. */
int32_t
-networkstatus_get_param(networkstatus_t *ns, const char *param_name,
+networkstatus_get_param(const networkstatus_t *ns, const char *param_name,
int32_t default_val, int32_t min_val, int32_t max_val)
{
if (!ns) /* if they pass in null, go find it ourselves */
diff --git a/src/or/networkstatus.h b/src/or/networkstatus.h
index 38fac557d..1b10f2738 100644
--- a/src/or/networkstatus.h
+++ b/src/or/networkstatus.h
@@ -67,7 +67,7 @@ int networkstatus_nickname_is_unnamed(const char *nickname);
void networkstatus_consensus_download_failed(int status_code,
const char *flavname);
void update_consensus_networkstatus_fetch_time(time_t now);
-int should_delay_dir_fetches(or_options_t *options);
+int should_delay_dir_fetches(const or_options_t *options);
void update_networkstatus_downloads(time_t now);
void update_certificate_downloads(time_t now);
int consensus_is_waiting_for_certs(void);
@@ -96,7 +96,8 @@ void signed_descs_update_status_from_consensus_networkstatus(
char *networkstatus_getinfo_helper_single(const routerstatus_t *rs);
char *networkstatus_getinfo_by_purpose(const char *purpose_string, time_t now);
void networkstatus_dump_bridge_status_to_file(time_t now);
-int32_t networkstatus_get_param(networkstatus_t *ns, const char *param_name,
+int32_t networkstatus_get_param(const networkstatus_t *ns,
+ const char *param_name,
int32_t default_val, int32_t min_val,
int32_t max_val);
int getinfo_helper_networkstatus(control_connection_t *conn,
diff --git a/src/or/nodelist.c b/src/or/nodelist.c
index 0856b3117..b93b919c1 100644
--- a/src/or/nodelist.c
+++ b/src/or/nodelist.c
@@ -158,8 +158,12 @@ nodelist_add_microdesc(microdesc_t *md)
if (rs == NULL)
return NULL;
node = node_get_mutable_by_id(rs->identity_digest);
- if (node)
+ if (node) {
+ if (node->md)
+ node->md->held_by_nodes--;
node->md = md;
+ md->held_by_nodes++;
+ }
return node;
}
@@ -171,9 +175,12 @@ nodelist_add_microdesc(microdesc_t *md)
void
nodelist_set_consensus(networkstatus_t *ns)
{
- or_options_t *options = get_options();
+ 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);
@@ -184,8 +191,12 @@ nodelist_set_consensus(networkstatus_t *ns)
if (ns->flavor == FLAV_MICRODESC) {
if (node->md == NULL ||
tor_memneq(node->md->digest,rs->descriptor_digest,DIGEST256_LEN)) {
+ if (node->md)
+ node->md->held_by_nodes--;
node->md = microdesc_cache_lookup_by_digest256(NULL,
rs->descriptor_digest);
+ if (node->md)
+ node->md->held_by_nodes++;
}
}
@@ -240,8 +251,10 @@ void
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)
+ if (node && node->md == md) {
node->md = NULL;
+ md->held_by_nodes--;
+ }
}
/** Tell the nodelist that <b>ri</b> is no longer in the routerlist. */
@@ -288,6 +301,8 @@ node_free(node_t *node)
{
if (!node)
return;
+ if (node->md)
+ node->md->held_by_nodes--;
tor_assert(node->nodelist_idx == -1);
tor_free(node);
}
@@ -305,6 +320,12 @@ nodelist_purge(void)
for (iter = HT_START(nodelist_map, &the_nodelist->nodes_by_id); iter; ) {
node_t *node = *iter;
+ if (node->md && !node->rs) {
+ /* An md is only useful if there is an rs. */
+ node->md->held_by_nodes--;
+ node->md = NULL;
+ }
+
if (node_is_usable(node)) {
iter = HT_NEXT(nodelist_map, &the_nodelist->nodes_by_id, iter);
} else {
@@ -342,11 +363,13 @@ nodelist_assert_ok(void)
{
routerlist_t *rl = router_get_routerlist();
networkstatus_t *ns = networkstatus_get_latest_consensus();
- digestmap_t *dm = digestmap_new();
+ digestmap_t *dm;
if (!the_nodelist)
return;
+ dm = digestmap_new();
+
/* every routerinfo in rl->routers should be in the nodelist. */
if (rl) {
SMARTLIST_FOREACH_BEGIN(rl->routers, routerinfo_t *, ri) {
@@ -373,6 +396,8 @@ nodelist_assert_ok(void)
microdesc_t *md =
microdesc_cache_lookup_by_digest256(NULL, rs->descriptor_digest);
tor_assert(md == node->md);
+ if (md)
+ tor_assert(md->held_by_nodes >= 1);
}
} SMARTLIST_FOREACH_END(rs);
}
diff --git a/src/or/nodelist.h b/src/or/nodelist.h
index 08f11da59..bd2e63953 100644
--- a/src/or/nodelist.h
+++ b/src/or/nodelist.h
@@ -53,7 +53,7 @@ smartlist_t *nodelist_get_list(void);
/* XXXX These need to move out of routerlist.c */
void nodelist_refresh_countries(void);
void node_set_country(node_t *node);
-void nodelist_add_node_family(smartlist_t *nodes, const node_t *node);
+void nodelist_add_node_and_family(smartlist_t *nodes, const node_t *node);
int nodes_in_same_family(const node_t *node1, const node_t *node2);
#endif
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 db3b171b3..546fe17bf 100644
--- a/src/or/or.h
+++ b/src/or/or.h
@@ -23,8 +23,12 @@
#endif
#ifdef MS_WINDOWS
+#ifndef WIN32_WINNT
#define WIN32_WINNT 0x400
+#endif
+#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x400
+#endif
#define WIN32_LEAN_AND_MEAN
#endif
@@ -170,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. */
@@ -230,15 +236,30 @@ typedef enum {
#define PROXY_CONNECT 1
#define PROXY_SOCKS4 2
#define PROXY_SOCKS5 3
+/* !!!! If there is ever a PROXY_* type over 2, we must grow the proxy_type
+ * field in or_connection_t */
+/* pluggable transports proxy type */
+#define PROXY_PLUGGABLE 4
/* Proxy client handshake states */
-#define PROXY_HTTPS_WANT_CONNECT_OK 1
-#define PROXY_SOCKS4_WANT_CONNECT_OK 2
-#define PROXY_SOCKS5_WANT_AUTH_METHOD_NONE 3
-#define PROXY_SOCKS5_WANT_AUTH_METHOD_RFC1929 4
-#define PROXY_SOCKS5_WANT_AUTH_RFC1929_OK 5
-#define PROXY_SOCKS5_WANT_CONNECT_OK 6
-#define PROXY_CONNECTED 7
+/* We use a proxy but we haven't even connected to it yet. */
+#define PROXY_INFANT 1
+/* We use an HTTP proxy and we've sent the CONNECT command. */
+#define PROXY_HTTPS_WANT_CONNECT_OK 2
+/* We use a SOCKS4 proxy and we've sent the CONNECT command. */
+#define PROXY_SOCKS4_WANT_CONNECT_OK 3
+/* We use a SOCKS5 proxy and we try to negotiate without
+ any authentication . */
+#define PROXY_SOCKS5_WANT_AUTH_METHOD_NONE 4
+/* We use a SOCKS5 proxy and we try to negotiate with
+ Username/Password authentication . */
+#define PROXY_SOCKS5_WANT_AUTH_METHOD_RFC1929 5
+/* We use a SOCKS5 proxy and we just sent our credentials. */
+#define PROXY_SOCKS5_WANT_AUTH_RFC1929_OK 6
+/* We use a SOCKS5 proxy and we just sent our CONNECT command. */
+#define PROXY_SOCKS5_WANT_CONNECT_OK 7
+/* We use a proxy and we CONNECTed successfully!. */
+#define PROXY_CONNECTED 8
/** True iff <b>x</b> is an edge connection. */
#define CONN_IS_EDGE(x) \
@@ -262,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. */
@@ -799,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)
@@ -911,14 +938,21 @@ typedef struct {
typedef struct buf_t buf_t;
typedef struct socks_request_t socks_request_t;
+#ifdef USE_BUFFEREVENTS
+#define generic_buffer_t struct evbuffer
+#else
+#define generic_buffer_t buf_t
+#endif
/* Values for connection_t.magic: used to make sure that downcasts (casts from
* connection_t to foo_connection_t) are safe. */
#define BASE_CONNECTION_MAGIC 0x7C3C304Eu
#define OR_CONNECTION_MAGIC 0x7D31FF03u
#define EDGE_CONNECTION_MAGIC 0xF0374013u
+#define ENTRY_CONNECTION_MAGIC 0xbb4a5703
#define DIR_CONNECTION_MAGIC 0x9988ffeeu
#define CONTROL_CONNECTION_MAGIC 0x8abc765du
+#define LISTENER_CONNECTION_MAGIC 0x1a1ac741u
/** Description of a connection to another host or process, and associated
* data.
@@ -982,7 +1016,7 @@ typedef struct connection_t {
unsigned int proxy_state:4;
/** Our socket; -1 if this connection is closed, or has no socket. */
- evutil_socket_t s;
+ tor_socket_t s;
int conn_array_index; /**< Index into the global connection array. */
struct event *read_event; /**< Libevent event structure. */
@@ -1024,17 +1058,73 @@ typedef struct connection_t {
/** Unique identifier for this connection on this Tor instance. */
uint64_t global_identifier;
- /* XXXX023 move this field, and all the listener-only fields (just
- socket_family, I think), into a new listener_connection_t subtype. */
+ /** Unique ID for measuring tunneled network status requests. */
+ uint64_t dirreq_id;
+} connection_t;
+
+typedef struct listener_connection_t {
+ connection_t _base;
+
/** If the connection is a CONN_TYPE_AP_DNS_LISTENER, this field points
* to the evdns_server_port it uses to listen to and answer connections. */
struct evdns_server_port *dns_server_port;
- /** Unique ID for measuring tunneled network status requests. */
- uint64_t dirreq_id;
-} connection_t;
+ /** @name Isolation parameters
+ *
+ * For an AP listener, these fields describe how to isolate streams that
+ * arrive on the listener.
+ *
+ * @{
+ */
+ /** The session group for this listener. */
+ int session_group;
+ /** One or more ISO_ flags to describe how to isolate streams. */
+ uint8_t isolation_flags;
+ /**@}*/
+
+} 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 {
@@ -1045,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
@@ -1084,6 +1220,13 @@ 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." */
circid_t next_circ_id; /**< Which circ_id do we try to use next on
@@ -1131,27 +1274,27 @@ typedef struct or_connection_t {
* identity digest as this one. */
} or_connection_t;
-/** Subtype of connection_t for an "edge connection" -- that is, a socks (ap)
+/** Subtype of connection_t for an "edge connection" -- that is, an entry (ap)
* connection, or an exit. */
typedef struct edge_connection_t {
connection_t _base;
struct edge_connection_t *next_stream; /**< Points to the next stream at this
* edge, if any */
- struct crypt_path_t *cpath_layer; /**< A pointer to which node in the circ
- * this conn exits at. */
int package_window; /**< How many more relay cells can I send into the
* circuit? */
int deliver_window; /**< How many more relay cells can end at me? */
- /** Nickname of planned exit node -- used with .exit support. */
- char *chosen_exit_name;
-
- socks_request_t *socks_request; /**< SOCKS structure describing request (AP
- * only.) */
struct circuit_t *on_circuit; /**< The circuit (if any) that this edge
* connection is using. */
+ /** A pointer to which node in the circ this conn exits at. Set for AP
+ * connections and for hidden service exit connections. */
+ struct crypt_path_t *cpath_layer;
+ /** What rendezvous service are we querying for (if an AP) or providing (if
+ * an exit)? */
+ rend_data_t *rend_data;
+
uint32_t address_ttl; /**< TTL for address-to-addr mapping on exit
* connection. Exit connections only. */
@@ -1167,14 +1310,62 @@ typedef struct edge_connection_t {
/** Bytes written since last call to control_event_stream_bandwidth_used() */
uint32_t n_written;
- /** What rendezvous service are we querying for? (AP only) */
- rend_data_t *rend_data;
+ /** True iff this connection is for a DNS request only. */
+ unsigned int is_dns_request:1;
+
+ unsigned int edge_has_sent_end:1; /**< For debugging; only used on edge
+ * connections. Set once we've set the stream end,
+ * and check in connection_about_to_close_connection().
+ */
+ /** True iff we've blocked reading until the circuit has fewer queued
+ * cells. */
+ unsigned int edge_blocked_on_circ:1;
+
+} edge_connection_t;
+
+/** Subtype of edge_connection_t for an "entry connection" -- that is, a SOCKS
+ * connection, a DNS request, a TransPort connection or a NATD connection */
+typedef struct entry_connection_t {
+ edge_connection_t _edge;
+
+ /** Nickname of planned exit node -- used with .exit support. */
+ char *chosen_exit_name;
+
+ socks_request_t *socks_request; /**< SOCKS structure describing request (AP
+ * only.) */
+
+ /* === Isolation related, AP only. === */
+ /** AP only: based on which factors do we isolate this stream? */
+ uint8_t isolation_flags;
+ /** AP only: what session group is this stream in? */
+ int session_group;
+ /** AP only: The newnym epoch in which we created this connection. */
+ unsigned nym_epoch;
+ /** AP only: The original requested address before we rewrote it. */
+ char *original_dest_address;
+ /* Other fields to isolate on already exist. The ClientAddr is addr. The
+ ClientProtocol is a combination of type and socks_request->
+ socks_version. SocksAuth is socks_request->username/password.
+ DestAddr is in socks_request->address. */
/** Number of times we've reassigned this application connection to
* a new circuit. We keep track because the timeout is longer if we've
* already retried several times. */
uint8_t num_socks_retries;
+ /** For AP connections only: buffer for data that we have sent
+ * optimistically, which we might need to re-send if we have to
+ * retry this connection. */
+ generic_buffer_t *pending_optimistic_data;
+ /* For AP connections only: buffer for data that we previously sent
+ * optimistically which we are currently re-sending as we retry this
+ * connection. */
+ generic_buffer_t *sending_optimistic_data;
+
+ /** If this is a DNSPort connection, this field holds the pending DNS
+ * request that we're going to try to answer. */
+ struct evdns_server_request *dns_server_request;
+
#define NUM_CIRCUITS_LAUNCHED_THRESHOLD 10
/** Number of times we've launched a circuit to handle this stream. If
* it gets too high, that could indicate an inconsistency between our
@@ -1182,9 +1373,6 @@ typedef struct edge_connection_t {
* stream to one of the available circuits" logic. */
unsigned int num_circuits_launched:4;
- /** True iff this connection is for a DNS request only. */
- unsigned int is_dns_request:1;
-
/** True iff this stream must attach to a one-hop circuit (e.g. for
* begin_dir). */
unsigned int want_onehop:1;
@@ -1192,13 +1380,6 @@ typedef struct edge_connection_t {
* itself rather than BEGIN (either via onehop or via a whole circuit). */
unsigned int use_begindir:1;
- unsigned int edge_has_sent_end:1; /**< For debugging; only used on edge
- * connections. Set once we've set the stream end,
- * and check in connection_about_to_close_connection().
- */
- /** True iff we've blocked reading until the circuit has fewer queued
- * cells. */
- unsigned int edge_blocked_on_circ:1;
/** For AP connections only. If 1, and we fail to reach the chosen exit,
* stop requiring it. */
unsigned int chosen_exit_optional:1;
@@ -1212,11 +1393,13 @@ typedef struct edge_connection_t {
* NATd connection */
unsigned int is_transparent_ap:1;
- /** If this is a DNSPort connection, this field holds the pending DNS
- * request that we're going to try to answer. */
- struct evdns_server_request *dns_server_request;
+ /** For AP connections only: Set if this connection's target exit node
+ * allows optimistic data (that is, data sent on this stream before
+ * the exit has sent a CONNECTED cell) and we have chosen to use it.
+ */
+ unsigned int may_use_optimistic_data : 1;
-} edge_connection_t;
+} entry_connection_t;
/** Subtype of connection_t for an "directory connection" -- that is, an HTTP
* connection to retrieve or serve directory material. */
@@ -1289,6 +1472,11 @@ typedef struct control_connection_t {
/** Helper macro: Given a pointer to to._base, of type from*, return &to. */
#define DOWNCAST(to, ptr) ((to*)SUBTYPE_P(ptr, to, _base))
+/** Cast a entry_connection_t subtype pointer to a edge_connection_t **/
+#define ENTRY_TO_EDGE_CONN(c) (&(((c))->_edge))
+/** Cast a entry_connection_t subtype pointer to a connection_t **/
+#define ENTRY_TO_CONN(c) (TO_CONN(ENTRY_TO_EDGE_CONN(c)))
+
/** Convert a connection_t* to an or_connection_t*; assert if the cast is
* invalid. */
static or_connection_t *TO_OR_CONN(connection_t *);
@@ -1298,9 +1486,18 @@ static dir_connection_t *TO_DIR_CONN(connection_t *);
/** Convert a connection_t* to an edge_connection_t*; assert if the cast is
* invalid. */
static edge_connection_t *TO_EDGE_CONN(connection_t *);
+/** Convert a connection_t* to an entry_connection_t*; assert if the cast is
+ * invalid. */
+static entry_connection_t *TO_ENTRY_CONN(connection_t *);
+/** Convert a edge_connection_t* to an entry_connection_t*; assert if the cast
+ * is invalid. */
+static entry_connection_t *EDGE_TO_ENTRY_CONN(edge_connection_t *);
/** Convert a connection_t* to an control_connection_t*; assert if the cast is
* invalid. */
static control_connection_t *TO_CONTROL_CONN(connection_t *);
+/** Convert a connection_t* to an listener_connection_t*; assert if the cast is
+ * invalid. */
+static listener_connection_t *TO_LISTENER_CONN(connection_t *);
static INLINE or_connection_t *TO_OR_CONN(connection_t *c)
{
@@ -1314,14 +1511,30 @@ static INLINE dir_connection_t *TO_DIR_CONN(connection_t *c)
}
static INLINE edge_connection_t *TO_EDGE_CONN(connection_t *c)
{
- tor_assert(c->magic == EDGE_CONNECTION_MAGIC);
+ tor_assert(c->magic == EDGE_CONNECTION_MAGIC ||
+ c->magic == ENTRY_CONNECTION_MAGIC);
return DOWNCAST(edge_connection_t, c);
}
+static INLINE entry_connection_t *TO_ENTRY_CONN(connection_t *c)
+{
+ tor_assert(c->magic == ENTRY_CONNECTION_MAGIC);
+ return (entry_connection_t*) SUBTYPE_P(c, entry_connection_t, _edge._base);
+}
+static INLINE entry_connection_t *EDGE_TO_ENTRY_CONN(edge_connection_t *c)
+{
+ tor_assert(c->_base.magic == ENTRY_CONNECTION_MAGIC);
+ return (entry_connection_t*) SUBTYPE_P(c, entry_connection_t, _edge);
+}
static INLINE control_connection_t *TO_CONTROL_CONN(connection_t *c)
{
tor_assert(c->magic == CONTROL_CONNECTION_MAGIC);
return DOWNCAST(control_connection_t, c);
}
+static INLINE listener_connection_t *TO_LISTENER_CONN(connection_t *c)
+{
+ tor_assert(c->magic == LISTENER_CONNECTION_MAGIC);
+ return DOWNCAST(listener_connection_t, c);
+}
/* Conditional macros to help write code that works whether bufferevents are
disabled or not.
@@ -1483,11 +1696,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. */
@@ -1647,6 +1855,9 @@ typedef struct routerstatus_t {
/** True iff this router is a version that, if it caches directory info,
* we can get microdescriptors from. */
unsigned int version_supports_microdesc_cache:1;
+ /** True iff this router is a version that allows DATA cells to arrive on
+ * a stream before it has sent a CONNECTED cell. */
+ unsigned int version_supports_optimistic_data:1;
unsigned int has_bandwidth:1; /**< The vote/consensus had bw info */
unsigned int has_exitsummary:1; /**< The vote/consensus had exit summaries */
@@ -1712,6 +1923,11 @@ 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 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. */
off_t off;
@@ -2192,15 +2408,15 @@ typedef struct {
/** How to extend to the planned exit node. */
extend_info_t *chosen_exit;
/** Whether every node in the circ must have adequate uptime. */
- int need_uptime;
+ unsigned int need_uptime : 1;
/** Whether every node in the circ must have adequate capacity. */
- int need_capacity;
+ unsigned int need_capacity : 1;
/** Whether the last hop was picked with exiting in mind. */
- int is_internal;
- /** Did we pick this as a one-hop tunnel (not safe for other conns)?
- * These are for encrypted connections that exit to this router, not
+ unsigned int is_internal : 1;
+ /** Did we pick this as a one-hop tunnel (not safe for other streams)?
+ * These are for encrypted dir conns that exit to this router, not
* for arbitrary exits from the circuit. */
- int onehop_tunnel;
+ unsigned int onehop_tunnel : 1;
/** The crypt_path_t to append after rendezvous: used for rendezvous. */
crypt_path_t *pending_final_cpath;
/** How many times has building a circuit for this task failed? */
@@ -2308,6 +2524,11 @@ typedef struct circuit_t {
* in time in order to indicate that a circuit shouldn't be used for new
* streams, but that it can stay alive as long as it has streams on it.
* That's a kludge we should fix.
+ *
+ * XXX023 The CBT code uses this field to record when HS-related
+ * circuits entered certain states. This usage probably won't
+ * interfere with this field's primary purpose, but we should
+ * document it more thoroughly to make sure of that.
*/
time_t timestamp_dirty;
@@ -2394,6 +2615,55 @@ typedef struct origin_circuit_t {
/* XXXX NM This can get re-used after 2**32 circuits. */
uint32_t global_identifier;
+ /** True if we have associated one stream to this circuit, thereby setting
+ * the isolation paramaters for this circuit. Note that this doesn't
+ * necessarily mean that we've <em>attached</em> any streams to the circuit:
+ * we may only have marked up this circuit during the launch process.
+ */
+ unsigned int isolation_values_set : 1;
+ /** True iff any stream has <em>ever</em> been attached to this circuit.
+ *
+ * In a better world we could use timestamp_dirty for this, but
+ * timestamp_dirty is far too overloaded at the moment.
+ */
+ unsigned int isolation_any_streams_attached : 1;
+
+ /** A bitfield of ISO_* flags for every isolation field such that this
+ * circuit has had streams with more than one value for that field
+ * attached to it. */
+ uint8_t isolation_flags_mixed;
+
+ /** @name Isolation parameters
+ *
+ * If any streams have been associated with this circ (isolation_values_set
+ * == 1), and all streams associated with the circuit have had the same
+ * value for some field ((isolation_flags_mixed & ISO_FOO) == 0), then these
+ * elements hold the value for that field.
+ *
+ * Note again that "associated" is not the same as "attached": we
+ * preliminarily associate streams with a circuit while the circuit is being
+ * launched, so that we can tell whether we need to launch more circuits.
+ *
+ * @{
+ */
+ uint8_t client_proto_type;
+ uint8_t client_proto_socksver;
+ uint16_t dest_port;
+ tor_addr_t client_addr;
+ char *dest_address;
+ int session_group;
+ unsigned nym_epoch;
+ size_t socks_username_len;
+ uint8_t socks_password_len;
+ /* Note that the next two values are NOT NUL-terminated; see
+ socks_username_len and socks_password_len for their lengths. */
+ char *socks_username;
+ char *socks_password;
+ /** Global identifier for the first stream attached here; used by
+ * ISO_STREAM. */
+ uint64_t associated_isolated_stream_global_id;
+ /**@}*/
+
} origin_circuit_t;
/** An or_circuit_t holds information needed to implement a circuit at an
@@ -2478,14 +2748,14 @@ typedef struct or_circuit_t {
cell_ewma_t p_cell_ewma;
} or_circuit_t;
-/** Convert a circuit subtype to a circuit_t.*/
+/** Convert a circuit subtype to a circuit_t. */
#define TO_CIRCUIT(x) (&((x)->_base))
-/** Convert a circuit_t* to a pointer to the enclosing or_circuit_t. Asserts
+/** Convert a circuit_t* to a pointer to the enclosing or_circuit_t. Assert
* if the cast is impossible. */
static or_circuit_t *TO_OR_CIRCUIT(circuit_t *);
/** Convert a circuit_t* to a pointer to the enclosing origin_circuit_t.
- * Asserts if the cast is impossible. */
+ * Assert if the cast is impossible. */
static origin_circuit_t *TO_ORIGIN_CIRCUIT(circuit_t *);
static INLINE or_circuit_t *TO_OR_CIRCUIT(circuit_t *x)
@@ -2512,6 +2782,60 @@ typedef enum invalid_router_usage_t {
#define MIN_CONSTRAINED_TCP_BUFFER 2048
#define MAX_CONSTRAINED_TCP_BUFFER 262144 /* 256k */
+/** @name Isolation flags
+
+ Ways to isolate client streams
+
+ @{
+*/
+/** Isolate based on destination port */
+#define ISO_DESTPORT (1u<<0)
+/** Isolate based on destination address */
+#define ISO_DESTADDR (1u<<1)
+/** Isolate based on SOCKS authentication */
+#define ISO_SOCKSAUTH (1u<<2)
+/** Isolate based on client protocol choice */
+#define ISO_CLIENTPROTO (1u<<3)
+/** Isolate based on client address */
+#define ISO_CLIENTADDR (1u<<4)
+/** Isolate based on session group (always on). */
+#define ISO_SESSIONGRP (1u<<5)
+/** Isolate based on newnym epoch (always on). */
+#define ISO_NYM_EPOCH (1u<<6)
+/** Isolate all streams (Internal only). */
+#define ISO_STREAM (1u<<7)
+/**@}*/
+
+/** Default isolation level for ports. */
+#define ISO_DEFAULT (ISO_CLIENTADDR|ISO_SOCKSAUTH|ISO_SESSIONGRP|ISO_NYM_EPOCH)
+
+/** Indicates that we haven't yet set a session group on a port_cfg_t. */
+#define SESSION_GROUP_UNSET -1
+/** Session group reserved for directory connections */
+#define SESSION_GROUP_DIRCONN -2
+/** Session group reserved for resolve requests launched by a controller */
+#define SESSION_GROUP_CONTROL_RESOLVE -3
+/** First automatically allocated session group number */
+#define SESSION_GROUP_FIRST_AUTO -4
+
+/** Configuration for a single port that we're listening on. */
+typedef struct port_cfg_t {
+ tor_addr_t addr; /**< The actual IP to listen on, if !is_unix_addr. */
+ int port; /**< The configured port, or CFG_AUTO_PORT to tell Tor to pick its
+ * own port. */
+ uint8_t type; /**< One of CONN_TYPE_*_LISTENER */
+ unsigned is_unix_addr : 1; /**< True iff this is an AF_UNIX address. */
+
+ /* Client port types (socks, dns, trans, natd) only: */
+ uint8_t isolation_flags; /**< Zero or more isolation flags */
+ int session_group; /**< A session group, or -1 if this port is not in a
+ * session group. */
+
+ /* Unix sockets only: */
+ /** Path for an AF_UNIX address */
+ char unix_addr[FLEXIBLE_ARRAY_MEMBER];
+} port_cfg_t;
+
/** A linked list of lines in a config file. */
typedef struct config_line_t {
char *key;
@@ -2607,16 +2931,17 @@ typedef struct {
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. */
- int SocksPort; /**< Port to listen on for SOCKS connections. */
- /** Port to listen on for transparent pf/netfilter connections. */
- int TransPort;
- int NATDPort; /**< Port to listen on for transparent natd 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 *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. */
- int DNSPort; /**< Port to listen on for DNS requests. */
+ 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? */
int V1AuthoritativeDir; /**< Boolean: is this an authoritative directory
@@ -2644,6 +2969,12 @@ typedef struct {
int UseBridges; /**< Boolean: should we start all circuits with a bridge? */
config_line_t *Bridges; /**< List of bootstrap bridge addresses. */
+ 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. */
@@ -2668,8 +2999,11 @@ typedef struct {
* we don't need to? */
int HidServDirectoryV2; /**< Do we participate in the HS DHT? */
+ int VoteOnHidServDirectoriesV2; /**< As a directory authority, vote on
+ * assignment of the HSDir flag? */
int MinUptimeHidServDirectoryV2; /**< As directory authority, accept hidden
* service directories after what time? */
+
int FetchUselessDescriptors; /**< Do we fetch non-running descriptors too? */
int AllDirActionsPrivate; /**< Should every directory action be sent
* through a Tor circuit? */
@@ -2824,6 +3158,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
@@ -2869,6 +3215,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
@@ -3077,6 +3425,20 @@ typedef struct {
/** Should that file be group-readable? */
int ControlPortFileGroupReadable;
+#define MAX_MAX_CLIENT_CIRCUITS_PENDING 1024
+ /** Maximum number of non-open general-purpose origin circuits to allow at
+ * once. */
+ int MaxClientCircuitsPending;
+
+ /** If 1, we always send optimistic data when it's supported. If 0, we
+ * 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;
+
} or_options_t;
/** Persistent state for an onion router, as saved to disk. */
@@ -3103,6 +3465,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,
@@ -3155,6 +3519,8 @@ static INLINE void or_state_mark_dirty(or_state_t *state, time_t when)
#define MAX_SOCKS_REPLY_LEN 1024
#define MAX_SOCKS_ADDR_LEN 256
+#define SOCKS_NO_AUTH 0x00
+#define SOCKS_USER_PASS 0x02
/** Please open a TCP connection to this addr:port. */
#define SOCKS_COMMAND_CONNECT 0x01
@@ -3174,10 +3540,17 @@ struct socks_request_t {
/** Which version of SOCKS did the client use? One of "0, 4, 5" -- where
* 0 means that no socks handshake ever took place, and this is just a
* stub connection (e.g. see connection_ap_make_link()). */
- char socks_version;
- int command; /**< What is this stream's goal? One from the above list. */
+ uint8_t socks_version;
+ /** If using socks5 authentication, which authentication type did we
+ * negotiate? currently we support 0 (no authentication) and 2
+ * (username/password). */
+ uint8_t auth_type;
+ /** What is this stream's goal? One of the SOCKS_COMMAND_* values */
+ uint8_t command;
+ /** Which kind of listener created this stream? */
+ uint8_t listener_type;
size_t replylen; /**< Length of <b>reply</b>. */
- char reply[MAX_SOCKS_REPLY_LEN]; /**< Write an entry into this string if
+ uint8_t reply[MAX_SOCKS_REPLY_LEN]; /**< Write an entry into this string if
* we want to specify our own socks reply,
* rather than using the default socks4 or
* socks5 socks reply. We use this for the
@@ -3189,6 +3562,19 @@ struct socks_request_t {
unsigned int has_finished : 1; /**< Has the SOCKS handshake finished? Used to
* make sure we send back a socks reply for
* every connection. */
+ unsigned int got_auth : 1; /**< Have we received any authentication data? */
+
+ /** Number of bytes in username; 0 if username is NULL */
+ size_t usernamelen;
+ /** Number of bytes in password; 0 if password is NULL */
+ uint8_t passwordlen;
+ /** The negotiated username value if any (for socks5), or the entire
+ * authentication string (for socks4). This value is NOT nul-terminated;
+ * see usernamelen for its length. */
+ char *username;
+ /** The negotiated password value if any (for socks5). This value is NOT
+ * nul-terminated; see passwordlen for its length. */
+ char *password;
};
/********************************* circuitbuild.c **********************/
@@ -3633,14 +4019,34 @@ 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
+
+/** 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;
} 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/policies.c b/src/or/policies.c
index 6738b484a..40e527747 100644
--- a/src/or/policies.c
+++ b/src/or/policies.c
@@ -46,7 +46,7 @@ typedef struct policy_summary_item_t {
uint16_t prt_max; /**< Highest port number to accept/reject. */
uint64_t reject_count; /**< Number of IP-Addresses that are rejected to
this port range. */
- int accepted:1; /** Has this port already been accepted */
+ unsigned int accepted:1; /** Has this port already been accepted */
} policy_summary_item_t;
/** Private networks. This list is used in two places, once to expand the
@@ -83,15 +83,15 @@ policy_expand_private(smartlist_t **policy)
continue;
}
for (i = 0; private_nets[i]; ++i) {
- addr_policy_t policy;
- memcpy(&policy, p, sizeof(addr_policy_t));
- policy.is_private = 0;
- policy.is_canonical = 0;
- if (tor_addr_parse_mask_ports(private_nets[i], &policy.addr,
- &policy.maskbits, &port_min, &port_max)<0) {
+ addr_policy_t newpolicy;
+ memcpy(&newpolicy, p, sizeof(addr_policy_t));
+ newpolicy.is_private = 0;
+ newpolicy.is_canonical = 0;
+ if (tor_addr_parse_mask_ports(private_nets[i], &newpolicy.addr,
+ &newpolicy.maskbits, &port_min, &port_max)<0) {
tor_assert(0);
}
- smartlist_add(tmp, addr_policy_get_canonical_entry(&policy));
+ smartlist_add(tmp, addr_policy_get_canonical_entry(&newpolicy));
}
addr_policy_free(p);
});
@@ -164,7 +164,7 @@ parse_addr_policy(config_line_t *cfg, smartlist_t **dest,
static int
parse_reachable_addresses(void)
{
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
int ret = 0;
if (options->ReachableDirAddresses &&
@@ -356,7 +356,7 @@ authdir_policy_badexit_address(uint32_t addr, uint16_t port)
* options in <b>options</b>, return -1 and set <b>msg</b> to a newly
* allocated description of the error. Else return 0. */
int
-validate_addr_policies(or_options_t *options, char **msg)
+validate_addr_policies(const or_options_t *options, char **msg)
{
/* XXXX Maybe merge this into parse_policies_from_options, to make sure
* that the two can't go out of sync. */
@@ -440,7 +440,7 @@ load_policy_from_option(config_line_t *config, smartlist_t **policy,
/** Set all policies based on <b>options</b>, which should have been validated
* first by validate_addr_policies. */
int
-policies_parse_from_options(or_options_t *options)
+policies_parse_from_options(const or_options_t *options)
{
int ret = 0;
if (load_policy_from_option(options->SocksPolicy, &socks_policy, -1) < 0)
@@ -570,18 +570,6 @@ addr_policy_get_canonical_entry(addr_policy_t *e)
return found->policy;
}
-/** As compare_tor_addr_to_addr_policy, but instead of a tor_addr_t, takes
- * in host order. */
-addr_policy_result_t
-compare_addr_to_addr_policy(uint32_t addr, uint16_t port,
- const smartlist_t *policy)
-{
- /*XXXX deprecate this function when possible. */
- tor_addr_t a;
- tor_addr_from_ipv4h(&a, addr);
- return compare_tor_addr_to_addr_policy(&a, port, policy);
-}
-
/** Helper for compare_tor_addr_to_addr_policy. Implements the case where
* addr and port are both known. */
static addr_policy_result_t
@@ -701,7 +689,7 @@ compare_tor_addr_to_addr_policy(const tor_addr_t *addr, uint16_t port,
if (!policy) {
/* no policy? accept all. */
return ADDR_POLICY_ACCEPTED;
- } else if (tor_addr_is_null(addr)) {
+ } else if (addr == NULL || tor_addr_is_null(addr)) {
tor_assert(port != 0);
return compare_unknown_tor_addr_to_addr_policy(port, policy);
} else if (port == 0) {
@@ -1427,8 +1415,10 @@ compare_tor_addr_to_short_policy(const tor_addr_t *addr, uint16_t port,
tor_assert(port != 0);
+ if (addr && tor_addr_is_null(addr))
+ addr = NULL; /* Unspec means 'no address at all,' in this context. */
+
if (addr && (tor_addr_is_internal(addr, 0) ||
- tor_addr_is_null(addr) ||
tor_addr_is_loopback(addr)))
return ADDR_POLICY_REJECTED;
@@ -1471,17 +1461,6 @@ short_policy_is_reject_star(const short_policy_t *policy)
* <b>node</b>. See compare_tor_addr_to_addr_policy for details on addr/port
* interpretation. */
addr_policy_result_t
-compare_addr_to_node_policy(uint32_t addr, uint16_t port, const node_t *node)
-{
- tor_addr_t a;
- tor_addr_from_ipv4h(&a, addr);
- return compare_tor_addr_to_node_policy(&a, port, node);
-}
-
-/** Decides whether addr:port is probably or definitely accepted or rejcted by
- * <b>node</b>. See compare_tor_addr_to_addr_policy for details on addr/port
- * interpretation. */
-addr_policy_result_t
compare_tor_addr_to_node_policy(const tor_addr_t *addr, uint16_t port,
const node_t *node)
{
@@ -1490,7 +1469,7 @@ compare_tor_addr_to_node_policy(const tor_addr_t *addr, uint16_t port,
if (node->ri)
return compare_tor_addr_to_addr_policy(addr, port, node->ri->exit_policy);
- else if (node->md && node->md) {
+ else if (node->md) {
if (node->md->exit_policy == NULL)
return ADDR_POLICY_REJECTED;
else
diff --git a/src/or/policies.h b/src/or/policies.h
index ee1162ccc..51716ab0a 100644
--- a/src/or/policies.h
+++ b/src/or/policies.h
@@ -29,19 +29,15 @@ int authdir_policy_valid_address(uint32_t addr, uint16_t port);
int authdir_policy_baddir_address(uint32_t addr, uint16_t port);
int authdir_policy_badexit_address(uint32_t addr, uint16_t port);
-int validate_addr_policies(or_options_t *options, char **msg);
+int validate_addr_policies(const or_options_t *options, char **msg);
void policy_expand_private(smartlist_t **policy);
-int policies_parse_from_options(or_options_t *options);
+int policies_parse_from_options(const or_options_t *options);
addr_policy_t *addr_policy_get_canonical_entry(addr_policy_t *ent);
int cmp_addr_policies(smartlist_t *a, smartlist_t *b);
addr_policy_result_t compare_tor_addr_to_addr_policy(const tor_addr_t *addr,
uint16_t port, const smartlist_t *policy);
-addr_policy_result_t compare_addr_to_addr_policy(uint32_t addr,
- uint16_t port, const smartlist_t *policy);
-addr_policy_result_t compare_addr_to_node_policy(uint32_t addr,
- uint16_t port, const node_t *node);
addr_policy_result_t compare_tor_addr_to_node_policy(const tor_addr_t *addr,
uint16_t port, const node_t *node);
diff --git a/src/or/relay.c b/src/or/relay.c
index cf531169e..ac3114bda 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"
@@ -29,12 +30,10 @@
#include "reasons.h"
#include "relay.h"
#include "rendcommon.h"
+#include "router.h"
#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);
@@ -296,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)
{
@@ -648,6 +647,7 @@ connection_edge_send_command(edge_connection_t *fromconn,
{
/* XXXX NM Split this function into a separate versions per circuit type? */
circuit_t *circ;
+ crypt_path_t *cpath_layer = fromconn->cpath_layer;
tor_assert(fromconn);
circ = fromconn->on_circuit;
@@ -662,7 +662,8 @@ connection_edge_send_command(edge_connection_t *fromconn,
if (!circ) {
if (fromconn->_base.type == CONN_TYPE_AP) {
log_info(LD_APP,"no circ. Closing conn.");
- connection_mark_unattached_ap(fromconn, END_STREAM_REASON_INTERNAL);
+ connection_mark_unattached_ap(EDGE_TO_ENTRY_CONN(fromconn),
+ END_STREAM_REASON_INTERNAL);
} else {
log_info(LD_EXIT,"no circ. Closing conn.");
fromconn->edge_has_sent_end = 1; /* no circ to send to */
@@ -674,7 +675,7 @@ connection_edge_send_command(edge_connection_t *fromconn,
return relay_send_command_from_edge(fromconn->stream_id, circ,
relay_command, payload,
- payload_len, fromconn->cpath_layer);
+ payload_len, cpath_layer);
}
/** How many times will I retry a stream that fails due to DNS
@@ -702,17 +703,18 @@ edge_reason_is_retriable(int reason)
static int
connection_ap_process_end_not_open(
relay_header_t *rh, cell_t *cell, origin_circuit_t *circ,
- edge_connection_t *conn, crypt_path_t *layer_hint)
+ entry_connection_t *conn, crypt_path_t *layer_hint)
{
struct in_addr in;
node_t *exitrouter;
int reason = *(cell->payload+RELAY_HEADER_SIZE);
int control_reason = reason | END_STREAM_REASON_FLAG_REMOTE;
+ edge_connection_t *edge_conn = ENTRY_TO_EDGE_CONN(conn);
(void) layer_hint; /* unused */
if (rh->length > 0 && edge_reason_is_retriable(reason) &&
- !connection_edge_is_rendezvous_stream(conn) /* avoid retry if rend */
- ) {
+ /* avoid retry if rend */
+ !connection_edge_is_rendezvous_stream(edge_conn)) {
const char *chosen_exit_digest =
circ->build_state->chosen_exit->identity_digest;
log_info(LD_APP,"Address '%s' refused due to '%s'. Considering retrying.",
@@ -751,9 +753,9 @@ connection_ap_process_end_not_open(
(tor_inet_aton(conn->socks_request->address, &in) &&
!conn->chosen_exit_name))) {
log_info(LD_APP,
- "Exitrouter '%s' seems to be more restrictive than its exit "
+ "Exitrouter %s seems to be more restrictive than its exit "
"policy. Not using this router as exit for now.",
- node_get_nickname(exitrouter));
+ node_describe(exitrouter));
policies_set_node_exitpolicy_to_reject_all(exitrouter);
}
/* rewrite it to an IP if we learned one. */
@@ -839,7 +841,7 @@ connection_ap_process_end_not_open(
stream_end_reason_to_string(rh->length > 0 ? reason : -1));
circuit_log_path(LOG_INFO,LD_APP,circ);
/* need to test because of detach_retriable */
- if (!conn->_base.marked_for_close)
+ if (!ENTRY_TO_CONN(conn)->marked_for_close)
connection_mark_unattached_ap(conn, control_reason);
return 0;
}
@@ -848,7 +850,7 @@ connection_ap_process_end_not_open(
* dotted-quad representation of <b>new_addr</b> (given in host order),
* and send an appropriate REMAP event. */
static void
-remap_event_helper(edge_connection_t *conn, uint32_t new_addr)
+remap_event_helper(entry_connection_t *conn, uint32_t new_addr)
{
struct in_addr in;
@@ -874,7 +876,8 @@ connection_edge_process_relay_cell_not_open(
if (rh->command == RELAY_COMMAND_END) {
if (CIRCUIT_IS_ORIGIN(circ) && conn->_base.type == CONN_TYPE_AP) {
return connection_ap_process_end_not_open(rh, cell,
- TO_ORIGIN_CIRCUIT(circ), conn,
+ TO_ORIGIN_CIRCUIT(circ),
+ EDGE_TO_ENTRY_CONN(conn),
layer_hint);
} else {
/* we just got an 'end', don't need to send one */
@@ -888,6 +891,7 @@ connection_edge_process_relay_cell_not_open(
if (conn->_base.type == CONN_TYPE_AP &&
rh->command == RELAY_COMMAND_CONNECTED) {
+ entry_connection_t *entry_conn = EDGE_TO_ENTRY_CONN(conn);
tor_assert(CIRCUIT_IS_ORIGIN(circ));
if (conn->_base.state != AP_CONN_STATE_CONNECT_WAIT) {
log_fn(LOG_PROTOCOL_WARN, LD_APP,
@@ -905,22 +909,23 @@ connection_edge_process_relay_cell_not_open(
log_info(LD_APP, "...but it claims the IP address was %s. Closing.",
fmt_addr32(addr));
connection_edge_end(conn, END_STREAM_REASON_TORPROTOCOL);
- connection_mark_unattached_ap(conn, END_STREAM_REASON_TORPROTOCOL);
+ connection_mark_unattached_ap(entry_conn,
+ END_STREAM_REASON_TORPROTOCOL);
return 0;
}
if (rh->length >= 8)
ttl = (int)ntohl(get_uint32(cell->payload+RELAY_HEADER_SIZE+4));
else
ttl = -1;
- client_dns_set_addressmap(conn->socks_request->address, addr,
- conn->chosen_exit_name, ttl);
+ client_dns_set_addressmap(entry_conn->socks_request->address, addr,
+ entry_conn->chosen_exit_name, ttl);
- remap_event_helper(conn, addr);
+ remap_event_helper(entry_conn, addr);
}
circuit_log_path(LOG_INFO,LD_APP,TO_ORIGIN_CIRCUIT(circ));
/* don't send a socks reply to transparent conns */
- if (!conn->socks_request->has_finished)
- connection_ap_handshake_socks_reply(conn, NULL, 0, 0);
+ if (!entry_conn->socks_request->has_finished)
+ connection_ap_handshake_socks_reply(entry_conn, NULL, 0, 0);
/* Was it a linked dir conn? If so, a dir request just started to
* fetch something; this could be a bootstrap status milestone. */
@@ -943,6 +948,12 @@ connection_edge_process_relay_cell_not_open(
break;
}
}
+ /* This is definitely a success, so forget about any pending data we
+ * had sent. */
+ if (entry_conn->pending_optimistic_data) {
+ generic_buffer_free(entry_conn->pending_optimistic_data);
+ entry_conn->pending_optimistic_data = NULL;
+ }
/* handle anything that might have queued */
if (connection_edge_package_raw_inbuf(conn, 1, NULL) < 0) {
@@ -957,17 +968,18 @@ connection_edge_process_relay_cell_not_open(
int ttl;
int answer_len;
uint8_t answer_type;
+ entry_connection_t *entry_conn = EDGE_TO_ENTRY_CONN(conn);
if (conn->_base.state != AP_CONN_STATE_RESOLVE_WAIT) {
log_fn(LOG_PROTOCOL_WARN, LD_APP, "Got a 'resolved' cell while "
"not in state resolve_wait. Dropping.");
return 0;
}
- tor_assert(SOCKS_COMMAND_IS_RESOLVE(conn->socks_request->command));
+ tor_assert(SOCKS_COMMAND_IS_RESOLVE(entry_conn->socks_request->command));
answer_len = cell->payload[RELAY_HEADER_SIZE+1];
if (rh->length < 2 || answer_len+2>rh->length) {
log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
"Dropping malformed 'resolved' cell");
- connection_mark_unattached_ap(conn, END_STREAM_REASON_TORPROTOCOL);
+ connection_mark_unattached_ap(entry_conn, END_STREAM_REASON_TORPROTOCOL);
return 0;
}
answer_type = cell->payload[RELAY_HEADER_SIZE];
@@ -982,14 +994,15 @@ connection_edge_process_relay_cell_not_open(
is_internal_IP(addr, 0)) {
log_info(LD_APP,"Got a resolve with answer %s. Rejecting.",
fmt_addr32(addr));
- connection_ap_handshake_socks_resolved(conn,
+ connection_ap_handshake_socks_resolved(entry_conn,
RESOLVED_TYPE_ERROR_TRANSIENT,
0, NULL, 0, TIME_MAX);
- connection_mark_unattached_ap(conn, END_STREAM_REASON_TORPROTOCOL);
+ connection_mark_unattached_ap(entry_conn,
+ END_STREAM_REASON_TORPROTOCOL);
return 0;
}
}
- connection_ap_handshake_socks_resolved(conn,
+ connection_ap_handshake_socks_resolved(entry_conn,
answer_type,
cell->payload[RELAY_HEADER_SIZE+1], /*answer_len*/
cell->payload+RELAY_HEADER_SIZE+2, /*answer*/
@@ -997,9 +1010,9 @@ connection_edge_process_relay_cell_not_open(
-1);
if (answer_type == RESOLVED_TYPE_IPV4 && answer_len == 4) {
uint32_t addr = ntohl(get_uint32(cell->payload+RELAY_HEADER_SIZE+2));
- remap_event_helper(conn, addr);
+ remap_event_helper(entry_conn, addr);
}
- connection_mark_unattached_ap(conn,
+ connection_mark_unattached_ap(entry_conn,
END_STREAM_REASON_DONE |
END_STREAM_REASON_FLAG_ALREADY_SOCKS_REPLIED);
return 0;
@@ -1157,9 +1170,13 @@ connection_edge_process_relay_cell(cell_t *cell, circuit_t *circ,
conn->_base.s,
stream_end_reason_to_string(reason),
conn->stream_id);
- if (conn->socks_request && !conn->socks_request->has_finished)
- log_warn(LD_BUG,
- "open stream hasn't sent socks answer yet? Closing.");
+ if (conn->_base.type == CONN_TYPE_AP) {
+ entry_connection_t *entry_conn = EDGE_TO_ENTRY_CONN(conn);
+ if (entry_conn->socks_request &&
+ !entry_conn->socks_request->has_finished)
+ log_warn(LD_BUG,
+ "open stream hasn't sent socks answer yet? Closing.");
+ }
/* We just *got* an end; no reason to send one. */
conn->edge_has_sent_end = 1;
if (!conn->end_reason)
@@ -1338,10 +1355,17 @@ int
connection_edge_package_raw_inbuf(edge_connection_t *conn, int package_partial,
int *max_cells)
{
- size_t amount_to_process, length;
+ size_t bytes_to_process, length;
char payload[CELL_PAYLOAD_SIZE];
circuit_t *circ;
- unsigned domain = conn->cpath_layer ? LD_APP : LD_EXIT;
+ const unsigned domain = conn->_base.type == CONN_TYPE_AP ? LD_APP : LD_EXIT;
+ int sending_from_optimistic = 0;
+ const int sending_optimistically =
+ conn->_base.type == CONN_TYPE_AP &&
+ conn->_base.state != AP_CONN_STATE_OPEN;
+ entry_connection_t *entry_conn =
+ conn->_base.type == CONN_TYPE_AP ? EDGE_TO_ENTRY_CONN(conn) : NULL;
+ crypt_path_t *cpath_layer = conn->cpath_layer;
tor_assert(conn);
@@ -1364,7 +1388,7 @@ connection_edge_package_raw_inbuf(edge_connection_t *conn, int package_partial,
return -1;
}
- if (circuit_consider_stop_edge_reading(circ, conn->cpath_layer))
+ if (circuit_consider_stop_edge_reading(circ, cpath_layer))
return 0;
if (conn->package_window <= 0) {
@@ -1374,44 +1398,75 @@ connection_edge_package_raw_inbuf(edge_connection_t *conn, int package_partial,
return 0;
}
- amount_to_process = connection_get_inbuf_len(TO_CONN(conn));
+ sending_from_optimistic = entry_conn &&
+ entry_conn->sending_optimistic_data != NULL;
- if (!amount_to_process)
+ if (PREDICT_UNLIKELY(sending_from_optimistic)) {
+ bytes_to_process = generic_buffer_len(entry_conn->sending_optimistic_data);
+ if (PREDICT_UNLIKELY(!bytes_to_process)) {
+ log_warn(LD_BUG, "sending_optimistic_data was non-NULL but empty");
+ bytes_to_process = connection_get_inbuf_len(TO_CONN(conn));
+ sending_from_optimistic = 0;
+ }
+ } else {
+ bytes_to_process = connection_get_inbuf_len(TO_CONN(conn));
+ }
+
+ if (!bytes_to_process)
return 0;
- if (!package_partial && amount_to_process < RELAY_PAYLOAD_SIZE)
+ if (!package_partial && bytes_to_process < RELAY_PAYLOAD_SIZE)
return 0;
- if (amount_to_process > RELAY_PAYLOAD_SIZE) {
+ if (bytes_to_process > RELAY_PAYLOAD_SIZE) {
length = RELAY_PAYLOAD_SIZE;
} else {
- length = amount_to_process;
+ length = bytes_to_process;
}
stats_n_data_bytes_packaged += length;
stats_n_data_cells_packaged += 1;
- connection_fetch_from_buf(payload, length, TO_CONN(conn));
+ if (PREDICT_UNLIKELY(sending_from_optimistic)) {
+ /* XXX023 We could be more efficient here by sometimes packing
+ * previously-sent optimistic data in the same cell with data
+ * from the inbuf. */
+ generic_buffer_get(entry_conn->sending_optimistic_data, payload, length);
+ if (!generic_buffer_len(entry_conn->sending_optimistic_data)) {
+ generic_buffer_free(entry_conn->sending_optimistic_data);
+ entry_conn->sending_optimistic_data = NULL;
+ }
+ } else {
+ connection_fetch_from_buf(payload, length, TO_CONN(conn));
+ }
log_debug(domain,"(%d) Packaging %d bytes (%d waiting).", conn->_base.s,
(int)length, (int)connection_get_inbuf_len(TO_CONN(conn)));
+ if (sending_optimistically && !sending_from_optimistic) {
+ /* This is new optimistic data; remember it in case we need to detach and
+ retry */
+ if (!entry_conn->pending_optimistic_data)
+ entry_conn->pending_optimistic_data = generic_buffer_new();
+ generic_buffer_add(entry_conn->pending_optimistic_data, payload, length);
+ }
+
if (connection_edge_send_command(conn, RELAY_COMMAND_DATA,
payload, length) < 0 )
/* circuit got marked for close, don't continue, don't need to mark conn */
return 0;
- if (!conn->cpath_layer) { /* non-rendezvous exit */
+ if (!cpath_layer) { /* non-rendezvous exit */
tor_assert(circ->package_window > 0);
circ->package_window--;
} else { /* we're an AP, or an exit on a rendezvous circ */
- tor_assert(conn->cpath_layer->package_window > 0);
- conn->cpath_layer->package_window--;
+ tor_assert(cpath_layer->package_window > 0);
+ cpath_layer->package_window--;
}
if (--conn->package_window <= 0) { /* is it 0 after decrement? */
connection_stop_reading(TO_CONN(conn));
log_debug(domain,"conn->package_window reached 0.");
- circuit_consider_stop_edge_reading(circ, conn->cpath_layer);
+ circuit_consider_stop_edge_reading(circ, cpath_layer);
return 0; /* don't process the inbuf any more */
}
log_debug(domain,"conn->package_window is now %d",conn->package_window);
@@ -1450,7 +1505,7 @@ connection_edge_consider_sending_sendme(edge_connection_t *conn)
}
while (conn->deliver_window <= STREAMWINDOW_START - STREAMWINDOW_INCREMENT) {
- log_debug(conn->cpath_layer?LD_APP:LD_EXIT,
+ log_debug(conn->_base.type == CONN_TYPE_AP ?LD_APP:LD_EXIT,
"Outbuf %d, Queuing stream sendme.",
(int)conn->_base.outbuf_flushlen);
conn->deliver_window += STREAMWINDOW_INCREMENT;
@@ -1652,9 +1707,10 @@ circuit_consider_stop_edge_reading(circuit_t *circ, crypt_path_t *layer_hint)
if (layer_hint->package_window <= 0) {
log_debug(domain,"yes, at-origin. stopped.");
for (conn = TO_ORIGIN_CIRCUIT(circ)->p_streams; conn;
- conn=conn->next_stream)
+ conn=conn->next_stream) {
if (conn->cpath_layer == layer_hint)
connection_stop_reading(TO_CONN(conn));
+ }
return 1;
}
return 0;
@@ -2009,7 +2065,8 @@ static int ewma_enabled = 0;
/** Adjust the global cell scale factor based on <b>options</b> */
void
-cell_ewma_set_scale_factor(or_options_t *options, networkstatus_t *consensus)
+cell_ewma_set_scale_factor(const or_options_t *options,
+ const networkstatus_t *consensus)
{
int32_t halflife_ms;
double halflife;
@@ -2042,7 +2099,7 @@ cell_ewma_set_scale_factor(or_options_t *options, networkstatus_t *consensus)
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);
}
}
@@ -2335,13 +2392,13 @@ connection_or_flush_from_first_active_circuit(or_connection_t *conn, int max,
/* Calculate the exact time that this cell has spent in the queue. */
if (get_options()->CellStatistics && !CIRCUIT_IS_ORIGIN(circ)) {
- struct timeval now;
+ struct timeval tvnow;
uint32_t flushed;
uint32_t cell_waiting_time;
insertion_time_queue_t *it_queue = queue->insertion_times;
- tor_gettimeofday_cached(&now);
- flushed = (uint32_t)((now.tv_sec % SECONDS_IN_A_DAY) * 100L +
- (uint32_t)now.tv_usec / (uint32_t)10000L);
+ tor_gettimeofday_cached(&tvnow);
+ flushed = (uint32_t)((tvnow.tv_sec % SECONDS_IN_A_DAY) * 100L +
+ (uint32_t)tvnow.tv_usec / (uint32_t)10000L);
if (!it_queue || !it_queue->first) {
log_info(LD_GENERAL, "Cannot determine insertion time of cell. "
"Looks like the CellStatistics option was "
diff --git a/src/or/relay.h b/src/or/relay.h
index f64752da5..1cd4008bb 100644
--- a/src/or/relay.h
+++ b/src/or/relay.h
@@ -60,11 +60,16 @@ const uint8_t *decode_address_from_payload(tor_addr_t *addr_out,
const uint8_t *payload,
int payload_len);
unsigned cell_ewma_get_tick(void);
-void cell_ewma_set_scale_factor(or_options_t *options,
- networkstatus_t *consensus);
+void cell_ewma_set_scale_factor(const or_options_t *options,
+ const networkstatus_t *consensus);
void circuit_clear_cell_queue(circuit_t *circ, or_connection_t *orconn);
void 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 3a2aaf1c4..6a45207e2 100644
--- a/src/or/rendclient.c
+++ b/src/or/rendclient.c
@@ -21,12 +21,23 @@
#include "rendclient.h"
#include "rendcommon.h"
#include "rephist.h"
+#include "router.h"
#include "routerlist.h"
static extend_info_t *rend_client_get_random_intro_impl(
const rend_cache_entry_t *rend_query,
const int strict, const int warnings);
+/** Purge all potentially remotely-detectable state held in the hidden
+ * service client code. Called on SIGNAL NEWNYM. */
+void
+rend_client_purge_state(void)
+{
+ rend_cache_purge();
+ rend_client_cancel_descriptor_fetches();
+ rend_client_purge_last_hid_serv_requests();
+}
+
/** Called when we've established a circuit to an introduction point:
* send the introduction request. */
void
@@ -70,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. */
@@ -91,21 +102,16 @@ rend_client_reextend_intro_circuit(origin_circuit_t *circ)
if (circ->remaining_relay_early_cells) {
log_info(LD_REND,
"Re-extending circ %d, this time to %s.",
- circ->_base.n_circ_id, extend_info->nickname);
+ circ->_base.n_circ_id,
+ safe_str_client(extend_info_describe(extend_info)));
result = circuit_extend_to_new_exit(circ, extend_info);
} else {
log_info(LD_REND,
- "Building a new introduction circuit, this time to %s.",
- extend_info->nickname);
+ "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;
@@ -133,6 +139,8 @@ rend_client_send_introduction(origin_circuit_t *introcirc,
tor_assert(rendcirc->rend_data);
tor_assert(!rend_cmp_service_ids(introcirc->rend_data->onion_address,
rendcirc->rend_data->onion_address));
+ tor_assert(!(introcirc->build_state->onehop_tunnel));
+ tor_assert(!(rendcirc->build_state->onehop_tunnel));
if (rend_cache_lookup_entry(introcirc->rend_data->onion_address, -1,
&entry) < 1) {
@@ -169,7 +177,8 @@ rend_client_send_introduction(origin_circuit_t *introcirc,
"have a v2 rend desc with %d intro points. "
"Trying a different intro point...",
safe_str_client(introcirc->rend_data->onion_address),
- introcirc->build_state->chosen_exit->nickname,
+ safe_str_client(extend_info_describe(
+ introcirc->build_state->chosen_exit)),
smartlist_len(entry->parsed->intro_nodes));
if (rend_client_reextend_intro_circuit(introcirc)) {
@@ -276,6 +285,10 @@ rend_client_send_introduction(origin_circuit_t *introcirc,
/* Now, we wait for an ACK or NAK on this circuit. */
introcirc->_base.purpose = CIRCUIT_PURPOSE_C_INTRODUCE_ACK_WAIT;
+ /* Set timestamp_dirty, because circuit_expire_building expects it
+ * to specify when a circuit entered the _C_INTRODUCE_ACK_WAIT
+ * state. */
+ introcirc->_base.timestamp_dirty = time(NULL);
return 0;
perm_err:
@@ -318,6 +331,7 @@ rend_client_introduction_acked(origin_circuit_t *circ,
}
tor_assert(circ->build_state->chosen_exit);
+ tor_assert(!(circ->build_state->onehop_tunnel));
tor_assert(circ->rend_data);
if (request_len == 0) {
@@ -329,7 +343,12 @@ rend_client_introduction_acked(origin_circuit_t *circ,
rendcirc = circuit_get_by_rend_query_and_purpose(
circ->rend_data->onion_address, CIRCUIT_PURPOSE_C_REND_READY);
if (rendcirc) { /* remember the ack */
+ tor_assert(!(rendcirc->build_state->onehop_tunnel));
rendcirc->_base.purpose = CIRCUIT_PURPOSE_C_REND_READY_INTRO_ACKED;
+ /* Set timestamp_dirty, because circuit_expire_building expects
+ * it to specify when a circuit entered the
+ * _C_REND_READY_INTRO_ACKED state. */
+ rendcirc->_base.timestamp_dirty = time(NULL);
} else {
log_info(LD_REND,"...Found no rend circ. Dropping on the floor.");
}
@@ -344,10 +363,11 @@ rend_client_introduction_acked(origin_circuit_t *circ,
* If none remain, refetch the service descriptor.
*/
log_info(LD_REND, "Got nack for %s from %s...",
- safe_str_client(circ->rend_data->onion_address),
- circ->build_state->chosen_exit->nickname);
- if (rend_client_remove_intro_point(circ->build_state->chosen_exit,
- circ->rend_data) > 0) {
+ safe_str_client(circ->rend_data->onion_address),
+ safe_str_client(extend_info_describe(circ->build_state->chosen_exit)));
+ 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);
@@ -364,27 +384,52 @@ 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. */
-static strmap_t *last_hid_serv_requests = NULL;
+ * 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
+ * necessary. */
+static strmap_t *
+get_last_hid_serv_requests(void)
+{
+ if (!last_hid_serv_requests_)
+ last_hid_serv_requests_ = strmap_new();
+ 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));
@@ -406,8 +451,7 @@ directory_clean_last_hid_serv_requests(time_t now)
{
strmap_iter_t *iter;
time_t cutoff = now - REND_HID_SERV_DIR_REQUERY_PERIOD;
- if (!last_hid_serv_requests)
- last_hid_serv_requests = strmap_new();
+ strmap_t *last_hid_serv_requests = get_last_hid_serv_requests();
for (iter = strmap_iter_init(last_hid_serv_requests);
!strmap_iter_done(iter); ) {
const char *key;
@@ -424,13 +468,59 @@ 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
+ * recently. */
+void
+rend_client_purge_last_hid_serv_requests(void)
+{
+ /* Don't create the table if it doesn't exist yet (and it may very
+ * well not exist if the user hasn't accessed any HSes)... */
+ strmap_t *old_last_hid_serv_requests = last_hid_serv_requests_;
+ /* ... and let get_last_hid_serv_requests re-create it for us if
+ * necessary. */
+ last_hid_serv_requests_ = NULL;
+
+ if (old_last_hid_serv_requests != NULL) {
+ log_info(LD_REND, "Purging client last-HS-desc-request-time table");
+ strmap_free(old_last_hid_serv_requests, _tor_free);
+ }
+}
+
/** 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)
{
@@ -455,9 +545,11 @@ 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, {
- if (lookup_last_hid_serv_request(dir, desc_id_base32, 0, 0) +
- REND_HID_SERV_DIR_REQUERY_PERIOD >= now ||
- !router_get_by_id_digest(dir->identity_digest))
+ 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);
});
@@ -470,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) {
@@ -500,12 +592,12 @@ directory_get_from_hs_dir(const char *desc_id, const rend_data_t *rend_query)
log_info(LD_REND, "Sending fetch request for v2 descriptor for "
"service '%s' with descriptor ID '%s', auth type %d, "
"and descriptor cookie '%s' to hidden service "
- "directory '%s' on port %d.",
+ "directory %s",
rend_query->onion_address, desc_id_base32,
rend_query->auth_type,
(rend_query->auth_type == REND_NO_AUTH ? "[none]" :
- escaped_safe_str_client(descriptor_cookie_base64)),
- hs_dir->nickname, hs_dir->dir_port);
+ escaped_safe_str_client(descriptor_cookie_base64)),
+ routerstatus_describe(hs_dir));
return 1;
}
@@ -526,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",
@@ -599,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.
*
- * Return -1 if error, 0 if no intro points remain or service
+ * 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 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;
@@ -631,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;
}
}
@@ -677,6 +811,9 @@ rend_client_rendezvous_acked(origin_circuit_t *circ, const uint8_t *request,
log_info(LD_REND,"Got rendezvous ack. This circuit is now ready for "
"rendezvous.");
circ->_base.purpose = CIRCUIT_PURPOSE_C_REND_READY;
+ /* Set timestamp_dirty, because circuit_expire_building expects it
+ * to specify when a circuit entered the _C_REND_READY state. */
+ circ->_base.timestamp_dirty = time(NULL);
/* XXXX023 This is a pretty brute-force approach. It'd be better to
* attach only the connections that are waiting on this circuit, rather
* than trying to attach them all. See comments bug 743. */
@@ -765,40 +902,42 @@ rend_client_receive_rendezvous(origin_circuit_t *circ, const uint8_t *request,
void
rend_client_desc_trynow(const char *query)
{
- edge_connection_t *conn;
+ entry_connection_t *conn;
rend_cache_entry_t *entry;
+ const rend_data_t *rend_data;
time_t now = time(NULL);
smartlist_t *conns = get_connection_array();
- SMARTLIST_FOREACH_BEGIN(conns, connection_t *, _conn) {
- if (_conn->type != CONN_TYPE_AP ||
- _conn->state != AP_CONN_STATE_RENDDESC_WAIT ||
- _conn->marked_for_close)
+ SMARTLIST_FOREACH_BEGIN(conns, connection_t *, base_conn) {
+ if (base_conn->type != CONN_TYPE_AP ||
+ base_conn->state != AP_CONN_STATE_RENDDESC_WAIT ||
+ base_conn->marked_for_close)
continue;
- conn = TO_EDGE_CONN(_conn);
- if (!conn->rend_data)
+ conn = TO_ENTRY_CONN(base_conn);
+ rend_data = ENTRY_TO_EDGE_CONN(conn)->rend_data;
+ if (!rend_data)
continue;
- if (rend_cmp_service_ids(query, conn->rend_data->onion_address))
+ if (rend_cmp_service_ids(query, rend_data->onion_address))
continue;
- assert_connection_ok(TO_CONN(conn), now);
- if (rend_cache_lookup_entry(conn->rend_data->onion_address, -1,
+ assert_connection_ok(base_conn, now);
+ if (rend_cache_lookup_entry(rend_data->onion_address, -1,
&entry) == 1 &&
rend_client_any_intro_points_usable(entry)) {
/* either this fetch worked, or it failed but there was a
* valid entry from before which we should reuse */
log_info(LD_REND,"Rend desc is usable. Launching circuits.");
- conn->_base.state = AP_CONN_STATE_CIRCUIT_WAIT;
+ base_conn->state = AP_CONN_STATE_CIRCUIT_WAIT;
/* restart their timeout values, so they get a fair shake at
* connecting to the hidden service. */
- conn->_base.timestamp_created = now;
- conn->_base.timestamp_lastread = now;
- conn->_base.timestamp_lastwritten = now;
+ base_conn->timestamp_created = now;
+ base_conn->timestamp_lastread = now;
+ base_conn->timestamp_lastwritten = now;
if (connection_ap_handshake_attach_circuit(conn) < 0) {
/* it will never work */
log_warn(LD_REND,"Rendezvous attempt failed. Closing.");
- if (!conn->_base.marked_for_close)
+ if (!base_conn->marked_for_close)
connection_mark_unattached_ap(conn, END_STREAM_REASON_CANT_ATTACH);
}
} else { /* 404, or fetch didn't get that far */
@@ -806,8 +945,34 @@ 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(_conn);
+ } 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
@@ -849,7 +1014,7 @@ rend_client_get_random_intro_impl(const rend_cache_entry_t *entry,
int i;
rend_intro_point_t *intro;
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
smartlist_t *usable_nodes;
int n_excluded = 0;
@@ -858,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) {
@@ -876,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
@@ -886,11 +1059,21 @@ 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);
+ 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 (options->ExcludeNodes && strict &&
+ if (strict &&
routerset_contains_extendinfo(options->ExcludeNodes,
intro->extend_info)) {
n_excluded++;
@@ -907,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
@@ -956,7 +1144,8 @@ rend_service_authorization_free_all(void)
* service and add it to the local map of hidden service authorizations.
* Return 0 for success and -1 for failure. */
int
-rend_parse_service_authorization(or_options_t *options, int validate_only)
+rend_parse_service_authorization(const or_options_t *options,
+ int validate_only)
{
config_line_t *line;
int res = -1;
diff --git a/src/or/rendclient.h b/src/or/rendclient.h
index 6910c1a97..89da47789 100644
--- a/src/or/rendclient.h
+++ b/src/or/rendclient.h
@@ -12,6 +12,8 @@
#ifndef _TOR_RENDCLIENT_H
#define _TOR_RENDCLIENT_H
+void rend_client_purge_state(void);
+
void rend_client_introcirc_has_opened(origin_circuit_t *circ);
void rend_client_rendcirc_has_opened(origin_circuit_t *circ);
int rend_client_introduction_acked(origin_circuit_t *circ,
@@ -19,8 +21,16 @@ int rend_client_introduction_acked(origin_circuit_t *circ,
size_t request_len);
void rend_client_refetch_v2_renddesc(const rend_data_t *rend_query);
void rend_client_cancel_descriptor_fetches(void);
-int rend_client_remove_intro_point(extend_info_t *failed_intro,
- const rend_data_t *rend_query);
+void rend_client_purge_last_hid_serv_requests(void);
+
+#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);
@@ -29,12 +39,14 @@ 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);
int rend_client_send_introduction(origin_circuit_t *introcirc,
origin_circuit_t *rendcirc);
-int rend_parse_service_authorization(or_options_t *options,
+int rend_parse_service_authorization(const or_options_t *options,
int validate_only);
rend_service_authorization_t *rend_client_lookup_service_authorization(
const char *onion_address);
diff --git a/src/or/rendcommon.c b/src/or/rendcommon.c
index f7bbd76b3..94bb00221 100644
--- a/src/or/rendcommon.c
+++ b/src/or/rendcommon.c
@@ -838,8 +838,10 @@ rend_cache_clean(time_t now)
void
rend_cache_purge(void)
{
- if (rend_cache)
+ if (rend_cache) {
+ log_info(LD_REND, "Purging client/v0-HS-authority HS descriptor cache");
strmap_free(rend_cache, _rend_cache_entry_free);
+ }
rend_cache = strmap_new();
}
@@ -981,15 +983,10 @@ rend_cache_lookup_v2_desc_as_dir(const char *desc_id, const char **desc)
tor_assert(rend_cache_v2_dir);
if (base32_decode(desc_id_digest, DIGEST_LEN,
desc_id, REND_DESC_ID_V2_LEN_BASE32) < 0) {
- log_warn(LD_REND, "Descriptor ID contains illegal characters: %s",
- safe_str(desc_id));
- return -1;
- }
- /* Determine if we are responsible. */
- if (hid_serv_responsible_for_desc_id(desc_id_digest) < 0) {
- log_info(LD_REND, "Could not answer fetch request for v2 descriptor; "
- "either we are no hidden service directory, or we are "
- "not responsible for the requested ID.");
+ log_fn(LOG_PROTOCOL_WARN, LD_REND,
+ "Rejecting v2 rendezvous descriptor request -- descriptor ID "
+ "contains illegal characters: %s",
+ safe_str(desc_id));
return -1;
}
/* Lookup descriptor and return. */
@@ -1043,6 +1040,7 @@ rend_cache_store(const char *desc, size_t desc_len, int published,
log_warn(LD_REND, "Received service descriptor for service ID %s; "
"expected descriptor for service ID %s.",
query, safe_str(service_id));
+ rend_service_descriptor_free(parsed);
return -2;
}
now = time(NULL);
diff --git a/src/or/rendservice.c b/src/or/rendservice.c
index 3d5c80c23..e0c1a8c87 100644
--- a/src/or/rendservice.c
+++ b/src/or/rendservice.c
@@ -172,16 +172,44 @@ 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;
+ /* XXX This duplicate check has two problems:
+ *
+ * a) It's O(n^2), but the same comment from the bottom of
+ * rend_config_services() should apply.
+ *
+ * b) We only compare directory paths as strings, so we can't
+ * detect two distinct paths that specify the same directory
+ * (which can arise from symlinks, case-insensitivity, bind
+ * mounts, etc.).
+ *
+ * It also can't detect that two separate Tor instances are trying
+ * to use the same HiddenServiceDir; for that, we would need a
+ * lock file. But this is enough to detect a simple mistake that
+ * at least one person has actually made.
+ */
+ SMARTLIST_FOREACH(rend_service_list, rend_service_t*, ptr,
+ dupe = dupe ||
+ !strcmp(ptr->directory, service->directory));
+ if (dupe) {
+ log_warn(LD_REND, "Another hidden service is already configured for "
+ "directory %s, ignoring.", service->directory);
+ rend_service_free(service);
+ return;
+ }
smartlist_add(rend_service_list, service);
log_debug(LD_REND,"Configuring service with directory \"%s\"",
service->directory);
@@ -233,7 +261,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;
@@ -267,7 +295,7 @@ parse_port_config(const char *string)
* normal, but don't actually change the configured services.)
*/
int
-rend_config_services(or_options_t *options, int validate_only)
+rend_config_services(const or_options_t *options, int validate_only)
{
config_line_t *line;
rend_service_t *service = NULL;
@@ -385,7 +413,7 @@ rend_config_services(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);
@@ -475,7 +503,8 @@ rend_config_services(or_options_t *options, int validate_only)
if (keep_it)
continue;
log_info(LD_REND, "Closing intro point %s for service %s.",
- safe_str_client(oc->build_state->chosen_exit->nickname),
+ safe_str_client(extend_info_describe(
+ oc->build_state->chosen_exit)),
oc->rend_data->onion_address);
circuit_mark_for_close(circ, END_CIRC_REASON_FINISHED);
/* XXXX Is there another reason we should use here? */
@@ -544,7 +573,7 @@ rend_service_load_keys(void)
s->directory);
/* Check/create directory */
- if (check_private_dir(s->directory, CPD_CREATE) < 0)
+ if (check_private_dir(s->directory, CPD_CREATE, get_options()->User) < 0)
return -1;
/* Load key */
@@ -610,13 +639,15 @@ rend_service_load_keys(void)
}
/* Prepare client_keys and hostname files. */
- if (!(cfile = start_writing_to_stdio_file(cfname, OPEN_FLAGS_REPLACE,
+ if (!(cfile = start_writing_to_stdio_file(cfname,
+ OPEN_FLAGS_REPLACE | O_TEXT,
0600, &open_cfile))) {
log_warn(LD_CONFIG, "Could not open client_keys file %s",
escaped(cfname));
goto err;
}
- if (!(hfile = start_writing_to_stdio_file(fname, OPEN_FLAGS_REPLACE,
+ if (!(hfile = start_writing_to_stdio_file(fname,
+ OPEN_FLAGS_REPLACE | O_TEXT,
0600, &open_hfile))) {
log_warn(LD_CONFIG, "Could not open hostname file %s", escaped(fname));
goto err;
@@ -877,8 +908,9 @@ rend_service_introduce(origin_circuit_t *circuit, const uint8_t *request,
time_t now = time(NULL);
char diffie_hellman_hash[DIGEST_LEN];
time_t *access_time;
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
+ tor_assert(!(circuit->build_state->onehop_tunnel));
tor_assert(circuit->rend_data);
base32_encode(serviceid, REND_SERVICE_ID_LEN_BASE32+1,
@@ -929,6 +961,29 @@ rend_service_introduce(origin_circuit_t *circuit, const uint8_t *request,
"PK-encrypted portion of INTRODUCE2 cell was truncated.");
return -1;
}
+
+ if (!service->accepted_intros)
+ service->accepted_intros = digestmap_new();
+
+ {
+ char pkpart_digest[DIGEST_LEN];
+ /* Check for replay of PK-encrypted portion. It is slightly naughty to
+ use the same digestmap to check for this and for g^x replays, but
+ collisions are tremendously unlikely.
+ */
+ crypto_digest(pkpart_digest, (char*)request+DIGEST_LEN, keylen);
+ access_time = digestmap_get(service->accepted_intros, 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(service->accepted_intros, pkpart_digest, access_time);
+ }
+
/* Next N bytes is encrypted with service key */
note_crypto_pk_op(REND_SERVER);
r = crypto_pk_private_hybrid_decrypt(
@@ -969,7 +1024,9 @@ rend_service_introduce(origin_circuit_t *circuit, const uint8_t *request,
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.",
+ /* This is far more likely to mean that a client's clock is
+ * skewed than that a replay attack is in progress. */
+ log_info(LD_REND, "INTRODUCE2 cell is too %s. Discarding.",
(now - ts) < 0 ? "old" : "new");
return -1;
}
@@ -1052,7 +1109,7 @@ rend_service_introduce(origin_circuit_t *circuit, const uint8_t *request,
}
/* Check if we'd refuse to talk to this router */
- if (options->ExcludeNodes && options->StrictNodes &&
+ if (options->StrictNodes &&
routerset_contains_extendinfo(options->ExcludeNodes, extend_info)) {
log_warn(LD_REND, "Client asked to rendezvous at a relay that we "
"exclude, and StrictNodes is set. Refusing service.");
@@ -1071,12 +1128,16 @@ 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);
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.",
@@ -1147,7 +1208,7 @@ rend_service_introduce(origin_circuit_t *circuit, const uint8_t *request,
if (!launched) { /* give up */
log_warn(LD_REND, "Giving up launching first hop of circuit to rendezvous "
"point %s for service %s.",
- escaped_safe_str_client(extend_info->nickname),
+ safe_str_client(extend_info_describe(extend_info)),
serviceid);
reason = END_CIRC_REASON_CONNECTFAILED;
goto err;
@@ -1155,7 +1216,7 @@ rend_service_introduce(origin_circuit_t *circuit, const uint8_t *request,
log_info(LD_REND,
"Accepted intro; launching circuit to %s "
"(cookie %s) for service %s.",
- escaped_safe_str_client(extend_info->nickname),
+ safe_str_client(extend_info_describe(extend_info)),
hexcookie, serviceid);
tor_assert(launched->build_state);
/* Fill in the circuit's state. */
@@ -1207,7 +1268,8 @@ rend_service_relaunch_rendezvous(origin_circuit_t *oldcirc)
"Attempt to build circuit to %s for rendezvous has failed "
"too many times or expired; giving up.",
oldcirc->build_state ?
- oldcirc->build_state->chosen_exit->nickname : "*unknown*");
+ safe_str(extend_info_describe(oldcirc->build_state->chosen_exit))
+ : "*unknown*");
return;
}
@@ -1221,7 +1283,7 @@ rend_service_relaunch_rendezvous(origin_circuit_t *oldcirc)
}
log_info(LD_REND,"Reattempting rendezvous circuit to '%s'",
- oldstate->chosen_exit->nickname);
+ safe_str(extend_info_describe(oldstate->chosen_exit)));
newcirc = circuit_launch_by_extend_info(CIRCUIT_PURPOSE_S_CONNECT_REND,
oldstate->chosen_exit,
@@ -1229,7 +1291,7 @@ rend_service_relaunch_rendezvous(origin_circuit_t *oldcirc)
if (!newcirc) {
log_warn(LD_REND,"Couldn't relaunch rendezvous circuit to '%s'.",
- oldstate->chosen_exit->nickname);
+ safe_str(extend_info_describe(oldstate->chosen_exit)));
return;
}
newstate = newcirc->build_state;
@@ -1253,7 +1315,7 @@ rend_service_launch_establish_intro(rend_service_t *service,
log_info(LD_REND,
"Launching circuit to introduction point %s for service %s",
- escaped_safe_str_client(intro->extend_info->nickname),
+ safe_str_client(extend_info_describe(intro->extend_info)),
service->service_id);
rep_hist_note_used_internal(time(NULL), 1, 0);
@@ -1266,7 +1328,7 @@ rend_service_launch_establish_intro(rend_service_t *service,
if (!launched) {
log_info(LD_REND,
"Can't launch circuit to establish introduction at %s.",
- escaped_safe_str_client(intro->extend_info->nickname));
+ safe_str_client(extend_info_describe(intro->extend_info)));
return -1;
}
@@ -1332,6 +1394,7 @@ rend_service_intro_has_opened(origin_circuit_t *circuit)
crypto_pk_env_t *intro_key;
tor_assert(circuit->_base.purpose == CIRCUIT_PURPOSE_S_ESTABLISH_INTRO);
+ tor_assert(!(circuit->build_state->onehop_tunnel));
tor_assert(circuit->cpath);
tor_assert(circuit->rend_data);
@@ -1350,7 +1413,7 @@ 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) {
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
if (options->ExcludeNodes) {
/* XXXX in some future version, we can test whether the transition is
allowed or not given the actual nodes in the circuit. But for now,
@@ -1364,7 +1427,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;
}
@@ -1474,6 +1550,7 @@ rend_service_rendezvous_has_opened(origin_circuit_t *circuit)
tor_assert(circuit->_base.purpose == CIRCUIT_PURPOSE_S_CONNECT_REND);
tor_assert(circuit->cpath);
tor_assert(circuit->build_state);
+ tor_assert(!(circuit->build_state->onehop_tunnel));
tor_assert(circuit->rend_data);
hop = circuit->build_state->pending_final_cpath;
tor_assert(hop);
@@ -1602,16 +1679,18 @@ directory_post_to_hs_dir(rend_service_descriptor_t *renddesc,
for (j = 0; j < smartlist_len(responsible_dirs); j++) {
char desc_id_base32[REND_DESC_ID_V2_LEN_BASE32 + 1];
char *hs_dir_ip;
+ const node_t *node;
hs_dir = smartlist_get(responsible_dirs, j);
if (smartlist_digest_isin(renddesc->successful_uploads,
hs_dir->identity_digest))
/* Don't upload descriptor if we succeeded in doing so last time. */
continue;
- if (!router_get_by_id_digest(hs_dir->identity_digest)) {
+ node = node_get_by_id(hs_dir->identity_digest);
+ if (!node || !node_has_descriptor(node)) {
log_info(LD_REND, "Not sending publish request for v2 descriptor to "
- "hidden service directory '%s'; we don't have its "
+ "hidden service directory %s; we don't have its "
"router descriptor. Queuing for later upload.",
- hs_dir->nickname);
+ safe_str_client(routerstatus_describe(hs_dir)));
failed_upload = -1;
continue;
}
@@ -1790,7 +1869,7 @@ rend_services_introduce(void)
int changed, prev_intro_nodes;
smartlist_t *intro_nodes;
time_t now;
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
intro_nodes = smartlist_create();
now = time(NULL);
@@ -1819,7 +1898,8 @@ rend_services_introduce(void)
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.",
- intro->extend_info->nickname, service->service_id);
+ 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, {
@@ -1885,7 +1965,8 @@ rend_services_introduce(void)
tor_assert(!crypto_pk_generate_key(intro->intro_key));
smartlist_add(service->intro_nodes, intro);
log_info(LD_REND, "Picked router %s as an intro point for %s.",
- node_get_nickname(node), service->service_id);
+ safe_str_client(node_describe(node)),
+ safe_str_client(service->service_id));
}
/* If there's no need to launch new circuits, stop here. */
@@ -1898,7 +1979,8 @@ rend_services_introduce(void)
r = rend_service_launch_establish_intro(service, intro);
if (r<0) {
log_warn(LD_REND, "Error launching circuit to node %s for service %s.",
- intro->extend_info->nickname, service->service_id);
+ safe_str_client(extend_info_describe(intro->extend_info)),
+ safe_str_client(service->service_id));
}
}
}
diff --git a/src/or/rendservice.h b/src/or/rendservice.h
index 70389afe9..8a2994c4c 100644
--- a/src/or/rendservice.h
+++ b/src/or/rendservice.h
@@ -13,7 +13,7 @@
#define _TOR_RENDSERVICE_H
int num_rend_services(void);
-int rend_config_services(or_options_t *options, int validate_only);
+int rend_config_services(const or_options_t *options, int validate_only);
int rend_service_load_keys(void);
void rend_services_introduce(void);
void rend_consider_services_upload(time_t now);
diff --git a/src/or/rephist.c b/src/or/rephist.c
index 1ab4171a5..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. */
@@ -635,6 +635,7 @@ rep_hist_dump_stats(time_t now, int severity)
digestmap_iter_t *orhist_it;
const char *name1, *name2, *digest1, *digest2;
char hexdigest1[HEX_DIGEST_LEN+1];
+ char hexdigest2[HEX_DIGEST_LEN+1];
or_history_t *or_history;
link_history_t *link_history;
void *or_history_p, *link_history_p;
@@ -695,7 +696,10 @@ rep_hist_dump_stats(time_t now, int severity)
link_history = (link_history_t*) link_history_p;
- ret = tor_snprintf(buffer+len, 2048-len, "%s(%ld/%ld); ", name2,
+ base16_encode(hexdigest2, sizeof(hexdigest2), digest2, DIGEST_LEN);
+ ret = tor_snprintf(buffer+len, 2048-len, "%s [%s](%ld/%ld); ",
+ name2,
+ hexdigest2,
link_history->n_extend_ok,
link_history->n_extend_ok+link_history->n_extend_fail);
if (ret<0)
@@ -890,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,
@@ -1475,7 +1479,7 @@ rep_hist_fill_bandwidth_history(char *buf, size_t len, const bw_array_t *b)
{
char *cp = buf;
int i, n;
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
uint64_t cutoff;
if (b->num_maxes_set <= b->next_max_idx) {
@@ -2110,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)
{
@@ -2129,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.
*
@@ -2293,7 +2300,7 @@ rep_hist_exit_stats_write(time_t now)
/* Try to write to disk. */
statsdir = get_datadir_fname("stats");
- if (check_private_dir(statsdir, CPD_CREATE) < 0) {
+ if (check_private_dir(statsdir, CPD_CREATE, get_options()->User) < 0) {
log_warn(LD_HIST, "Unable to create stats/ directory!");
goto done;
}
@@ -2360,23 +2367,41 @@ typedef struct circ_buffer_stats_t {
/** List of circ_buffer_stats_t. */
static smartlist_t *circuits_for_buffer_stats = NULL;
+/** Remember cell statistics <b>mean_num_cells_in_queue</b>,
+ * <b>mean_time_cells_in_queue</b>, and <b>processed_cells</b> of a
+ * circuit. */
+void
+rep_hist_add_buffer_stats(double mean_num_cells_in_queue,
+ double mean_time_cells_in_queue, uint32_t processed_cells)
+{
+ circ_buffer_stats_t *stat;
+ if (!start_of_buffer_stats_interval)
+ return; /* Not initialized. */
+ stat = tor_malloc_zero(sizeof(circ_buffer_stats_t));
+ stat->mean_num_cells_in_queue = mean_num_cells_in_queue;
+ stat->mean_time_cells_in_queue = mean_time_cells_in_queue;
+ stat->processed_cells = processed_cells;
+ if (!circuits_for_buffer_stats)
+ circuits_for_buffer_stats = smartlist_create();
+ smartlist_add(circuits_for_buffer_stats, stat);
+}
+
/** Remember cell statistics for circuit <b>circ</b> at time
* <b>end_of_interval</b> and reset cell counters in case the circuit
* remains open in the next measurement interval. */
void
rep_hist_buffer_stats_add_circ(circuit_t *circ, time_t end_of_interval)
{
- circ_buffer_stats_t *stat;
time_t start_of_interval;
int interval_length;
or_circuit_t *orcirc;
+ double mean_num_cells_in_queue, mean_time_cells_in_queue;
+ uint32_t processed_cells;
if (CIRCUIT_IS_ORIGIN(circ))
return;
orcirc = TO_OR_CIRCUIT(circ);
if (!orcirc->processed_cells)
return;
- if (!circuits_for_buffer_stats)
- circuits_for_buffer_stats = smartlist_create();
start_of_interval = (circ->timestamp_created.tv_sec >
start_of_buffer_stats_interval) ?
circ->timestamp_created.tv_sec :
@@ -2384,18 +2409,18 @@ rep_hist_buffer_stats_add_circ(circuit_t *circ, time_t end_of_interval)
interval_length = (int) (end_of_interval - start_of_interval);
if (interval_length <= 0)
return;
- stat = tor_malloc_zero(sizeof(circ_buffer_stats_t));
- stat->processed_cells = orcirc->processed_cells;
+ processed_cells = orcirc->processed_cells;
/* 1000.0 for s -> ms; 2.0 because of app-ward and exit-ward queues */
- stat->mean_num_cells_in_queue = interval_length == 0 ? 0.0 :
- (double) orcirc->total_cell_waiting_time /
+ mean_num_cells_in_queue = (double) orcirc->total_cell_waiting_time /
(double) interval_length / 1000.0 / 2.0;
- stat->mean_time_cells_in_queue =
+ mean_time_cells_in_queue =
(double) orcirc->total_cell_waiting_time /
(double) orcirc->processed_cells;
- smartlist_add(circuits_for_buffer_stats, stat);
orcirc->total_cell_waiting_time = 0;
orcirc->processed_cells = 0;
+ rep_hist_add_buffer_stats(mean_num_cells_in_queue,
+ mean_time_cells_in_queue,
+ processed_cells);
}
/** Sorting helper: return -1, 1, or 0 based on comparison of two
@@ -2417,134 +2442,312 @@ _buffer_stats_compare_entries(const void **_a, const void **_b)
void
rep_hist_buffer_stats_term(void)
{
- start_of_buffer_stats_interval = 0;
+ rep_hist_reset_buffer_stats(0);
+}
+
+/** Clear history of circuit statistics and set the measurement interval
+ * start to <b>now</b>. */
+void
+rep_hist_reset_buffer_stats(time_t now)
+{
if (!circuits_for_buffer_stats)
circuits_for_buffer_stats = smartlist_create();
SMARTLIST_FOREACH(circuits_for_buffer_stats, circ_buffer_stats_t *,
stat, tor_free(stat));
smartlist_clear(circuits_for_buffer_stats);
+ start_of_buffer_stats_interval = now;
}
-/** Write buffer statistics to $DATADIR/stats/buffer-stats and return when
- * we would next want to write exit stats. */
-time_t
-rep_hist_buffer_stats_write(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. Caller must
+ * ensure start_of_buffer_stats_interval is in the past. */
+char *
+rep_hist_format_buffer_stats(time_t now)
{
- char *statsdir = NULL, *filename = NULL;
- char written[ISO_TIME_LEN+1];
- open_file_t *open_file = NULL;
- FILE *out;
#define SHARES 10
int processed_cells[SHARES], circs_in_share[SHARES],
number_of_circuits, i;
double queued_cells[SHARES], time_in_queue[SHARES];
- smartlist_t *str_build = smartlist_create();
- char *str = NULL, *buf=NULL;
- circuit_t *circ;
+ char *buf = NULL;
+ smartlist_t *processed_cells_strings, *queued_cells_strings,
+ *time_in_queue_strings;
+ char *processed_cells_string, *queued_cells_string,
+ *time_in_queue_string;
+ char t[ISO_TIME_LEN+1];
+ char *result;
if (!start_of_buffer_stats_interval)
- return 0; /* Not initialized. */
- if (start_of_buffer_stats_interval + WRITE_STATS_INTERVAL > now)
- goto done; /* Not ready to write */
+ return NULL; /* Not initialized. */
- /* add current circuits to stats */
- for (circ = _circuit_get_global_list(); circ; circ = circ->next)
- rep_hist_buffer_stats_add_circ(circ, now);
- /* calculate deciles */
+ 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));
memset(queued_cells, 0, SHARES * sizeof(double));
memset(time_in_queue, 0, SHARES * sizeof(double));
if (!circuits_for_buffer_stats)
circuits_for_buffer_stats = smartlist_create();
- smartlist_sort(circuits_for_buffer_stats,
- _buffer_stats_compare_entries);
number_of_circuits = smartlist_len(circuits_for_buffer_stats);
- if (number_of_circuits < 1) {
- log_info(LD_HIST, "Attempt to write cell statistics to disk failed. "
- "We haven't seen a single circuit to report about.");
- goto done;
+ if (number_of_circuits > 0) {
+ smartlist_sort(circuits_for_buffer_stats,
+ _buffer_stats_compare_entries);
+ i = 0;
+ SMARTLIST_FOREACH_BEGIN(circuits_for_buffer_stats,
+ circ_buffer_stats_t *, stat)
+ {
+ int share = i++ * SHARES / number_of_circuits;
+ processed_cells[share] += stat->processed_cells;
+ queued_cells[share] += stat->mean_num_cells_in_queue;
+ time_in_queue[share] += stat->mean_time_cells_in_queue;
+ circs_in_share[share]++;
+ }
+ SMARTLIST_FOREACH_END(stat);
}
- i = 0;
- SMARTLIST_FOREACH_BEGIN(circuits_for_buffer_stats,
- circ_buffer_stats_t *, stat)
- {
- int share = i++ * SHARES / number_of_circuits;
- processed_cells[share] += stat->processed_cells;
- queued_cells[share] += stat->mean_num_cells_in_queue;
- time_in_queue[share] += stat->mean_time_cells_in_queue;
- circs_in_share[share]++;
- }
- SMARTLIST_FOREACH_END(stat);
- /* clear buffer stats history */
- SMARTLIST_FOREACH(circuits_for_buffer_stats, circ_buffer_stats_t *,
- stat, tor_free(stat));
- smartlist_clear(circuits_for_buffer_stats);
- /* write to file */
- statsdir = get_datadir_fname("stats");
- if (check_private_dir(statsdir, CPD_CREATE) < 0)
- goto done;
- filename = get_datadir_fname2("stats", "buffer-stats");
- out = start_writing_to_stdio_file(filename, OPEN_FLAGS_APPEND,
- 0600, &open_file);
- if (!out)
- goto done;
- format_iso_time(written, now);
- if (fprintf(out, "cell-stats-end %s (%d s)\n", written,
- (unsigned) (now - start_of_buffer_stats_interval)) < 0)
- goto done;
+
+ /* Write deciles to strings. */
+ processed_cells_strings = smartlist_create();
+ queued_cells_strings = smartlist_create();
+ time_in_queue_strings = smartlist_create();
for (i = 0; i < SHARES; i++) {
tor_asprintf(&buf,"%d", !circs_in_share[i] ? 0 :
processed_cells[i] / circs_in_share[i]);
- smartlist_add(str_build, buf);
+ smartlist_add(processed_cells_strings, buf);
}
- str = smartlist_join_strings(str_build, ",", 0, NULL);
- if (fprintf(out, "cell-processed-cells %s\n", str) < 0)
- goto done;
- tor_free(str);
- SMARTLIST_FOREACH(str_build, char *, c, tor_free(c));
- smartlist_clear(str_build);
for (i = 0; i < SHARES; i++) {
tor_asprintf(&buf, "%.2f", circs_in_share[i] == 0 ? 0.0 :
queued_cells[i] / (double) circs_in_share[i]);
- smartlist_add(str_build, buf);
+ smartlist_add(queued_cells_strings, buf);
}
- str = smartlist_join_strings(str_build, ",", 0, NULL);
- if (fprintf(out, "cell-queued-cells %s\n", str) < 0)
- goto done;
- tor_free(str);
- SMARTLIST_FOREACH(str_build, char *, c, tor_free(c));
- smartlist_clear(str_build);
for (i = 0; i < SHARES; i++) {
tor_asprintf(&buf, "%.0f", circs_in_share[i] == 0 ? 0.0 :
time_in_queue[i] / (double) circs_in_share[i]);
- smartlist_add(str_build, buf);
+ smartlist_add(time_in_queue_strings, buf);
}
- str = smartlist_join_strings(str_build, ",", 0, NULL);
- if (fprintf(out, "cell-time-in-queue %s\n", str) < 0)
- goto done;
- tor_free(str);
- SMARTLIST_FOREACH(str_build, char *, c, tor_free(c));
- smartlist_free(str_build);
- str_build = NULL;
- if (fprintf(out, "cell-circuits-per-decile %d\n",
- (number_of_circuits + SHARES - 1) / SHARES) < 0)
+
+ /* Join all observations in single strings. */
+ processed_cells_string = smartlist_join_strings(processed_cells_strings,
+ ",", 0, NULL);
+ queued_cells_string = smartlist_join_strings(queued_cells_strings,
+ ",", 0, NULL);
+ time_in_queue_string = smartlist_join_strings(time_in_queue_strings,
+ ",", 0, NULL);
+ SMARTLIST_FOREACH(processed_cells_strings, char *, cp, tor_free(cp));
+ SMARTLIST_FOREACH(queued_cells_strings, char *, cp, tor_free(cp));
+ SMARTLIST_FOREACH(time_in_queue_strings, char *, cp, tor_free(cp));
+ smartlist_free(processed_cells_strings);
+ smartlist_free(queued_cells_strings);
+ smartlist_free(time_in_queue_strings);
+
+ /* Put everything together. */
+ format_iso_time(t, now);
+ tor_asprintf(&result, "cell-stats-end %s (%d s)\n"
+ "cell-processed-cells %s\n"
+ "cell-queued-cells %s\n"
+ "cell-time-in-queue %s\n"
+ "cell-circuits-per-decile %d\n",
+ t, (unsigned) (now - start_of_buffer_stats_interval),
+ processed_cells_string,
+ queued_cells_string,
+ time_in_queue_string,
+ (number_of_circuits + SHARES - 1) / SHARES);
+ tor_free(processed_cells_string);
+ tor_free(queued_cells_string);
+ tor_free(time_in_queue_string);
+ return result;
+#undef SHARES
+}
+
+/** If 24 hours have passed since the beginning of the current buffer
+ * stats period, write buffer stats to $DATADIR/stats/buffer-stats
+ * (possibly overwriting an existing file) and reset counters. Return
+ * when we would next want to write buffer stats or 0 if we never want to
+ * write. */
+time_t
+rep_hist_buffer_stats_write(time_t now)
+{
+ circuit_t *circ;
+ char *statsdir = NULL, *filename = NULL, *str = NULL;
+
+ if (!start_of_buffer_stats_interval)
+ return 0; /* Not initialized. */
+ if (start_of_buffer_stats_interval + WRITE_STATS_INTERVAL > now)
+ goto done; /* Not ready to write */
+
+ /* Add open circuits to the history. */
+ for (circ = _circuit_get_global_list(); circ; circ = circ->next) {
+ rep_hist_buffer_stats_add_circ(circ, now);
+ }
+
+ /* Generate history string. */
+ str = rep_hist_format_buffer_stats(now);
+
+ /* Reset both buffer history and counters of open circuits. */
+ rep_hist_reset_buffer_stats(now);
+
+ /* Try to write to disk. */
+ statsdir = get_datadir_fname("stats");
+ if (check_private_dir(statsdir, CPD_CREATE, get_options()->User) < 0) {
+ log_warn(LD_HIST, "Unable to create stats/ directory!");
goto done;
- finish_writing_to_file(open_file);
- open_file = NULL;
- start_of_buffer_stats_interval = now;
+ }
+ filename = get_datadir_fname2("stats", "buffer-stats");
+ if (write_str_to_file(filename, str, 0) < 0)
+ log_warn(LD_HIST, "Unable to write buffer stats to disk!");
+
done:
- if (open_file)
- abort_writing_to_file(open_file);
+ tor_free(str);
tor_free(filename);
tor_free(statsdir);
- if (str_build) {
- SMARTLIST_FOREACH(str_build, char *, c, tor_free(c));
- smartlist_free(str_build);
+ 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);
-#undef SHARES
- return start_of_buffer_stats_interval + WRITE_STATS_INTERVAL;
+ 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 ***/
@@ -2711,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)
{
@@ -2720,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,
@@ -2753,7 +2959,7 @@ rep_hist_conn_stats_write(time_t now)
/* Try to write to disk. */
statsdir = get_datadir_fname("stats");
- if (check_private_dir(statsdir, CPD_CREATE) < 0) {
+ if (check_private_dir(statsdir, CPD_CREATE, get_options()->User) < 0) {
log_warn(LD_HIST, "Unable to create stats/ directory!");
goto done;
}
@@ -2790,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 5748748a8..0a3e46ae1 100644
--- a/src/or/rephist.h
+++ b/src/or/rephist.h
@@ -77,6 +77,15 @@ void rep_hist_buffer_stats_add_circ(circuit_t *circ,
time_t end_of_interval);
time_t rep_hist_buffer_stats_write(time_t now);
void rep_hist_buffer_stats_term(void);
+void rep_hist_add_buffer_stats(double mean_num_cells_in_queue,
+ double mean_time_cells_in_queue, uint32_t processed_cells);
+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,
diff --git a/src/or/router.c b/src/or/router.c
index 2b11a5202..b6b96a5ff 100644
--- a/src/or/router.c
+++ b/src/or/router.c
@@ -84,6 +84,11 @@ static authority_cert_t *legacy_key_certificate = NULL;
static void
set_onion_key(crypto_pk_env_t *k)
{
+ if (onionkey && !crypto_pk_cmp_keys(onionkey, k)) {
+ /* k is already our onion key; free it and return */
+ crypto_free_pk_env(k);
+ return;
+ }
tor_mutex_acquire(key_lock);
crypto_free_pk_env(onionkey);
onionkey = k;
@@ -495,7 +500,7 @@ init_keys(void)
char digest[DIGEST_LEN];
char v3_digest[DIGEST_LEN];
char *cp;
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
dirinfo_type_t type;
time_t now = time(NULL);
trusted_dir_server_t *ds;
@@ -528,19 +533,19 @@ init_keys(void)
if (tor_tls_context_init(0,
get_tlsclient_identity_key(),
NULL,
- MAX_SSL_KEY_LIFETIME) < 0) {
+ MAX_SSL_KEY_LIFETIME_ADVERTISED) < 0) {
log_err(LD_GENERAL,"Error creating TLS context for Tor client.");
return -1;
}
return 0;
}
/* Make sure DataDirectory exists, and is private. */
- if (check_private_dir(options->DataDirectory, CPD_CREATE)) {
+ if (check_private_dir(options->DataDirectory, CPD_CREATE, options->User)) {
return -1;
}
/* Check the key directory. */
keydir = get_datadir_fname("keys");
- if (check_private_dir(keydir, CPD_CREATE)) {
+ if (check_private_dir(keydir, CPD_CREATE, options->User)) {
tor_free(keydir);
return -1;
}
@@ -624,7 +629,7 @@ init_keys(void)
if (tor_tls_context_init(public_server_mode(options),
get_tlsclient_identity_key(),
get_server_identity_key(),
- MAX_SSL_KEY_LIFETIME) < 0) {
+ MAX_SSL_KEY_LIFETIME_ADVERTISED) < 0) {
log_err(LD_GENERAL,"Error initializing TLS context");
return -1;
}
@@ -707,7 +712,7 @@ init_keys(void)
ds = router_get_trusteddirserver_by_digest(digest);
if (!ds) {
ds = add_trusted_dir_server(options->Nickname, NULL,
- router_get_advertised_dir_port(options),
+ router_get_advertised_dir_port(options, 0),
router_get_advertised_or_port(options),
digest,
v3_digest,
@@ -763,7 +768,7 @@ router_reset_reachability(void)
int
check_whether_orport_reachable(void)
{
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
return options->AssumeReachable ||
can_reach_or_port;
}
@@ -772,7 +777,7 @@ check_whether_orport_reachable(void)
int
check_whether_dirport_reachable(void)
{
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
return !options->DirPort ||
options->AssumeReachable ||
we_are_hibernating() ||
@@ -787,7 +792,7 @@ check_whether_dirport_reachable(void)
* a DirPort.
*/
static int
-decide_to_advertise_dirport(or_options_t *options, uint16_t dir_port)
+decide_to_advertise_dirport(const or_options_t *options, uint16_t dir_port)
{
static int advertising=1; /* start out assuming we will advertise */
int new_choice=1;
@@ -805,6 +810,8 @@ decide_to_advertise_dirport(or_options_t *options, uint16_t dir_port)
return 0;
if (!check_whether_dirport_reachable())
return 0;
+ if (!router_get_advertised_dir_port(options, dir_port))
+ return 0;
/* Section two: reasons to publish or not publish that the user
* might find surprising. These are generally config options that
@@ -853,7 +860,7 @@ consider_testing_reachability(int test_or, int test_dir)
const routerinfo_t *me = router_get_my_routerinfo();
int orport_reachable = check_whether_orport_reachable();
tor_addr_t addr;
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
if (!me)
return;
@@ -971,7 +978,7 @@ router_perform_bandwidth_test(int num_circs, time_t now)
* directory server.
*/
int
-authdir_mode(or_options_t *options)
+authdir_mode(const or_options_t *options)
{
return options->AuthoritativeDir != 0;
}
@@ -979,7 +986,7 @@ authdir_mode(or_options_t *options)
* directory server.
*/
int
-authdir_mode_v1(or_options_t *options)
+authdir_mode_v1(const or_options_t *options)
{
return authdir_mode(options) && options->V1AuthoritativeDir != 0;
}
@@ -987,7 +994,7 @@ authdir_mode_v1(or_options_t *options)
* directory server.
*/
int
-authdir_mode_v2(or_options_t *options)
+authdir_mode_v2(const or_options_t *options)
{
return authdir_mode(options) && options->V2AuthoritativeDir != 0;
}
@@ -995,13 +1002,13 @@ authdir_mode_v2(or_options_t *options)
* directory server.
*/
int
-authdir_mode_v3(or_options_t *options)
+authdir_mode_v3(const or_options_t *options)
{
return authdir_mode(options) && options->V3AuthoritativeDir != 0;
}
/** Return true iff we are a v1, v2, or v3 directory authority. */
int
-authdir_mode_any_main(or_options_t *options)
+authdir_mode_any_main(const or_options_t *options)
{
return options->V1AuthoritativeDir ||
options->V2AuthoritativeDir ||
@@ -1010,16 +1017,16 @@ authdir_mode_any_main(or_options_t *options)
/** Return true if we believe ourselves to be any kind of
* authoritative directory beyond just a hidserv authority. */
int
-authdir_mode_any_nonhidserv(or_options_t *options)
+authdir_mode_any_nonhidserv(const or_options_t *options)
{
return options->BridgeAuthoritativeDir ||
authdir_mode_any_main(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(or_options_t *options, int purpose)
+authdir_mode_handles_descs(const or_options_t *options, int purpose)
{
if (purpose < 0)
return authdir_mode_any_nonhidserv(options);
@@ -1034,7 +1041,7 @@ authdir_mode_handles_descs(or_options_t *options, int purpose)
* publishes its own network statuses.
*/
int
-authdir_mode_publishes_statuses(or_options_t *options)
+authdir_mode_publishes_statuses(const or_options_t *options)
{
if (authdir_mode_bridge(options))
return 0;
@@ -1044,7 +1051,7 @@ authdir_mode_publishes_statuses(or_options_t *options)
* tests reachability of the descriptors it learns about.
*/
int
-authdir_mode_tests_reachability(or_options_t *options)
+authdir_mode_tests_reachability(const or_options_t *options)
{
return authdir_mode_handles_descs(options, -1);
}
@@ -1052,7 +1059,7 @@ authdir_mode_tests_reachability(or_options_t *options)
* directory server.
*/
int
-authdir_mode_bridge(or_options_t *options)
+authdir_mode_bridge(const or_options_t *options)
{
return authdir_mode(options) && options->BridgeAuthoritativeDir != 0;
}
@@ -1060,7 +1067,7 @@ authdir_mode_bridge(or_options_t *options)
/** Return true iff we are trying to be a server.
*/
int
-server_mode(or_options_t *options)
+server_mode(const or_options_t *options)
{
if (options->ClientOnly) return 0;
return (options->ORPort != 0 || options->ORListenAddress);
@@ -1069,7 +1076,7 @@ server_mode(or_options_t *options)
/** Return true iff we are trying to be a non-bridge server.
*/
int
-public_server_mode(or_options_t *options)
+public_server_mode(const or_options_t *options)
{
if (!server_mode(options)) return 0;
return (!options->BridgeRelay);
@@ -1079,7 +1086,7 @@ public_server_mode(or_options_t *options)
* in the consensus mean that we don't want to allow exits from circuits
* we got from addresses not known to be servers. */
int
-should_refuse_unknown_exits(or_options_t *options)
+should_refuse_unknown_exits(const or_options_t *options)
{
if (options->RefuseUnknownExits != -1) {
return options->RefuseUnknownExits;
@@ -1109,14 +1116,12 @@ set_server_advertised(int s)
server_is_advertised = s;
}
-/** Return true iff we are trying to be a socks proxy. */
+/** Return true iff we are trying to proxy client connections. */
int
-proxy_mode(or_options_t *options)
+proxy_mode(const or_options_t *options)
{
- return (options->SocksPort != 0 ||
- options->TransPort != 0 ||
- options->NATDPort != 0 ||
- options->DNSPort != 0);
+ (void)options;
+ return smartlist_len(get_configured_client_ports()) > 0;
}
/** Decide if we're a publishable server. We are a publishable server if:
@@ -1132,7 +1137,7 @@ proxy_mode(or_options_t *options)
static int
decide_if_publishable_server(void)
{
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
if (options->ClientOnly)
return 0;
@@ -1142,6 +1147,8 @@ decide_if_publishable_server(void)
return 0;
if (authdir_mode(options))
return 1;
+ if (!router_get_advertised_or_port(options))
+ return 0;
return check_whether_orport_reachable();
}
@@ -1175,7 +1182,7 @@ consider_publishable_server(int force)
* the one configured in the ORPort option, or the one we actually bound to
* if ORPort is "auto". */
uint16_t
-router_get_advertised_or_port(or_options_t *options)
+router_get_advertised_or_port(const or_options_t *options)
{
if (options->ORPort == CFG_AUTO_PORT) {
connection_t *c = connection_get_by_type(CONN_TYPE_OR_LISTENER);
@@ -1186,12 +1193,16 @@ router_get_advertised_or_port(or_options_t *options)
return options->ORPort;
}
-/** Return the port that we should advertise as our DirPort; this is either
- * the one configured in the DirPort option, or the one we actually bound to
- * if DirPort is "auto". */
+/** Return the port that we should advertise as our DirPort;
+ * this is one of three possibilities:
+ * The one that is passed as <b>dirport</b> if the DirPort option is 0, or
+ * the one configured in the DirPort option,
+ * or the one we actually bound to if DirPort is "auto". */
uint16_t
-router_get_advertised_dir_port(or_options_t *options)
+router_get_advertised_dir_port(const or_options_t *options, uint16_t dirport)
{
+ if (!options->DirPort)
+ return dirport;
if (options->DirPort == CFG_AUTO_PORT) {
connection_t *c = connection_get_by_type(CONN_TYPE_DIR_LISTENER);
if (c)
@@ -1209,9 +1220,14 @@ router_get_advertised_dir_port(or_options_t *options)
static routerinfo_t *desc_routerinfo = NULL;
/** My extrainfo */
static extrainfo_t *desc_extrainfo = NULL;
+/** Why did we most recently decide to regenerate our descriptor? Used to
+ * tell the authorities why we're sending it to them. */
+static const char *desc_gen_reason = NULL;
/** Since when has our descriptor been "clean"? 0 if we need to regenerate it
* now. */
static time_t desc_clean_since = 0;
+/** Why did we mark the descriptor dirty? */
+static const char *desc_dirty_reason = NULL;
/** Boolean: do we need to regenerate the above? */
static int desc_needs_upload = 0;
@@ -1378,6 +1394,14 @@ router_get_my_extrainfo(void)
return desc_extrainfo;
}
+/** Return a human-readable string describing what triggered us to generate
+ * our current descriptor, or NULL if we don't know. */
+const char *
+router_get_descriptor_gen_reason(void)
+{
+ return desc_gen_reason;
+}
+
/** A list of nicknames that we've warned about including in our family
* declaration verbatim rather than as digests. */
static smartlist_t *warned_nonexistent_family = NULL;
@@ -1389,7 +1413,7 @@ static int router_guess_address_from_dir_headers(uint32_t *guess);
* dirserver headers. Place the answer in *<b>addr</b> and return
* 0 on success, else return -1 if we have no guess. */
int
-router_pick_published_address(or_options_t *options, uint32_t *addr)
+router_pick_published_address(const or_options_t *options, uint32_t *addr)
{
if (resolve_my_address(LOG_INFO, options, addr, NULL) < 0) {
log_info(LD_CONFIG, "Could not determine our address locally. "
@@ -1416,12 +1440,13 @@ router_rebuild_descriptor(int force)
uint32_t addr;
char platform[256];
int hibernating = we_are_hibernating();
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
if (desc_clean_since && !force)
return 0;
- if (router_pick_published_address(options, &addr) < 0) {
+ if (router_pick_published_address(options, &addr) < 0 ||
+ router_get_advertised_or_port(options) == 0) {
/* Stop trying to rebuild our descriptor every second. We'll
* learn that it's time to try again when ip_address_changed()
* marks it dirty. */
@@ -1437,7 +1462,7 @@ router_rebuild_descriptor(int force)
ri->nickname = tor_strdup(options->Nickname);
ri->addr = addr;
ri->or_port = router_get_advertised_or_port(options);
- ri->dir_port = router_get_advertised_dir_port(options);
+ ri->dir_port = router_get_advertised_dir_port(options, 0);
ri->cache_info.published_on = time(NULL);
ri->onion_pkey = crypto_pk_dup_key(get_onion_key()); /* must invoke from
* main thread */
@@ -1594,16 +1619,56 @@ router_rebuild_descriptor(int force)
desc_clean_since = time(NULL);
desc_needs_upload = 1;
+ desc_gen_reason = desc_dirty_reason;
+ desc_dirty_reason = NULL;
control_event_my_descriptor_changed();
return 0;
}
-/** Mark descriptor out of date if it's older than <b>when</b> */
+/** If our router descriptor ever goes this long without being regenerated
+ * because something changed, we force an immediate regenerate-and-upload. */
+#define FORCE_REGENERATE_DESCRIPTOR_INTERVAL (18*60*60)
+
+/** If our router descriptor seems to be missing or unacceptable according
+ * to the authorities, regenerate and reupload it _this_ often. */
+#define FAST_RETRY_DESCRIPTOR_INTERVAL (90*60)
+
+/** Mark descriptor out of date if it's been "too long" since we last tried
+ * to upload one. */
void
-mark_my_descriptor_dirty_if_older_than(time_t when)
+mark_my_descriptor_dirty_if_too_old(time_t now)
{
- if (desc_clean_since < when)
+ networkstatus_t *ns;
+ const routerstatus_t *rs;
+ const char *retry_fast_reason = NULL; /* Set if we should retry frequently */
+ const time_t slow_cutoff = now - FORCE_REGENERATE_DESCRIPTOR_INTERVAL;
+ const time_t fast_cutoff = now - FAST_RETRY_DESCRIPTOR_INTERVAL;
+
+ /* If it's already dirty, don't mark it. */
+ if (! desc_clean_since)
+ return;
+
+ /* If it's older than FORCE_REGENERATE_DESCRIPTOR_INTERVAL, it's always
+ * time to rebuild it. */
+ if (desc_clean_since < slow_cutoff) {
mark_my_descriptor_dirty("time for new descriptor");
+ return;
+ }
+ /* Now we see whether we want to be retrying frequently or no. The
+ * rule here is that we'll retry frequently if we aren't listed in the
+ * live consensus we have, or if the publication time of the
+ * descriptor listed for us in the consensus is very old. */
+ ns = networkstatus_get_live_consensus(now);
+ if (ns) {
+ rs = networkstatus_vote_find_entry(ns, server_identitykey_digest);
+ if (rs == NULL)
+ retry_fast_reason = "not listed in consensus";
+ else if (rs->published_on < slow_cutoff)
+ retry_fast_reason = "version listed in consensus is quite old";
+ }
+
+ if (retry_fast_reason && desc_clean_since < fast_cutoff)
+ mark_my_descriptor_dirty(retry_fast_reason);
}
/** Call when the current descriptor is out of date. */
@@ -1612,6 +1677,8 @@ mark_my_descriptor_dirty(const char *reason)
{
desc_clean_since = 0;
log_info(LD_OR, "Decided to publish new relay descriptor: %s", reason);
+ if (!desc_dirty_reason)
+ desc_dirty_reason = reason;
}
/** How frequently will we republish our descriptor because of large (factor
@@ -1677,7 +1744,7 @@ void
check_descriptor_ipaddress_changed(time_t now)
{
uint32_t prev, cur;
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
(void) now;
if (!desc_routerinfo)
@@ -1709,7 +1776,7 @@ router_new_address_suggestion(const char *suggestion,
{
uint32_t addr, cur = 0;
struct in_addr in;
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
/* first, learn what the IP address actually is */
if (!tor_inet_aton(suggestion, &in)) {
@@ -1808,7 +1875,7 @@ router_dump_router_to_string(char *s, size_t maxlen, routerinfo_t *router,
int result=0;
addr_policy_t *tmpe;
char *family_line;
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
/* Make sure the identity key matches the one in the routerinfo. */
if (crypto_pk_cmp_keys(ident_key, router->identity_pkey)) {
@@ -2050,7 +2117,7 @@ int
extrainfo_dump_to_string(char **s_out, extrainfo_t *extrainfo,
crypto_pk_env_t *ident_key)
{
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
char identity[HEX_DIGEST_LEN+1];
char published[ISO_TIME_LEN+1];
char digest[DIGEST_LEN];
@@ -2235,6 +2302,186 @@ is_legal_hexdigest(const char *s)
strspn(s,HEX_CHARACTERS)==HEX_DIGEST_LEN);
}
+/** Use <b>buf</b> (which must be at least NODE_DESC_BUF_LEN bytes long) to
+ * hold a human-readable description of a node with identity digest
+ * <b>id_digest</b>, named-status <b>is_named</b>, nickname <b>nickname</b>,
+ * and address <b>addr</b> or <b>addr32h</b>.
+ *
+ * The <b>nickname</b> and <b>addr</b> fields are optional and may be set to
+ * NULL. The <b>addr32h</b> field is optional and may be set to 0.
+ *
+ * Return a pointer to the front of <b>buf</b>.
+ */
+const char *
+format_node_description(char *buf,
+ const char *id_digest,
+ int is_named,
+ const char *nickname,
+ const tor_addr_t *addr,
+ uint32_t addr32h)
+{
+ char *cp;
+
+ if (!buf)
+ return "<NULL BUFFER>";
+
+ buf[0] = '$';
+ base16_encode(buf+1, HEX_DIGEST_LEN+1, id_digest, DIGEST_LEN);
+ cp = buf+1+HEX_DIGEST_LEN;
+ if (nickname) {
+ buf[1+HEX_DIGEST_LEN] = is_named ? '=' : '~';
+ strlcpy(buf+1+HEX_DIGEST_LEN+1, nickname, MAX_NICKNAME_LEN+1);
+ cp += strlen(cp);
+ }
+ if (addr32h || addr) {
+ memcpy(cp, " at ", 4);
+ cp += 4;
+ if (addr) {
+ tor_addr_to_str(cp, addr, TOR_ADDR_BUF_LEN, 0);
+ } else {
+ struct in_addr in;
+ in.s_addr = htonl(addr32h);
+ tor_inet_ntoa(&in, cp, INET_NTOA_BUF_LEN);
+ }
+ }
+ return buf;
+}
+
+/** Use <b>buf</b> (which must be at least NODE_DESC_BUF_LEN bytes long) to
+ * hold a human-readable description of <b>ri</b>.
+ *
+ *
+ * Return a pointer to the front of <b>buf</b>.
+ */
+const char *
+router_get_description(char *buf, const routerinfo_t *ri)
+{
+ if (!ri)
+ return "<null>";
+ return format_node_description(buf,
+ ri->cache_info.identity_digest,
+ router_is_named(ri),
+ ri->nickname,
+ NULL,
+ ri->addr);
+}
+
+/** Use <b>buf</b> (which must be at least NODE_DESC_BUF_LEN bytes long) to
+ * hold a human-readable description of <b>node</b>.
+ *
+ * Return a pointer to the front of <b>buf</b>.
+ */
+const char *
+node_get_description(char *buf, const node_t *node)
+{
+ const char *nickname = NULL;
+ uint32_t addr32h = 0;
+ int is_named = 0;
+
+ if (!node)
+ return "<null>";
+
+ if (node->rs) {
+ nickname = node->rs->nickname;
+ is_named = node->rs->is_named;
+ addr32h = node->rs->addr;
+ } else if (node->ri) {
+ nickname = node->ri->nickname;
+ addr32h = node->ri->addr;
+ }
+
+ return format_node_description(buf,
+ node->identity,
+ is_named,
+ nickname,
+ NULL,
+ addr32h);
+}
+
+/** Use <b>buf</b> (which must be at least NODE_DESC_BUF_LEN bytes long) to
+ * hold a human-readable description of <b>rs</b>.
+ *
+ * Return a pointer to the front of <b>buf</b>.
+ */
+const char *
+routerstatus_get_description(char *buf, const routerstatus_t *rs)
+{
+ if (!rs)
+ return "<null>";
+ return format_node_description(buf,
+ rs->identity_digest,
+ rs->is_named,
+ rs->nickname,
+ NULL,
+ rs->addr);
+}
+
+/** Use <b>buf</b> (which must be at least NODE_DESC_BUF_LEN bytes long) to
+ * hold a human-readable description of <b>ei</b>.
+ *
+ * Return a pointer to the front of <b>buf</b>.
+ */
+const char *
+extend_info_get_description(char *buf, const extend_info_t *ei)
+{
+ if (!ei)
+ return "<null>";
+ return format_node_description(buf,
+ ei->identity_digest,
+ 0,
+ ei->nickname,
+ &ei->addr,
+ 0);
+}
+
+/** Return a human-readable description of the routerinfo_t <b>ri</b>.
+ *
+ * This function is not thread-safe. Each call to this function invalidates
+ * previous values returned by this function.
+ */
+const char *
+router_describe(const routerinfo_t *ri)
+{
+ static char buf[NODE_DESC_BUF_LEN];
+ return router_get_description(buf, ri);
+}
+
+/** Return a human-readable description of the node_t <b>node</b>.
+ *
+ * This function is not thread-safe. Each call to this function invalidates
+ * previous values returned by this function.
+ */
+const char *
+node_describe(const node_t *node)
+{
+ static char buf[NODE_DESC_BUF_LEN];
+ return node_get_description(buf, node);
+}
+
+/** Return a human-readable description of the routerstatus_t <b>rs</b>.
+ *
+ * This function is not thread-safe. Each call to this function invalidates
+ * previous values returned by this function.
+ */
+const char *
+routerstatus_describe(const routerstatus_t *rs)
+{
+ static char buf[NODE_DESC_BUF_LEN];
+ return routerstatus_get_description(buf, rs);
+}
+
+/** Return a human-readable description of the extend_info_t <b>ri</b>.
+ *
+ * This function is not thread-safe. Each call to this function invalidates
+ * previous values returned by this function.
+ */
+const char *
+extend_info_describe(const extend_info_t *ei)
+{
+ static char buf[NODE_DESC_BUF_LEN];
+ return extend_info_get_description(buf, ei);
+}
+
/** Set <b>buf</b> (which must have MAX_VERBOSE_NICKNAME_LEN+1 bytes) to the
* verbose representation of the identity of <b>router</b>. The format is:
* A dollar sign.
diff --git a/src/or/router.h b/src/or/router.h
index 2e5d44f35..f9d156cb0 100644
--- a/src/or/router.h
+++ b/src/or/router.h
@@ -39,29 +39,30 @@ void router_orport_found_reachable(void);
void router_dirport_found_reachable(void);
void router_perform_bandwidth_test(int num_circs, time_t now);
-int authdir_mode(or_options_t *options);
-int authdir_mode_v1(or_options_t *options);
-int authdir_mode_v2(or_options_t *options);
-int authdir_mode_v3(or_options_t *options);
-int authdir_mode_any_main(or_options_t *options);
-int authdir_mode_any_nonhidserv(or_options_t *options);
-int authdir_mode_handles_descs(or_options_t *options, int purpose);
-int authdir_mode_publishes_statuses(or_options_t *options);
-int authdir_mode_tests_reachability(or_options_t *options);
-int authdir_mode_bridge(or_options_t *options);
+int authdir_mode(const or_options_t *options);
+int authdir_mode_v1(const or_options_t *options);
+int authdir_mode_v2(const or_options_t *options);
+int authdir_mode_v3(const or_options_t *options);
+int authdir_mode_any_main(const or_options_t *options);
+int authdir_mode_any_nonhidserv(const or_options_t *options);
+int authdir_mode_handles_descs(const or_options_t *options, int purpose);
+int authdir_mode_publishes_statuses(const or_options_t *options);
+int authdir_mode_tests_reachability(const or_options_t *options);
+int authdir_mode_bridge(const or_options_t *options);
-uint16_t router_get_advertised_or_port(or_options_t *options);
-uint16_t router_get_advertised_dir_port(or_options_t *options);
+uint16_t 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);
-int server_mode(or_options_t *options);
-int public_server_mode(or_options_t *options);
+int server_mode(const or_options_t *options);
+int public_server_mode(const or_options_t *options);
int advertised_server_mode(void);
-int proxy_mode(or_options_t *options);
+int proxy_mode(const or_options_t *options);
void consider_publishable_server(int force);
-int should_refuse_unknown_exits(or_options_t *options);
+int should_refuse_unknown_exits(const or_options_t *options);
void router_upload_dir_desc_to_dirservers(int force);
-void mark_my_descriptor_dirty_if_older_than(time_t when);
+void mark_my_descriptor_dirty_if_too_old(time_t now);
void mark_my_descriptor_dirty(const char *reason);
void check_descriptor_bandwidth_changed(time_t now);
void check_descriptor_ipaddress_changed(time_t now);
@@ -72,11 +73,12 @@ int router_my_exit_policy_is_reject_star(void);
const routerinfo_t *router_get_my_routerinfo(void);
extrainfo_t *router_get_my_extrainfo(void);
const char *router_get_my_descriptor(void);
+const char *router_get_descriptor_gen_reason(void);
int router_digest_is_me(const char *digest);
int router_extrainfo_digest_is_me(const char *digest);
int router_is_me(const routerinfo_t *router);
int router_fingerprint_is_me(const char *fp);
-int router_pick_published_address(or_options_t *options, uint32_t *addr);
+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);
@@ -85,6 +87,30 @@ int extrainfo_dump_to_string(char **s, extrainfo_t *extrainfo,
int is_legal_nickname(const char *s);
int is_legal_nickname_or_hexdigest(const char *s);
int is_legal_hexdigest(const char *s);
+
+/**
+ * Longest allowed output of format_node_description, plus 1 character for
+ * NUL. This allows space for:
+ * "$FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF~xxxxxxxxxxxxxxxxxxx at"
+ * " [ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255]"
+ * plus a terminating NUL.
+ */
+#define NODE_DESC_BUF_LEN (MAX_VERBOSE_NICKNAME_LEN+4+TOR_ADDR_BUF_LEN)
+const char *format_node_description(char *buf,
+ const char *id_digest,
+ int is_named,
+ const char *nickname,
+ const tor_addr_t *addr,
+ uint32_t addr32h);
+const char *router_get_description(char *buf, const routerinfo_t *ri);
+const char *node_get_description(char *buf, const node_t *node);
+const char *routerstatus_get_description(char *buf, const routerstatus_t *rs);
+const char *extend_info_get_description(char *buf, const extend_info_t *ei);
+const char *router_describe(const routerinfo_t *ri);
+const char *node_describe(const node_t *node);
+const char *routerstatus_describe(const routerstatus_t *ri);
+const char *extend_info_describe(const extend_info_t *ei);
+
void router_get_verbose_nickname(char *buf, const routerinfo_t *router);
void routerstatus_get_verbose_nickname(char *buf,
const routerstatus_t *router);
diff --git a/src/or/routerlist.c b/src/or/routerlist.c
index 5ce50aa46..d97b978f4 100644
--- a/src/or/routerlist.c
+++ b/src/or/routerlist.c
@@ -57,7 +57,7 @@ static const char *signed_descriptor_get_body_impl(
static void list_pending_downloads(digestmap_t *result,
int purpose, const char *prefix);
static void launch_dummy_descriptor_download_as_needed(time_t now,
- or_options_t *options);
+ const or_options_t *options);
DECLARE_TYPED_DIGESTMAP_FNS(sdmap_, digest_sd_map_t, signed_descriptor_t)
DECLARE_TYPED_DIGESTMAP_FNS(rimap_, digest_ri_map_t, routerinfo_t)
@@ -1077,7 +1077,7 @@ router_pick_trusteddirserver(dirinfo_type_t type, int flags)
static const routerstatus_t *
router_pick_directory_server_impl(dirinfo_type_t type, int flags)
{
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
const node_t *result;
smartlist_t *direct, *tunnel;
smartlist_t *trusted_direct, *trusted_tunnel;
@@ -1132,7 +1132,7 @@ router_pick_directory_server_impl(dirinfo_type_t type, int flags)
if ((type & MICRODESC_DIRINFO) && !is_trusted &&
!node->rs->version_supports_microdesc_cache)
continue;
- if (try_excluding && options->ExcludeNodes &&
+ if (try_excluding &&
routerset_contains_routerstatus(options->ExcludeNodes, status,
country)) {
++n_excluded;
@@ -1200,7 +1200,7 @@ static const routerstatus_t *
router_pick_trusteddirserver_impl(dirinfo_type_t type, int flags,
int *n_busy_out)
{
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
smartlist_t *direct, *tunnel;
smartlist_t *overloaded_direct, *overloaded_tunnel;
const routerinfo_t *me = router_get_my_routerinfo();
@@ -1237,7 +1237,7 @@ router_pick_trusteddirserver_impl(dirinfo_type_t type, int flags,
continue;
if (requireother && me && router_digest_is_me(d->digest))
continue;
- if (try_excluding && options->ExcludeNodes &&
+ if (try_excluding &&
routerset_contains_routerstatus(options->ExcludeNodes,
&d->fake_status, -1)) {
++n_excluded;
@@ -1357,22 +1357,34 @@ addrs_in_same_network_family(const tor_addr_t *a1,
return 0 == tor_addr_compare_masked(a1, a2, 16, CMP_SEMANTIC);
}
-/** Add all the family of <b>router</b> to the smartlist <b>sl</b>.
- * This is used to make sure we don't pick siblings in a single path,
- * or pick more than one relay from a family for our entry guard list.
+/**
+ * Add all the family of <b>node</b>, including <b>node</b> itself, to
+ * the smartlist <b>sl</b>.
+ *
+ * This is used to make sure we don't pick siblings in a single path, or
+ * pick more than one relay from a family for our entry guard list.
+ * Note that a node may be added to <b>sl</b> more than once if it is
+ * part of <b>node</b>'s family for more than one reason.
*/
void
-nodelist_add_node_family(smartlist_t *sl, const node_t *node)
+nodelist_add_node_and_family(smartlist_t *sl, const node_t *node)
{
/* XXXX MOVE */
const smartlist_t *all_nodes = nodelist_get_list();
const smartlist_t *declared_family;
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
tor_assert(node);
declared_family = node_get_declared_family(node);
+ /* Let's make sure that we have the node itself, if it's a real node. */
+ {
+ const node_t *real_node = node_get_by_id(node->identity);
+ if (real_node)
+ smartlist_add(sl, (node_t*)real_node);
+ }
+
/* First, add any nodes with similar network addresses. */
if (options->EnforceDistinctSubnets) {
tor_addr_t node_addr;
@@ -1417,13 +1429,14 @@ nodelist_add_node_family(smartlist_t *sl, const node_t *node)
}
}
-/** Given a <b>router</b>, add every node_t in its family to <b>sl</b>.
+/** Given a <b>router</b>, add every node_t in its family (including the
+ * node itself</b>) to <b>sl</b>.
*
* Note the type mismatch: This function takes a routerinfo, but adds nodes
* to the smartlist!
*/
static void
-routerlist_add_nodes_in_family(smartlist_t *sl, const routerinfo_t *router)
+routerlist_add_node_and_family(smartlist_t *sl, const routerinfo_t *router)
{
/* XXXX MOVE ? */
node_t fake_node;
@@ -1434,7 +1447,7 @@ routerlist_add_nodes_in_family(smartlist_t *sl, const routerinfo_t *router)
memcpy(fake_node.identity, router->cache_info.identity_digest, DIGEST_LEN);
node = &fake_node;
}
- nodelist_add_node_family(sl, node);
+ nodelist_add_node_and_family(sl, node);
}
/** Return true iff <b>node</b> is named by some nickname in <b>lst</b>. */
@@ -1456,7 +1469,7 @@ int
nodes_in_same_family(const node_t *node1, const node_t *node2)
{
/* XXXX MOVE */
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
/* Are they in the same family because of their addresses? */
if (options->EnforceDistinctSubnets) {
@@ -1565,7 +1578,7 @@ router_find_exact_exit_enclave(const char *address, uint16_t port)
uint32_t addr;
struct in_addr in;
tor_addr_t a;
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
if (!tor_inet_aton(address, &in))
return NULL; /* it's not an IP already */
@@ -1818,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);
@@ -1827,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);
@@ -1852,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);
@@ -2057,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),
@@ -2171,12 +2184,8 @@ router_choose_random_node(smartlist_t *excludedsmartlist,
});
}
- if ((r = routerlist_find_my_routerinfo())) {
- const node_t *me = node_get_by_id(r->cache_info.identity_digest);
- if (me)
- smartlist_add(excludednodes, (void *)me);
- routerlist_add_nodes_in_family(excludednodes, r);
- }
+ if ((r = routerlist_find_my_routerinfo()))
+ routerlist_add_node_and_family(excludednodes, r);
router_add_running_nodes_to_smartlist(sl, allow_invalid,
need_uptime, need_capacity,
@@ -2274,6 +2283,8 @@ hex_digest_nickname_matches(const char *hexdigest, const char *identity_digest,
return 0;
if (nn_char == '=' || nn_char == '~') {
+ if (!nickname)
+ return 0;
if (strcasecmp(nn_buf, nickname))
return 0;
if (nn_char == '=' && !is_named)
@@ -2285,7 +2296,7 @@ hex_digest_nickname_matches(const char *hexdigest, const char *identity_digest,
/* Return true iff <b>router</b> is listed as named in the current
* consensus. */
-static int
+int
router_is_named(const routerinfo_t *router)
{
const char *digest =
@@ -3230,10 +3241,8 @@ router_set_status(const char *digest, int up)
node = node_get_mutable_by_id(digest);
if (node) {
#if 0
- char buf[MAX_VERBOSE_NICKNAME_LEN+1];
- node_get_verbose_nickname(node,buf);
log_debug(LD_DIR,"Marking router %s as %s.",
- buf, up ? "up" : "down");
+ node_describe(node), up ? "up" : "down");
#endif
if (!up && node_is_me(node) && !we_are_hibernating())
log_warn(LD_NET, "We just marked ourself as down. Are your external "
@@ -3269,11 +3278,12 @@ router_add_to_routerlist(routerinfo_t *router, const char **msg,
int from_cache, int from_fetch)
{
const char *id_digest;
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
int authdir = authdir_mode_handles_descs(options, router->purpose);
int authdir_believes_valid = 0;
routerinfo_t *old_router;
- networkstatus_t *consensus = networkstatus_get_latest_consensus();
+ networkstatus_t *consensus =
+ networkstatus_get_latest_consensus_by_flavor(FLAV_NS);
const smartlist_t *networkstatus_v2_list = networkstatus_get_v2_list();
int in_consensus = 0;
@@ -3302,11 +3312,12 @@ router_add_to_routerlist(routerinfo_t *router, const char **msg,
router->purpose == ROUTER_PURPOSE_BRIDGE &&
!was_bridge) {
log_info(LD_DIR, "Replacing non-bridge descriptor with bridge "
- "descriptor for router '%s'", router->nickname);
+ "descriptor for router %s",
+ router_describe(router));
} else {
log_info(LD_DIR,
- "Dropping descriptor that we already have for router '%s'",
- router->nickname);
+ "Dropping descriptor that we already have for router %s",
+ router_describe(router));
*msg = "Router descriptor was not new.";
routerinfo_free(router);
return ROUTER_WAS_NOT_NEW;
@@ -3330,8 +3341,8 @@ router_add_to_routerlist(routerinfo_t *router, const char **msg,
/* We asked for it, so some networkstatus must have listed it when we
* did. Save it if we're a cache in case somebody else asks for it. */
log_info(LD_DIR,
- "Received a no-longer-recognized descriptor for router '%s'",
- router->nickname);
+ "Received a no-longer-recognized descriptor for router %s",
+ router_describe(router));
*msg = "Router descriptor is not referenced by any network-status.";
/* Only journal this desc if we'll be serving it. */
@@ -3383,8 +3394,9 @@ router_add_to_routerlist(routerinfo_t *router, const char **msg,
if (router->purpose == ROUTER_PURPOSE_BRIDGE && from_cache &&
!authdir_mode_bridge(options) &&
!routerinfo_is_a_configured_bridge(router)) {
- log_info(LD_DIR, "Dropping bridge descriptor for '%s' because we have "
- "no bridge configured at that address.", router->nickname);
+ log_info(LD_DIR, "Dropping bridge descriptor for %s because we have "
+ "no bridge configured at that address.",
+ safe_str_client(router_describe(router)));
*msg = "Router descriptor was not a configured bridge.";
routerinfo_free(router);
return ROUTER_WAS_NOT_WANTED;
@@ -3395,8 +3407,8 @@ router_add_to_routerlist(routerinfo_t *router, const char **msg,
if (!in_consensus && (router->cache_info.published_on <=
old_router->cache_info.published_on)) {
/* Same key, but old. This one is not listed in the consensus. */
- log_debug(LD_DIR, "Not-new descriptor for router '%s'",
- router->nickname);
+ log_debug(LD_DIR, "Not-new descriptor for router %s",
+ router_describe(router));
/* Only journal this desc if we'll be serving it. */
if (!from_cache && should_cache_old_descriptors())
signed_desc_append_to_journal(&router->cache_info,
@@ -3406,9 +3418,8 @@ router_add_to_routerlist(routerinfo_t *router, const char **msg,
return ROUTER_WAS_NOT_NEW;
} else {
/* Same key, and either new, or listed in the consensus. */
- log_debug(LD_DIR, "Replacing entry for router '%s/%s' [%s]",
- router->nickname, old_router->nickname,
- hex_str(id_digest,DIGEST_LEN));
+ log_debug(LD_DIR, "Replacing entry for router %s",
+ router_describe(router));
if (routers_have_same_or_addr(router, old_router)) {
/* these carry over when the address and orport are unchanged. */
router->last_reachable = old_router->last_reachable;
@@ -3684,8 +3695,8 @@ routerlist_remove_old_routers(void)
/* Too old: remove it. (If we're a cache, just move it into
* old_routers.) */
log_info(LD_DIR,
- "Forgetting obsolete (too old) routerinfo for router '%s'",
- router->nickname);
+ "Forgetting obsolete (too old) routerinfo for router %s",
+ router_describe(router));
routerlist_remove(routerlist, router, 1, now);
i--;
}
@@ -4017,7 +4028,7 @@ routerlist_retry_directory_downloads(time_t now)
/** Return 1 if all running sufficiently-stable routers we can use will reject
* addr:port, return 0 if any might accept it. */
int
-router_exit_policy_all_nodes_reject(uint32_t addr, uint16_t port,
+router_exit_policy_all_nodes_reject(const tor_addr_t *addr, uint16_t port,
int need_uptime)
{ /* XXXX MOVE */
addr_policy_result_t r;
@@ -4026,7 +4037,7 @@ router_exit_policy_all_nodes_reject(uint32_t addr, uint16_t port,
if (node->is_running &&
!node_is_unreliable(node, need_uptime, 0, 0)) {
- r = compare_addr_to_node_policy(addr, port, node);
+ r = compare_tor_addr_to_node_policy(addr, port, node);
if (r != ADDR_POLICY_REJECTED && r != ADDR_POLICY_PROBABLY_REJECTED)
return 0; /* this one could be ok. good enough. */
@@ -4295,7 +4306,8 @@ initiate_descriptor_downloads(const routerstatus_t *source,
* running, or otherwise not a descriptor that we would make any
* use of even if we had it. Else return 1. */
static INLINE int
-client_would_use_router(routerstatus_t *rs, time_t now, or_options_t *options)
+client_would_use_router(const routerstatus_t *rs, time_t now,
+ const or_options_t *options)
{
if (!rs->is_flagged_running && !options->FetchUselessDescriptors) {
/* If we had this router descriptor, we wouldn't even bother using it.
@@ -4348,7 +4360,7 @@ launch_descriptor_downloads(int purpose,
const routerstatus_t *source, time_t now)
{
int should_delay = 0, n_downloadable;
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
const char *descname;
tor_assert(purpose == DIR_PURPOSE_FETCH_SERVERDESC ||
@@ -4452,7 +4464,7 @@ update_router_descriptor_cache_downloads_v2(time_t now)
digestmap_t *map; /* Which descs are in progress, or assigned? */
int i, j, n;
int n_download;
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
const smartlist_t *networkstatus_v2_list = networkstatus_get_v2_list();
if (! directory_fetches_dir_info_early(options)) {
@@ -4594,7 +4606,7 @@ void
update_consensus_router_descriptor_downloads(time_t now, int is_vote,
networkstatus_t *consensus)
{
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
digestmap_t *map = NULL;
smartlist_t *no_longer_old = smartlist_create();
smartlist_t *downloadable = smartlist_create();
@@ -4668,7 +4680,8 @@ update_consensus_router_descriptor_downloads(time_t now, int is_vote,
if (oldrouter)
format_iso_time(time_bufold, oldrouter->cache_info.published_on);
log_info(LD_DIR, "Learned about %s (%s vs %s) from %s's vote (%s)",
- rs->nickname, time_bufnew,
+ routerstatus_describe(rs),
+ time_bufnew,
oldrouter ? time_bufold : "none",
source->nickname, oldrouter ? "known" : "unknown");
}
@@ -4723,7 +4736,8 @@ update_consensus_router_descriptor_downloads(time_t now, int is_vote,
/** As needed, launch a dummy router descriptor fetch to see if our
* address has changed. */
static void
-launch_dummy_descriptor_download_as_needed(time_t now, or_options_t *options)
+launch_dummy_descriptor_download_as_needed(time_t now,
+ const or_options_t *options)
{
static time_t last_dummy_download = 0;
/* XXXX023 we could be smarter here; see notes on bug 652. */
@@ -4745,7 +4759,7 @@ launch_dummy_descriptor_download_as_needed(time_t now, or_options_t *options)
void
update_router_descriptor_downloads(time_t now)
{
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
if (should_delay_dir_fetches(options))
return;
if (!we_fetch_router_descriptors(options))
@@ -4762,7 +4776,7 @@ update_router_descriptor_downloads(time_t now)
void
update_extrainfo_downloads(time_t now)
{
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
routerlist_t *rl;
smartlist_t *wanted;
digestmap_t *pending;
@@ -4884,7 +4898,7 @@ get_dir_info_status_string(void)
static void
count_usable_descriptors(int *num_present, int *num_usable,
const networkstatus_t *consensus,
- or_options_t *options, time_t now,
+ const or_options_t *options, time_t now,
routerset_t *in_set)
{
const int md = (consensus->flavor == FLAV_MICRODESC);
@@ -4950,9 +4964,10 @@ update_router_have_minimum_dir_info(void)
int num_present = 0, num_usable=0;
time_t now = time(NULL);
int res;
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
const networkstatus_t *consensus =
networkstatus_get_reasonably_live_consensus(now,usable_consensus_flavor());
+ int using_md;
if (!consensus) {
if (!networkstatus_get_latest_consensus())
@@ -4973,19 +4988,22 @@ update_router_have_minimum_dir_info(void)
goto done;
}
+ using_md = consensus->flavor == FLAV_MICRODESC;
+
count_usable_descriptors(&num_present, &num_usable, consensus, options, now,
NULL);
if (num_present < num_usable/4) {
tor_snprintf(dir_info_status, sizeof(dir_info_status),
- "We have only %d/%d usable descriptors.", num_present, num_usable);
+ "We have only %d/%d usable %sdescriptors.",
+ num_present, num_usable, using_md ? "micro" : "");
res = 0;
control_event_bootstrap(BOOTSTRAP_STATUS_REQUESTING_DESCRIPTORS, 0);
goto done;
} else if (num_present < 2) {
tor_snprintf(dir_info_status, sizeof(dir_info_status),
- "Only %d descriptor%s here and believed reachable!",
- num_present, num_present ? "" : "s");
+ "Only %d %sdescriptor%s here and believed reachable!",
+ num_present, using_md ? "micro" : "", num_present ? "" : "s");
res = 0;
goto done;
}
@@ -4997,8 +5015,8 @@ update_router_have_minimum_dir_info(void)
if (!num_usable || !num_present) {
tor_snprintf(dir_info_status, sizeof(dir_info_status),
- "We have only %d/%d usable entry node descriptors.",
- num_present, num_usable);
+ "We have only %d/%d usable entry node %sdescriptors.",
+ num_present, num_usable, using_md?"micro":"");
res = 0;
goto done;
}
@@ -5497,7 +5515,7 @@ routerset_parse(routerset_t *target, const char *s, const char *description)
void
refresh_all_country_info(void)
{
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
if (options->EntryNodes)
routerset_refresh_countries(options->EntryNodes);
@@ -5563,7 +5581,8 @@ routerset_contains(const routerset_t *set, const tor_addr_t *addr,
const char *nickname, const char *id_digest,
country_t country)
{
- if (!set || !set->list) return 0;
+ if (!set || !set->list)
+ return 0;
if (nickname && strmap_get_lc(set->names, nickname))
return 4;
if (id_digest && digestmap_get(set->digests, id_digest))
diff --git a/src/or/routerlist.h b/src/or/routerlist.h
index a613c34b8..cae881433 100644
--- a/src/or/routerlist.h
+++ b/src/or/routerlist.h
@@ -36,7 +36,6 @@ const routerstatus_t *router_pick_trusteddirserver(dirinfo_type_t type,
int router_get_my_share_of_directory_requests(double *v2_share_out,
double *v3_share_out);
void router_reset_status_download_failures(void);
-void routerlist_add_family(smartlist_t *sl, const routerinfo_t *router);
int routers_have_same_or_addr(const routerinfo_t *r1, const routerinfo_t *r2);
int router_nickname_is_in_list(const routerinfo_t *router, const char *list);
const routerinfo_t *routerlist_find_my_routerinfo(void);
@@ -56,6 +55,7 @@ const node_t *router_choose_random_node(smartlist_t *excludedsmartlist,
const routerinfo_t *router_get_by_nickname(const char *nickname,
int warn_if_unnamed);
+int router_is_named(const routerinfo_t *router);
int router_digest_is_trusted_dir_type(const char *digest,
dirinfo_type_t type);
#define router_digest_is_trusted_dir(d) \
@@ -129,7 +129,7 @@ void router_load_extrainfo_from_string(const char *s, const char *eos,
int descriptor_digests);
void routerlist_retry_directory_downloads(time_t now);
-int router_exit_policy_all_nodes_reject(uint32_t addr, uint16_t port,
+int router_exit_policy_all_nodes_reject(const tor_addr_t *addr, uint16_t port,
int need_uptime);
int router_exit_policy_rejects_all(const routerinfo_t *router);
diff --git a/src/or/routerparse.c b/src/or/routerparse.c
index 295b74dc2..4ea7b964c 100644
--- a/src/or/routerparse.c
+++ b/src/or/routerparse.c
@@ -570,7 +570,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
@@ -1208,7 +1207,8 @@ router_parse_list_from_string(const char **s, const char *eos,
prepend_annotations);
if (router) {
log_debug(LD_DIR, "Read router '%s', purpose '%s'",
- router->nickname, router_purpose_to_string(router->purpose));
+ router_describe(router),
+ router_purpose_to_string(router->purpose));
signed_desc = &router->cache_info;
elt = router;
}
@@ -1533,10 +1533,10 @@ router_parse_entry_from_string(const char *s, const char *end,
}
}
- if ((tok = find_opt_by_keyword(tokens, K_CACHES_EXTRA_INFO)))
+ if (find_opt_by_keyword(tokens, K_CACHES_EXTRA_INFO))
router->caches_extra_info = 1;
- if ((tok = find_opt_by_keyword(tokens, K_ALLOW_SINGLE_HOP_EXITS)))
+ if (find_opt_by_keyword(tokens, K_ALLOW_SINGLE_HOP_EXITS))
router->allow_single_hop_exits = 1;
if ((tok = find_opt_by_keyword(tokens, K_EXTRA_INFO_DIGEST))) {
@@ -1549,7 +1549,7 @@ router_parse_entry_from_string(const char *s, const char *end,
}
}
- if ((tok = find_opt_by_keyword(tokens, K_HIDDEN_SERVICE_DIR))) {
+ if (find_opt_by_keyword(tokens, K_HIDDEN_SERVICE_DIR)) {
router->wants_to_be_hs_dir = 1;
}
@@ -1811,9 +1811,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);
@@ -2091,6 +2091,7 @@ routerstatus_parse_entry_from_string(memarea_t *area,
rs->version_supports_extrainfo_upload = 1;
rs->version_supports_conditional_consensus = 1;
rs->version_supports_microdesc_cache = 1;
+ rs->version_supports_optimistic_data = 1;
} else {
rs->version_supports_begindir =
tor_version_as_new_as(tok->args[0], "0.2.0.1-alpha");
@@ -2108,6 +2109,8 @@ routerstatus_parse_entry_from_string(memarea_t *area,
*/
rs->version_supports_microdesc_cache =
tor_version_as_new_as(tok->args[0], "0.2.3.0-alpha");
+ rs->version_supports_optimistic_data =
+ tor_version_as_new_as(tok->args[0], "0.2.3.1-alpha");
}
if (vote_rs) {
vote_rs->version = tor_strdup(tok->args[0]);
@@ -2427,40 +2430,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;
}
@@ -2502,7 +2505,7 @@ networkstatus_verify_bw_weights(networkstatus_t *ns)
}
} else {
log_warn(LD_BUG, "Missing consensus bandwidth for router %s",
- rs->nickname);
+ routerstatus_describe(rs));
}
} SMARTLIST_FOREACH_END(rs);
@@ -2515,10 +2518,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),
@@ -2527,10 +2530,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),
@@ -2539,10 +2542,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),
@@ -2571,10 +2574,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),
@@ -2584,10 +2587,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),
@@ -2597,10 +2600,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),
@@ -2610,11 +2613,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),
@@ -2629,10 +2632,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),
@@ -2641,10 +2644,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),
@@ -2653,10 +2656,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),
@@ -2666,10 +2669,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),
@@ -2696,10 +2699,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),
@@ -2709,10 +2712,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),
@@ -2723,10 +2726,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),
@@ -2738,10 +2741,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),
@@ -2750,10 +2753,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),
@@ -2762,10 +2765,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),
@@ -3511,10 +3514,10 @@ networkstatus_parse_detached_signatures(const char *s, const char *eos)
siglist = detached_get_signatures(sigs, flavor);
is_duplicate = 0;
- SMARTLIST_FOREACH(siglist, document_signature_t *, s, {
- if (s->alg == alg &&
- tor_memeq(id_digest, s->identity_digest, DIGEST_LEN) &&
- tor_memeq(sk_digest, s->signing_key_digest, DIGEST_LEN)) {
+ SMARTLIST_FOREACH(siglist, document_signature_t *, dsig, {
+ if (dsig->alg == alg &&
+ tor_memeq(id_digest, dsig->identity_digest, DIGEST_LEN) &&
+ tor_memeq(sk_digest, dsig->signing_key_digest, DIGEST_LEN)) {
is_duplicate = 1;
}
});
@@ -3773,9 +3776,9 @@ token_check_object(memarea_t *area, const char *kwd,
break;
case NEED_KEY_1024: /* There must be a 1024-bit public key. */
case NEED_SKEY_1024: /* There must be a 1024-bit private key. */
- if (tok->key && crypto_pk_keysize(tok->key) != PK_BYTES) {
+ if (tok->key && crypto_pk_num_bits(tok->key) != PK_BYTES*8) {
tor_snprintf(ebuf, sizeof(ebuf), "Wrong size on key for %s: %d bits",
- kwd, (int)crypto_pk_keysize(tok->key));
+ kwd, crypto_pk_num_bits(tok->key));
RET_ERR(ebuf);
}
/* fall through */
@@ -4564,7 +4567,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);
@@ -4883,6 +4886,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,
@@ -4978,7 +4986,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/status.c b/src/or/status.c
index 34a27b2ed..3e4cb779a 100644
--- a/src/or/status.c
+++ b/src/or/status.c
@@ -39,13 +39,15 @@ secs_to_uptime(long secs)
switch (days) {
case 0:
- tor_asprintf(&uptime_string, "%d:%02d", hours, minutes);
+ tor_asprintf(&uptime_string, "%d:%02d hours", hours, minutes);
break;
case 1:
- tor_asprintf(&uptime_string, "%ld day %d:%02d", days, hours, minutes);
+ tor_asprintf(&uptime_string, "%ld day %d:%02d hours",
+ days, hours, minutes);
break;
default:
- tor_asprintf(&uptime_string, "%ld days %d:%02d", days, hours, minutes);
+ tor_asprintf(&uptime_string, "%ld days %d:%02d hours",
+ days, hours, minutes);
break;
}
@@ -82,9 +84,8 @@ log_heartbeat(time_t now)
char *bw_rcvd = NULL;
char *uptime = NULL;
const routerinfo_t *me;
- const node_t *myself;
- or_options_t *options = get_options();
+ const or_options_t *options = get_options();
(void)now;
if (public_server_mode(options)) {
@@ -92,7 +93,7 @@ log_heartbeat(time_t now)
if (!(me = router_get_my_routerinfo()))
return -1; /* Something stinks, we won't even attempt this. */
else
- if (!(myself = node_get_by_id(me->cache_info.identity_digest)))
+ if (!node_get_by_id(me->cache_info.identity_digest))
log_fn(LOG_NOTICE, LD_HEARTBEAT, "Heartbeat: It seems like we are not "
"in the cached consensus.");
}
@@ -102,7 +103,7 @@ log_heartbeat(time_t now)
bw_sent = bytes_to_usage(get_bytes_written());
log_fn(LOG_NOTICE, LD_HEARTBEAT, "Heartbeat: Tor's uptime is %s, with %d "
- "circuits open. I've pushed %s and received %s.",
+ "circuits open. I've sent %s and received %s.",
uptime, count_circuits(),bw_sent,bw_rcvd);
tor_free(uptime);
diff --git a/src/or/transports.c b/src/or/transports.c
new file mode 100644
index 000000000..6e8200f40
--- /dev/null
+++ b/src/or/transports.c
@@ -0,0 +1,1048 @@
+/* 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"
+
+static void set_managed_proxy_environment(char ***envp,
+ const managed_proxy_t *mp);
+static INLINE int proxy_configuration_finished(const managed_proxy_t *mp);
+
+static void managed_proxy_destroy(managed_proxy_t *mp);
+
+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);
+ tor_assert(mp->pid);
+
+ /* kill the old obfsproxy process */
+ tor_terminate_process(mp->pid);
+ mp->pid = 0;
+ fclose(mp->_stdout);
+
+ /* 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)
+{
+ (void) mp;
+ (void) set_managed_proxy_environment;
+ return -1;
+#if 0
+ /* XXXX023 we must reenable this code for managed proxies to work.
+ * "All it needs" is revision to work with the new tor_spawn_background
+ * API. */
+ char **envp=NULL;
+ int pid;
+ process_handle_t proc;
+ FILE *stdout_read = NULL;
+ int stdout_pipe=-1, stderr_pipe=-1;
+
+ /* prepare the environment variables for the managed proxy */
+ set_managed_proxy_environment(&envp, mp);
+
+ pid = tor_spawn_background(mp->argv[0], (const char **)mp->argv,
+ (const char **)envp, &proc);
+ if (pid < 0) {
+ log_warn(LD_GENERAL, "Managed proxy at '%s' failed at launch.",
+ mp->argv[0]);
+ return -1;
+ }
+
+ /* free the memory allocated by set_managed_proxy_environment(). */
+ free_execve_args(envp);
+
+ /* Set stdout/stderr pipes to be non-blocking */
+#ifdef _WIN32
+ {
+ u_long nonblocking = 1;
+ ioctlsocket(stdout_pipe, FIONBIO, &nonblocking);
+ }
+#else
+ fcntl(stdout_pipe, F_SETFL, O_NONBLOCK);
+#endif
+
+ /* Open the buffered IO streams */
+ stdout_read = fdopen(stdout_pipe, "r");
+
+ log_info(LD_CONFIG, "Managed proxy has spawned at PID %d.", pid);
+
+ mp->conf_state = PT_PROTO_LAUNCHED;
+ mp->_stdout = stdout_read;
+ mp->pid = pid;
+#endif
+ 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);
+
+ 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);
+}
+
+/** 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) {
+ launch_managed_proxy(mp);
+ return;
+ }
+
+ tor_assert(mp->conf_state != PT_PROTO_INFANT);
+
+ while (1) {
+ r = get_string_from_pipe(mp->_stdout, 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;
+ }
+ }
+}
+
+/** 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);
+ 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)
+{
+ 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);
+
+ /* close its stdout stream */
+ if (mp->_stdout)
+ fclose(mp->_stdout);
+
+ /* free the argv */
+ free_execve_args(mp->argv);
+
+ if (mp->pid)
+ tor_terminate_process(mp->pid);
+
+ 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); /* annihilate it. */
+ 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);
+}
+
+/** 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\n", 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!");
+ goto err;
+ }
+
+ log_warn(LD_CONFIG, "Unknown line received by managed proxy. (%s)", line);
+
+ err:
+ mp->conf_state = PT_PROTO_BROKEN;
+ return;
+}
+
+/** 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;
+}
+
+/** Prepare the <b>envp</b> of managed proxy <b>mp</b> */
+static void
+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;
+
+ 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);
+
+ tor_asprintf(tmp++, "HOME=%s", getenv("HOME"));
+ tor_asprintf(tmp++, "PATH=%s", getenv("PATH"));
+ 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", options->ORPort);
+ 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;
+
+ tor_free(state_loc);
+ tor_free(transports_to_launch);
+ tor_free(bindaddr);
+}
+
+/** 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);
+ 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);
+ }
+ } 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));
+
+ 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..4a9338759
--- /dev/null
+++ b/src/or/transports.h
@@ -0,0 +1,105 @@
+/* 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
+};
+
+/** 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? */
+
+ FILE *_stdout; /* a stream to its stdout
+ (closed in managed_proxy_destroy()) */
+
+ 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 a4f93d1c9..ffe1f942e 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)\"" \
@@ -8,7 +8,7 @@ AM_CPPFLAGS = -DSHARE_DATADIR="\"$(datadir)\"" \
-I"$(top_srcdir)/src/or"
# -L flags need to go in LDFLAGS. -l flags need to go in LDADD.
-# This seems to matter nowhere but on windows, but I assure you that it
+# This seems to matter nowhere but on Windows, but I assure you that it
# matters a lot there, and is quite hard to debug if you forget to do it.
test_SOURCES = \
@@ -19,9 +19,13 @@ test_SOURCES = \
test_data.c \
test_dir.c \
test_microdesc.c \
+ test_pt.c \
test_util.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 \
@@ -29,6 +33,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-child.c b/src/test/test-child.c
index ca52750c2..1b9c5e3d5 100644
--- a/src/test/test-child.c
+++ b/src/test/test-child.c
@@ -1,4 +1,11 @@
#include <stdio.h>
+#include "orconfig.h"
+#ifdef MS_WINDOWS
+#define WINDOWS_LEAN_AND_MEAN
+#include <windows.h>
+#else
+#include <unistd.h>
+#endif
/** Trivial test program which prints out its command line arguments so we can
* check if tor_spawn_background() works */
@@ -11,7 +18,22 @@ main(int argc, char **argv)
fprintf(stderr, "ERR\n");
for (i = 1; i < argc; i++)
fprintf(stdout, "%s\n", argv[i]);
+ fprintf(stdout, "SLEEPING\n");
+ /* We need to flush stdout so that test_util_spawn_background_partial_read()
+ succeed. Otherwise ReadFile() will get the entire output in one */
+ // XXX: Can we make stdio flush on newline?
+ fflush(stdout);
+#ifdef MS_WINDOWS
+ Sleep(1000);
+#else
+ sleep(1);
+#endif
fprintf(stdout, "DONE\n");
+#ifdef MS_WINDOWS
+ Sleep(1000);
+#else
+ sleep(1);
+#endif
return 0;
}
diff --git a/src/test/test.c b/src/test/test.c
index e2f8b115d..d4edf1484 100644
--- a/src/test/test.c
+++ b/src/test/test.c
@@ -203,6 +203,437 @@ free_pregenerated_keys(void)
}
}
+typedef struct socks_test_data_t {
+ socks_request_t *req;
+ buf_t *buf;
+} socks_test_data_t;
+
+static void *
+socks_test_setup(const struct testcase_t *testcase)
+{
+ socks_test_data_t *data = tor_malloc(sizeof(socks_test_data_t));
+ (void)testcase;
+ data->buf = buf_new_with_capacity(256);
+ data->req = socks_request_new();
+ config_register_addressmaps(get_options());
+ return data;
+}
+static int
+socks_test_cleanup(const struct testcase_t *testcase, void *ptr)
+{
+ socks_test_data_t *data = ptr;
+ (void)testcase;
+ buf_free(data->buf);
+ socks_request_free(data->req);
+ tor_free(data);
+ return 1;
+}
+
+const struct testcase_setup_t socks_setup = {
+ socks_test_setup, socks_test_cleanup
+};
+
+#define SOCKS_TEST_INIT() \
+ socks_test_data_t *testdata = ptr; \
+ buf_t *buf = testdata->buf; \
+ socks_request_t *socks = testdata->req;
+#define ADD_DATA(buf, s) \
+ write_to_buf(s, sizeof(s)-1, buf)
+
+static void
+socks_request_clear(socks_request_t *socks)
+{
+ tor_free(socks->username);
+ tor_free(socks->password);
+ memset(socks, 0, sizeof(socks_request_t));
+}
+
+/** Perform unsupported SOCKS 4 commands */
+static void
+test_socks_4_unsupported_commands(void *ptr)
+{
+ SOCKS_TEST_INIT();
+
+ /* SOCKS 4 Send BIND [02] to IP address 2.2.2.2:4369 */
+ ADD_DATA(buf, "\x04\x02\x11\x11\x02\x02\x02\x02\x00");
+ test_assert(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
+ get_options()->SafeSocks) == -1);
+ test_eq(4, socks->socks_version);
+ test_eq(0, socks->replylen); /* XXX: shouldn't tor reply? */
+
+ done:
+ ;
+}
+
+/** Perform supported SOCKS 4 commands */
+static void
+test_socks_4_supported_commands(void *ptr)
+{
+ SOCKS_TEST_INIT();
+
+ test_eq(0, buf_datalen(buf));
+
+ /* SOCKS 4 Send CONNECT [01] to IP address 2.2.2.2:4370 */
+ ADD_DATA(buf, "\x04\x01\x11\x12\x02\x02\x02\x03\x00");
+ test_assert(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
+ get_options()->SafeSocks) == 1);
+ test_eq(4, socks->socks_version);
+ test_eq(0, socks->replylen); /* XXX: shouldn't tor reply? */
+ test_eq(SOCKS_COMMAND_CONNECT, socks->command);
+ test_streq("2.2.2.3", socks->address);
+ test_eq(4370, socks->port);
+ test_assert(socks->got_auth == 0);
+ test_assert(! socks->username);
+
+ test_eq(0, buf_datalen(buf));
+ socks_request_clear(socks);
+
+ /* SOCKS 4 Send CONNECT [01] to IP address 2.2.2.2:4369 with userid*/
+ ADD_DATA(buf, "\x04\x01\x11\x12\x02\x02\x02\x04me\x00");
+ test_assert(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
+ get_options()->SafeSocks) == 1);
+ test_eq(4, socks->socks_version);
+ test_eq(0, socks->replylen); /* XXX: shouldn't tor reply? */
+ test_eq(SOCKS_COMMAND_CONNECT, socks->command);
+ test_streq("2.2.2.4", socks->address);
+ test_eq(4370, socks->port);
+ test_assert(socks->got_auth == 1);
+ test_assert(socks->username);
+ test_eq(2, socks->usernamelen);
+ test_memeq("me", socks->username, 2);
+
+ test_eq(0, buf_datalen(buf));
+ socks_request_clear(socks);
+
+ /* SOCKS 4a Send RESOLVE [F0] request for torproject.org */
+ ADD_DATA(buf, "\x04\xF0\x01\x01\x00\x00\x00\x02me\x00torproject.org\x00");
+ test_assert(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
+ get_options()->SafeSocks) == 1);
+ test_eq(4, socks->socks_version);
+ test_eq(0, socks->replylen); /* XXX: shouldn't tor reply? */
+ test_streq("torproject.org", socks->address);
+
+ test_eq(0, buf_datalen(buf));
+
+ done:
+ ;
+}
+
+/** Perform unsupported SOCKS 5 commands */
+static void
+test_socks_5_unsupported_commands(void *ptr)
+{
+ SOCKS_TEST_INIT();
+
+ /* SOCKS 5 Send unsupported BIND [02] command */
+ ADD_DATA(buf, "\x05\x02\x00\x01");
+
+ test_eq(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
+ get_options()->SafeSocks), 0);
+ test_eq(0, buf_datalen(buf));
+ test_eq(5, socks->socks_version);
+ test_eq(2, socks->replylen);
+ test_eq(5, socks->reply[0]);
+ test_eq(0, socks->reply[1]);
+ ADD_DATA(buf, "\x05\x02\x00\x01\x02\x02\x02\x01\x01\x01");
+ test_eq(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
+ get_options()->SafeSocks), -1);
+ /* XXX: shouldn't tor reply 'command not supported' [07]? */
+
+ buf_clear(buf);
+ socks_request_clear(socks);
+
+ /* SOCKS 5 Send unsupported UDP_ASSOCIATE [03] command */
+ ADD_DATA(buf, "\x05\x03\x00\x01\x02");
+ test_eq(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
+ get_options()->SafeSocks), 0);
+ test_eq(5, socks->socks_version);
+ test_eq(2, socks->replylen);
+ test_eq(5, socks->reply[0]);
+ test_eq(0, socks->reply[1]);
+ ADD_DATA(buf, "\x05\x03\x00\x01\x02\x02\x02\x01\x01\x01");
+ test_eq(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
+ get_options()->SafeSocks), -1);
+ /* XXX: shouldn't tor reply 'command not supported' [07]? */
+
+ done:
+ ;
+}
+
+/** Perform supported SOCKS 5 commands */
+static void
+test_socks_5_supported_commands(void *ptr)
+{
+ SOCKS_TEST_INIT();
+
+ /* SOCKS 5 Send CONNECT [01] to IP address 2.2.2.2:4369 */
+ ADD_DATA(buf, "\x05\x01\x00");
+ test_eq(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
+ get_options()->SafeSocks), 0);
+ test_eq(5, socks->socks_version);
+ test_eq(2, socks->replylen);
+ test_eq(5, socks->reply[0]);
+ test_eq(0, socks->reply[1]);
+
+ ADD_DATA(buf, "\x05\x01\x00\x01\x02\x02\x02\x02\x11\x11");
+ test_eq(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
+ get_options()->SafeSocks), 1);
+ test_streq("2.2.2.2", socks->address);
+ test_eq(4369, socks->port);
+
+ test_eq(0, buf_datalen(buf));
+ socks_request_clear(socks);
+
+ /* SOCKS 5 Send CONNECT [01] to FQDN torproject.org:4369 */
+ ADD_DATA(buf, "\x05\x01\x00");
+ ADD_DATA(buf, "\x05\x01\x00\x03\x0Etorproject.org\x11\x11");
+ test_eq(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
+ get_options()->SafeSocks), 1);
+
+ test_eq(5, socks->socks_version);
+ test_eq(2, socks->replylen);
+ test_eq(5, socks->reply[0]);
+ test_eq(0, socks->reply[1]);
+ test_streq("torproject.org", socks->address);
+ test_eq(4369, socks->port);
+
+ test_eq(0, buf_datalen(buf));
+ socks_request_clear(socks);
+
+ /* SOCKS 5 Send RESOLVE [F0] request for torproject.org:4369 */
+ ADD_DATA(buf, "\x05\x01\x00");
+ ADD_DATA(buf, "\x05\xF0\x00\x03\x0Etorproject.org\x01\x02");
+ test_assert(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
+ get_options()->SafeSocks) == 1);
+ test_eq(5, socks->socks_version);
+ test_eq(2, socks->replylen);
+ test_eq(5, socks->reply[0]);
+ test_eq(0, socks->reply[1]);
+ test_streq("torproject.org", socks->address);
+
+ test_eq(0, buf_datalen(buf));
+ socks_request_clear(socks);
+
+ /* SOCKS 5 Send RESOLVE_PTR [F1] for IP address 2.2.2.5 */
+ ADD_DATA(buf, "\x05\x01\x00");
+ ADD_DATA(buf, "\x05\xF1\x00\x01\x02\x02\x02\x05\x01\x03");
+ test_assert(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
+ get_options()->SafeSocks) == 1);
+ test_eq(5, socks->socks_version);
+ test_eq(2, socks->replylen);
+ test_eq(5, socks->reply[0]);
+ test_eq(0, socks->reply[1]);
+ test_streq("2.2.2.5", socks->address);
+
+ test_eq(0, buf_datalen(buf));
+
+ done:
+ ;
+}
+
+/** Perform SOCKS 5 authentication */
+static void
+test_socks_5_no_authenticate(void *ptr)
+{
+ SOCKS_TEST_INIT();
+
+ /*SOCKS 5 No Authentication */
+ ADD_DATA(buf,"\x05\x01\x00");
+ test_assert(!fetch_from_buf_socks(buf, socks,
+ get_options()->TestSocks,
+ get_options()->SafeSocks));
+ test_eq(2, socks->replylen);
+ test_eq(5, socks->reply[0]);
+ test_eq(SOCKS_NO_AUTH, socks->reply[1]);
+
+ test_eq(0, buf_datalen(buf));
+
+ /*SOCKS 5 Send username/password anyway - pretend to be broken */
+ ADD_DATA(buf,"\x01\x02\x01\x01\x02\x01\x01");
+ test_assert(!fetch_from_buf_socks(buf, socks,
+ get_options()->TestSocks,
+ get_options()->SafeSocks));
+ test_eq(5, socks->socks_version);
+ test_eq(2, socks->replylen);
+ test_eq(5, socks->reply[0]);
+ test_eq(0, socks->reply[1]);
+
+ test_eq(2, socks->usernamelen);
+ test_eq(2, socks->passwordlen);
+
+ test_memeq("\x01\x01", socks->username, 2);
+ test_memeq("\x01\x01", socks->password, 2);
+
+ done:
+ ;
+}
+
+/** Perform SOCKS 5 authentication */
+static void
+test_socks_5_authenticate(void *ptr)
+{
+ SOCKS_TEST_INIT();
+
+ /* SOCKS 5 Negotiate username/password authentication */
+ ADD_DATA(buf, "\x05\x01\x02");
+
+ test_assert(!fetch_from_buf_socks(buf, socks,
+ get_options()->TestSocks,
+ get_options()->SafeSocks));
+ test_eq(2, socks->replylen);
+ test_eq(5, socks->reply[0]);
+ test_eq(SOCKS_USER_PASS, socks->reply[1]);
+ test_eq(5, socks->socks_version);
+
+ test_eq(0, buf_datalen(buf));
+
+ /* SOCKS 5 Send username/password */
+ ADD_DATA(buf, "\x01\x02me\x08mypasswd");
+ test_assert(!fetch_from_buf_socks(buf, socks,
+ get_options()->TestSocks,
+ get_options()->SafeSocks));
+ test_eq(5, socks->socks_version);
+ test_eq(2, socks->replylen);
+ test_eq(5, socks->reply[0]);
+ test_eq(0, socks->reply[1]);
+
+ test_eq(2, socks->usernamelen);
+ test_eq(8, socks->passwordlen);
+
+ test_memeq("me", socks->username, 2);
+ test_memeq("mypasswd", socks->password, 8);
+
+ done:
+ ;
+}
+
+/** Perform SOCKS 5 authentication and send data all in one go */
+static void
+test_socks_5_authenticate_with_data(void *ptr)
+{
+ SOCKS_TEST_INIT();
+
+ /* SOCKS 5 Negotiate username/password authentication */
+ ADD_DATA(buf, "\x05\x01\x02");
+
+ test_assert(!fetch_from_buf_socks(buf, socks,
+ get_options()->TestSocks,
+ get_options()->SafeSocks));
+ test_eq(2, socks->replylen);
+ test_eq(5, socks->reply[0]);
+ test_eq(SOCKS_USER_PASS, socks->reply[1]);
+ test_eq(5, socks->socks_version);
+
+ test_eq(0, buf_datalen(buf));
+
+ /* SOCKS 5 Send username/password */
+ /* SOCKS 5 Send CONNECT [01] to IP address 2.2.2.2:4369 */
+ ADD_DATA(buf, "\x01\x02me\x03you\x05\x01\x00\x01\x02\x02\x02\x02\x11\x11");
+ test_assert(fetch_from_buf_socks(buf, socks,
+ get_options()->TestSocks,
+ get_options()->SafeSocks) == 1);
+ test_eq(5, socks->socks_version);
+ test_eq(2, socks->replylen);
+ test_eq(5, socks->reply[0]);
+ test_eq(0, socks->reply[1]);
+
+ test_streq("2.2.2.2", socks->address);
+ test_eq(4369, socks->port);
+
+ test_eq(2, socks->usernamelen);
+ test_eq(3, socks->passwordlen);
+ test_memeq("me", socks->username, 2);
+ test_memeq("you", socks->password, 3);
+
+ done:
+ ;
+}
+
+/** Perform SOCKS 5 authentication before method negotiated */
+static void
+test_socks_5_auth_before_negotiation(void *ptr)
+{
+ SOCKS_TEST_INIT();
+
+ /* SOCKS 5 Send username/password */
+ ADD_DATA(buf, "\x01\x02me\x02me");
+ test_assert(fetch_from_buf_socks(buf, socks,
+ get_options()->TestSocks,
+ get_options()->SafeSocks) == -1);
+ test_eq(0, socks->socks_version);
+ test_eq(0, socks->replylen);
+ test_eq(0, socks->reply[0]);
+ test_eq(0, socks->reply[1]);
+
+ done:
+ ;
+}
+
+static void
+test_buffer_copy(void *arg)
+{
+ generic_buffer_t *buf=NULL, *buf2=NULL;
+ const char *s;
+ size_t len;
+ char b[256];
+ int i;
+ (void)arg;
+
+ buf = generic_buffer_new();
+ tt_assert(buf);
+
+ /* Copy an empty buffer. */
+ tt_int_op(0, ==, generic_buffer_set_to_copy(&buf2, buf));
+ tt_assert(buf2);
+ tt_int_op(0, ==, generic_buffer_len(buf2));
+
+ /* Now try with a short buffer. */
+ s = "And now comes an act of enormous enormance!";
+ len = strlen(s);
+ generic_buffer_add(buf, s, len);
+ tt_int_op(len, ==, generic_buffer_len(buf));
+ /* Add junk to buf2 so we can test replacing.*/
+ generic_buffer_add(buf2, "BLARG", 5);
+ tt_int_op(0, ==, generic_buffer_set_to_copy(&buf2, buf));
+ tt_int_op(len, ==, generic_buffer_len(buf2));
+ generic_buffer_get(buf2, b, len);
+ test_mem_op(b, ==, s, len);
+ /* Now free buf2 and retry so we can test allocating */
+ generic_buffer_free(buf2);
+ buf2 = NULL;
+ tt_int_op(0, ==, generic_buffer_set_to_copy(&buf2, buf));
+ tt_int_op(len, ==, generic_buffer_len(buf2));
+ generic_buffer_get(buf2, b, len);
+ test_mem_op(b, ==, s, len);
+ /* Clear buf for next test */
+ generic_buffer_get(buf, b, len);
+ tt_int_op(generic_buffer_len(buf),==,0);
+
+ /* Okay, now let's try a bigger buffer. */
+ s = "Quis autem vel eum iure reprehenderit qui in ea voluptate velit "
+ "esse quam nihil molestiae consequatur, vel illum qui dolorem eum "
+ "fugiat quo voluptas nulla pariatur?";
+ len = strlen(s);
+ for (i = 0; i < 256; ++i) {
+ b[0]=i;
+ generic_buffer_add(buf, b, 1);
+ generic_buffer_add(buf, s, len);
+ }
+ tt_int_op(0, ==, generic_buffer_set_to_copy(&buf2, buf));
+ tt_int_op(generic_buffer_len(buf2), ==, generic_buffer_len(buf));
+ for (i = 0; i < 256; ++i) {
+ generic_buffer_get(buf2, b, len+1);
+ tt_int_op((unsigned char)b[0],==,i);
+ test_mem_op(b+1, ==, s, len);
+ }
+
+ done:
+ if (buf)
+ generic_buffer_free(buf);
+ if (buf2)
+ generic_buffer_free(buf2);
+}
+
/** Run unit tests for buffers.c */
static void
test_buffers(void)
@@ -471,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);
@@ -486,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) -
@@ -632,12 +1063,15 @@ test_policies(void)
smartlist_add(policy, p);
+ tor_addr_from_ipv4h(&tar, 0x01020304u);
test_assert(ADDR_POLICY_ACCEPTED ==
- compare_addr_to_addr_policy(0x01020304u, 2, policy));
+ compare_tor_addr_to_addr_policy(&tar, 2, policy));
+ tor_addr_make_unspec(&tar);
test_assert(ADDR_POLICY_PROBABLY_ACCEPTED ==
- compare_addr_to_addr_policy(0, 2, policy));
+ compare_tor_addr_to_addr_policy(&tar, 2, policy));
+ tor_addr_from_ipv4h(&tar, 0xc0a80102);
test_assert(ADDR_POLICY_REJECTED ==
- compare_addr_to_addr_policy(0xc0a80102, 2, policy));
+ compare_tor_addr_to_addr_policy(&tar, 2, policy));
test_assert(0 == policies_parse_exit_policy(NULL, &policy2, 1, NULL, 1));
test_assert(policy2);
@@ -831,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)
@@ -1047,8 +1385,73 @@ static void
test_geoip(void)
{
int i, j;
- time_t now = time(NULL);
+ time_t now = 1281533250; /* 2010-08-11 13:27:30 UTC */
char *s = NULL;
+ const char *bridge_stats_1 =
+ "bridge-stats-end 2010-08-12 13:27:30 (86400 s)\n"
+ "bridge-ips zz=24,xy=8\n",
+ *dirreq_stats_1 =
+ "dirreq-stats-end 2010-08-12 13:27:30 (86400 s)\n"
+ "dirreq-v3-ips ab=8\n"
+ "dirreq-v2-ips \n"
+ "dirreq-v3-reqs ab=8\n"
+ "dirreq-v2-reqs \n"
+ "dirreq-v3-resp ok=0,not-enough-sigs=0,unavailable=0,not-found=0,"
+ "not-modified=0,busy=0\n"
+ "dirreq-v2-resp ok=0,unavailable=0,not-found=0,not-modified=0,"
+ "busy=0\n"
+ "dirreq-v3-direct-dl complete=0,timeout=0,running=0\n"
+ "dirreq-v2-direct-dl complete=0,timeout=0,running=0\n"
+ "dirreq-v3-tunneled-dl complete=0,timeout=0,running=0\n"
+ "dirreq-v2-tunneled-dl complete=0,timeout=0,running=0\n",
+ *dirreq_stats_2 =
+ "dirreq-stats-end 2010-08-12 13:27:30 (86400 s)\n"
+ "dirreq-v3-ips \n"
+ "dirreq-v2-ips \n"
+ "dirreq-v3-reqs \n"
+ "dirreq-v2-reqs \n"
+ "dirreq-v3-resp ok=0,not-enough-sigs=0,unavailable=0,not-found=0,"
+ "not-modified=0,busy=0\n"
+ "dirreq-v2-resp ok=0,unavailable=0,not-found=0,not-modified=0,"
+ "busy=0\n"
+ "dirreq-v3-direct-dl complete=0,timeout=0,running=0\n"
+ "dirreq-v2-direct-dl complete=0,timeout=0,running=0\n"
+ "dirreq-v3-tunneled-dl complete=0,timeout=0,running=0\n"
+ "dirreq-v2-tunneled-dl complete=0,timeout=0,running=0\n",
+ *dirreq_stats_3 =
+ "dirreq-stats-end 2010-08-12 13:27:30 (86400 s)\n"
+ "dirreq-v3-ips \n"
+ "dirreq-v2-ips \n"
+ "dirreq-v3-reqs \n"
+ "dirreq-v2-reqs \n"
+ "dirreq-v3-resp ok=8,not-enough-sigs=0,unavailable=0,not-found=0,"
+ "not-modified=0,busy=0\n"
+ "dirreq-v2-resp ok=0,unavailable=0,not-found=0,not-modified=0,"
+ "busy=0\n"
+ "dirreq-v3-direct-dl complete=0,timeout=0,running=0\n"
+ "dirreq-v2-direct-dl complete=0,timeout=0,running=0\n"
+ "dirreq-v3-tunneled-dl complete=0,timeout=0,running=0\n"
+ "dirreq-v2-tunneled-dl complete=0,timeout=0,running=0\n",
+ *dirreq_stats_4 =
+ "dirreq-stats-end 2010-08-12 13:27:30 (86400 s)\n"
+ "dirreq-v3-ips \n"
+ "dirreq-v2-ips \n"
+ "dirreq-v3-reqs \n"
+ "dirreq-v2-reqs \n"
+ "dirreq-v3-resp ok=8,not-enough-sigs=0,unavailable=0,not-found=0,"
+ "not-modified=0,busy=0\n"
+ "dirreq-v2-resp ok=0,unavailable=0,not-found=0,not-modified=0,"
+ "busy=0\n"
+ "dirreq-v3-direct-dl complete=0,timeout=0,running=0\n"
+ "dirreq-v2-direct-dl complete=0,timeout=0,running=0\n"
+ "dirreq-v3-tunneled-dl complete=0,timeout=0,running=4\n"
+ "dirreq-v2-tunneled-dl complete=0,timeout=0,running=0\n",
+ *entry_stats_1 =
+ "entry-stats-end 2010-08-12 13:27:30 (86400 s)\n"
+ "entry-ips ab=8\n",
+ *entry_stats_2 =
+ "entry-stats-end 2010-08-12 13:27:30 (86400 s)\n"
+ "entry-ips \n";
/* Populate the DB a bit. Add these in order, since we can't do the final
* 'sort' step. These aren't very good IP addresses, but they're perfectly
@@ -1074,8 +1477,8 @@ test_geoip(void)
test_streq("??", NAMEFOR(2000));
#undef NAMEFOR
- get_options()->BridgeRelay = 1;
- get_options()->BridgeRecordUsageByCountry = 1;
+ get_options_mutable()->BridgeRelay = 1;
+ get_options_mutable()->BridgeRecordUsageByCountry = 1;
/* Put 9 observations in AB... */
for (i=32; i < 40; ++i)
geoip_note_client_seen(GEOIP_CLIENT_CONNECT, i, now-7200);
@@ -1098,6 +1501,114 @@ test_geoip(void)
test_assert(s);
test_streq("zz=24,xy=8", s);
+ /* Start testing bridge statistics by making sure that we don't output
+ * bridge stats without initializing them. */
+ s = geoip_format_bridge_stats(now + 86400);
+ test_assert(!s);
+
+ /* Initialize stats and generate the bridge-stats history string out of
+ * the connecting clients added above. */
+ geoip_bridge_stats_init(now);
+ s = geoip_format_bridge_stats(now + 86400);
+ test_streq(bridge_stats_1, s);
+ tor_free(s);
+
+ /* Stop collecting bridge stats and make sure we don't write a history
+ * string anymore. */
+ geoip_bridge_stats_term();
+ s = geoip_format_bridge_stats(now + 86400);
+ test_assert(!s);
+
+ /* Stop being a bridge and start being a directory mirror that gathers
+ * directory request statistics. */
+ geoip_bridge_stats_term();
+ get_options_mutable()->BridgeRelay = 0;
+ get_options_mutable()->BridgeRecordUsageByCountry = 0;
+ get_options_mutable()->DirReqStatistics = 1;
+
+ /* Start testing dirreq statistics by making sure that we don't collect
+ * dirreq stats without initializing them. */
+ geoip_note_client_seen(GEOIP_CLIENT_NETWORKSTATUS, 100, now);
+ s = geoip_format_dirreq_stats(now + 86400);
+ test_assert(!s);
+
+ /* Initialize stats, note one connecting client, and generate the
+ * dirreq-stats history string. */
+ geoip_dirreq_stats_init(now);
+ geoip_note_client_seen(GEOIP_CLIENT_NETWORKSTATUS, 100, now);
+ s = geoip_format_dirreq_stats(now + 86400);
+ test_streq(dirreq_stats_1, s);
+ tor_free(s);
+
+ /* Stop collecting stats, add another connecting client, and ensure we
+ * don't generate a history string. */
+ geoip_dirreq_stats_term();
+ geoip_note_client_seen(GEOIP_CLIENT_NETWORKSTATUS, 101, now);
+ s = geoip_format_dirreq_stats(now + 86400);
+ test_assert(!s);
+
+ /* Re-start stats, add a connecting client, reset stats, and make sure
+ * that we get an all empty history string. */
+ geoip_dirreq_stats_init(now);
+ geoip_note_client_seen(GEOIP_CLIENT_NETWORKSTATUS, 100, now);
+ geoip_reset_dirreq_stats(now);
+ s = geoip_format_dirreq_stats(now + 86400);
+ test_streq(dirreq_stats_2, s);
+ tor_free(s);
+
+ /* Note a successful network status response and make sure that it
+ * appears in the history string. */
+ geoip_note_ns_response(GEOIP_CLIENT_NETWORKSTATUS, GEOIP_SUCCESS);
+ s = geoip_format_dirreq_stats(now + 86400);
+ test_streq(dirreq_stats_3, s);
+ tor_free(s);
+
+ /* Start a tunneled directory request. */
+ geoip_start_dirreq((uint64_t) 1, 1024, GEOIP_CLIENT_NETWORKSTATUS,
+ DIRREQ_TUNNELED);
+ s = geoip_format_dirreq_stats(now + 86400);
+ test_streq(dirreq_stats_4, s);
+
+ /* Stop collecting directory request statistics and start gathering
+ * entry stats. */
+ geoip_dirreq_stats_term();
+ get_options_mutable()->DirReqStatistics = 0;
+ get_options_mutable()->EntryStatistics = 1;
+
+ /* Start testing entry statistics by making sure that we don't collect
+ * anything without initializing entry stats. */
+ geoip_note_client_seen(GEOIP_CLIENT_CONNECT, 100, now);
+ s = geoip_format_entry_stats(now + 86400);
+ test_assert(!s);
+
+ /* Initialize stats, note one connecting client, and generate the
+ * entry-stats history string. */
+ geoip_entry_stats_init(now);
+ geoip_note_client_seen(GEOIP_CLIENT_CONNECT, 100, now);
+ s = geoip_format_entry_stats(now + 86400);
+ test_streq(entry_stats_1, s);
+ tor_free(s);
+
+ /* Stop collecting stats, add another connecting client, and ensure we
+ * don't generate a history string. */
+ geoip_entry_stats_term();
+ geoip_note_client_seen(GEOIP_CLIENT_CONNECT, 101, now);
+ s = geoip_format_entry_stats(now + 86400);
+ test_assert(!s);
+
+ /* Re-start stats, add a connecting client, reset stats, and make sure
+ * that we get an all empty history string. */
+ geoip_entry_stats_init(now);
+ geoip_note_client_seen(GEOIP_CLIENT_CONNECT, 100, now);
+ geoip_reset_entry_stats(now);
+ s = geoip_format_entry_stats(now + 86400);
+ test_streq(entry_stats_2, s);
+ tor_free(s);
+
+ /* Stop collecting entry statistics. */
+ geoip_entry_stats_term();
+ get_options_mutable()->EntryStatistics = 0;
+
done:
tor_free(s);
}
@@ -1201,6 +1712,61 @@ test_stats(void)
rep_hist_reset_conn_stats(now);
s = rep_hist_format_conn_stats(now + 86400);
test_streq("conn-bi-direct 2010-08-12 13:27:30 (86400 s) 0,0,0,0\n", s);
+ tor_free(s);
+
+ /* Continue with testing buffer statistics; we shouldn't collect buffer
+ * stats without initializing them. */
+ rep_hist_add_buffer_stats(2.0, 2.0, 20);
+ s = rep_hist_format_buffer_stats(now + 86400);
+ test_assert(!s);
+
+ /* Initialize stats, add statistics for a single circuit, and generate
+ * the history string. */
+ rep_hist_buffer_stats_init(now);
+ rep_hist_add_buffer_stats(2.0, 2.0, 20);
+ s = rep_hist_format_buffer_stats(now + 86400);
+ test_streq("cell-stats-end 2010-08-12 13:27:30 (86400 s)\n"
+ "cell-processed-cells 20,0,0,0,0,0,0,0,0,0\n"
+ "cell-queued-cells 2.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,"
+ "0.00,0.00\n"
+ "cell-time-in-queue 2,0,0,0,0,0,0,0,0,0\n"
+ "cell-circuits-per-decile 1\n", s);
+ tor_free(s);
+
+ /* Add nineteen more circuit statistics to the one that's already in the
+ * history to see that the math works correctly. */
+ for (i = 21; i < 30; i++)
+ rep_hist_add_buffer_stats(2.0, 2.0, i);
+ for (i = 20; i < 30; i++)
+ rep_hist_add_buffer_stats(3.5, 3.5, i);
+ s = rep_hist_format_buffer_stats(now + 86400);
+ test_streq("cell-stats-end 2010-08-12 13:27:30 (86400 s)\n"
+ "cell-processed-cells 29,28,27,26,25,24,23,22,21,20\n"
+ "cell-queued-cells 2.75,2.75,2.75,2.75,2.75,2.75,2.75,2.75,"
+ "2.75,2.75\n"
+ "cell-time-in-queue 3,3,3,3,3,3,3,3,3,3\n"
+ "cell-circuits-per-decile 2\n", s);
+ tor_free(s);
+
+ /* Stop collecting stats, add statistics for one circuit, and ensure we
+ * don't generate a history string. */
+ rep_hist_buffer_stats_term();
+ rep_hist_add_buffer_stats(2.0, 2.0, 20);
+ s = rep_hist_format_buffer_stats(now + 86400);
+ test_assert(!s);
+
+ /* Re-start stats, add statistics for one circuit, reset stats, and make
+ * sure that the history has all zeros. */
+ rep_hist_buffer_stats_init(now);
+ rep_hist_add_buffer_stats(2.0, 2.0, 20);
+ rep_hist_reset_buffer_stats(now);
+ s = rep_hist_format_buffer_stats(now + 86400);
+ test_streq("cell-stats-end 2010-08-12 13:27:30 (86400 s)\n"
+ "cell-processed-cells 0,0,0,0,0,0,0,0,0,0\n"
+ "cell-queued-cells 0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,"
+ "0.00,0.00\n"
+ "cell-time-in-queue 0,0,0,0,0,0,0,0,0,0\n"
+ "cell-circuits-per-decile 0\n", s);
done:
tor_free(s);
@@ -1237,12 +1803,13 @@ 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 }
static struct testcase_t test_array[] = {
ENT(buffers),
+ { "buffer_copy", test_buffer_copy, 0, NULL, NULL },
ENT(onion_handshake),
ENT(circuit_timeout),
ENT(policies),
@@ -1250,8 +1817,23 @@ static struct testcase_t test_array[] = {
ENT(geoip),
FORK(stats),
- DISABLED(bench_aes),
- DISABLED(bench_dmap),
+ END_OF_TESTCASES
+};
+
+#define SOCKSENT(name) \
+ { #name, test_socks_##name, TT_FORK, &socks_setup, NULL }
+
+static struct testcase_t socks_tests[] = {
+ SOCKSENT(4_unsupported_commands),
+ SOCKSENT(4_supported_commands),
+
+ SOCKSENT(5_unsupported_commands),
+ SOCKSENT(5_supported_commands),
+ SOCKSENT(5_no_authenticate),
+ SOCKSENT(5_auth_before_negotiation),
+ SOCKSENT(5_authenticate),
+ SOCKSENT(5_authenticate_with_data),
+
END_OF_TESTCASES
};
@@ -1261,15 +1843,18 @@ 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[];
static struct testgroup_t testgroups[] = {
{ "", test_array },
+ { "socks/", socks_tests },
{ "addr/", addr_tests },
{ "crypto/", crypto_tests },
{ "container/", container_tests },
{ "util/", util_tests },
{ "dir/", dir_tests },
{ "dir/md/", microdesc_tests },
+ { "pt/", pt_tests },
END_OF_GROUPS
};
@@ -1318,7 +1903,10 @@ main(int c, const char **v)
}
options->command = CMD_RUN_UNITTESTS;
- crypto_global_init(0, NULL, NULL);
+ if (crypto_global_init(0, NULL, NULL)) {
+ printf("Can't initialize crypto subsystem; exiting.\n");
+ return 1;
+ }
rep_hist_init();
network_init();
setup_directory();
diff --git a/src/test/test.h b/src/test/test.h
index f7ae46ce6..a053a7ac4 100644
--- a/src/test/test.h
+++ b/src/test/test.h
@@ -45,7 +45,8 @@
_print = tor_malloc(printlen); \
base16_encode(_print, printlen, _value, \
(len)); }, \
- { tor_free(_print); } \
+ { tor_free(_print); }, \
+ TT_EXIT_TEST_FUNCTION \
);
#define test_memeq(expr1, expr2, len) test_mem_op((expr1), ==, (expr2), len)
diff --git a/src/test/test_addr.c b/src/test/test_addr.c
index 6db4ee248..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:
@@ -74,7 +82,9 @@ test_addr_basic(void)
cp += 2; \
if (i != 15) *cp++ = ':'; \
} \
- }, { tor_free(_print); } \
+ }, \
+ { tor_free(_print); }, \
+ TT_EXIT_TEST_FUNCTION \
); \
STMT_END
@@ -165,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;
@@ -175,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;
@@ -268,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");
@@ -281,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");
@@ -291,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);
@@ -361,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",
@@ -396,53 +483,104 @@ 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);
+ test_streq(p1, "::f");
//test_addr_parse("[::fefe:4.1.1.7/120]:999-1000");
//test_addr_parse_check("::fefe:401:107", 120, 999, 1000);
test_addr_mask_ports_parse("[::ffff:4.1.1.7]/120:443", AF_INET6,
0, 0, 0x0000ffff, 0x04010107, 120, 443, 443);
+ test_streq(p1, "::ffff:4.1.1.7");
test_addr_mask_ports_parse("[abcd:2::44a:0]:2-65000", AF_INET6,
0xabcd0002, 0, 0, 0x044a0000, 128, 2, 65000);
+ test_streq(p1, "abcd:2::44a:0");
r=tor_addr_parse_mask_ports("[fefef::]/112", &t1, NULL, NULL, NULL);
test_assert(r == -1);
r=tor_addr_parse_mask_ports("efef::/112", &t1, NULL, NULL, NULL);
diff --git a/src/test/test_crypto.c b/src/test/test_crypto.c
index 781081a4a..1b338a29a 100644
--- a/src/test/test_crypto.c
+++ b/src/test/test_crypto.c
@@ -69,7 +69,7 @@ test_crypto_rng(void)
uint64_t big;
char *host;
j = crypto_rand_int(100);
- if (i < 0 || i >= 100)
+ if (j < 0 || j >= 100)
allok = 0;
big = crypto_rand_uint64(U64_LITERAL(1)<<40);
if (big >= (U64_LITERAL(1)<<40))
@@ -231,7 +231,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];
@@ -240,11 +240,13 @@ test_crypto_sha(void)
/* Test SHA-1 with a test vector from the specification. */
i = crypto_digest(data, "abc", 3);
test_memeq_hex(data, "A9993E364706816ABA3E25717850C26C9CD0D89D");
+ tt_int_op(i, ==, 0);
/* Test SHA-256 with a test vector from the specification. */
i = crypto_digest256(data, "abc", 3, DIGEST_SHA256);
test_memeq_hex(data, "BA7816BF8F01CFEA414140DE5DAE2223B00361A3"
"96177A9CB410FF61F20015AD");
+ tt_int_op(i, ==, 0);
/* Test HMAC-SHA-1 with test cases from RFC2202. */
@@ -274,6 +276,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);
@@ -341,7 +412,9 @@ test_crypto_pk(void)
test_eq(0, crypto_pk_cmp_keys(pk1, pk2));
test_eq(128, crypto_pk_keysize(pk1));
+ test_eq(1024, crypto_pk_num_bits(pk1));
test_eq(128, crypto_pk_keysize(pk2));
+ test_eq(1024, crypto_pk_num_bits(pk2));
test_eq(128, crypto_pk_public_encrypt(pk2, data1, sizeof(data1),
"Hello whirled.", 15,
@@ -626,7 +699,7 @@ test_crypto_aes_iv(void)
crypto_free_cipher_env(cipher);
cipher = NULL;
test_eq(encrypted_size, 16 + 4095);
- tor_assert(encrypted_size > 0); /* This is obviously true, since 4111 is
+ tt_assert(encrypted_size > 0); /* This is obviously true, since 4111 is
* greater than 0, but its truth is not
* obvious to all analysis tools. */
cipher = crypto_create_init_cipher(key1, 0);
@@ -635,7 +708,7 @@ test_crypto_aes_iv(void)
crypto_free_cipher_env(cipher);
cipher = NULL;
test_eq(decrypted_size, 4095);
- tor_assert(decrypted_size > 0);
+ tt_assert(decrypted_size > 0);
test_memeq(plain, decrypted1, 4095);
/* Encrypt a second time (with a new random initialization vector). */
cipher = crypto_create_init_cipher(key1, 1);
@@ -644,14 +717,14 @@ test_crypto_aes_iv(void)
crypto_free_cipher_env(cipher);
cipher = NULL;
test_eq(encrypted_size, 16 + 4095);
- tor_assert(encrypted_size > 0);
+ tt_assert(encrypted_size > 0);
cipher = crypto_create_init_cipher(key1, 0);
decrypted_size = crypto_cipher_decrypt_with_iv(cipher, decrypted2, 4095,
encrypted2, encrypted_size);
crypto_free_cipher_env(cipher);
cipher = NULL;
test_eq(decrypted_size, 4095);
- tor_assert(decrypted_size > 0);
+ tt_assert(decrypted_size > 0);
test_memeq(plain, decrypted2, 4095);
test_memneq(encrypted1, encrypted2, encrypted_size);
/* Decrypt with the wrong key. */
@@ -676,14 +749,14 @@ test_crypto_aes_iv(void)
crypto_free_cipher_env(cipher);
cipher = NULL;
test_eq(encrypted_size, 16 + 1);
- tor_assert(encrypted_size > 0);
+ tt_assert(encrypted_size > 0);
cipher = crypto_create_init_cipher(key1, 0);
decrypted_size = crypto_cipher_decrypt_with_iv(cipher, decrypted1, 1,
encrypted1, encrypted_size);
crypto_free_cipher_env(cipher);
cipher = NULL;
test_eq(decrypted_size, 1);
- tor_assert(decrypted_size > 0);
+ tt_assert(decrypted_size > 0);
test_memeq(plain_1, decrypted1, 1);
/* Special length case: 15. */
cipher = crypto_create_init_cipher(key1, 1);
@@ -692,14 +765,14 @@ test_crypto_aes_iv(void)
crypto_free_cipher_env(cipher);
cipher = NULL;
test_eq(encrypted_size, 16 + 15);
- tor_assert(encrypted_size > 0);
+ tt_assert(encrypted_size > 0);
cipher = crypto_create_init_cipher(key1, 0);
decrypted_size = crypto_cipher_decrypt_with_iv(cipher, decrypted1, 15,
encrypted1, encrypted_size);
crypto_free_cipher_env(cipher);
cipher = NULL;
test_eq(decrypted_size, 15);
- tor_assert(decrypted_size > 0);
+ tt_assert(decrypted_size > 0);
test_memeq(plain_15, decrypted1, 15);
/* Special length case: 16. */
cipher = crypto_create_init_cipher(key1, 1);
@@ -708,14 +781,14 @@ test_crypto_aes_iv(void)
crypto_free_cipher_env(cipher);
cipher = NULL;
test_eq(encrypted_size, 16 + 16);
- tor_assert(encrypted_size > 0);
+ tt_assert(encrypted_size > 0);
cipher = crypto_create_init_cipher(key1, 0);
decrypted_size = crypto_cipher_decrypt_with_iv(cipher, decrypted1, 16,
encrypted1, encrypted_size);
crypto_free_cipher_env(cipher);
cipher = NULL;
test_eq(decrypted_size, 16);
- tor_assert(decrypted_size > 0);
+ tt_assert(decrypted_size > 0);
test_memeq(plain_16, decrypted1, 16);
/* Special length case: 17. */
cipher = crypto_create_init_cipher(key1, 1);
@@ -724,12 +797,12 @@ test_crypto_aes_iv(void)
crypto_free_cipher_env(cipher);
cipher = NULL;
test_eq(encrypted_size, 16 + 17);
- tor_assert(encrypted_size > 0);
+ tt_assert(encrypted_size > 0);
cipher = crypto_create_init_cipher(key1, 0);
decrypted_size = crypto_cipher_decrypt_with_iv(cipher, decrypted1, 17,
encrypted1, encrypted_size);
test_eq(decrypted_size, 17);
- tor_assert(decrypted_size > 0);
+ tt_assert(decrypted_size > 0);
test_memeq(plain_17, decrypted1, 17);
done:
diff --git a/src/test/test_dir.c b/src/test/test_dir.c
index 4b86be496..205d7b577 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");
@@ -298,7 +302,7 @@ test_dir_versions(void)
#define tt_versionstatus_op(vs1, op, vs2) \
tt_assert_test_type(vs1,vs2,#vs1" "#op" "#vs2,version_status_t, \
- (_val1 op _val2),"%d")
+ (_val1 op _val2),"%d",TT_EXIT_TEST_FUNCTION)
#define test_v_i_o(val, ver, lst) \
tt_versionstatus_op(val, ==, tor_version_is_obsolete(ver, lst))
@@ -1169,10 +1173,10 @@ test_dir_v3_networkstatus(void)
/* Extract a detached signature from con3. */
detached_text1 = get_detached_sigs(con3, con_md3);
- tor_assert(detached_text1);
+ tt_assert(detached_text1);
/* Try to parse it. */
dsig1 = networkstatus_parse_detached_signatures(detached_text1, NULL);
- tor_assert(dsig1);
+ tt_assert(dsig1);
/* Are parsed values as expected? */
test_eq(dsig1->valid_after, con3->valid_after);
@@ -1303,7 +1307,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_microdesc.c b/src/test/test_microdesc.c
index 5a61c5dad..b807265c8 100644
--- a/src/test/test_microdesc.c
+++ b/src/test/test_microdesc.c
@@ -56,7 +56,7 @@ test_md_cache(void *data)
char *fn = NULL, *s = NULL;
(void)data;
- options = get_options();
+ options = get_options_mutable();
tt_assert(options);
time1 = time(NULL);
diff --git a/src/test/test_pt.c b/src/test/test_pt.c
new file mode 100644
index 000000000..f97b21fa0
--- /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(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 d338bbac9..64bf52e7b 100644
--- a/src/test/test_util.c
+++ b/src/test/test_util.c
@@ -363,20 +363,10 @@ 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";
- tor_assert(!tor_memmem(haystack, 5, "ef", 2));
+ tt_assert(!tor_memmem(haystack, 5, "ef", 2));
test_eq_ptr(tor_memmem(haystack, 5, "cd", 2), haystack + 2);
test_eq_ptr(tor_memmem(haystack, 5, "cde", 3), haystack + 2);
haystack = "ababcad";
@@ -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:
;
}
@@ -640,26 +644,26 @@ test_util_gzip(void)
tor_strdup("String with low redundancy that won't be compressed much.");
test_assert(!tor_gzip_compress(&buf2, &len1, buf1, strlen(buf1)+1,
ZLIB_METHOD));
- tor_assert(len1>16);
+ tt_assert(len1>16);
/* when we allow an incomplete string, we should succeed.*/
- tor_assert(!tor_gzip_uncompress(&buf3, &len2, buf2, len1-16,
+ tt_assert(!tor_gzip_uncompress(&buf3, &len2, buf2, len1-16,
ZLIB_METHOD, 0, LOG_INFO));
buf3[len2]='\0';
- tor_assert(len2 > 5);
- tor_assert(!strcmpstart(buf1, buf3));
+ tt_assert(len2 > 5);
+ tt_assert(!strcmpstart(buf1, buf3));
/* when we demand a complete string, this must fail. */
tor_free(buf3);
- tor_assert(tor_gzip_uncompress(&buf3, &len2, buf2, len1-16,
+ tt_assert(tor_gzip_uncompress(&buf3, &len2, buf2, len1-16,
ZLIB_METHOD, 1, LOG_INFO));
- tor_assert(!buf3);
+ tt_assert(!buf3);
/* Now, try streaming compression. */
tor_free(buf1);
tor_free(buf2);
tor_free(buf3);
state = tor_zlib_new(1, ZLIB_METHOD);
- tor_assert(state);
+ tt_assert(state);
cp1 = buf1 = tor_malloc(1024);
len1 = 1024;
ccp2 = "ABCDEFGHIJABCDEFGHIJ";
@@ -676,7 +680,7 @@ test_util_gzip(void)
test_eq(len2, 0);
test_assert(cp1 > cp2); /* Make sure we really added something. */
- tor_assert(!tor_gzip_uncompress(&buf3, &len2, buf1, 1024-len1,
+ tt_assert(!tor_gzip_uncompress(&buf3, &len2, buf1, 1024-len1,
ZLIB_METHOD, 1, LOG_WARN));
test_streq(buf3, "ABCDEFGHIJABCDEFGHIJ"); /*Make sure it compressed right.*/
@@ -1376,44 +1380,54 @@ test_util_fgets_eagain(void *ptr)
}
#endif
-#ifndef MS_WINDOWS
/** Helper function for testing tor_spawn_background */
static void
run_util_spawn_background(const char *argv[], const char *expected_out,
- const char *expected_err, int expected_exit)
+ const char *expected_err, int expected_exit,
+ int expected_status)
{
- int stdout_pipe=-1, stderr_pipe=-1;
- int retval, stat_loc;
- pid_t pid;
+ int retval, exit_code;
ssize_t pos;
+ process_handle_t process_handle;
char stdout_buf[100], stderr_buf[100];
/* Start the program */
- retval = tor_spawn_background(argv[0], &stdout_pipe, &stderr_pipe, argv);
- tt_int_op(retval, >, 0);
- tt_int_op(stdout_pipe, >, 0);
- tt_int_op(stderr_pipe, >, 0);
- pid = retval;
+#ifdef MS_WINDOWS
+ tor_spawn_background(NULL, argv, NULL, &process_handle);
+#else
+ 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)
+ return;
+
+ tt_int_op(process_handle.stdout_pipe, >, 0);
+ tt_int_op(process_handle.stderr_pipe, >, 0);
/* Check stdout */
- pos = read_all(stdout_pipe, stdout_buf, sizeof(stdout_buf) - 1, 0);
+ pos = tor_read_all_from_process_stdout(&process_handle, stdout_buf,
+ sizeof(stdout_buf) - 1);
+ tt_assert(pos >= 0);
stdout_buf[pos] = '\0';
- tt_int_op(pos, ==, strlen(expected_out));
tt_str_op(stdout_buf, ==, expected_out);
+ tt_int_op(pos, ==, strlen(expected_out));
/* Check it terminated correctly */
- retval = waitpid(pid, &stat_loc, 0);
- tt_int_op(retval, ==, pid);
- tt_assert(WIFEXITED(stat_loc));
- tt_int_op(WEXITSTATUS(stat_loc), ==, expected_exit);
- tt_assert(!WIFSIGNALED(stat_loc));
- tt_assert(!WIFSTOPPED(stat_loc));
+ retval = tor_get_exit_code(process_handle, 1, &exit_code);
+ tt_int_op(retval, ==, PROCESS_EXIT_EXITED);
+ tt_int_op(exit_code, ==, expected_exit);
+ // TODO: Make test-child exit with something other than 0
/* Check stderr */
- pos = read_all(stderr_pipe, stderr_buf, sizeof(stderr_buf) - 1, 0);
+ pos = tor_read_all_from_process_stderr(&process_handle, stderr_buf,
+ sizeof(stderr_buf) - 1);
+ tt_assert(pos >= 0);
stderr_buf[pos] = '\0';
- tt_int_op(pos, ==, strlen(expected_err));
tt_str_op(stderr_buf, ==, expected_err);
+ tt_int_op(pos, ==, strlen(expected_err));
done:
;
@@ -1423,29 +1437,257 @@ run_util_spawn_background(const char *argv[], const char *expected_out,
static void
test_util_spawn_background_ok(void *ptr)
{
+#ifdef MS_WINDOWS
+ const char *argv[] = {"test-child.exe", "--test", NULL};
+ const char *expected_out = "OUT\r\n--test\r\nSLEEPING\r\nDONE\r\n";
+ const char *expected_err = "ERR\r\n";
+#else
const char *argv[] = {BUILDDIR "/src/test/test-child", "--test", NULL};
- const char *expected_out = "OUT\n--test\nDONE\n";
+ const char *expected_out = "OUT\n--test\nSLEEPING\nDONE\n";
const char *expected_err = "ERR\n";
+#endif
(void)ptr;
- run_util_spawn_background(argv, expected_out, expected_err, 0);
+ run_util_spawn_background(argv, expected_out, expected_err, 0,
+ PROCESS_STATUS_RUNNING);
}
/** Check that failing to find the executable works as expected */
static void
test_util_spawn_background_fail(void *ptr)
{
+#ifdef MS_WINDOWS
const char *argv[] = {BUILDDIR "/src/test/no-such-file", "--test", NULL};
const char *expected_out = "ERR: Failed to spawn background process "
"- code 9/2\n";
const char *expected_err = "";
+ const int expected_status = PROCESS_STATUS_ERROR;
+#else
+ const char *argv[] = {BUILDDIR "/src/test/no-such-file", "--test", NULL};
+ const char *expected_out = "ERR: Failed to spawn background process "
+ "- code 9/2\n";
+ const char *expected_err = "";
+ /* TODO: Once we can signal failure to exec, set this to be
+ * PROCESS_STATUS_ERROR */
+ const int expected_status = PROCESS_STATUS_RUNNING;
+#endif
(void)ptr;
- run_util_spawn_background(argv, expected_out, expected_err, 255);
+ run_util_spawn_background(argv, expected_out, expected_err, 255,
+ expected_status);
}
+
+/** Test that reading from a handle returns a partial read rather than
+ * blocking */
+static void
+test_util_spawn_background_partial_read(void *ptr)
+{
+ const int expected_exit = 0;
+ const int expected_status = PROCESS_STATUS_RUNNING;
+
+ int retval, exit_code;
+ ssize_t pos = -1;
+ process_handle_t process_handle;
+ char stdout_buf[100], stderr_buf[100];
+#ifdef MS_WINDOWS
+ const char *argv[] = {"test-child.exe", "--test", NULL};
+ const char *expected_out[] = { "OUT\r\n--test\r\nSLEEPING\r\n",
+ "DONE\r\n",
+ NULL };
+ const char *expected_err = "ERR\r\n";
+#else
+ const char *argv[] = {BUILDDIR "/src/test/test-child", "--test", NULL};
+ const char *expected_out[] = { "OUT\n--test\nSLEEPING\n",
+ "DONE\n",
+ NULL };
+ const char *expected_err = "ERR\n";
+ int eof = 0;
+#endif
+ int expected_out_ctr;
+ (void)ptr;
+
+ /* Start the program */
+#ifdef MS_WINDOWS
+ tor_spawn_background(NULL, argv, NULL, &process_handle);
+#else
+ tor_spawn_background(argv[0], argv, NULL, &process_handle);
+#endif
+ tt_int_op(process_handle.status, ==, expected_status);
+
+ /* Check stdout */
+ 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,
+ 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,
+ sizeof(stdout_buf) - 1, NULL, &eof);
#endif
+ log_info(LD_GENERAL, "tor_read_all_handle() returned %d", (int)pos);
+
+ /* We would have blocked, keep on trying */
+ if (0 == pos)
+ continue;
+
+ tt_int_op(pos, >, 0);
+ stdout_buf[pos] = '\0';
+ tt_str_op(stdout_buf, ==, expected_out[expected_out_ctr]);
+ tt_int_op(pos, ==, strlen(expected_out[expected_out_ctr]));
+ expected_out_ctr++;
+ }
+
+ /* The process should have exited without writing more */
+#ifdef MS_WINDOWS
+ pos = tor_read_all_handle(process_handle.stdout_pipe, stdout_buf,
+ sizeof(stdout_buf) - 1,
+ &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,
+ sizeof(stdout_buf) - 1,
+ &process_handle, &eof);
+ tt_int_op(pos, ==, 0);
+ tt_assert(eof);
+ }
+ /* Otherwise, we got the EOF on the last read */
+#endif
+
+ /* Check it terminated correctly */
+ retval = tor_get_exit_code(process_handle, 1, &exit_code);
+ tt_int_op(retval, ==, PROCESS_EXIT_EXITED);
+ tt_int_op(exit_code, ==, expected_exit);
+
+ // TODO: Make test-child exit with something other than 0
+
+ /* Check stderr */
+ pos = tor_read_all_from_process_stderr(&process_handle, stderr_buf,
+ sizeof(stderr_buf) - 1);
+ tt_assert(pos >= 0);
+ stderr_buf[pos] = '\0';
+ tt_str_op(stderr_buf, ==, expected_err);
+ tt_int_op(pos, ==, strlen(expected_err));
+
+ done:
+ ;
+}
+
+/**
+ * Test that we can properly format q Windows command line
+ */
+static void
+test_util_join_win_cmdline(void *ptr)
+{
+ /* Based on some test cases from "Parsing C++ Command-Line Arguments" in
+ * MSDN but we don't exercise all quoting rules because tor_join_win_cmdline
+ * will try to only generate simple cases for the child process to parse;
+ * i.e. we never embed quoted strings in arguments. */
+
+ const char *argvs[][4] = {
+ {"a", "bb", "CCC", NULL}, // Normal
+ {NULL, NULL, NULL, NULL}, // Empty argument list
+ {"", NULL, NULL, NULL}, // Empty argument
+ {"\"a", "b\"b", "CCC\"", NULL}, // Quotes
+ {"a\tbc", "dd dd", "E", NULL}, // Whitespace
+ {"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
+ { NULL } // Terminator
+ };
+
+ const char *cmdlines[] = {
+ "a bb CCC",
+ "",
+ "\"\"",
+ "\\\"a b\\\"b CCC\\\"",
+ "\"a\tbc\" \"dd dd\" E",
+ "a\\\\\\b \"de fg\" H",
+ "a\\\\\\\"b \\c D\\",
+ "\"a\\\\b c\" d E",
+ NULL // Terminator
+ };
+
+ int i;
+ char *joined_argv;
+
+ (void)ptr;
+
+ for (i=0; cmdlines[i]!=NULL; i++) {
+ log_info(LD_GENERAL, "Joining argvs[%d], expecting <%s>", i, cmdlines[i]);
+ joined_argv = tor_join_win_cmdline(argvs[i]);
+ tt_str_op(joined_argv, ==, cmdlines[i]);
+ tor_free(joined_argv);
+ }
+
+ done:
+ ;
+}
+
+#define MAX_SPLIT_LINE_COUNT 3
+struct split_lines_test_t {
+ const char *orig_line; // Line to be split (may contain \0's)
+ int orig_length; // Length of orig_line
+ const char *split_line[MAX_SPLIT_LINE_COUNT]; // Split lines
+};
+
+/**
+ * Test that we properly split a buffer into lines
+ */
+static void
+test_util_split_lines(void *ptr)
+{
+ /* Test cases. orig_line of last test case must be NULL.
+ * The last element of split_line[i] must be NULL. */
+ struct split_lines_test_t tests[] = {
+ {"", 0, {NULL}},
+ {"foo", 3, {"foo", NULL}},
+ {"\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 }}
+ };
+
+ int i, j;
+ char *orig_line;
+ smartlist_t *sl;
+
+ (void)ptr;
+
+ for (i=0; tests[i].orig_line; i++) {
+ sl = smartlist_create();
+ /* Allocate space for string and trailing NULL */
+ orig_line = tor_memdup(tests[i].orig_line, tests[i].orig_length + 1);
+ tor_split_lines(sl, orig_line, tests[i].orig_length);
+
+ j = 0;
+ log_info(LD_GENERAL, "Splitting test %d of length %d",
+ i, tests[i].orig_length);
+ SMARTLIST_FOREACH(sl, const char *, line,
+ {
+ /* Check we have not got too many lines */
+ tt_int_op(j, <, MAX_SPLIT_LINE_COUNT);
+ /* Check that there actually should be a line here */
+ tt_assert(tests[i].split_line[j] != NULL);
+ log_info(LD_GENERAL, "Line %d of test %d, should be <%s>",
+ j, i, tests[i].split_line[j]);
+ /* Check that the line is as expected */
+ tt_str_op(tests[i].split_line[j], ==, line);
+ j++;
+ });
+ /* Check that we didn't miss some lines */
+ tt_assert(tests[i].split_line[j] == NULL);
+ tor_free(orig_line);
+ smartlist_free(sl);
+ }
+
+ done:
+ ;
+}
static void
test_util_di_ops(void)
@@ -1500,6 +1742,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 }
@@ -1531,9 +1859,14 @@ struct testcase_t util_tests[] = {
UTIL_TEST(exit_status, 0),
#ifndef MS_WINDOWS
UTIL_TEST(fgets_eagain, TT_SKIP),
+#endif
UTIL_TEST(spawn_background_ok, 0),
UTIL_TEST(spawn_background_fail, 0),
-#endif
+ 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/test/tinytest.c b/src/test/tinytest.c
index 11ffc2fe5..8caa4f545 100644
--- a/src/test/tinytest.c
+++ b/src/test/tinytest.c
@@ -28,7 +28,11 @@
#include <string.h>
#include <assert.h>
-#ifdef WIN32
+#ifdef TINYTEST_LOCAL
+#include "tinytest_local.h"
+#endif
+
+#ifdef _WIN32
#include <windows.h>
#else
#include <sys/types.h>
@@ -40,9 +44,6 @@
#define __attribute__(x)
#endif
-#ifdef TINYTEST_LOCAL
-#include "tinytest_local.h"
-#endif
#include "tinytest.h"
#include "tinytest_macros.h"
@@ -64,7 +65,7 @@ const char *cur_test_prefix = NULL; /**< prefix of the current test group */
/** Name of the current test, if we haven't logged is yet. Used for --quiet */
const char *cur_test_name = NULL;
-#ifdef WIN32
+#ifdef _WIN32
/** Pointer to argv[0] for win32. */
static const char *commandname = NULL;
#endif
@@ -103,7 +104,7 @@ static enum outcome
_testcase_run_forked(const struct testgroup_t *group,
const struct testcase_t *testcase)
{
-#ifdef WIN32
+#ifdef _WIN32
/* Fork? On Win32? How primitive! We'll do what the smart kids do:
we'll invoke our own exe (whose name we recall from the command
line) with a command line that tells it to run just the test we
@@ -174,6 +175,7 @@ _testcase_run_forked(const struct testgroup_t *group,
exit(1);
}
exit(0);
+ return FAIL; /* unreachable */
} else {
/* parent */
int status, r;
@@ -239,6 +241,7 @@ testcase_run_one(const struct testgroup_t *group,
if (opt_forked) {
exit(outcome==OK ? 0 : (outcome==SKIP?MAGIC_EXITCODE : 1));
+ return 1; /* unreachable */
} else {
return (int)outcome;
}
@@ -287,7 +290,7 @@ tinytest_main(int c, const char **v, struct testgroup_t *groups)
{
int i, j, n=0;
-#ifdef WIN32
+#ifdef _WIN32
commandname = v[0];
#endif
for (i=1; i<c; ++i) {
diff --git a/src/test/tinytest_demo.c b/src/test/tinytest_demo.c
index bd33cc37f..98cb773d1 100644
--- a/src/test/tinytest_demo.c
+++ b/src/test/tinytest_demo.c
@@ -1,4 +1,4 @@
-/* tinytest_demo.c -- Copyright 2009 Nick Mathewson
+/* tinytest_demo.c -- Copyright 2009-2010 Nick Mathewson
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -39,7 +39,7 @@
/* ============================================================ */
/* First, let's see if strcmp is working. (All your test cases should be
- * functions declared to take a single void * as) an argument. */
+ * functions declared to take a single void * as an argument.) */
void
test_strcmp(void *data)
{
@@ -53,7 +53,7 @@ test_strcmp(void *data)
}
/* Pretty often, calling tt_abort_msg to indicate failure is more
- heavy-weight than you want. Instead, just say: */
+ heavy-weight than you want. Instead, just say: */
tt_assert(strcmp("testcase", "testcase") == 0);
/* Occasionally, you don't want to stop the current testcase just
@@ -91,7 +91,7 @@ test_strcmp(void *data)
/* First you declare a type to hold the environment info, and functions to
set it up and tear it down. */
struct data_buffer {
- /* We're just going to have couple of character buffer. Using
+ /* We're just going to have couple of character buffer. Using
setup/teardown functions is probably overkill for this case.
You could also do file descriptors, complicated handles, temporary
@@ -164,7 +164,7 @@ test_memcpy(void *ptr)
/* ============================================================ */
-/* Now we need to make sure that our tests get invoked. First, you take
+/* Now we need to make sure that our tests get invoked. First, you take
a bunch of related tests and put them into an array of struct testcase_t.
*/
@@ -189,15 +189,15 @@ struct testgroup_t groups[] = {
/* Every group has a 'prefix', and an array of tests. That's it. */
{ "demo/", demo_tests },
- END_OF_GROUPS
+ END_OF_GROUPS
};
int
main(int c, const char **v)
{
- /* Finally, just call tinytest_main(). It lets you specify verbose
- or quiet output with --verbose and --quiet. You can list
+ /* Finally, just call tinytest_main(). It lets you specify verbose
+ or quiet output with --verbose and --quiet. You can list
specific tests:
tinytest-demo demo/memcpy
diff --git a/src/test/tinytest_macros.h b/src/test/tinytest_macros.h
index a7fa64a82..032393ccf 100644
--- a/src/test/tinytest_macros.h
+++ b/src/test/tinytest_macros.h
@@ -90,10 +90,10 @@
TT_STMT_BEGIN \
if (!(b)) { \
_tinytest_set_test_failed(); \
- TT_GRIPE((msg)); \
+ TT_GRIPE(("%s",msg)); \
fail; \
} else { \
- TT_BLATHER((msg)); \
+ TT_BLATHER(("%s",msg)); \
} \
TT_STMT_END
@@ -111,7 +111,7 @@
#define tt_assert(b) tt_assert_msg((b), "assert("#b")")
#define tt_assert_test_fmt_type(a,b,str_test,type,test,printf_type,printf_fmt, \
- setup_block,cleanup_block) \
+ setup_block,cleanup_block,die_on_fail) \
TT_STMT_BEGIN \
type _val1 = (type)(a); \
type _val2 = (type)(b); \
@@ -135,33 +135,50 @@
cleanup_block; \
if (!_tt_status) { \
_tinytest_set_test_failed(); \
- TT_EXIT_TEST_FUNCTION; \
+ die_on_fail ; \
} \
} \
TT_STMT_END
-#define tt_assert_test_type(a,b,str_test,type,test,fmt) \
+#define tt_assert_test_type(a,b,str_test,type,test,fmt,die_on_fail) \
tt_assert_test_fmt_type(a,b,str_test,type,test,type,fmt, \
- {_print=_value;},{})
+ {_print=_value;},{},die_on_fail)
/* Helper: assert that a op b, when cast to type. Format the values with
* printf format fmt on failure. */
#define tt_assert_op_type(a,op,b,type,fmt) \
- tt_assert_test_type(a,b,#a" "#op" "#b,type,(_val1 op _val2),fmt)
+ tt_assert_test_type(a,b,#a" "#op" "#b,type,(_val1 op _val2),fmt, \
+ TT_EXIT_TEST_FUNCTION)
#define tt_int_op(a,op,b) \
- tt_assert_test_type(a,b,#a" "#op" "#b,long,(_val1 op _val2),"%ld")
+ tt_assert_test_type(a,b,#a" "#op" "#b,long,(_val1 op _val2), \
+ "%ld",TT_EXIT_TEST_FUNCTION)
#define tt_uint_op(a,op,b) \
tt_assert_test_type(a,b,#a" "#op" "#b,unsigned long, \
- (_val1 op _val2),"%lu")
+ (_val1 op _val2),"%lu",TT_EXIT_TEST_FUNCTION)
#define tt_ptr_op(a,op,b) \
tt_assert_test_type(a,b,#a" "#op" "#b,void*, \
- (_val1 op _val2),"%p")
+ (_val1 op _val2),"%p",TT_EXIT_TEST_FUNCTION)
#define tt_str_op(a,op,b) \
tt_assert_test_type(a,b,#a" "#op" "#b,const char *, \
- (strcmp(_val1,_val2) op 0),"<%s>")
+ (strcmp(_val1,_val2) op 0),"<%s>",TT_EXIT_TEST_FUNCTION)
+
+#define tt_want_int_op(a,op,b) \
+ tt_assert_test_type(a,b,#a" "#op" "#b,long,(_val1 op _val2),"%ld",(void)0)
+
+#define tt_want_uint_op(a,op,b) \
+ tt_assert_test_type(a,b,#a" "#op" "#b,unsigned long, \
+ (_val1 op _val2),"%lu",(void)0)
+
+#define tt_want_ptr_op(a,op,b) \
+ tt_assert_test_type(a,b,#a" "#op" "#b,void*, \
+ (_val1 op _val2),"%p",(void)0)
+
+#define tt_want_str_op(a,op,b) \
+ tt_assert_test_type(a,b,#a" "#op" "#b,const char *, \
+ (strcmp(_val1,_val2) op 0),"<%s>",(void)0)
#endif
diff --git a/src/tools/tor-fw-helper/Makefile.am b/src/tools/tor-fw-helper/Makefile.am
index 75878f259..8f64ad2ba 100644
--- a/src/tools/tor-fw-helper/Makefile.am
+++ b/src/tools/tor-fw-helper/Makefile.am
@@ -25,7 +25,7 @@ endif
if MINIUPNPC
miniupnpc_ldflags = @TOR_LDFLAGS_libminiupnpc@
-miniupnpc_ldadd = -lminiupnpc -lm
+miniupnpc_ldadd = -lminiupnpc -lm @TOR_LIB_IPHLPAPI@
miniupnpc_cppflags = @TOR_CPPFLAGS_libminiupnpc@
else
miniupnpc_ldflags =
@@ -34,5 +34,5 @@ miniupnpc_cppflags =
endif
tor_fw_helper_LDFLAGS = $(nat_pmp_ldflags) $(miniupnpc_ldflags)
-tor_fw_helper_LDADD = $(nat_pmp_ldadd) $(miniupnpc_ldadd) ../../common/libor.a @TOR_LIB_WS32@
+tor_fw_helper_LDADD = ../../common/libor.a $(nat_pmp_ldadd) $(miniupnpc_ldadd) @TOR_LIB_WS32@
tor_fw_helper_CPPFLAGS = $(nat_pmp_cppflags) $(miniupnpc_cppflags)
diff --git a/src/tools/tor-fw-helper/tor-fw-helper-natpmp.c b/src/tools/tor-fw-helper/tor-fw-helper-natpmp.c
index 2630b8f5e..f9d5d0d58 100644
--- a/src/tools/tor-fw-helper/tor-fw-helper-natpmp.c
+++ b/src/tools/tor-fw-helper/tor-fw-helper-natpmp.c
@@ -55,7 +55,7 @@ tor_natpmp_init(tor_fw_options_t *tor_fw_options, void *backend_state)
if (tor_fw_options->verbose)
fprintf(stdout, "V: natpmp init...\n");
- r = initnatpmp(&(state->natpmp));
+ r = initnatpmp(&(state->natpmp), 0, 0);
if (r == 0) {
state->init = 1;
fprintf(stdout, "tor-fw-helper: natpmp initialized...\n");
diff --git a/src/tools/tor-fw-helper/tor-fw-helper-upnp.c b/src/tools/tor-fw-helper/tor-fw-helper-upnp.c
index 18ca56394..c4b14a84e 100644
--- a/src/tools/tor-fw-helper/tor-fw-helper-upnp.c
+++ b/src/tools/tor-fw-helper/tor-fw-helper-upnp.c
@@ -9,6 +9,9 @@
#include "orconfig.h"
#ifdef MINIUPNPC
+#ifdef MS_WINDOWS
+#define STATICLIB
+#endif
#include <stdint.h>
#include <string.h>
#include <stdio.h>
diff --git a/src/tools/tor-fw-helper/tor-fw-helper.c b/src/tools/tor-fw-helper/tor-fw-helper.c
index 20d60d7ba..002239745 100644
--- a/src/tools/tor-fw-helper/tor-fw-helper.c
+++ b/src/tools/tor-fw-helper/tor-fw-helper.c
@@ -13,6 +13,7 @@
* later date.
*/
+#include "orconfig.h"
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
@@ -20,7 +21,10 @@
#include <time.h>
#include <string.h>
-#include "orconfig.h"
+#ifdef MS_WINDOWS
+#include <winsock2.h>
+#endif
+
#include "tor-fw-helper.h"
#ifdef NAT_PMP
#include "tor-fw-helper-natpmp.h"
@@ -219,6 +223,30 @@ tor_fw_add_dir_port(tor_fw_options_t *tor_fw_options,
}
}
+/** Called before we make any calls to network-related functions.
+ * (Some operating systems require their network libraries to be
+ * initialized.) (from common/compat.c) */
+static int
+network_init(void)
+{
+#ifdef MS_WINDOWS
+ /* This silly exercise is necessary before windows will allow
+ * gethostbyname to work. */
+ WSADATA WSAData;
+ int r;
+ r = WSAStartup(0x101, &WSAData);
+ if (r) {
+ fprintf(stderr, "E: Error initializing Windows network layer "
+ "- code was %d", r);
+ return -1;
+ }
+ /* WSAData.iMaxSockets might show the max sockets we're allowed to use.
+ * We might use it to complain if we're trying to be a server but have
+ * too few sockets available. */
+#endif
+ return 0;
+}
+
int
main(int argc, char **argv)
{
@@ -229,6 +257,7 @@ main(int argc, char **argv)
backends_t backend_state;
memset(&tor_fw_options, 0, sizeof(tor_fw_options));
+ memset(&backend_state, 0, sizeof(backend_state));
while (1) {
int option_index = 0;
@@ -329,6 +358,10 @@ main(int argc, char **argv)
tor_fw_options.public_dir_port);
}
+ // Initialize networking
+ if (network_init())
+ exit(1);
+
// Initalize the various fw-helper backend helpers
r = init_backends(&tor_fw_options, &backend_state);
if (r)
diff --git a/src/tools/tor-gencert.c b/src/tools/tor-gencert.c
index a04eddafc..974a58bec 100644
--- a/src/tools/tor-gencert.c
+++ b/src/tools/tor-gencert.c
@@ -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));
@@ -264,7 +264,7 @@ load_identity_key(void)
}
if (!(f = start_writing_to_stdio_file(identity_key_file,
- OPEN_FLAGS_REPLACE, 0400,
+ OPEN_FLAGS_REPLACE | O_TEXT, 0400,
&open_file)))
return 1;
@@ -349,7 +349,7 @@ generate_signing_key(void)
}
if (!(f = start_writing_to_stdio_file(signing_key_file,
- OPEN_FLAGS_REPLACE, 0600,
+ OPEN_FLAGS_REPLACE | O_TEXT, 0600,
&open_file)))
return 1;
diff --git a/src/tools/tor-resolve.c b/src/tools/tor-resolve.c
index 12349d9d1..f1220d9d8 100644
--- a/src/tools/tor-resolve.c
+++ b/src/tools/tor-resolve.c
@@ -319,7 +319,7 @@ main(int argc, char **argv)
{
uint32_t sockshost;
uint16_t socksport = 0, port_option = 0;
- int isSocks4 = 0, isVerbose = 0, isReverse = 0, force = 0;
+ int isSocks4 = 0, isVerbose = 0, isReverse = 0;
char **arg;
int n_args;
struct in_addr a;
@@ -349,8 +349,6 @@ main(int argc, char **argv)
isSocks4 = 0;
else if (!strcmp("-x", arg[0]))
isReverse = 1;
- else if (!strcmp("-F", arg[0]))
- force = 1;
else if (!strcmp("-p", arg[0])) {
int p;
if (n_args < 2) {
@@ -395,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 5483b6d06..34d7c75b0 100644
--- a/src/win32/orconfig.h
+++ b/src/win32/orconfig.h
@@ -122,6 +122,7 @@
/* Define to 1 if you have the <sys/socket.h> header file. */
#undef HAVE_SYS_SOCKET_H
+
/* Define to 1 if you have the <sys/stat.h> header file. */
#define HAVE_SYS_STAT_H
@@ -233,4 +234,13 @@
#define USING_TWOS_COMPLEMENT
/* Version number of package */
-#define VERSION "0.2.3.1-alpha-dev"
+#define VERSION "0.2.3.8-alpha-dev"
+
+
+
+#define HAVE_STRUCT_SOCKADDR_IN6
+#define HAVE_STRUCT_IN6_ADDR
+#define RSHIFT_DOES_SIGN_EXTEND
+#define FLEXIBLE_ARRAY_MEMBER 0
+#define HAVE_EVENT2_EVENT_H
+#define SHARE_DATADIR ""